From ef583813ebcbc416887cf0a3beee73d0a136b4cb Mon Sep 17 00:00:00 2001 From: "Xamarin Public Jenkins (auto-signing)" Date: Fri, 26 Jul 2019 19:53:28 +0000 Subject: [PATCH] Imported Upstream version 6.4.0.137 Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6 --- Makefile.am | 10 +- Makefile.in | 10 +- README.md | 3 + acceptance-tests/Makefile.in.REMOVED.git-id | 2 +- acceptance-tests/SUBMODULES.json | 2 +- config.h.in | 7 + configure.REMOVED.git-id | 2 +- configure.ac.REMOVED.git-id | 2 +- data/Makefile.in | 4 + data/lldb/monobt.py | 2 +- data/net_2_0/Browsers/Makefile.in | 4 + data/net_2_0/Makefile.in | 4 + data/net_4_0/Browsers/Makefile.in | 4 + data/net_4_0/Makefile.in | 4 + data/net_4_5/Browsers/Makefile.in | 4 + data/net_4_5/Makefile.in | 4 + docs/Makefile.in | 4 + docs/deploy/mono-api-class.html | 3 +- docs/deploy/mono-api-internal.html | 9 +- docs/deploy/mono-api-methods.html | 2 +- docs/deploy/mono-api-reflection.html | 2 +- .../System.ComponentModel.Primitives.cs | 1 + .../System.ComponentModel.TypeConverter.cs | 1 + .../System.Reflection.DispatchProxy.cs | 48 +- .../System.Reflection.TypeExtensions.cs | 84 +- .../Facades/netstandard.cs.REMOVED.git-id | 2 +- .../monodroid/System.Core.cs.REMOVED.git-id | 2 +- .../monodroid/System.Data.cs.REMOVED.git-id | 2 +- .../monodroid/System.IO.Compression.cs | 53 + .../profiles/monodroid/System.Net.Http.cs | 65 +- .../monodroid/System.Xml.cs.REMOVED.git-id | 2 +- .../monodroid/System.cs.REMOVED.git-id | 2 +- .../monodroid/mscorlib.cs.REMOVED.git-id | 2 +- .../System.ComponentModel.Primitives.cs | 1 + .../System.ComponentModel.TypeConverter.cs | 1 + .../System.Reflection.DispatchProxy.cs | 48 +- .../System.Reflection.TypeExtensions.cs | 84 +- .../Facades/netstandard.cs.REMOVED.git-id | 2 +- .../monotouch/System.Core.cs.REMOVED.git-id | 2 +- .../monotouch/System.Data.cs.REMOVED.git-id | 2 +- .../monotouch/System.IO.Compression.cs | 53 + .../profiles/monotouch/System.Net.Http.cs | 13 + .../monotouch/System.Xml.cs.REMOVED.git-id | 2 +- .../monotouch/System.cs.REMOVED.git-id | 2 +- .../monotouch/mscorlib.cs.REMOVED.git-id | 2 +- .../System.ComponentModel.Primitives.cs | 1 + .../System.ComponentModel.TypeConverter.cs | 1 + .../System.Reflection.TypeExtensions.cs | 84 +- .../Facades/netstandard.cs.REMOVED.git-id | 2 +- .../net_4_x/Microsoft.Build.Utilities.v4.0.cs | 4 + .../profiles/net_4_x/Mono.Cecil.Mdb.cs | 6 +- .../net_4_x/Mono.Cecil.cs.REMOVED.git-id | 2 +- .../profiles/net_4_x/Mono.Debugger.Soft.cs | 2 + .../net_4_x/System.Core.cs.REMOVED.git-id | 2 +- .../profiles/net_4_x/System.Data.Linq.cs | 200 +- .../net_4_x/System.Data.cs.REMOVED.git-id | 2 +- .../profiles/net_4_x/System.IO.Compression.cs | 53 + .../profiles/net_4_x/System.Net.Http.cs | 1 + .../profiles/net_4_x/System.Security.cs | 15 + .../net_4_x/System.Xml.cs.REMOVED.git-id | 2 +- .../profiles/net_4_x/System.cs.REMOVED.git-id | 2 +- .../net_4_x/mscorlib.cs.REMOVED.git-id | 2 +- external/bockbuild/packages/gtk-sharp.py | 2 +- external/boringssl/crypto/x509/by_dir.c | 8 +- external/boringssl/crypto/x509/x509_def.c | 10 + external/cecil/.azure-pipelines.yml | 38 + external/cecil/Directory.Build.props | 27 + external/cecil/Mono.Cecil.Cil/CodeReader.cs | 5 - external/cecil/Mono.Cecil.Cil/CodeWriter.cs | 4 - external/cecil/Mono.Cecil.Cil/PortablePdb.cs | 10 +- external/cecil/Mono.Cecil.Cil/Symbols.cs | 9 +- external/cecil/Mono.Cecil.Metadata/Buffers.cs | 4 - .../cecil/Mono.Cecil.Metadata/Utilities.cs | 2 - .../cecil/Mono.Cecil.PE/BinaryStreamWriter.cs | 4 - external/cecil/Mono.Cecil.PE/ByteBuffer.cs | 5 - external/cecil/Mono.Cecil.PE/ImageWriter.cs | 19 +- external/cecil/Mono.Cecil.PE/TextMap.cs | 4 - external/cecil/Mono.Cecil.Tests.props | 43 +- external/cecil/Mono.Cecil.csproj | 10 +- external/cecil/Mono.Cecil.nunit | 12 +- external/cecil/Mono.Cecil.nuspec | 36 +- external/cecil/Mono.Cecil.props | 111 - external/cecil/Mono.Cecil.sln | 334 +- external/cecil/Mono.Cecil.sln.DotSettings | 39 - .../cecil/Mono.Cecil/AssemblyDefinition.cs | 6 - external/cecil/Mono.Cecil/AssemblyInfo.cs | 4 +- external/cecil/Mono.Cecil/AssemblyReader.cs | 3 +- external/cecil/Mono.Cecil/AssemblyWriter.cs | 61 +- .../cecil/Mono.Cecil/BaseAssemblyResolver.cs | 9 +- external/cecil/Mono.Cecil/Import.cs | 32 +- external/cecil/Mono.Cecil/ModuleDefinition.cs | 69 +- .../CryptoConvert.cs | 9 - .../CryptoService.cs | 8 - external/cecil/Mono/Type.cs | 137 - external/cecil/NetStandard.props | 9 - external/cecil/ProjectInfo.cs | 6 +- external/cecil/Test/Mono.Cecil.Tests.csproj | 35 +- .../Test/Mono.Cecil.Tests/BaseTestFixture.cs | 114 +- .../CallerMemberNameAttribute.cs | 10 - .../Mono.Cecil.Tests/CompilationService.cs | 21 +- .../Mono.Cecil.Tests/CustomAttributesTests.cs | 5 +- .../Test/Mono.Cecil.Tests/ImageReadTests.cs | 2 - .../Test/Mono.Cecil.Tests/ImportCecilTests.cs | 6 +- .../Mono.Cecil.Tests/ImportReflectionTests.cs | 2 - .../Test/Mono.Cecil.Tests/MethodBodyTests.cs | 2 +- .../Test/Mono.Cecil.Tests/ModuleTests.cs | 14 +- .../Test/Mono.Cecil.Tests/PortablePdbTests.cs | 2 - .../Test/Mono.Cecil.Tests/ResolveTests.cs | 4 +- .../SecurityDeclarationTests.cs | 2 - .../Test/Mono.Cecil.Tests/SymbolTests.cs | 7 +- .../cecil/Test/Mono.Cecil.Tests/TypeTests.cs | 4 - .../WindowsRuntimeAssemblyResolver.cs | 10 - .../WindowsRuntimeProjectionsTests.cs | 2 - .../cecil/Test/libs/nunit-2.6.2/license.txt | 15 - external/cecil/appveyor.yml | 13 - external/cecil/rocks/Mono.Cecil.Rocks.csproj | 24 +- .../rocks/Test/Mono.Cecil.Rocks.Tests.csproj | 13 +- .../SecurityDeclarationRocksTests.cs | 4 + .../TypeReferenceRocksTests.cs | 2 - .../cecil/symbols/mdb/Mono.Cecil.Mdb.csproj | 14 +- .../symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs | 2 - .../symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs | 2 - .../mdb/Test/Mono.Cecil.Mdb.Tests.csproj | 13 +- .../mdb/Test/Mono.Cecil.Tests/MdbTests.cs | 4 +- .../{hello.exe.mdb => simplemdb.exe.mdb} | Bin .../cecil/symbols/pdb/Mono.Cecil.Pdb.csproj | 10 +- .../ISymUnmanagedDocumentWriter.cs | 4 - .../Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs | 4 - .../pdb/Mono.Cecil.Pdb/ModuleMetadata.cs | 4 - .../pdb/Mono.Cecil.Pdb/NativePdbReader.cs | 3 +- .../pdb/Mono.Cecil.Pdb/NativePdbWriter.cs | 4 - .../symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs | 4 - .../pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs | 4 - .../symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs | 4 - .../pdb/Test/Mono.Cecil.Pdb.Tests.csproj | 13 +- .../pdb/Test/Mono.Cecil.Tests/PdbTests.cs | 33 +- .../System.Private.CoreLib.Shared.projitems | 2 + .../src/Common/src/CoreLib/System/Boolean.cs | 4 +- .../src/Common/src/CoreLib/System/Byte.cs | 4 +- .../src/Common/src/CoreLib/System/Char.cs | 4 +- .../Collections/ObjectModel/Collection.cs | 30 +- .../src/CoreLib/System/DateTimeOffset.cs | 10 +- .../src/Common/src/CoreLib/System/Double.cs | 6 +- .../System/Globalization/DateTimeFormat.cs | 12 +- .../DateTimeFormatInfo.cs.REMOVED.git-id | 2 +- .../DateTimeParse.cs.REMOVED.git-id | 2 +- .../System/Globalization/TimeSpanParse.cs | 16 +- .../src/Common/src/CoreLib/System/HResults.cs | 1 + .../src/CoreLib/System/IO/StreamWriter.cs | 62 + .../src/CoreLib/System/IO/TextWriter.cs | 15 + .../src/Common/src/CoreLib/System/Index.cs | 149 + .../src/Common/src/CoreLib/System/Int16.cs | 4 +- .../src/Common/src/CoreLib/System/Int32.cs | 4 +- .../src/Common/src/CoreLib/System/Int64.cs | 4 +- .../src/Common/src/CoreLib/System/IntPtr.cs | 4 +- .../src/Common/src/CoreLib/System/Memory.cs | 2 +- .../CoreLib/System/MemoryExtensions.Fast.cs | 100 + .../src/CoreLib/System/MemoryExtensions.cs | 131 +- .../System/Numerics/Vector.cs.REMOVED.git-id | 2 +- .../src/Common/src/CoreLib/System/Range.cs | 130 + .../src/CoreLib/System/ReadOnlyMemory.cs | 2 +- .../CoreLib/System/Reflection/PropertyInfo.cs | 2 + .../CompilerServices/RuntimeFeature.cs | 8 +- .../Runtime/InteropServices/HandleRef.cs | 6 +- .../SerializationInfoEnumerator.cs | 8 +- .../src/Common/src/CoreLib/System/SByte.cs | 4 +- .../src/Common/src/CoreLib/System/Single.cs | 6 +- .../src/Common/src/CoreLib/System/String.cs | 2 +- .../CoreLib/System/Threading/AsyncLocal.cs | 8 +- .../System/Threading/Tasks/TaskExtensions.cs | 2 + .../src/Common/src/CoreLib/System/TimeSpan.cs | 4 +- .../src/Common/src/CoreLib/System/UInt16.cs | 4 +- .../src/Common/src/CoreLib/System/UInt32.cs | 4 +- .../src/Common/src/CoreLib/System/UInt64.cs | 4 +- .../src/Common/src/CoreLib/System/UIntPtr.cs | 4 +- .../src/Common/src/Interop/Interop.Odbc.cs | 41 +- .../Interop.Ssl.cs | 93 + .../System/Net/IPv4AddressHelper.Common.cs | 329 ++ .../System/Net/IPv6AddressHelper.Common.cs | 415 +++ .../LoopbackServer.AuthenticationHelpers.cs | 22 +- .../ref/CoreFx.Private.TestUtilities.cs | 2 + .../src/System/PlatformDetection.cs | 10 +- .../src/Native/Unix/System.Native/pal_io.c | 24 +- .../Unix/System.Native/pal_networking.c | 5 +- .../pal_ssl.c | 78 +- .../pal_ssl.h | 15 + .../corefx/src/Native/Unix/configure.cmake | 2 +- .../System/ComponentModel/BackgroundWorker.cs | 3 + .../RootDesignerSerializerAttribute.cs | 2 +- .../IComNativeDescriptorHandler.cs | 2 +- .../src/System/Data/Common/DbCommand.cs | 26 +- .../src/System/Data/Common/DbConnection.cs | 62 +- .../src/System/Data/Common/DbDataReader.cs | 21 +- .../System/Data/Common/DbProviderFactory.cs | 35 + .../src/System/Data/Common/DbTransaction.cs | 47 +- .../src/System/Data/DataSet.cs.REMOVED.git-id | 2 +- .../src/System/Data/DataSysAttribute.cs | 4 +- .../src/System/Data/Odbc/OdbcConnection.cs | 4 +- .../System/Data/SqlClient/SNI/SNITcpHandle.cs | 2 +- .../ExcludeFromCodeCoverageAttribute.cs | 2 +- .../src/System.Diagnostics.Tracing.csproj | 2 +- .../src/System/IO/FileSystemWatcher.cs | 5 + .../tests/FileSystemWatcher.unit.cs | 19 + .../src/System.Memory/ref/System.Memory.cs | 8 + .../src/ApiCompatBaseline.netcoreappaot.txt | 5 + .../Formatter/FormatterTests.Negative.cs | 8 +- .../tests/System.Memory.Tests.csproj | 1 + .../src/System/Net/Http/WinHttpHandler.cs | 4 +- .../src/System/Net/Http/HttpClient.cs | 12 +- .../src/System/Net/Http/HttpRequestMessage.cs | 11 +- .../System/Net/Http/HttpResponseMessage.cs | 12 + .../Http/SocketsHttpHandler/HttpConnection.cs | 36 +- .../HttpContentReadStream.cs | 4 +- .../HttpClientHandlerTest.SslProtocols.cs | 2 +- .../ref/System.Net.Primitives.cs | 1 + .../src/System/Net/IPAddress.cs | 45 +- .../src/System/Net/IPAddressParser.cs | 18 +- .../Security/Pal.OSX/SafeDeleteSslContext.cs | 9 + .../src/System/Net/Security/SecureChannel.cs | 9 +- .../System/Net/Security/SslStreamPal.OSX.cs | 6 +- .../System/Net/Security/SslStreamPal.Unix.cs | 2 +- .../ClientAsyncAuthenticateTest.cs | 13 +- .../ClientDefaultEncryptionTest.cs | 1 + .../tests/FunctionalTests/LoggingTest.cs | 1 + .../ParameterValidationTest.cs | 1 + .../ServerAsyncAuthenticateTest.cs | 32 +- .../FunctionalTests/ServerNoEncryptionTest.cs | 1 + .../FunctionalTests/SslStreamAlertsTest.cs | 2 + .../FunctionalTests/SslStreamAlpnTests.cs | 48 +- .../SslStreamNetworkStreamTest.cs | 9 +- .../SslStreamStreamToStreamTest.cs | 22 +- .../SslStreamSystemDefaultsTest.cs | 8 + .../System.Net.Security.Tests.csproj | 4 +- .../FunctionalTests/TransportContextTest.cs | 1 + .../src/System/Net/SecurityProtocolType.cs | 1 + .../GenericVectorTests.cs.REMOVED.git-id | 2 +- .../tests/GenericVectorTests.tt | 144 +- .../src/System/IPv4AddressHelper.cs | 322 -- .../src/System/IPv6AddressHelper.cs | 347 +- .../tests/MemberInfoTests.cs | 2 +- .../src/System/IO/BufferedStream.cs | 56 + .../ref/System.Runtime.cs.REMOVED.git-id | 2 +- .../src/ApiCompatBaseline.uapaot.txt | 42 +- .../tests/System.Runtime.Tests.csproj | 2 + .../tests/System/DateTimeOffsetTests.cs | 5 +- .../tests/System/DateTimeTests.cs | 20 +- .../tests/System/DecimalTests.cs | 1 - .../System.Runtime/tests/System/IndexTests.cs | 115 + .../System.Runtime/tests/System/RangeTests.cs | 107 + .../RuntimeHelpersTests.netcoreapp.cs | 16 +- .../tests/System/StringTests.netcoreapp.cs | 106 + .../tests/System/TimeSpanTests.cs | 15 +- .../Cryptography/IncrementalHash.net46.cs | 21 +- .../tests/TestData.cs.REMOVED.git-id | 2 +- ...ncelableAsyncEnumerableTests.netcoreapp.cs | 4 +- .../tests/ThreadPoolTests.cs | 10 +- .../shared/System/HResults.cs | 1 + .../AmbiguousImplementationException.cs | 36 + .../src/Resources/Strings.resx.REMOVED.git-id | 2 +- .../CancellationTokenRegistration.cs | 2 +- external/how-to-bump-roslyn-binaries.md | 51 + .../wasm/HelloWorld/App.cshtml | 5 + .../wasm/HelloWorld/HelloWorld.csproj | 22 + .../wasm/HelloWorld/Pages/Counter.cshtml | 16 + .../wasm/HelloWorld/Pages/FetchData.cshtml | 55 + .../wasm/HelloWorld/Pages/Index.cshtml | 7 + .../wasm/HelloWorld/Pages/_ViewImports.cshtml | 1 + .../wasm/HelloWorld/Program.cs | 16 + .../wasm/HelloWorld/Shared/MainLayout.cshtml | 15 + .../wasm/HelloWorld/Shared/NavMenu.cshtml | 37 + .../HelloWorld/Shared/SurveyPrompt.cshtml | 15 + .../wasm/HelloWorld/Startup.cs | 17 + .../wasm/HelloWorld/_ViewImports.cshtml | 6 + .../netstandard2.0/HelloWorld.blazor.config | 2 + .../dist/_framework/blazor.boot.json | 1 + .../components.server.js.REMOVED.git-id | 1 + .../dist/_framework/components.webassembly.js | 1 + .../_framework/wasm/mono.js.REMOVED.git-id | 1 + .../_framework/wasm/mono.wasm.REMOVED.git-id | 1 + .../bootstrap.min.css.REMOVED.git-id | 1 + .../bootstrap.min.css.map.REMOVED.git-id | 1 + .../wwwroot/css/open-iconic/FONT-LICENSE | 86 + .../wwwroot/css/open-iconic/ICON-LICENSE | 21 + .../wwwroot/css/open-iconic/README.md | 114 + .../font/css/open-iconic-bootstrap.min.css | 1 + .../open-iconic/font/fonts/open-iconic.eot | Bin 0 -> 28196 bytes .../open-iconic/font/fonts/open-iconic.otf | Bin 0 -> 20996 bytes .../open-iconic/font/fonts/open-iconic.svg | 543 +++ .../open-iconic/font/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes .../open-iconic/font/fonts/open-iconic.woff | Bin 0 -> 14984 bytes .../wasm/HelloWorld/wwwroot/css/site.css | 123 + .../wasm/HelloWorld/wwwroot/index.html | 16 + .../wwwroot/sample-data/weather.json | 32 + .../App.cshtml | 1 + .../BenchmarkEvent.cs | 17 + ...ft.AspNetCore.Blazor.E2EPerformance.csproj | 11 + .../Pages/Index.cshtml | 11 + .../Pages/Json.cshtml | 98 + .../Pages/RenderList.cshtml | 75 + .../Pages/_ViewImports.cshtml | 1 + .../Program.cs | 19 + .../Shared/MainLayout.cshtml | 13 + .../Startup.cs | 20 + .../_ViewImports.cshtml | 6 + ...oft.AspNetCore.Blazor.Build.REMOVED.git-id | 1 + ...etCore.Blazor.E2EPerformance.blazor.config | Bin 0 -> 518 bytes ...osoft.AspNetCore.Blazor.E2EPerformance.pdb | Bin 0 -> 13168 bytes .../Microsoft.AspNetCore.Blazor.pdb | Bin 0 -> 9480 bytes ...icrosoft.AspNetCore.Components.Browser.pdb | Bin 0 -> 2248 bytes ...icrosoft.AspNetCore.Components.Browser.xml | 68 + .../Microsoft.AspNetCore.Components.pdb | Bin 0 -> 71992 bytes ...t.AspNetCore.Components.xml.REMOVED.git-id | 1 + ...osoft.AspNetCore.Blazor.E2EPerformance.pdb | Bin 0 -> 5820 bytes .../_bin/Microsoft.AspNetCore.Blazor.pdb | Bin 0 -> 8960 bytes ...icrosoft.AspNetCore.Components.Browser.pdb | Bin 0 -> 1836 bytes .../_bin/Microsoft.AspNetCore.Components.pdb | Bin 0 -> 70964 bytes .../dist/_framework/blazor.boot.json | 1 + .../components.server.js.REMOVED.git-id | 1 + .../components.webassembly.js.REMOVED.git-id | 1 + .../_framework/wasm/mono.js.REMOVED.git-id | 1 + .../_framework/wasm/mono.wasm.REMOVED.git-id | 1 + ...oft.AspNetCore.Blazor.Build.REMOVED.git-id | 1 + ...etCore.Blazor.E2EPerformance.blazor.config | Bin 0 -> 466 bytes ...osoft.AspNetCore.Blazor.E2EPerformance.pdb | Bin 0 -> 12880 bytes .../Microsoft.AspNetCore.Blazor.pdb | Bin 0 -> 8044 bytes ...icrosoft.AspNetCore.Components.Browser.pdb | Bin 0 -> 2068 bytes ...icrosoft.AspNetCore.Components.Browser.xml | 68 + .../Microsoft.AspNetCore.Components.pdb | Bin 0 -> 57276 bytes ...t.AspNetCore.Components.xml.REMOVED.git-id | 1 + ...osoft.AspNetCore.Blazor.E2EPerformance.pdb | Bin 0 -> 5532 bytes .../_bin/Microsoft.AspNetCore.Blazor.pdb | Bin 0 -> 7528 bytes ...icrosoft.AspNetCore.Components.Browser.pdb | Bin 0 -> 1656 bytes .../_bin/Microsoft.AspNetCore.Components.pdb | Bin 0 -> 56260 bytes .../dist/_framework/blazor.boot.json | 1 + .../components.server.js.REMOVED.git-id | 1 + .../components.webassembly.js.REMOVED.git-id | 1 + .../_framework/wasm/mono.js.REMOVED.git-id | 1 + .../_framework/wasm/mono.wasm.REMOVED.git-id | 1 + .../wwwroot/benchmarks/appStartup.js | 15 + .../wwwroot/benchmarks/index.js | 6 + .../wwwroot/benchmarks/jsonHandling.js | 57 + .../jsonHandlingData.js.REMOVED.git-id | 1 + .../lib/bootstrap.min.css.REMOVED.git-id | 1 + .../benchmarks/lib/minibench/README.md | 17 + .../benchmarks/lib/minibench/minibench.js | 486 +++ .../benchmarks/lib/minibench/style.css | 19 + .../wwwroot/benchmarks/renderList.js | 45 + .../benchmarks/util/BenchmarkEvents.js | 21 + .../wwwroot/benchmarks/util/BlazorApp.js | 25 + .../wwwroot/benchmarks/util/DOM.js | 7 + .../wwwroot/blazor-frame.html | 24 + .../wwwroot/index.html | 17 + .../wasm/Newtonsoft/App.cshtml | 5 + .../wasm/Newtonsoft/Newtonsoft.csproj | 24 + .../wasm/Newtonsoft/Pages/Counter.cshtml | 16 + .../wasm/Newtonsoft/Pages/FetchData.cshtml | 66 + .../wasm/Newtonsoft/Pages/Index.cshtml | 7 + .../wasm/Newtonsoft/Pages/_ViewImports.cshtml | 1 + .../wasm/Newtonsoft/Program.cs | 16 + .../wasm/Newtonsoft/Shared/MainLayout.cshtml | 15 + .../wasm/Newtonsoft/Shared/NavMenu.cshtml | 37 + .../Newtonsoft/Shared/SurveyPrompt.cshtml | 15 + .../wasm/Newtonsoft/Startup.cs | 17 + .../wasm/Newtonsoft/_ViewImports.cshtml | 6 + .../netstandard2.0/Newtonsoft.blazor.config | 2 + .../dist/_framework/blazor.boot.json | 1 + .../components.server.js.REMOVED.git-id | 1 + .../dist/_framework/components.webassembly.js | 1 + .../_framework/wasm/mono.js.REMOVED.git-id | 1 + .../_framework/wasm/mono.wasm.REMOVED.git-id | 1 + .../bootstrap.min.css.REMOVED.git-id | 1 + .../bootstrap.min.css.map.REMOVED.git-id | 1 + .../wwwroot/css/open-iconic/FONT-LICENSE | 86 + .../wwwroot/css/open-iconic/ICON-LICENSE | 21 + .../wwwroot/css/open-iconic/README.md | 114 + .../font/css/open-iconic-bootstrap.min.css | 1 + .../open-iconic/font/fonts/open-iconic.eot | Bin 0 -> 28196 bytes .../open-iconic/font/fonts/open-iconic.otf | Bin 0 -> 20996 bytes .../open-iconic/font/fonts/open-iconic.svg | 543 +++ .../open-iconic/font/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes .../open-iconic/font/fonts/open-iconic.woff | Bin 0 -> 14984 bytes .../wasm/Newtonsoft/wwwroot/css/site.css | 123 + .../wasm/Newtonsoft/wwwroot/index.html | 16 + .../wwwroot/sample-data/weather.json | 32 + external/illinker-test-assets/wasm/wasm.sln | 62 + external/linker/.github/CODEOWNERS | 4 +- external/linker/LICENSE | 36 +- external/linker/README.md | 7 + external/linker/corebuild/build.cmd | 6 - external/linker/corebuild/build.sh | 7 - external/linker/corebuild/dotnet.cmd | 19 - .../linker/corebuild/integration/build.ps1 | 9 - .../linker/corebuild/integration/build.sh | 14 - external/linker/corebuild/restore.cmd | 7 - external/linker/corebuild/restore.sh | 7 - external/linker/eng/Version.Details.xml | 7 +- external/linker/eng/Versions.props | 7 +- external/linker/eng/azure-pipelines.yml | 3 +- external/linker/eng/common/CheckSymbols.ps1 | 158 + .../eng/common/PublishToPackageFeed.proj | 55 +- .../eng/common/PublishToSymbolServers.proj | 82 + .../linker/eng/common/SigningValidation.proj | 83 + .../eng/common/SourceLinkValidation.ps1 | 184 + external/linker/eng/common/build.ps1 | 24 +- external/linker/eng/common/build.sh | 93 +- .../eng/common/cross/arm/sources.list.vivid | 11 - .../eng/common/cross/arm/sources.list.wily | 11 - .../common/cross/arm64/sources.list.buster | 11 + .../common/cross/arm64/sources.list.stretch | 12 + .../eng/common/cross/arm64/sources.list.vivid | 11 - .../eng/common/cross/arm64/sources.list.wily | 11 - .../eng/common/cross/armel/tizen-fetch.sh | 6 +- .../linker/eng/common/cross/build-rootfs.sh | 67 +- .../eng/common/cross/x86/sources.list.vivid | 11 - .../eng/common/cross/x86/sources.list.wily | 11 - external/linker/eng/common/darc-init.ps1 | 19 +- external/linker/eng/common/darc-init.sh | 15 +- external/linker/eng/common/dotnet-install.cmd | 2 + external/linker/eng/common/dotnet-install.ps1 | 27 + external/linker/eng/common/dotnet-install.sh | 49 + .../eng/common/generate-graph-files.ps1 | 87 + .../linker/eng/common/init-tools-native.ps1 | 41 +- .../linker/eng/common/init-tools-native.sh | 14 +- .../linker/eng/common/internal/Tools.csproj | 8 +- .../eng/common/native/CommonLibrary.psm1 | 2 +- .../eng/common/pipeline-logging-functions.ps1 | 233 ++ .../eng/common/pipeline-logging-functions.sh | 102 + .../common/post-build/dotnetsymbol-init.ps1 | 29 + .../common/post-build/sourcelink-cli-init.ps1 | 29 + .../post-build/sourcelink-validation.ps1 | 224 ++ .../common/post-build/symbols-validation.ps1 | 186 + external/linker/eng/common/sdl/NuGet.config | 13 + .../eng/common/sdl/execute-all-sdl-tools.ps1 | 97 + external/linker/eng/common/sdl/init-sdl.ps1 | 48 + .../linker/eng/common/sdl/packages.config | 4 + external/linker/eng/common/sdl/push-gdn.ps1 | 51 + external/linker/eng/common/sdl/run-sdl.ps1 | 65 + .../templates/job/generate-graph-files.yml | 48 + .../linker/eng/common/templates/job/job.yml | 18 +- .../templates/job/publish-build-assets.yml | 28 + .../linker/eng/common/templates/jobs/jobs.yml | 21 +- .../templates/phases/publish-build-assets.yml | 2 + .../channels/public-dev-release.yml | 145 + .../channels/public-validation-release.yml | 91 + .../templates/post-build/common-variables.yml | 9 + .../templates/post-build/post-build.yml | 59 + .../templates/post-build/promote-build.yml | 28 + .../post-build/setup-maestro-vars.yml | 26 + .../common/templates/steps/helix-publish.yml | 51 - .../common/templates/steps/send-to-helix.yml | 62 +- external/linker/eng/common/tools.ps1 | 157 +- external/linker/eng/common/tools.sh | 99 +- external/linker/external/Mono.Cecil.overrides | 30 +- .../external/cecil/.azure-pipelines.yml | 38 + external/linker/external/cecil/.gitignore | 1 + external/linker/external/cecil/.travis.yml | 8 - .../external/cecil/Directory.Build.props | 27 + .../cecil/Mono.Cecil.Cil/CodeReader.cs | 5 - .../cecil/Mono.Cecil.Cil/CodeWriter.cs | 4 - .../external/cecil/Mono.Cecil.Cil/Document.cs | 51 +- .../cecil/Mono.Cecil.Cil/PortablePdb.cs | 58 +- .../external/cecil/Mono.Cecil.Cil/Symbols.cs | 119 +- .../cecil/Mono.Cecil.Metadata/Buffers.cs | 4 - .../cecil/Mono.Cecil.Metadata/Utilities.cs | 2 - .../cecil/Mono.Cecil.PE/BinaryStreamWriter.cs | 4 - .../cecil/Mono.Cecil.PE/ByteBuffer.cs | 5 - .../external/cecil/Mono.Cecil.PE/Image.cs | 2 + .../cecil/Mono.Cecil.PE/ImageReader.cs | 16 +- .../cecil/Mono.Cecil.PE/ImageWriter.cs | 46 +- .../external/cecil/Mono.Cecil.PE/TextMap.cs | 4 - .../external/cecil/Mono.Cecil.Tests.props | 43 +- .../linker/external/cecil/Mono.Cecil.csproj | 10 +- .../linker/external/cecil/Mono.Cecil.nunit | 12 +- .../linker/external/cecil/Mono.Cecil.nuspec | 36 +- .../linker/external/cecil/Mono.Cecil.props | 103 - external/linker/external/cecil/Mono.Cecil.sln | 266 +- .../external/cecil/Mono.Cecil.sln.DotSettings | 39 - .../cecil/Mono.Cecil/AssemblyDefinition.cs | 6 - .../external/cecil/Mono.Cecil/AssemblyInfo.cs | 4 +- .../cecil/Mono.Cecil/AssemblyReader.cs | 45 +- .../cecil/Mono.Cecil/AssemblyWriter.cs | 161 +- .../cecil/Mono.Cecil/BaseAssemblyResolver.cs | 17 +- .../external/cecil/Mono.Cecil/Import.cs | 48 +- .../cecil/Mono.Cecil/MetadataResolver.cs | 9 + .../cecil/Mono.Cecil/MethodDefinition.cs | 5 + .../cecil/Mono.Cecil/MethodReference.cs | 2 +- .../cecil/Mono.Cecil/ModuleDefinition.cs | 98 +- .../external/cecil/Mono.Cecil/TypeParser.cs | 18 +- .../CryptoConvert.cs | 9 - .../CryptoService.cs | 8 - .../linker/external/cecil/Mono/MergeSort.cs | 66 + external/linker/external/cecil/Mono/Type.cs | 137 - .../linker/external/cecil/NetStandard.props | 9 - external/linker/external/cecil/ProjectInfo.cs | 8 +- .../cecil/Test/Mono.Cecil.Tests.csproj | 35 +- .../Test/Mono.Cecil.Tests/AssemblyTests.cs | 10 +- .../Test/Mono.Cecil.Tests/BaseTestFixture.cs | 115 +- .../CallerMemberNameAttribute.cs | 10 - .../Mono.Cecil.Tests/CompilationService.cs | 21 +- .../Mono.Cecil.Tests/CustomAttributesTests.cs | 49 +- .../Test/Mono.Cecil.Tests/ImageReadTests.cs | 13 +- .../Test/Mono.Cecil.Tests/ImportCecilTests.cs | 6 +- .../Mono.Cecil.Tests/ImportReflectionTests.cs | 2 - .../Test/Mono.Cecil.Tests/MethodBodyTests.cs | 2 +- .../Test/Mono.Cecil.Tests/ModuleTests.cs | 23 +- .../Test/Mono.Cecil.Tests/PortablePdbTests.cs | 126 +- .../Test/Mono.Cecil.Tests/ResolveTests.cs | 4 +- .../SecurityDeclarationTests.cs | 2 - .../Test/Mono.Cecil.Tests/SymbolTests.cs | 87 +- .../cecil/Test/Mono.Cecil.Tests/TypeTests.cs | 20 + .../WindowsRuntimeAssemblyResolver.cs | 10 - .../WindowsRuntimeProjectionsTests.cs | 2 - .../Resources/assemblies/mdb-mismatch.dll.mdb | Bin 0 -> 238 bytes .../Resources/assemblies/pdb-mismatch.pdb | Bin 0 -> 420 bytes .../Test/Resources/cs/CustomAttributes.cs | 4 + .../cecil/Test/libs/nunit-2.6.2/license.txt | 15 - external/linker/external/cecil/appveyor.yml | 13 - .../cecil/rocks/Mono.Cecil.Rocks.csproj | 24 +- .../rocks/Mono.Cecil.Rocks/DocCommentId.cs | 2 +- .../rocks/Test/Mono.Cecil.Rocks.Tests.csproj | 15 +- .../Mono.Cecil.Tests/DocCommentIdTests.cs | 24 +- .../SecurityDeclarationRocksTests.cs | 4 + .../TypeReferenceRocksTests.cs | 2 - .../cecil/symbols/mdb/Mono.Cecil.Mdb.csproj | 14 +- .../symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs | 14 +- .../symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs | 2 - .../mdb/Test/Mono.Cecil.Mdb.Tests.csproj | 15 +- .../mdb/Test/Mono.Cecil.Tests/MdbTests.cs | 4 +- .../{hello.exe.mdb => simplemdb.exe.mdb} | Bin .../cecil/symbols/pdb/Mono.Cecil.Pdb.csproj | 10 +- .../ISymUnmanagedDocumentWriter.cs | 4 - .../Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs | 4 - .../pdb/Mono.Cecil.Pdb/ModuleMetadata.cs | 4 - .../pdb/Mono.Cecil.Pdb/NativePdbReader.cs | 13 +- .../pdb/Mono.Cecil.Pdb/NativePdbWriter.cs | 25 +- .../symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs | 4 - .../pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs | 4 - .../symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs | 4 - .../pdb/Test/Mono.Cecil.Pdb.Tests.csproj | 15 +- .../pdb/Test/Mono.Cecil.Tests/PdbTests.cs | 33 +- external/linker/global.json | 4 +- external/linker/illink.sln | 72 +- external/linker/monobuild/Makefile | 12 +- external/linker/monolinker.sln | 124 +- external/linker/netci.groovy | 48 - .../ILLink.CustomSteps.csproj | 35 +- .../linker/src/ILLink.Tasks/AdapterLogger.cs | 37 - .../src/ILLink.Tasks/ILLink.Tasks.csproj | 250 +- .../src/ILLink.Tasks/ILLink.Tasks.nuspec | 15 - external/linker/src/ILLink.Tasks/LinkTask.cs | 152 +- external/linker/src/ILLink.Tasks/README.md | 230 +- .../linker/src/ILLink.Tasks/Sdk/Sdk.props | 11 +- external/linker/src/ILLink.Tasks/Utils.cs | 11 - external/linker/src/linker/ILLink.props | 27 - .../linker/Linker.Steps/CodeRewriterStep.cs | 45 +- .../src/linker/Linker.Steps/MarkStep.cs | 154 +- .../src/linker/Linker.Steps/OutputStep.cs | 5 +- .../Linker.Steps/PreserveCalendarsStep.cs | 1 + .../Linker.Steps/ReflectionBlockedStep.cs | 67 + .../linker/Linker.Steps/RemoveFeaturesStep.cs | 83 +- .../Linker.Steps/ResolveFromXApiStep.cs | 1 + .../linker/Linker.Steps/ResolveFromXmlStep.cs | 1 + .../src/linker/Linker.Steps/SweepStep.cs | 14 +- .../linker/src/linker/Linker/Annotations.cs | 20 + .../linker/src/linker/Linker/AssemblyInfo.cs | 7 - .../src/linker/Linker/AssemblyResolver.cs | 50 +- external/linker/src/linker/Linker/BCL.cs | 13 +- .../Linker/DirectoryAssemblyResolver.cs | 4 +- external/linker/src/linker/Linker/Driver.cs | 60 +- .../linker/src/linker/Linker/KnownMembers.cs | 3 +- .../linker/src/linker/Linker/LinkContext.cs | 26 +- .../src/linker/Linker/MethodBodyScanner.cs | 43 + .../Linker/MethodDefinitionExtensions.cs | 14 +- .../Linker/MethodReferenceExtensions.cs | 2 +- .../linker/Linker/TypeReferenceExtensions.cs | 21 +- external/linker/src/linker/Mono.Linker.csproj | 124 +- external/linker/src/linker/app.config | 3 - .../src/linker/runtimeconfig.template.json | 3 + external/llvm/CMakeLists.txt | 2 +- external/llvm/include/llvm/CodeGen/GCs.h | 3 + .../llvm/CodeGen/LinkAllCodegenComponents.h | 1 + .../include/llvm/CodeGen/MachineBasicBlock.h | 7 + .../llvm/include/llvm/IR/IntrinsicsPowerPC.td | 6 +- .../lib/CodeGen/AsmPrinter/MonoException.cpp | 24 +- .../lib/CodeGen/AsmPrinter/MonoException.h | 2 + external/llvm/lib/CodeGen/BuiltinGCs.cpp | 16 + external/llvm/lib/CodeGen/IfConversion.cpp | 39 +- .../llvm/lib/CodeGen/MachineBasicBlock.cpp | 8 + .../MachineBlockPlacement.cpp.REMOVED.git-id | 2 +- .../RuntimeDyld/RuntimeDyldELF.cpp | 22 +- external/llvm/lib/IR/Core.cpp.REMOVED.git-id | 2 +- external/llvm/lib/MC/MCObjectFileInfo.cpp | 2 + external/llvm/lib/Support/CMakeLists.txt | 9 +- .../lib/Target/AArch64/AArch64AsmPrinter.cpp | 5 + .../Target/AArch64/AArch64FalkorHWPFFix.cpp | 18 + .../Target/AArch64/AArch64FrameLowering.cpp | 12 +- .../AArch64ISelLowering.cpp.REMOVED.git-id | 2 +- .../AArch64InstrInfo.td.REMOVED.git-id | 2 +- .../llvm/lib/Target/ARM/ARMFrameLowering.cpp | 14 +- .../Mips/MCTargetDesc/MipsELFObjectWriter.cpp | 2 + .../Mips/MipsISelLowering.cpp.REMOVED.git-id | 2 +- .../MipsSEISelLowering.cpp.REMOVED.git-id | 2 +- .../lib/Target/NVPTX/NVPTXTargetMachine.cpp | 10 + .../PowerPC/PPCInstrInfo.cpp.REMOVED.git-id | 2 +- external/llvm/lib/Target/X86/CMakeLists.txt | 1 + .../X86/Disassembler/X86Disassembler.cpp | 7 +- external/llvm/lib/Target/X86/X86.h | 3 + .../lib/Target/X86/X86DomainReassignment.cpp | 65 +- .../Target/X86/X86FastISel.cpp.REMOVED.git-id | 2 +- .../lib/Target/X86/X86FlagsCopyLowering.cpp | 935 +++++ .../X86/X86FrameLowering.cpp.REMOVED.git-id | 2 +- .../X86/X86ISelLowering.cpp.REMOVED.git-id | 2 +- .../llvm/lib/Target/X86/X86ISelLowering.h | 3 - .../llvm/lib/Target/X86/X86InstrArithmetic.td | 34 +- .../llvm/lib/Target/X86/X86InstrCompiler.td | 8 +- .../X86/X86InstrInfo.cpp.REMOVED.git-id | 2 +- external/llvm/lib/Target/X86/X86InstrInfo.h | 6 + .../Target/X86/X86InstrInfo.td.REMOVED.git-id | 2 +- .../llvm/lib/Target/X86/X86InstrSystem.td | 13 + .../llvm/lib/Target/X86/X86RegisterInfo.td | 16 +- external/llvm/lib/Target/X86/X86Schedule.td | 4 +- .../llvm/lib/Target/X86/X86ScheduleAtom.td | 4 +- .../llvm/lib/Target/X86/X86TargetMachine.cpp | 3 + .../IPO/DeadArgumentElimination.cpp | 40 +- .../lib/Transforms/IPO/MergeFunctions.cpp | 86 +- .../InstructionCombining.cpp.REMOVED.git-id | 2 +- .../lib/Transforms/Scalar/DivRemPairs.cpp | 11 +- .../lib/Transforms/Scalar/JumpThreading.cpp | 17 +- .../lib/Transforms/Scalar/PlaceSafepoints.cpp | 4 +- external/llvm/lib/Transforms/Scalar/SCCP.cpp | 1 + .../Transforms/Utils/FunctionComparator.cpp | 2 +- external/llvm/projects/CMakeLists.txt | 3 +- external/llvm/projects/llvm-cbe/.gitignore | 21 + .../llvm/projects/llvm-cbe/CMakeLists.txt | 2 + external/llvm/projects/llvm-cbe/LICENSE | 57 + external/llvm/projects/llvm-cbe/README.md | 72 + .../llvm/projects/llvm-cbe/docs/index.html | 6 + .../llvm/projects/llvm-cbe/include/sample.h | 8 + .../llvm/projects/llvm-cbe/lib/CMakeLists.txt | 1 + .../CBackend/CBackend.cpp.REMOVED.git-id | 1 + .../llvm-cbe/lib/Target/CBackend/CBackend.h | 260 ++ .../lib/Target/CBackend/CMakeLists.txt | 5 + .../lib/Target/CBackend/CTargetMachine.h | 44 + .../lib/Target/CBackend/LLVMBuild.txt | 31 + .../TargetInfo/CBackendTargetInfo.cpp | 21 + .../Target/CBackend/TargetInfo/CMakeLists.txt | 5 + .../Target/CBackend/TargetInfo/LLVMBuild.txt | 23 + .../llvm-cbe/lib/Target/CMakeLists.txt | 1 + .../llvm/projects/llvm-cbe/test/.gitignore | 5 + .../llvm-cbe/test/CBEWarningsErrors.txt | 31 + .../llvm-cbe/test/selectionsort/main.c | 39 + .../llvm/projects/llvm-cbe/test/test001.c | 17 + .../llvm/projects/llvm-cbe/test/test002.c | 21 + .../llvm/projects/llvm-cbe/test/test003.c | 23 + .../llvm/projects/llvm-cbe/test/test004.c | 21 + .../llvm/projects/llvm-cbe/test/test005.c | 21 + .../llvm/projects/llvm-cbe/test/test006.c | 24 + .../llvm/projects/llvm-cbe/test/test007.c | 33 + .../llvm/projects/llvm-cbe/test/test008.c | 29 + .../llvm/projects/llvm-cbe/test/test009.c | 21 + .../llvm/projects/llvm-cbe/test/test010.c | 43 + .../llvm/projects/llvm-cbe/test/test011.c | 20 + .../llvm/projects/llvm-cbe/test/test012.c | 20 + .../llvm/projects/llvm-cbe/test/test013.c | 20 + .../llvm/projects/llvm-cbe/test/test014.c | 20 + .../llvm/projects/llvm-cbe/test/test015.c | 20 + .../llvm/projects/llvm-cbe/test/test016.c | 23 + .../llvm/projects/llvm-cbe/test/test017.c | 23 + .../llvm/projects/llvm-cbe/test/test018.c | 21 + .../llvm/projects/llvm-cbe/test/test019.c | 21 + .../llvm/projects/llvm-cbe/test/test020.c | 25 + .../llvm/projects/llvm-cbe/test/test021.c | 24 + .../llvm/projects/llvm-cbe/test/test022.c | 25 + .../llvm/projects/llvm-cbe/test/test023.c | 24 + .../llvm/projects/llvm-cbe/test/test024.c | 24 + .../llvm/projects/llvm-cbe/test/test025.c | 24 + .../llvm/projects/llvm-cbe/test/test026.c | 25 + .../llvm/projects/llvm-cbe/test/test027.c | 25 + .../llvm/projects/llvm-cbe/test/test028.c | 26 + .../llvm/projects/llvm-cbe/test/test029.c | 27 + .../llvm/projects/llvm-cbe/test/test030.c | 27 + .../llvm/projects/llvm-cbe/test/test031.c | 27 + .../llvm/projects/llvm-cbe/test/test032.c | 27 + .../llvm/projects/llvm-cbe/test/test033.c | 25 + .../llvm/projects/llvm-cbe/test/test034.c | 25 + .../llvm/projects/llvm-cbe/test/test035.c | 25 + .../llvm/projects/llvm-cbe/test/test036.c | 25 + .../llvm/projects/llvm-cbe/test/test037.c | 25 + .../llvm/projects/llvm-cbe/test/test038.c | 26 + .../llvm/projects/llvm-cbe/test/test039.c | 26 + .../llvm/projects/llvm-cbe/test/test040.c | 26 + .../llvm/projects/llvm-cbe/test/test041.c | 26 + .../llvm/projects/llvm-cbe/test/test042.c | 25 + .../llvm/projects/llvm-cbe/test/test043.c | 24 + .../llvm/projects/llvm-cbe/test/test044.c | 23 + .../llvm/projects/llvm-cbe/test/test045.c | 24 + .../llvm/projects/llvm-cbe/test/test046.c | 24 + .../llvm/projects/llvm-cbe/test/test047.c | 19 + .../llvm/projects/llvm-cbe/test/test048.c | 22 + .../llvm/projects/llvm-cbe/test/test049.c | 22 + .../llvm/projects/llvm-cbe/test/test050.c | 22 + .../llvm/projects/llvm-cbe/test/test051.c | 24 + .../llvm/projects/llvm-cbe/test/test052.c | 23 + .../llvm/projects/llvm-cbe/test/test053.c | 23 + .../llvm/projects/llvm-cbe/test/test054.c | 22 + .../llvm/projects/llvm-cbe/test/test055.c | 23 + .../llvm/projects/llvm-cbe/test/test056.c | 22 + .../llvm/projects/llvm-cbe/test/test057.c | 23 + .../llvm/projects/llvm-cbe/test/test058.c | 23 + .../llvm/projects/llvm-cbe/test/test059.c | 23 + .../llvm/projects/llvm-cbe/test/test060.c | 22 + .../llvm/projects/llvm-cbe/test/test061.c | 22 + .../llvm/projects/llvm-cbe/test/test062.c | 23 + .../llvm/projects/llvm-cbe/test/test063.c | 23 + .../llvm/projects/llvm-cbe/test/test064.c | 23 + .../llvm/projects/llvm-cbe/test/test065.c | 22 + .../llvm/projects/llvm-cbe/test/test066.c | 23 + .../llvm/projects/llvm-cbe/test/test067.c | 23 + .../llvm/projects/llvm-cbe/test/test068.c | 23 + .../llvm/projects/llvm-cbe/test/test069.c | 23 + .../llvm/projects/llvm-cbe/test/test070.c | 22 + .../llvm/projects/llvm-cbe/test/test071.c | 19 + .../llvm/projects/llvm-cbe/test/test072.c | 25 + .../llvm/projects/llvm-cbe/test/test073.c | 22 + .../llvm/projects/llvm-cbe/test/test074.c | 25 + .../llvm/projects/llvm-cbe/test/test075.c | 28 + .../llvm/projects/llvm-cbe/test/test076.c | 22 + .../llvm/projects/llvm-cbe/test/test077.c | 24 + .../llvm/projects/llvm-cbe/test/test078.c | 23 + .../llvm/projects/llvm-cbe/test/test079.c | 25 + .../llvm/projects/llvm-cbe/test/test080.c | 24 + .../llvm/projects/llvm-cbe/test/test081.c | 23 + .../llvm/projects/llvm-cbe/test/test082.c | 25 + .../llvm/projects/llvm-cbe/test/test083.c | 24 + .../llvm/projects/llvm-cbe/test/test084.c | 26 + .../llvm/projects/llvm-cbe/test/test085.c | 27 + .../llvm/projects/llvm-cbe/test/test086.c | 27 + .../llvm/projects/llvm-cbe/test/test087.c | 26 + .../llvm/projects/llvm-cbe/test/test088.c | 25 + .../llvm/projects/llvm-cbe/test/test089.c | 28 + .../llvm/projects/llvm-cbe/test/test090.c | 25 + .../llvm/projects/llvm-cbe/test/test091.c | 25 + .../llvm/projects/llvm-cbe/test/test092.c | 35 + .../llvm/projects/llvm-cbe/test/test093.c | 29 + .../llvm/projects/llvm-cbe/test/test094.c | 29 + .../llvm/projects/llvm-cbe/test/test095.c | 27 + .../llvm/projects/llvm-cbe/test/test096.c | 24 + .../llvm/projects/llvm-cbe/test/test097.c | 27 + .../llvm/projects/llvm-cbe/test/test098.c | 28 + .../llvm/projects/llvm-cbe/test/test099.c | 20 + .../llvm/projects/llvm-cbe/test/test100.c | 30 + .../llvm/projects/llvm-cbe/test/test101.c | 37 + .../llvm/projects/llvm-cbe/test/test102.c | 23 + .../llvm/projects/llvm-cbe/test/test103.c | 23 + .../llvm/projects/llvm-cbe/test/test104.c | 24 + .../llvm/projects/llvm-cbe/test/test105.c | 24 + .../projects/llvm-cbe/test/testCaseInfo.csv | 105 + .../llvm/projects/llvm-cbe/test/testFile.py | 87 + .../llvm/projects/llvm-cbe/test/testbad.c | 17 + .../projects/llvm-cbe/tools/CMakeLists.txt | 1 + .../llvm-cbe/tools/llvm-cbe/CMakeLists.txt | 17 + .../llvm-cbe/tools/llvm-cbe/LLVMBuild.txt | 22 + .../llvm-cbe/tools/llvm-cbe/llvm-cbe.cpp | 351 ++ external/llvm/scripts/ci/.gitattributes | 3 + external/llvm/scripts/ci/.gitignore | 3 + .../llvm/scripts/ci/build-external-llvm.bat | 429 +++ external/llvm/scripts/ci/run-jenkins-linux.sh | 8 + external/llvm/scripts/ci/run-jenkins-osx.sh | 39 + .../llvm/scripts/ci/run-jenkins-windows.bat | 47 + .../llvm/scripts/ci/run-jenkins-windows.sh | 41 + external/llvm/scripts/ci/run-jenkins.sh | 57 +- .../scripts/ci/setup-vs-msvcbuild-env.bat | 155 + .../llvm/scripts/ci/setup-windows-env.bat | 64 + .../AArch64/arm64-indexed-vector-ldst-2.ll | 22 + .../AArch64/arm64-zero-cycle-zeroing.ll | 70 +- .../test/CodeGen/AArch64/falkor-hwpf-fix.mir | 25 + .../CodeGen/AArch64/inlineasm-S-constraint.ll | 20 + .../AArch64/spill-stack-realignment.mir | 35 + .../CodeGen/Hexagon/ifcvt-diamond-ret.mir | 25 + .../CodeGen/MIR/PowerPC/ifcvt-diamond-ret.mir | 34 + external/llvm/test/CodeGen/Mips/const-mult.ll | 645 +++- .../CodeGen/Mips/inlineasm-cnstrnt-bad-l1.ll | 13 + .../CodeGen/Mips/inlineasm-cnstrnt-reg.ll | 10 + ...convert-rr-to-ri-instrs.mir.REMOVED.git-id | 2 +- .../test/CodeGen/PowerPC/no-dup-of-bdnz.ll | 75 + .../test/CodeGen/X86/GlobalISel/add-scalar.ll | 14 +- external/llvm/test/CodeGen/X86/O0-pipeline.ll | 2 + external/llvm/test/CodeGen/X86/clobber-fi0.ll | 37 - .../test/CodeGen/X86/cmpxchg-clobber-flags.ll | 363 +- external/llvm/test/CodeGen/X86/copy-eflags.ll | 357 +- .../X86/domain-reassignment-implicit-def.ll | 24 + .../CodeGen/X86/domain-reassignment-test.ll | 37 + .../CodeGen/X86/eflags-copy-expansion.mir | 64 - .../llvm/test/CodeGen/X86/fast-isel-shift.ll | 12 + .../test/CodeGen/X86/flags-copy-lowering.mir | 555 +++ .../llvm/test/CodeGen/X86/ipra-reg-usage.ll | 2 +- .../CodeGen/X86/mul-i1024.ll.REMOVED.git-id | 2 +- .../X86/peephole-na-phys-copy-folding.ll | 113 +- external/llvm/test/CodeGen/X86/pr37264.ll | 12 + external/llvm/test/CodeGen/X86/win64_frame.ll | 334 +- .../CodeGen/X86/x86-repmov-copy-eflags.ll | 11 +- .../PowerPC/Inputs/ppc64_elf_module_b.s | 42 + .../RuntimeDyld/PowerPC/ppc64_elf.s | 47 + external/llvm/test/MC/ELF/cfi-large-model.s | 68 +- .../test/MC/Mips/unsupported-relocation.s | 13 + .../Transforms/DeadArgElim/musttail-caller.ll | 16 + .../Transforms/InstCombine/gep-addrspace.ll | 19 + .../Transforms/JumpThreading/header-succ.ll | 99 + .../test/Transforms/MergeFunc/inline-asm.ll | 53 + .../test/Transforms/MergeFunc/weak-small.ll | 16 + .../llvm/tools/llvm-config/CMakeLists.txt | 15 +- .../framework/Api/ExpectedExceptionData.cs | 3 + .../src/framework/Api/ResultState.cs | 10 + .../Attributes/ExpectedExceptionAttribute.cs | 1 + .../src/framework/Internal/ParameterSet.cs | 1 + .../src/framework/Internal/PropertyBag.cs | 1 + .../Internal/Results/TestCaseResult.cs | 1 + .../framework/Internal/Results/TestResult.cs | 1 + .../Internal/Results/TestSuiteResult.cs | 1 + .../Tests/ParameterizedFixtureSuite.cs | 2 + .../Tests/ParameterizedMethodSuite.cs | 10 +- .../src/framework/Internal/Tests/Test.cs | 4 + .../framework/Internal/Tests/TestAssembly.cs | 1 + .../framework/Internal/Tests/TestFixture.cs | 1 + .../framework/Internal/Tests/TestMethod.cs | 2 + .../src/framework/Internal/Tests/TestSuite.cs | 1 + .../src/framework/ObjectList.cs | 1 + .../framework/Runner/CommandLineOptions.cs | 60 + .../src/framework/Runner/TextUI.cs | 69 +- ...uild.Tasks.CodeAnalysis.dll.REMOVED.git-id | 0 .../Microsoft.CSharp.Core.targets | 0 ...icrosoft.CodeAnalysis.CSharp.Scripting.dll | Bin ...oft.CodeAnalysis.CSharp.dll.REMOVED.git-id | 0 ....CodeAnalysis.Scripting.dll.REMOVED.git-id | 0 ...odeAnalysis.VisualBasic.dll.REMOVED.git-id | 0 .../Microsoft.CodeAnalysis.dll.REMOVED.git-id | 0 ...aSymReader.Native.amd64.dll.REMOVED.git-id | 1 + ...DiaSymReader.Native.x86.dll.REMOVED.git-id | 1 + .../Microsoft.Managed.Core.targets | 0 .../Microsoft.VisualBasic.Core.targets | 0 .../Roslyn.Compilers.Extension.dll | Bin 0 -> 28024 bytes .../3.1.0-release/System.Buffers.dll | Bin 0 -> 27992 bytes ...m.Collections.Immutable.dll.REMOVED.git-id | 0 .../System.Memory.dll.REMOVED.git-id | 0 ...System.Numerics.Vectors.dll.REMOVED.git-id | 1 + ...tem.Reflection.Metadata.dll.REMOVED.git-id | 0 ...System.Runtime.CompilerServices.Unsafe.dll | Bin ...Text.Encoding.CodePages.dll.REMOVED.git-id | 1 + .../System.Threading.Tasks.Extensions.dll | Bin .../3.1.0-release}/VBCSCompiler.exe | Bin .../3.1.0-release}/VBCSCompiler.exe.config | 0 .../3.1.0-release}/csc.exe | Bin .../3.1.0-release}/csc.exe.config | 0 .../3.1.0-release}/csc.rsp | 0 .../3.1.0-release}/csi.exe | Bin .../3.1.0-release}/csi.exe.config | 0 .../3.1.0-release}/csi.rsp | 0 .../3.1.0-release}/vbc.exe | Bin .../3.1.0-release}/vbc.exe.config | 0 .../3.1.0-release}/vbc.rsp | 0 ...uild.Tasks.CodeAnalysis.dll.REMOVED.git-id | 2 +- ...icrosoft.CodeAnalysis.CSharp.Scripting.dll | Bin 31096 -> 30072 bytes ...oft.CodeAnalysis.CSharp.dll.REMOVED.git-id | 2 +- ....CodeAnalysis.Scripting.dll.REMOVED.git-id | 2 +- ...odeAnalysis.VisualBasic.dll.REMOVED.git-id | 2 +- .../Microsoft.CodeAnalysis.dll.REMOVED.git-id | 2 +- .../3.1.0/Roslyn.Compilers.Extension.pdb | Bin 0 -> 2512 bytes .../3.1.0/Roslyn.Compilers.Extension.pkgdef | Bin 0 -> 2244 bytes .../3.1.0/VBCSCompiler.exe | Bin 89472 -> 88960 bytes .../Microsoft.Net.Compilers/3.1.0/csc.exe | Bin 56176 -> 56680 bytes .../Microsoft.Net.Compilers/3.1.0/csi.exe | Bin 16240 -> 16240 bytes .../Microsoft.Net.Compilers/3.1.0/vbc.exe | Bin 56176 -> 56688 bytes ikvm-native/Makefile.in | 4 + llvm/Makefile.in | 14 +- llvm/build.mk | 10 +- m4/Makefile.in | 4 + man/Makefile.in | 4 + man/mono.1 | 32 +- mcs/build/common/Consts.cs | 4 +- mcs/build/common/SR.cs | 5 + mcs/build/common/basic-profile-check.cs | 4 +- ..._net_4_x_System.Data.Linq_test.dll.sources | 17 +- .../linux_net_4_x_corlib_test.dll.sources | 2 + mcs/build/profiles/build.make | 4 +- mcs/build/profiles/net_4_x.make | 9 - mcs/build/tests.make | 32 +- .../TypeForwarders.cs | 1 + .../TypeForwarders.cs | 2 + .../System.Reflection.DispatchProxy/Makefile | 2 +- ...ystem.Reflection.DispatchProxy.dll.sources | 3 +- .../System.Reflection/DispatchProxy.cs | 50 - .../TypeForwarders.cs} | 60 +- ...stem.Reflection.TypeExtensions.dll.sources | 4 - .../TypeForwarders.cs | 8 +- .../corefx/SR.cs | 8 - mcs/class/Facades/netstandard/AssemblyInfo.cs | 6 +- .../netstandard/Stubs.build.cs.REMOVED.git-id | 2 +- .../TypeForwarders.cs.REMOVED.git-id | 2 +- mcs/class/Facades/subdirs.make | 3 + mcs/class/I18N/CJK/GB18030Source.cs | 10 +- mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs | 8 + mcs/class/Makefile | 9 +- mcs/class/Microsoft.Build.Tasks/Makefile | 2 +- .../ToolLocationHelper.cs | 23 + .../Test/Evaluator/ExpressionsTest.cs | 1 + mcs/class/Mono.Cecil/Makefile | 2 +- .../Mono.Data.Sqlite_2.0/SQLiteCommand.cs | 3 + .../Test/SqliteDataReaderTest.cs | 137 +- mcs/class/Mono.Debugger.Soft/Makefile | 13 +- .../Mono.Debugger.Soft/AssemblyMirror.cs | 15 +- .../Mono.Debugger.Soft/Connection.cs | 13 +- .../Mono.Debugger.Soft/VirtualMachine.cs | 17 +- .../Test/dtest-excfilter.il | 10 +- .../Test/dtest.cs.REMOVED.git-id | 2 +- mcs/class/Mono.Profiler.Log/Makefile | 16 +- .../Mono.Profiler.Aot/ProfileData.cs | 16 + .../Mono.Profiler.Aot/ProfileReader.cs | 166 + .../Mono.Profiler.Aot/Records.cs | 101 + .../Mono.Profiler.Log.dll.sources | 6 +- .../Mono.Runtime.Tests_test.dll.sources | 13 +- mcs/class/Mono.Runtime.Tests/Test/JitTests.cs | 8 +- .../CryptoConvert.cs | 153 +- .../Mono.Security/Mono.Security/StrongName.cs | 18 +- .../KeyPairPersistenceTest.cs | 4 +- mcs/class/PEAPI/Metadata.cs.REMOVED.git-id | 2 +- .../ECDsaCertificateExtensions.cs | 6 + .../Test/System.Linq/EnumerableFixture.cs | 10 + .../Test/System.Linq/EnumerableTest.cs | 1 + .../System.Linq/ParallelEnumerableTests.cs | 1 + .../common_System.Core.dll.sources | 9 + mcs/class/System.Core/corefx/SR.missing.cs | 7 + .../monodroid_System.Core.dll.sources | 2 +- ...ouch_System.Core_xtest.dll.exclude.sources | 6 + .../net_4_x_System.Core.dll.sources | 1 - ...32_net_4_x_System.Core.dll.exclude.sources | 3 + .../win32_net_4_x_System.Core.dll.sources | 3 + ...inaot_System.Core_test.dll.exclude.sources | 1 + .../winaot_System.Core_test.dll.sources | 1 + .../Assembly/AssemblyInfo.cs | 139 +- mcs/class/System.Data.Linq/Makefile | 38 +- .../ReferenceSources/Error.cs | 1576 +++++++++ .../System.Data.Linq/ReferenceSources/SR.cs | 283 ++ .../ReferenceSources/Strings.cs | 317 ++ .../ReferenceSources/ThisAssembly.cs | 4 + .../System.Data.Linq.dll.sources | 427 +-- .../System.Data.Linq_test.dll.sources | 18 +- .../{src/DbLinq => }/Test/BinaryTest.cs | 274 +- .../{src/DbLinq => }/Test/DataContextTest.cs | 526 ++- .../{src/DbLinq => }/Test/EntitySetTest.cs | 881 ++--- .../{src/DbLinq => }/Test/NullProvider.cs | 0 .../{src/DbLinq => }/Test/PeopleTable.cs | 126 +- .../Test/Providers/DataContextTestBase.cs | 316 +- .../SqlServer}/MsSqlDataContextTest.cs | 253 +- .../{src/DbLinq => }/Test/TableTest.cs | 236 +- .../src/Build Northwind parameters.txt | 7 - .../Properties/AssemblyInfo.cs | 45 - .../src/DbLinq.Firebird/Test/TestBase.cs | 52 - .../DbLinq.Ingres/Properties/AssemblyInfo.cs | 44 - .../src/DbLinq.Ingres/Test/TestBase.cs | 52 - .../DbLinq.MySql/Properties/AssemblyInfo.cs | 44 - .../src/DbLinq.MySql/Test/TestBase.cs | 52 - .../DbLinq.Oracle/Properties/AssemblyInfo.cs | 44 - .../src/DbLinq.Oracle/Test/TestBase.cs | 52 - .../src/DbLinq.Oracle/Test/TestBase_odp.cs | 52 - .../Properties/AssemblyInfo.cs | 44 - .../src/DbLinq.PostgreSql/Test/TestBase.cs | 52 - .../Properties/AssemblyInfo.cs | 44 - .../src/DbLinq.SqlServer/Test/TestBase.cs | 54 - .../DbLinq.Sqlite/Properties/AssemblyInfo.cs | 44 - .../DbLinq.Sqlite/Test/DirectDataContext.cs | 62 - .../src/DbLinq.Sqlite/Test/TestBase.cs | 63 - .../src/DbLinq.Sqlite/Test/TestBase_mono.cs | 65 - .../DbLinq/Data/Linq/DataContext.Extended.cs | 84 - .../src/DbLinq/Data/Linq/ReadMe.txt | 1 - .../src/DbLinq/Data/Linq/Sugar/Notes.txt | 25 - .../src/DbLinq/Data/Linq/Table.Extended.cs | 86 - .../src/DbLinq/MonoTODOAttribute.cs | 120 - .../src/DbLinq/Properties/AssemblyInfo.cs | 132 - .../src/DbLinq/Schema/Dbml/DbmlSchema.xsd | Bin 21658 -> 0 bytes .../Sql2000Provider.cs | 38 - .../src/DbLinq/Test/AssemblyInfo.cs | 23 - .../DbLinq/Test/AttributeMappingSourceTest.cs | 82 - .../src/DbLinq/Test/CsvArrayAdapterTest.cs | 69 - .../Test/ExpressionEqualityComparerTest.cs | 129 - .../DbLinq/Test/IDataTypeExtensionsTest.cs | 124 - .../DbLinq/Test/Properties/AssemblyInfo.cs | 23 - .../src/DbLinq/Test/Providers/Attach.cs | 107 - .../DbLinq/Test/Providers/CompositePK_Test.cs | 199 -- .../src/DbLinq/Test/Providers/DataContext.cs | 77 - .../Test/Providers/DataLoadOptions_Test.cs | 131 - .../DbLinq/Test/Providers/DynamicLinqTest.cs | 337 -- .../Test/Providers/ExecuteCommand_Test.cs | 92 - .../Test/Providers/ExecuteQuery_Test.cs | 80 - .../Providers/Internals/ReflectionTest.cs | 43 - .../Providers/Linq_101_Samples/Advanced.cs | 216 -- .../Linq_101_Samples/Conversion_Operators.cs | 143 - .../Linq_101_Samples/Count_Sum_Min_Max_Avg.cs | 271 -- .../Linq_101_Samples/ExsistIn_Any_All.cs | 74 - .../Linq_101_Samples/GroupBy_Having.cs | 223 -- .../Providers/Linq_101_Samples/Inheritance.cs | 145 - .../Linq_101_Samples/Insert_Update_Delete.cs | 341 -- .../Test/Providers/Linq_101_Samples/Join.cs | 233 -- .../Linq101SamplesModifiedAttribute.cs | 19 - .../Test/Providers/Linq_101_Samples/Null.cs | 102 - .../Linq_101_Samples/Object Loading.cs | 174 - .../Linq_101_Samples/Object_Identity.cs | 79 - .../Linq_101_Samples/OptimisticConcurrence.cs | 423 --- .../Providers/Linq_101_Samples/OrderBy.cs | 125 - .../Test/Providers/Linq_101_Samples/Paging.cs | 139 - .../Linq_101_Samples/Select_Distinct.cs | 160 - .../Linq_101_Samples/String_Date_functions.cs | 325 -- .../Providers/Linq_101_Samples/Top_Bottom.cs | 80 - .../UnionAll_Union_Intersect.cs | 105 - .../Test/Providers/Linq_101_Samples/Views.cs | 87 - .../Test/Providers/Linq_101_Samples/Where.cs | 135 - .../src/DbLinq/Test/Providers/MetalTest.cs | 116 - .../src/DbLinq/Test/Providers/Program2Ing.cs | 51 - .../DbLinq/Test/Providers/Program2Mysql.cs | 45 - .../src/DbLinq/Test/Providers/Program2Pg.cs | 43 - .../DbLinq/Test/Providers/Program2SQLite.cs | 42 - .../src/DbLinq/Test/Providers/Program3Ora.cs | 32 - .../Test/Providers/Properties/AssemblyInfo.cs | 23 - .../src/DbLinq/Test/Providers/ReadTest.cs | 1215 ------- .../Test/Providers/ReadTest_AllTypes_MySql.cs | 165 - .../DbLinq/Test/Providers/ReadTest_Complex.cs | 633 ---- .../DbLinq/Test/Providers/ReadTest_GroupBy.cs | 322 -- .../Test/Providers/ReadTest_Operands.cs | 209 -- .../Test/Providers/ReadTest_Subquery.cs | 161 - .../Test/Providers/ReadTests_AnyCountFirst.cs | 352 -- .../Test/Providers/ReadTests_Conversions.cs | 138 - .../Providers/ReadTests_DateTimeFunctions.cs | 510 --- .../Test/Providers/ReadTests_EntitySet.cs | 422 --- .../DbLinq/Test/Providers/ReadTests_Join.cs | 336 -- .../DbLinq/Test/Providers/ReadTests_Maths.cs | 260 -- .../Providers/ReadTests_ReferenceLoading.cs | 163 - .../Providers/ReadTests_StringFunctions.cs | 699 ---- .../DbLinq/Test/Providers/StoredProcTest.cs | 129 - .../src/DbLinq/Test/Providers/Table.cs | 242 -- .../src/DbLinq/Test/Providers/TestBase.cs | 185 - .../src/DbLinq/Test/Providers/Transactions.cs | 148 - .../Providers/VerticalPartitioningTest.cs | 60 - .../src/DbLinq/Test/Providers/WriteTest.cs | 859 ----- .../Test/Providers/WriteTest_BulkInsert.cs | 95 - .../ColumnAttributeTest.cs | 64 - .../src/DbLinq/Test/TypeContextTest.cs | 61 - .../src/DbMetal/AllTypes all to Cs.txt | 7 - .../src/DbMetal/AllTypes to Cs.txt | 2 - .../src/DbMetal/DB all to Cs.txt | 8 - .../src/DbMetal/DB all to DBML.txt | 7 - .../System.Data.Linq/src/DbMetal/DB to Cs.txt | 3 - .../src/DbMetal/DB to DBML.txt | 2 - .../src/DbMetal/Properties/AssemblyInfo.cs | 44 - .../src/DbMetal/Test/AppRunner.cs | 108 - .../Test/CreateDbmlFromSqliteDbTest.cs | 55 - .../Test/CreateEntitiesFromSqliteDbTest.cs | 65 - .../src/DbMetal/Test/EnglishWordsTest.cs | 172 - .../src/DbMetal/Test/FrenchWordsTest.cs | 117 - .../src/DbMetal/Test/NameFormatterTest.cs | 161 - .../src/DbMetal/oraFieldRenames.xml | 44 - .../src/DbMetal/pgsqlFieldRenames.xml | 25 - .../src/Tools/NUnitRunner/Program.cs | 20 - .../NUnitRunner/Properties/AssemblyInfo.cs | 23 - .../Properties/Resources.Designer.cs | 71 - .../Properties/Settings.Designer.cs | 30 - .../src/Tools/TestNamespaceWriter/Program.cs | 133 - .../Properties/AssemblyInfo.cs | 23 - mcs/class/System.Data.Linq/src/readme.txt | 6 - .../System.Data.SqlTypes/SqlStringTest.cs | 3 + .../System.Data/DataSetTest.cs.REMOVED.git-id | 2 +- .../DataTableTest.cs.REMOVED.git-id | 2 +- mcs/class/System.Data/corefx.common.sources | 2 + .../corefx/DataReaderExtensions.cs | 183 + .../corefx/DbProviderFactories.mobile.cs | 21 + mcs/class/System.IO.Compression/Makefile | 7 +- .../System.IO.Compression.dll.sources | 8 + .../System.IO.Compression_xtest.dll.sources | 8 + .../corefx/BrotliStubs.cs | 52 + .../corefx/Interop.Libraries.cs | 11 + mcs/class/System.IO.Compression/corefx/SR.cs | 22 +- ..._System.IO.Compression.dll.exclude.sources | 3 + ..._net_4_x_System.IO.Compression.dll.sources | 5 + ...m.IO.Compression_xtest.dll.exclude.sources | 1 + ..._System.IO.Compression.dll.exclude.sources | 3 + .../winaot_System.IO.Compression.dll.sources | 1 + .../System.IdentityModel.Claims/ClaimTest.cs | 2 +- mcs/class/System.Net.Http.WebRequest/Makefile | 5 - .../Test/HttpClientTestHelpers.cs | 18 +- .../System.Net.Http/FunctionalTests/Makefile | 2 +- .../HttpClient.DefaultHandler.cs | 10 + .../HttpClientHandler.Legacy.cs | 3 + .../System.Net.Http/HttpClientHandler.wasm.cs | 148 + .../HttpRequestMessage.Mono.cs | 18 + mcs/class/System.Net.Http/Makefile | 8 - .../System.Net.Http/MonoWebRequestHandler.cs | 10 +- ...ils.Legacy.cs => PlatformHelper.Legacy.cs} | 9 +- ...er.cs => PlatformHelper.SocketsHandler.cs} | 9 +- .../System.Net.Http/StreamContent.Mono.cs | 19 - .../System.Net.Http/DelegatingHandler.cs | 3 + .../System.Net.Http/HttpClient.android.cs | 9 +- .../System.Net.Http/HttpClient.cs | 6 + .../System.Net.Http/HttpClient.wasm.cs | 11 +- .../HttpClientHandler.platformnotsupported.cs | 3 + .../System.Net.Http/HttpMethod.cs | 3 + .../System.Net.Http/HttpResponseMessage.cs | 10 + .../Test/HttpClientTestHelpers.cs | 18 +- .../System.Net.Http/DelegatingHandlerTest.cs | 22 + .../System.Net.Http/HttpClientHandlerTest.cs | 2 +- .../Test/System.Net.Http/HttpClientTest.cs | 54 +- .../HttpResponseMessageTest.cs | 2 +- .../corefx/ReadOnlyMemoryContent.cs | 13 + mcs/class/System.Net.Http/legacy.sources | 3 +- ...odroid_System.Net.Http.dll.exclude.sources | 1 + .../monodroid_System.Net.Http.dll.sources | 2 +- .../System.Net.Http/socketshandler.sources | 21 + .../unix_net_4_x_System.Net.Http.dll.sources | 21 +- .../wasm_System.Net.Http.dll.exclude.sources | 6 + .../wasm_System.Net.Http.dll.sources | 3 +- mcs/class/System.Private.CoreLib/Makefile | 22 + .../SafeWaitHandle.Unix.cs | 18 + .../Microsoft.Win32/UnsafeNativeMethods.cs | 46 + .../System.Private.CoreLib/Mono/MonoDomain.cs | 42 + .../Mono/MonoDomainSetup.cs | 41 + .../Mono/MonoListItem.cs | 9 + .../Mono/RuntimeHandles.cs | 236 ++ .../Resources/SR.common.cs | 38 + .../Resources/SR.cs.REMOVED.git-id | 1 + .../ArraySortHelper.cs | 12 + .../System.Collections.Generic/Comparer.cs | 46 + .../EqualityComparer.cs | 79 + .../System.Diagnostics/Debugger.cs | 34 + .../System.Diagnostics/StackFrame.cs | 50 + .../System.Diagnostics/StackTrace.cs | 82 + .../GlobalizationMode.Unix.cs | 33 + .../GlobalizationMode.Windows.cs | 13 + .../System.Globalization/GlobalizationMode.cs | 20 + .../System.IO/FileLoadException.cs | 10 + .../System.IO/Stream.cs | 9 + .../System.Private.CoreLib.csproj | 304 ++ .../System.Reflection.Emit/AssemblyBuilder.cs | 596 ++++ .../ConstructorBuilder.cs | 373 ++ .../ConstructorOnTypeBuilderInst.cs | 227 ++ .../CustomAttributeBuilder.cs | 552 +++ .../System.Reflection.Emit/DerivedTypes.cs | 470 +++ .../System.Reflection.Emit/DynamicILInfo.cs | 133 + .../System.Reflection.Emit/DynamicMethod.cs | 481 +++ .../DynamicMethod.notsupported.cs | 156 + .../System.Reflection.Emit/EnumBuilder.cs | 432 +++ .../System.Reflection.Emit/EventBuilder.cs | 143 + .../EventOnTypeBuilderInst.cs | 135 + .../System.Reflection.Emit/FieldBuilder.cs | 241 ++ .../FieldOnTypeBuilderInst.cs | 140 + .../GenericTypeParameterBuilder.cs | 476 +++ .../System.Reflection.Emit/ILGenerator.cs | 1174 +++++++ .../System.Reflection.Emit/LocalBuilder.cs | 111 + .../System.Reflection.Emit/MethodBuilder.cs | 743 ++++ .../MethodOnTypeBuilderInst.cs | 315 ++ .../System.Reflection.Emit/ModuleBuilder.cs | 938 +++++ .../System.Reflection.Emit/MonoArrayMethod.cs | 158 + .../ParameterBuilder.cs | 146 + .../System.Reflection.Emit/PropertyBuilder.cs | 218 ++ .../PropertyOnTypeBuilderInst.cs | 165 + .../System.Reflection.Emit/SignatureHelper.cs | 410 +++ .../System.Reflection.Emit/TypeBuilder.cs | 1890 ++++++++++ .../TypeBuilderInstantiation.cs | 512 +++ .../UnmanagedMarshal.cs | 138 + .../AssemblyExtensions.cs | 8 + .../System.Reflection/Assembly.cs | 96 + .../System.Reflection/AssemblyName.cs | 129 + .../System.Reflection/CustomAttributeData.cs | 160 + .../CustomAttributeTypedArgument.cs | 13 + .../System.Reflection/FieldInfo.cs | 105 + .../System.Reflection/MemberInfo.cs | 24 + .../System.Reflection/MethodBase.cs | 74 + .../System.Reflection/RuntimeAssembly.cs | 397 +++ .../System.Reflection/RuntimeEventInfo.cs | 196 ++ .../RuntimeExceptionHandlingClause.cs | 27 + .../System.Reflection/RuntimeFieldInfo.cs | 264 ++ .../RuntimeLocalVariableInfo.cs | 22 + .../System.Reflection/RuntimeMethodBody.cs | 39 + .../System.Reflection/RuntimeMethodInfo.cs | 892 +++++ .../System.Reflection/RuntimeModule.cs | 368 ++ .../System.Reflection/RuntimeParameterInfo.cs | 290 ++ .../System.Reflection/RuntimePropertyInfo.cs | 434 +++ .../ManifestBasedResourceGroveler.cs | 18 + .../DependentHandle.cs | 69 + .../JitHelpers.cs | 11 + .../RuntimeFeature.cs | 8 + .../RuntimeHelpers.cs | 140 + .../CriticalHandle.cs | 9 + .../GCHandle.cs | 19 + .../InteropExtensions.cs | 17 + .../System.Runtime.InteropServices/Marshal.cs | 451 +++ .../MarshalAsAttribute.cs | 11 + .../NativeLibrary.Unix.cs | 30 + .../NativeLibrary.Windows.cs | 24 + .../AssemblyDependencyResolver.cs | 19 + .../AssemblyLoadContext.cs | 65 + .../Context.cs | 40 + .../System.Runtime/GCSettings.cs | 25 + .../System.Runtime/RuntimeImports.cs | 28 + .../DynamicSecurityMethodAttribute.cs | 21 + .../System.Threading/EventWaitHandle.Unix.cs | 87 + .../System.Threading/Interlocked.cs | 75 + .../System.Threading/Monitor.cs | 173 + .../System.Threading/Mutex.Unix.cs | 68 + .../System.Threading/Overlapped.cs | 30 + .../PreAllocatedOverlapped.cs | 9 + .../System.Threading/RegisteredWaitHandle.cs | 91 + .../System.Threading/Semaphore.Unix.cs | 98 + .../System.Threading/StackCrawlMark.cs | 13 + .../System.Threading/Thread.cs | 316 ++ .../System.Threading/ThreadPool.cs | 131 + .../System.Threading/ThreadPoolBoundHandle.cs | 18 + .../System.Threading/WaitHandle.cs | 43 + .../System/AppContext.cs | 25 + .../System/ArgIterator.cs | 104 + .../System.Private.CoreLib/System/Array.cs | 598 ++++ .../System/Attribute.cs | 78 + .../System.Private.CoreLib/System/Buffer.cs | 68 + .../System.Private.CoreLib/System/Delegate.cs | 483 +++ .../System.Private.CoreLib/System/Enum.cs | 147 + .../System/Environment.Unix.cs | 44 + .../System/Environment.cs | 86 + .../System/Exception.cs | 121 + mcs/class/System.Private.CoreLib/System/GC.cs | 244 ++ .../System.Private.CoreLib/System/Math.cs | 95 + .../System.Private.CoreLib/System/MathF.cs | 89 + .../System/MissingMemberException.cs | 10 + .../System/ModuleHandle.cs | 142 + .../System/MulticastDelegate.cs | 262 ++ .../System/NotImplemented.cs | 34 + .../System.Private.CoreLib/System/Nullable.cs | 37 + .../System.Private.CoreLib/System/Object.cs | 22 + .../System/RuntimeArgumentHandle.cs | 12 + .../System/RuntimeFieldHandle.cs | 81 + .../System/RuntimeMethodHandle.cs | 86 + .../System/RuntimeType.cs | 772 ++++ .../System/RuntimeTypeHandle.cs | 302 ++ .../System.Private.CoreLib/System/String.cs | 197 ++ .../System.Private.CoreLib/System/Type.cs | 141 + .../System/TypeIdentifier.cs | 198 ++ .../System/TypeLoadException.cs | 26 + .../System/TypeNameParser.cs | 388 +++ .../System/TypedReference.cs | 104 + .../System/ValueType.cs | 73 + .../System/WeakReference.T.cs | 39 + .../System/WeakReference.cs | 44 + .../System/__ComObject.cs | 10 + .../ReferenceSources/DataProtector.cs | 224 ++ .../System.Security.dll.sources | 1 + .../KeyInfoRetrievalMethodTest.cs | 6 +- .../SignedInfoTest.cs | 6 +- .../XmlDsigC14NTransformTest.cs | 12 +- .../XmlDsigExcC14NTransformTest.cs | 12 +- .../common_System.Security.dll.sources | 1 + mcs/class/System.Security/corefx/SR.cs | 170 + ...l_System.Security_test.dll.exclude.sources | 1 + .../Atom10FeedFormatterTest.cs | 18 +- .../Atom10ItemFormatterTest.cs | 10 +- .../Rss20FeedFormatterTest.cs | 6 +- .../Rss20ItemFormatterTest.cs | 4 +- .../SyndicationItemTest.cs | 10 +- .../SyndicationLinkTest.cs | 22 +- .../UrlSyndicationContentTest.cs | 10 +- .../WebOperationContextTest.cs | 2 +- .../System.ServiceModel/ChannelFactory_1.cs | 2 +- .../HttpTransportBindingElementTest.cs | 4 +- ...ll_System.ServiceModel.dll.exclude.sources | 1 + ...rp_System.ServiceModel.dll.exclude.sources | 1 + ...id_System.ServiceModel.dll.exclude.sources | 1 + ...sm_System.ServiceModel.dll.exclude.sources | 1 + ...stem.Web.Services_test.dll.exclude.sources | 8 + ...inaot_System.Web.Services_test.dll.sources | 1 + .../SqliteMembershipProvider.cs | 2 +- .../System.Web.Caching/OutputCacheTest.cs | 4 +- .../Test/System.Web.Mail/MailMessageCas.cs | 4 +- .../Test/System.Web.Mail/SmtpMailCas.cs | 4 +- .../HtmlTableTest.cs | 4 +- .../MenuAdapterTest.cs | 2 +- .../LoginStatusTest.cs | 4 +- .../TableStyleTest.cs | 12 +- .../Test/System.Web.UI/ControlTest.cs | 8 +- .../System.Web.UI/CssStyleCollectionTest.cs | 16 +- .../Test/System.Web.UI/HtmlTextWriterTest.cs | 8 +- ...ntrols_HtmlAnchor_HtmlAnchor_Name.aspx.xml | 8 +- ...Column_DataGridColumn_FooterStyle.aspx.xml | 20 +- ...dColumn_DataGridColumn_FooterText.aspx.xml | 20 +- ...umn_DataGridColumn_HeaderImageUrl.aspx.xml | 20 +- ...Column_DataGridColumn_HeaderStyle.aspx.xml | 20 +- ...dColumn_DataGridColumn_HeaderText.aspx.xml | 20 +- ...idColumn_DataGridColumn_ItemStyle.aspx.xml | 20 +- ...umn_DataGridColumn_SortExpression.aspx.xml | 20 +- ...idColumn_DataGridColumn_ToString_.aspx.xml | 20 +- ...GridColumn_DataGridColumn_Visible.aspx.xml | 20 +- ...umn_HyperLinkColumn_DataTextField.aspx.xml | 82 +- ...erLinkColumn_DataTextFormatString.aspx.xml | 200 +- ...yperLinkColumn_InitializeCell_TIL.aspx.xml | 20 +- ...LinkColumn_HyperLinkColumn_Target.aspx.xml | 126 +- ...s_Repeater_Repeater_ItemDataBound.aspx.xml | 20 +- .../Test/standalone-tests/Menu_4.0_List.cs | 2 +- .../Unhandled_Exception_Global_Asax.cs | 2 +- .../Menu_4.0_List/App_Data/MenuData.xml | 6 +- .../Default.aspx | 2 +- .../test_04/global.asax.cs | 2 +- .../Test/standalone/adrotator/ads.xml | 8 +- .../Test/standalone/adrotator/adsplus.xml | 8 +- .../datagrid/datagrid-hyperlink-col.aspx | 2 +- .../standalone/htmlanchor/htmlanchor2.aspx | 6 +- .../DataGridViewColumn.cs | 2 + .../System.Windows.Forms/LineTag.cs | 2 +- .../ThemeWin32Classic.cs.REMOVED.git-id | 2 +- .../System.Windows.Forms/WebBrowser.cs | 2 +- .../XplatUIX11.cs.REMOVED.git-id | 2 +- .../ResXResourceReaderTest.cs | 2 +- .../DataGridViewColumnTest.cs | 12 + .../System.Windows.Forms/EventArgsTest.cs | 6 +- .../XmlArrayAttribute.cs | 3 +- .../XmlChoiceIdentifierAttribute.cs | 3 +- .../XmlSchemaImporter.cs | 7 +- .../XmlSerializerAssemblyAttribute.cs | 2 +- .../Test/System.Xml.Xsl/XslTransformTests.cs | 136 +- .../System.Xml.Xsl/XsltArgumentListCas.cs | 4 +- .../Test/System.Xml/XmlDocumentTests.cs | 2 +- .../Test/System.Xml/XmlResolverTest.cs | 12 +- .../Test/System.Xml/XmlSecureResolverCas.cs | 2 +- .../Test/System.Xml/XmlSecureResolverTests.cs | 8 +- .../Test/System.Xml/XmlUrlResolverTests.cs | 6 +- .../System.XML/Test/XmlFiles/xsd/77687.xsd | 2 +- .../System.XML/Test/XmlFiles/xsd/77687inc.xsd | 2 +- .../Test/System.Xaml/XamlLanguageTest.cs | 5 +- mcs/class/System/Assembly/AssemblyInfo.cs | 2 + mcs/class/System/Makefile | 12 +- .../System/Mono.AppleTls/AppleTlsContext.cs | 70 +- .../System/Mono.AppleTls/SecureTransport.cs | 4 +- mcs/class/System/Mono.Btls/MonoBtlsContext.cs | 25 +- mcs/class/System/Mono.Btls/MonoBtlsObject.cs | 4 + mcs/class/System/Mono.Btls/MonoBtlsSsl.cs | 1 + mcs/class/System/Mono.Btls/MonoBtlsSslCtx.cs | 30 + .../Mono.Net.Security/AsyncProtocolRequest.cs | 10 +- .../MobileAuthenticatedStream.cs | 24 +- .../Mono.Net.Security/MobileTlsContext.cs | 28 + .../MonoSslAuthenticationOptions.cs | 4 + .../DynamicRoleClaimProvider.cs | 21 + .../System.Diagnostics/PerformanceCounter.cs | 18 +- .../PerformanceCounterCategory.cs | 66 +- .../System/System.Diagnostics/Process.cs | 14 +- .../System.Diagnostics/ProcessStartInfo.cs | 14 + mcs/class/System/System.IO/DefaultWatcher.cs | 9 +- ...FileSystemWatcher.DefaultEventAttribute.cs | 16 + .../System/System.IO/FileSystemWatcher.cs | 6 + .../FreeBSDNetworkInterface.cs} | 74 +- .../MacOsNetworkInterface.cs | 18 +- .../UnixNetworkInterfaceFactory.cs | 4 +- .../SslApplicationProtocol.pns.cs | 24 + .../SslClientAuthenticationOptions.pns.cs | 20 + .../SslServerAuthenticationOptions.pns.cs | 20 + .../System/System.Net.Security/SslStream.cs | 29 +- .../SslStream.platformnotsupported.cs | 323 +- mcs/class/System/System.Net.Sockets/Socket.cs | 42 +- .../SocketAsyncEventArgs.cs | 5 + .../SocketTaskExtensions.cs | 19 + .../System/System.Net/BufferedReadStream.cs | 19 +- .../System/System.Net/HttpWebResponse.cs | 2 + .../HttpWebResponse.platformnotsupported.cs | 2 + .../System/System.Net/SocketPermission.cs | 4 +- .../System/System.Net/WebConnectionStream.cs | 11 +- .../System/System.Net/WebRequestStream.cs | 2 + .../System/System.Net/WebResponseStream.cs | 10 + .../SslProtocols.cs | 1 + .../X509Store.cs | 14 +- mcs/class/System/System/Platform.cs | 14 + mcs/class/System/System_xtest.dll.sources | 14 +- .../IntranetZoneCredentialPolicyTest.cs | 2 +- .../InstanceDescriptorTest.cs | 8 +- .../DateTimeConverterTests.cs | 7 +- .../Test/System.Diagnostics/ProcessTest.cs | 6 + .../System.Net.Sockets/MulticastOptionTest.cs | 17 +- .../System.Net.Sockets/NetworkStreamCas.cs | 2 +- .../System.Net.Sockets/NetworkStreamTest.cs | 2 +- .../Test/System.Net.Sockets/SocketCas.cs | 2 +- .../SocketTest.cs.REMOVED.git-id | 2 +- .../Test/System.Net.Sockets/TcpClientCas.cs | 6 +- .../Test/System.Net.Sockets/UdpClientTest.cs | 4 +- mcs/class/System/Test/System.Net/DnsCas.cs | 2 +- mcs/class/System/Test/System.Net/DnsTest.cs | 22 +- .../Test/System.Net/HttpListener2Test.cs | 6 +- .../Test/System.Net/HttpWebRequestCas.cs | 2 +- .../HttpWebRequestTest.cs.REMOVED.git-id | 2 +- .../System/Test/System.Net/IPAddressTest.cs | 17 +- .../Test/System.Net/NetworkCredentialTest.cs | 2 +- .../System.Net/ServicePointManagerTest.cs | 32 +- .../Test/System.Net/ServicePointTest.cs | 36 +- .../SocketPermissionAttributeTest.cs | 2 +- .../Test/System.Net/SocketPermissionTest.cs | 4 +- .../System/Test/System.Net/WebClientTest.cs | 64 +- .../Test/System.Net/WebClientTestAsync.cs | 15 +- .../System/Test/System.Net/WebProxyTest.cs | 20 +- .../System/Test/System.Net/WebRequestTest.cs | 6 +- .../X509SubjectKeyIdentifierExtensionTest.cs | 4 +- .../AsnEncodedDataTest.cs | 10 +- .../MatchTest.cs | 2 +- .../RegexTest.cs | 8 +- .../Test/System/FtpStyleUriParserTest.cs | 6 +- .../Test/System/GenericUriParserTest.cs | 6 +- .../Test/System/GopherStyleUriParserTest.cs | 6 +- .../Test/System/HttpStyleUriParserTest.cs | 6 +- .../Test/System/LdapStyleUriParserTest.cs | 6 +- .../Test/System/NetPipeStyleUriParserTest.cs | 6 +- .../Test/System/NetTcpStyleUriParserTest.cs | 6 +- .../Test/System/NewsStyleUriParserTest.cs | 8 +- .../System/Test/System/UriBuilderTest.cs | 12 +- mcs/class/System/Test/System/UriParserTest.cs | 72 +- mcs/class/System/Test/System/UriTest.cs | 70 +- mcs/class/System/Test/System/UriTest2.cs | 62 +- mcs/class/System/Test/System/UriTest3.cs | 84 +- .../Test/System/UriTypeConverterTest.cs | 2 +- .../Test/System/test-uri-relative-props.txt | 256 +- .../TestData/testclienteku.contoso.com.pfx | Bin 0 -> 5278 bytes .../Test/TestData/testnoeku.contoso.com.pfx | Bin 0 -> 5246 bytes .../testselfsignedservereku.contoso.com.pfx | Bin 0 -> 4247 bytes .../TestData/testservereku.contoso.com.pfx | Bin mcs/class/System/common.sources | 17 +- mcs/class/System/corefx/CertificateRequest.cs | 26 + .../System/corefx/X509SignatureGenerator.cs | 17 + mcs/class/System/macos_networkinfo.sources | 1 + mcs/class/System/mobile_System.dll.sources | 1 + ...monotouch_System_xtest.dll.exclude.sources | 6 + ...otouch_tv_System_xtest.dll.exclude.sources | 13 - .../System/monotouch_watch_System.dll.sources | 3 + ...uch_watch_System_xtest.dll.exclude.sources | 20 +- mcs/class/System/net_4_x_System.dll.sources | 2 + .../win32_net_4_x_System_test.dll.sources | 3 + ...2_net_4_x_System_xtest.dll.exclude.sources | 1 + .../System/winaot_System_test.dll.sources | 3 + ...c_net_4_5_System_xtest.dll.exclude.sources | 1 + .../Guid.cs} | 4 - .../corlib/LinkerDescriptor/mscorlib.xml | 72 +- mcs/class/corlib/Makefile | 29 +- .../MSCompatUnicodeTable.cs | 2 +- .../SimpleCollator.cs | 9 +- .../corlib/Mono.Interop/ComInteropProxy.cs | 3 - mcs/class/corlib/Mono/RuntimeHandles.cs | 152 +- mcs/class/corlib/Mono/RuntimeStructs.cs | 11 + .../corlib/ReferenceSources/CompareInfo.cs | 45 +- .../corlib/ReferenceSources/CultureData.cs | 80 +- .../corlib/ReferenceSources/JitHelpers.cs | 8 + .../corlib/ReferenceSources/RuntimeType.cs | 86 +- .../EventCounter.cs | 6 +- .../System.Diagnostics.Tracing/EventSource.cs | 4 + .../EventWrittenEventArgs.cs | 12 + .../corlib/System.Diagnostics/Debugger.cs | 2 - .../corlib/System.Diagnostics/StackTrace.cs | 6 +- .../System.Globalization/CultureInfo.cs | 6 +- .../IsolatedStorage.cs | 2 +- mcs/class/corlib/System.IO/DriveInfo.cs | 4 +- mcs/class/corlib/System.IO/FileStream.cs | 2 +- mcs/class/corlib/System.IO/Path.cs | 10 +- mcs/class/corlib/System.IO/Path.ns21.cs | 185 + .../System.Reflection.Emit/AssemblyBuilder.cs | 87 +- .../AssemblyBuilder.pns.cs | 14 + .../System.Reflection.Emit/DynamicMethod.cs | 39 +- .../System.Reflection.Emit/EventToken.cs | 4 +- .../System.Reflection.Emit/FieldToken.cs | 4 +- .../corlib/System.Reflection.Emit/Label.cs | 4 +- .../MethodBuilder.pns.cs | 1 - .../System.Reflection.Emit/MethodToken.cs | 4 +- .../System.Reflection.Emit/ModuleBuilder.cs | 73 +- .../ModuleBuilder.pns.cs | 16 +- .../corlib/System.Reflection.Emit/OpCode.cs | 6 +- .../System.Reflection.Emit/ParameterToken.cs | 4 +- .../PropertyBuilder.pns.cs | 4 +- .../System.Reflection.Emit/PropertyToken.cs | 4 +- .../System.Reflection.Emit/SignatureToken.cs | 4 +- .../System.Reflection.Emit/StringToken.cs | 4 +- .../System.Reflection.Emit/TypeBuilder.cs | 3 +- .../TypeBuilderInstantiation.cs | 8 +- .../System.Reflection.Emit/TypeToken.cs | 4 +- .../corlib/System.Reflection/Assembly.cs | 388 +-- .../corlib/System.Reflection/AssemblyName.cs | 47 +- .../System.Reflection/CustomAttributeData.cs | 11 + .../corlib/System.Reflection/EventInfo.cs | 4 + mcs/class/corlib/System.Reflection/Module.cs | 83 +- .../System.Reflection/RuntimeAssembly.cs | 462 ++- .../System.Reflection/RuntimeEventInfo.cs | 17 +- .../System.Reflection/RuntimeFieldInfo.cs | 32 +- .../System.Reflection/RuntimeMethodInfo.cs | 93 +- .../corlib/System.Reflection/RuntimeModule.cs | 162 +- .../System.Reflection/RuntimeParameterInfo.cs | 22 +- .../System.Reflection/RuntimePropertyInfo.cs | 42 +- .../RuntimeHelpers.cs | 20 + .../RuntimeInformation.cs | 132 +- .../System.Runtime.InteropServices/Marshal.cs | 94 +- .../AsyncResult.cs | 4 + .../CADMessages.cs | 12 +- .../MonoMethodMessage.cs | 20 +- .../System.Runtime.Remoting/Identity.cs | 2 +- .../RemotingConfiguration.cs | 13 +- .../RemotingServices.cs | 2 +- .../ApplicationTrust.cs | 8 + .../corlib/System.Threading/Interlocked.cs | 3 + mcs/class/corlib/System.Threading/Monitor.cs | 10 +- .../System.Threading/RegisteredWaitHandle.cs | 16 +- mcs/class/corlib/System.Threading/Thread.cs | 15 +- mcs/class/corlib/System.Threading/Timer.cs | 9 +- .../corlib/System.Threading/WaitHandle.cs | 10 +- mcs/class/corlib/System/AppDomain.cs | 31 +- mcs/class/corlib/System/AppDomainSetup.cs | 32 + mcs/class/corlib/System/ArgIterator.cs | 4 + mcs/class/corlib/System/Array.cs | 5 - mcs/class/corlib/System/Delegate.cs | 2 +- .../System/DelegateSerializationHolder.cs | 2 +- mcs/class/corlib/System/Environment.cs | 4 +- mcs/class/corlib/System/Guid.cs | 37 +- mcs/class/corlib/System/IntPtr.cs | 4 +- mcs/class/corlib/System/MarshalByRefObject.cs | 12 +- mcs/class/corlib/System/ModuleHandle.cs | 10 +- mcs/class/corlib/System/MonoCustomAttrs.cs | 27 +- mcs/class/corlib/System/MulticastDelegate.cs | 7 + mcs/class/corlib/System/RuntimeFieldHandle.cs | 12 +- mcs/class/corlib/System/RuntimeTypeHandle.cs | 81 +- .../corlib/System/TimeZoneInfo.MonoTouch.cs | 7 +- mcs/class/corlib/System/TimeZoneInfo.WinRT.cs | 11 +- mcs/class/corlib/System/TimeZoneInfo.cs | 3 +- mcs/class/corlib/System/TypeSpec.cs | 4 +- mcs/class/corlib/System/UIntPtr.cs | 4 +- mcs/class/corlib/System/__ComObject.cs | 2 +- .../Test/Mono/MonoNativePlatformType.cs | 2 + .../CollectionTest.cs | 1 - .../CaseInsensitiveComparerTest.cs | 1 + .../CaseInsensitiveHashCodeProviderTest.cs | 1 + .../Test/System.Collections/ComparerTest.cs | 2 + .../Test/System.Collections/HashtableTest.cs | 4 +- .../Test/System.Globalization/CalendarTest.cs | 14 +- .../System.Globalization/CompareInfoTest.cs | 1 + .../DateTimeFormatInfoTest.cs | 4 + .../EastAsianLunisolarCalendarTest.cs | 15 +- .../System.Globalization/IdnMappingTest.cs | 4 +- .../IsolatedStorageFileTest.cs | 1 + .../corlib/Test/System.IO/DirectoryTest.cs | 11 +- .../corlib/Test/System.IO/DriveInfoTest.cs | 20 +- .../corlib/Test/System.IO/FileInfoTest.cs | 3 + mcs/class/corlib/Test/System.IO/FileTest.cs | 6 +- .../AssemblyBuilderTest.cs | 16 +- .../Test/System.Reflection/AssemblyTest.cs | 24 +- .../Test/System.Reflection/FieldInfoTest.cs | 4 + .../System.Resources/ResourceManagerTest.cs | 1 + .../RuntimeFeatureTest.cs | 9 +- .../MarshalTest.cs | 4 +- .../BinaryFormatterTest.cs | 2 + .../SerializationTest.cs | 7 +- .../DSACryptoServiceProviderTest.cs | 3 +- ...ryptoServiceProviderTest.cs.REMOVED.git-id | 2 +- .../AllMembershipConditionTest.cs | 4 +- .../ApplicationDirectoryTest.cs | 4 +- .../SiteMembershipConditionTest.cs | 48 +- .../Test/System.Security.Policy/SiteTest.cs | 42 +- .../UrlMembershipConditionTest.cs | 104 +- .../Test/System.Security.Policy/UrlTest.cs | 34 +- .../Test/System.Security.Policy/ZoneTest.cs | 8 +- .../System.Security/SecurityExceptionCas.cs | 2 +- .../CancellationTokenSourceTest.cs | 3 +- .../Test/System.Threading/InterlockedTest.cs | 28 + .../ManualResetEventSlimTests.cs | 4 +- .../Test/System.Threading/ThreadPoolTest.cs | 6 +- .../Test/System.Threading/ThreadTest.cs | 4 + mcs/class/corlib/Test/System/ActivatorTest.cs | 13 +- .../corlib/Test/System/DateTimeOffsetTest.cs | 10 +- mcs/class/corlib/Test/System/DateTimeTest.cs | 26 +- .../System/DecimalTest2.cs.REMOVED.git-id | 2 +- mcs/class/corlib/Test/System/ExceptionTest.cs | 84 +- .../Test/System/StringTest.cs.REMOVED.git-id | 2 +- mcs/class/corlib/Test/System/TimeSpanTest.cs | 134 +- .../corlib/Test/System/TimeZoneInfoTest.cs | 6 +- mcs/class/corlib/corefx/AesCcm.cs | 19 + mcs/class/corlib/corefx/AesGcm.cs | 19 + mcs/class/corlib/corefx/CompareInfo.cs | 3 + mcs/class/corlib/corefx/DiagnosticCounter.cs | 18 + .../corefx/EnumeratorCancellationAttribute.cs | 14 + .../corlib/corefx/IncrementingEventCounter.cs | 13 + .../corefx/IncrementingPollingCounter.cs | 12 + .../corlib/corefx/PbeEncryptionAlgorithm.cs | 15 + mcs/class/corlib/corefx/PbeParameters.cs | 31 + mcs/class/corlib/corefx/PollingCounter.cs | 11 + .../corlib/corefx/RandomNumberGenerator.cs | 82 + mcs/class/corlib/corefx/RuntimeFeature.cs | 9 + mcs/class/corlib/corefx/SR.cs.REMOVED.git-id | 2 +- mcs/class/corlib/corefx/SR.missing.cs | 3 + mcs/class/corlib/corefx/Stream.cs | 20 + .../corefx/SwitchExpressionException.cs | 66 + .../corefx/TaskAsyncEnumerableExtensions.cs | 38 + mcs/class/corlib/corefx/TextWriter.cs | 11 + mcs/class/corlib/corefx/ThrowHelper.cs | 11 + .../corert/CancellationTokenRegistration.cs | 18 + .../corert/Decimal.DecCalc.cs.REMOVED.git-id | 2 +- .../corlib/corert/Decimal.cs.REMOVED.git-id | 2 +- .../corlib/corlib.dll.sources.REMOVED.git-id | 2 +- mcs/class/corlib/corlib_test.dll.sources | 2 + mcs/class/corlib/corlib_xtest.dll.sources | 5 + mcs/class/corlib/legacy/ActivationServices.cs | 22 + mcs/class/corlib/legacy/CallContext.cs | 43 + mcs/class/corlib/legacy/Context.cs | 28 + mcs/class/corlib/legacy/IRemotingTypeInfo.cs | 8 + mcs/class/corlib/legacy/MarshalByRefObject.cs | 33 + mcs/class/corlib/legacy/ObjectHandle.cs | 26 + mcs/class/corlib/legacy/RealProxy.cs | 65 + mcs/class/corlib/legacy/RemotingServices.cs | 29 + mcs/class/corlib/mobile_tests.exclude.sources | 2 - .../monotouch_corlib.dll.exclude.sources | 1 + mcs/class/corlib/monotouch_corlib.dll.sources | 2 +- ...ting_aot_common_corlib.dll.exclude.sources | 60 + .../testing_aot_common_corlib.dll.sources | 1 + ...aot_common_corlib_test.dll.exclude.sources | 29 + ...esting_aot_full_corlib.dll.exclude.sources | 1 + .../testing_aot_full_corlib.dll.sources | 1 + ...g_aot_full_corlib_test.dll.exclude.sources | 1 + ...aot_full_interp_corlib.dll.exclude.sources | 1 + ...testing_aot_full_interp_corlib.dll.sources | 1 + ...ull_interp_corlib_test.dll.exclude.sources | 1 + ...ull_interp_llvm_corlib.dll.exclude.sources | 1 - ...ng_aot_full_interp_llvm_corlib.dll.sources | 1 - ...ting_aot_hybrid_corlib.dll.exclude.sources | 1 + .../testing_aot_hybrid_corlib.dll.sources | 1 + ...aot_hybrid_corlib_test.dll.exclude.sources | 1 + .../corlib/wasm_corlib.dll.exclude.sources | 2 + mcs/class/corlib/wasm_corlib.dll.sources | 1 + .../wasm_corlib_test.dll.exclude.sources | 1 + .../win32_build_corlib.dll.exclude.sources | 18 + .../corlib/win32_build_corlib.dll.sources | 52 +- ...win32_monodroid_corlib.dll.exclude.sources | 28 +- .../corlib/win32_monodroid_corlib.dll.sources | 65 - .../win32_net_4_x_corlib.dll.exclude.sources | 8 +- .../corlib/win32_net_4_x_corlib.dll.sources | 10 - .../win32_net_4_x_corlib_test.dll.sources | 2 + .../corlib/winaot_corlib.dll.exclude.sources | 29 +- mcs/class/corlib/winaot_corlib.dll.sources | 3 +- .../corlib/winaot_corlib_test.dll.sources | 3 + .../corlib/xammac_corlib.dll.exclude.sources | 1 - .../Facades/System.Collections.Concurrent.dll | Bin .../Facades/System.Collections.dll | Bin .../Facades/System.Diagnostics.Debug.dll | Bin .../System.Diagnostics.FileVersionInfo.dll | Bin .../Facades/System.Diagnostics.Tools.dll | Bin .../Facades/System.Dynamic.Runtime.dll | Bin .../Facades/System.Globalization.dll | Bin .../System.IO.FileSystem.Primitives.dll | Bin .../Facades/System.IO.FileSystem.dll | Bin .../Facades/System.IO.dll | Bin .../Facades/System.Linq.Expressions.dll | Bin .../Facades/System.Linq.dll | Bin .../Facades/System.Reflection.Extensions.dll | Bin .../Facades/System.Reflection.Primitives.dll | Bin .../Facades/System.Reflection.dll | Bin 0 -> 5632 bytes .../System.Resources.ResourceManager.dll | Bin .../Facades/System.Runtime.Extensions.dll | Bin .../System.Runtime.InteropServices.dll | Bin 0 -> 7680 bytes .../Facades/System.Runtime.Numerics.dll | Bin .../Facades/System.Runtime.dll | Bin ...ystem.Security.Cryptography.Algorithms.dll | Bin ...ystem.Security.Cryptography.Primitives.dll | Bin .../System.Text.Encoding.CodePages.dll | Bin .../System.Text.Encoding.Extensions.dll | Bin .../Facades/System.Text.Encoding.dll | Bin .../System.Threading.Tasks.Parallel.dll | Bin .../Facades/System.Threading.Tasks.dll | Bin .../Facades/System.Threading.dll | Bin .../Facades/System.ValueTuple.dll | Bin .../Facades/System.Xml.ReaderWriter.dll | Bin .../Facades/System.Xml.XDocument.dll | Bin .../Facades/netstandard.dll.REMOVED.git-id | 1 + .../Mono.Cecil.dll.REMOVED.git-id | 1 + .../Mono.Security.dll.REMOVED.git-id | 1 + .../System.Configuration.dll.REMOVED.git-id | 1 + .../System.Core.dll.REMOVED.git-id | 1 + .../System.IO.Compression.dll.REMOVED.git-id | 1 + .../System.Numerics.dll.REMOVED.git-id | 1 + .../System.Security.dll.REMOVED.git-id | 1 + .../System.Xml.Linq.dll.REMOVED.git-id | 1 + .../System.Xml.dll.REMOVED.git-id | 1 + .../System.dll.REMOVED.git-id | 1 + .../mcs.exe.REMOVED.git-id | 1 + .../mscorlib.dll.REMOVED.git-id | 1 + .../Facades/System.Reflection.dll | Bin 5632 -> 0 bytes .../System.Runtime.InteropServices.dll | Bin 7680 -> 0 bytes .../Facades/netstandard.dll.REMOVED.git-id | 1 - .../Mono.Cecil.dll.REMOVED.git-id | 1 - .../Mono.Security.dll.REMOVED.git-id | 1 - .../System.Configuration.dll.REMOVED.git-id | 1 - .../System.Core.dll.REMOVED.git-id | 1 - .../System.IO.Compression.dll | Bin 99328 -> 0 bytes .../System.Numerics.dll.REMOVED.git-id | 1 - .../System.Security.dll.REMOVED.git-id | 1 - .../System.Xml.Linq.dll.REMOVED.git-id | 1 - .../System.Xml.dll.REMOVED.git-id | 1 - .../System.dll.REMOVED.git-id | 1 - .../mcs.exe.REMOVED.git-id | 1 - .../mscorlib.dll.REMOVED.git-id | 1 - .../Facades/System.Collections.Concurrent.dll | Bin .../Facades/System.Collections.dll | Bin .../Facades/System.Diagnostics.Debug.dll | Bin .../System.Diagnostics.FileVersionInfo.dll | Bin .../Facades/System.Diagnostics.Tools.dll | Bin .../Facades/System.Dynamic.Runtime.dll | Bin .../Facades/System.Globalization.dll | Bin .../System.IO.FileSystem.Primitives.dll | Bin .../Facades/System.IO.FileSystem.dll | Bin .../Facades/System.IO.dll | Bin .../Facades/System.Linq.Expressions.dll | Bin .../Facades/System.Linq.dll | Bin .../Facades/System.Reflection.Extensions.dll | Bin .../Facades/System.Reflection.Primitives.dll | Bin .../Facades/System.Reflection.dll | Bin 0 -> 5632 bytes .../System.Resources.ResourceManager.dll | Bin .../Facades/System.Runtime.Extensions.dll | Bin .../System.Runtime.InteropServices.dll | Bin 0 -> 7680 bytes .../Facades/System.Runtime.Numerics.dll | Bin .../Facades/System.Runtime.dll | Bin ...ystem.Security.Cryptography.Algorithms.dll | Bin ...ystem.Security.Cryptography.Primitives.dll | Bin .../System.Text.Encoding.CodePages.dll | Bin .../System.Text.Encoding.Extensions.dll | Bin .../Facades/System.Text.Encoding.dll | Bin .../System.Threading.Tasks.Parallel.dll | Bin .../Facades/System.Threading.Tasks.dll | Bin .../Facades/System.Threading.dll | Bin .../Facades/System.ValueTuple.dll | Bin .../Facades/System.Xml.ReaderWriter.dll | Bin .../Facades/System.Xml.XDocument.dll | Bin .../Facades/netstandard.dll.REMOVED.git-id | 1 + .../Mono.Cecil.dll.REMOVED.git-id | 1 + .../Mono.Security.dll.REMOVED.git-id | 1 + .../System.Configuration.dll.REMOVED.git-id | 1 + .../System.Core.dll.REMOVED.git-id | 1 + .../System.IO.Compression.dll.REMOVED.git-id | 1 + .../System.Numerics.dll.REMOVED.git-id | 1 + .../System.Security.dll.REMOVED.git-id | 1 + .../System.Xml.Linq.dll.REMOVED.git-id | 1 + .../System.Xml.dll.REMOVED.git-id | 1 + .../System.dll.REMOVED.git-id | 1 + .../mcs.exe.REMOVED.git-id | 1 + .../mscorlib.dll.REMOVED.git-id | 1 + .../Facades/System.Reflection.dll | Bin 5632 -> 0 bytes .../System.Runtime.InteropServices.dll | Bin 7680 -> 0 bytes .../Facades/netstandard.dll.REMOVED.git-id | 1 - .../Mono.Cecil.dll.REMOVED.git-id | 1 - .../Mono.Security.dll.REMOVED.git-id | 1 - .../System.Configuration.dll.REMOVED.git-id | 1 - .../System.Core.dll.REMOVED.git-id | 1 - .../System.IO.Compression.dll | Bin 99328 -> 0 bytes .../System.Numerics.dll.REMOVED.git-id | 1 - .../System.Security.dll.REMOVED.git-id | 1 - .../System.Xml.Linq.dll.REMOVED.git-id | 1 - .../System.Xml.dll.REMOVED.git-id | 1 - .../System.dll.REMOVED.git-id | 1 - .../mcs.exe.REMOVED.git-id | 1 - .../mscorlib.dll.REMOVED.git-id | 1 - .../Facades/System.Collections.Concurrent.dll | Bin .../Facades/System.Collections.dll | Bin .../Facades/System.Diagnostics.Debug.dll | Bin .../System.Diagnostics.FileVersionInfo.dll | Bin .../Facades/System.Diagnostics.Tools.dll | Bin .../Facades/System.Dynamic.Runtime.dll | Bin .../Facades/System.Globalization.dll | Bin .../System.IO.FileSystem.Primitives.dll | Bin .../Facades/System.IO.FileSystem.dll | Bin .../Facades/System.IO.dll | Bin .../Facades/System.Linq.Expressions.dll | Bin .../Facades/System.Linq.dll | Bin .../Facades/System.Reflection.Extensions.dll | Bin .../Facades/System.Reflection.Primitives.dll | Bin .../Facades/System.Reflection.dll | Bin 0 -> 5632 bytes .../System.Resources.ResourceManager.dll | Bin .../Facades/System.Runtime.Extensions.dll | Bin .../System.Runtime.InteropServices.dll | Bin 0 -> 7680 bytes .../Facades/System.Runtime.Numerics.dll | Bin .../Facades/System.Runtime.dll | Bin ...ystem.Security.Cryptography.Algorithms.dll | Bin ...ystem.Security.Cryptography.Primitives.dll | Bin .../System.Text.Encoding.CodePages.dll | Bin .../System.Text.Encoding.Extensions.dll | Bin .../Facades/System.Text.Encoding.dll | Bin .../System.Threading.Tasks.Parallel.dll | Bin .../Facades/System.Threading.Tasks.dll | Bin .../Facades/System.Threading.dll | Bin .../Facades/System.ValueTuple.dll | Bin .../Facades/System.Xml.ReaderWriter.dll | Bin .../Facades/System.Xml.XDocument.dll | Bin .../Facades/netstandard.dll.REMOVED.git-id | 1 + .../Mono.Cecil.dll.REMOVED.git-id | 1 + .../Mono.Security.dll.REMOVED.git-id | 1 + .../System.Configuration.dll.REMOVED.git-id | 1 + .../System.Core.dll.REMOVED.git-id | 1 + .../System.IO.Compression.dll.REMOVED.git-id | 1 + .../System.Numerics.dll.REMOVED.git-id | 1 + .../System.Security.dll.REMOVED.git-id | 1 + .../System.Xml.Linq.dll.REMOVED.git-id | 1 + .../System.Xml.dll.REMOVED.git-id | 1 + .../System.dll.REMOVED.git-id | 1 + .../mcs.exe.REMOVED.git-id | 1 + .../mscorlib.dll.REMOVED.git-id | 1 + .../Facades/System.Reflection.dll | Bin 5632 -> 0 bytes .../System.Runtime.InteropServices.dll | Bin 7680 -> 0 bytes .../Facades/netstandard.dll.REMOVED.git-id | 1 - .../Mono.Cecil.dll.REMOVED.git-id | 1 - .../Mono.Security.dll.REMOVED.git-id | 1 - .../System.Configuration.dll.REMOVED.git-id | 1 - .../System.Core.dll.REMOVED.git-id | 1 - .../System.IO.Compression.dll | Bin 99328 -> 0 bytes .../System.Numerics.dll.REMOVED.git-id | 1 - .../System.Security.dll.REMOVED.git-id | 1 - .../System.Xml.Linq.dll.REMOVED.git-id | 1 - .../System.Xml.dll.REMOVED.git-id | 1 - .../System.dll.REMOVED.git-id | 1 - .../mcs.exe.REMOVED.git-id | 1 - .../mscorlib.dll.REMOVED.git-id | 1 - .../Facades/System.Collections.Concurrent.dll | Bin .../Facades/System.Collections.dll | Bin .../Facades/System.Diagnostics.Debug.dll | Bin .../System.Diagnostics.FileVersionInfo.dll | Bin .../Facades/System.Diagnostics.Tools.dll | Bin .../Facades/System.Dynamic.Runtime.dll | Bin .../Facades/System.Globalization.dll | Bin .../System.IO.FileSystem.Primitives.dll | Bin .../Facades/System.IO.FileSystem.dll | Bin .../Facades/System.IO.dll | Bin .../Facades/System.Linq.Expressions.dll | Bin .../Facades/System.Linq.dll | Bin .../Facades/System.Reflection.Extensions.dll | Bin .../Facades/System.Reflection.Primitives.dll | Bin .../Facades/System.Reflection.dll | Bin 0 -> 5632 bytes .../System.Resources.ResourceManager.dll | Bin .../Facades/System.Runtime.Extensions.dll | Bin .../System.Runtime.InteropServices.dll | Bin 0 -> 7680 bytes .../Facades/System.Runtime.Numerics.dll | Bin .../Facades/System.Runtime.dll | Bin ...ystem.Security.Cryptography.Algorithms.dll | Bin ...ystem.Security.Cryptography.Primitives.dll | Bin .../System.Text.Encoding.CodePages.dll | Bin .../System.Text.Encoding.Extensions.dll | Bin .../Facades/System.Text.Encoding.dll | Bin .../System.Threading.Tasks.Parallel.dll | Bin .../Facades/System.Threading.Tasks.dll | Bin .../Facades/System.Threading.dll | Bin .../Facades/System.ValueTuple.dll | Bin .../Facades/System.Xml.ReaderWriter.dll | Bin .../Facades/System.Xml.XDocument.dll | Bin .../Facades/netstandard.dll.REMOVED.git-id | 1 + .../Mono.Cecil.dll.REMOVED.git-id | 1 + .../Mono.Security.dll.REMOVED.git-id | 1 + .../System.Configuration.dll.REMOVED.git-id | 1 + .../System.Core.dll.REMOVED.git-id | 1 + .../System.IO.Compression.dll.REMOVED.git-id | 1 + .../System.Numerics.dll.REMOVED.git-id | 1 + .../System.Security.dll.REMOVED.git-id | 1 + .../System.Xml.Linq.dll.REMOVED.git-id | 1 + .../System.Xml.dll.REMOVED.git-id | 1 + .../System.dll.REMOVED.git-id | 1 + .../mcs.exe.REMOVED.git-id | 1 + .../mscorlib.dll.REMOVED.git-id | 1 + .../Facades/System.Reflection.dll | Bin 5632 -> 0 bytes .../System.Runtime.InteropServices.dll | Bin 7680 -> 0 bytes .../Facades/netstandard.dll.REMOVED.git-id | 1 - .../Mono.Cecil.dll.REMOVED.git-id | 1 - .../Mono.Security.dll.REMOVED.git-id | 1 - .../System.Configuration.dll.REMOVED.git-id | 1 - .../System.Core.dll.REMOVED.git-id | 1 - .../System.IO.Compression.dll | Bin 99328 -> 0 bytes .../System.Numerics.dll.REMOVED.git-id | 1 - .../System.Security.dll.REMOVED.git-id | 1 - .../System.Xml.Linq.dll.REMOVED.git-id | 1 - .../System.Xml.dll.REMOVED.git-id | 1 - .../System.dll.REMOVED.git-id | 1 - .../mcs.exe.REMOVED.git-id | 1 - .../mscorlib.dll.REMOVED.git-id | 1 - .../Security/Cryptography/ECDiffieHellman.cs | 8 + .../System/Security/Cryptography/ECDsa.cs | 99 + .../MethodCallTranslator.cs.REMOVED.git-id | 2 +- .../SqlClient/Query/SqlParameterizer.cs | 4 + .../System.Data.Linq/misc/SecurityUtils.cs | 5 +- .../System/Data/Common/DbProviderFactories.cs | 17 +- .../System/Data/DataSysAttribute.cs | 2 +- .../System/Xml/Core/XmlValidatingReader.cs | 2 +- .../System/Xml/Schema/XmlSchemaCollection.cs | 2 +- .../Serialization/XmlAnyAttributeAttribute.cs | 2 +- .../XmlNamespaceDeclarationsAttribute.cs | 2 +- .../system/diagnostics/CorrelationManager.cs | 12 +- .../system/diagnostics/TraceEventCache.cs | 4 + .../net/System/Net/GlobalProxySelection.cs | 2 +- .../System/net/System/Net/SocketAddress.cs | 8 + .../net/System/Net/Sockets/UDPClient.cs | 14 +- .../System/net/System/Net/WebRequest.cs | 7 - .../System/net/System/Net/cookiecontainer.cs | 4 +- .../diagnosticts/Process.cs.REMOVED.git-id | 2 +- .../ExcludeFromCodeCoverageAttribute.cs | 2 +- .../mscorlib/system/activator.cs | 4 +- .../mscorlib/system/exception.cs | 1 - .../referencesource/mscorlib/system/gc.cs | 2 +- .../system/globalization/calendardata.cs | 12 +- .../system/globalization/japanesecalendar.cs | 28 +- .../mscorlib/system/io/binaryreader.cs | 14 + .../mscorlib/system/io/binarywriter.cs | 42 +- .../system/reflection/emit/methodbuilder.cs | 2 +- .../mscorlib/system/reflection/mdimport.cs | 37 + .../mscorlib/system/rttype.cs.REMOVED.git-id | 2 +- .../runtime/interopservices/attributes.cs | 2 +- .../formatters/binary/binaryformatter.cs | 6 +- .../formatters/binary/binaryobjectreader.cs | 6 +- .../runtime/serialization/streamingcontext.cs | 6 +- .../system/security/claims/ClaimsPrincipal.cs | 6 + .../cryptography/asymmetricalgorithm.cs | 26 + .../system/security/cryptography/dsa.cs | 126 + .../system/security/cryptography/rsa.cs | 174 + .../system/threading/executioncontext.cs | 2 +- .../mscorlib/system/threading/threadpool.cs | 18 +- .../mscorlib/system/threading/waithandle.cs | 10 +- .../system/timezoneinfo.cs.REMOVED.git-id | 2 +- .../mscorlib/system/typedreference.cs | 2 +- mcs/class/test-helpers/Configuration.Http.cs | 8 +- mcs/class/test-helpers/PlatformDetection.cs | 8 +- mcs/errors/cs1503-18.cs | 13 - mcs/ilasm/Driver.cs | 2 +- mcs/ilasm/codegen/GenericArguments.cs | 6 +- mcs/ilasm/codegen/PrimitiveTypeRef.cs | 2 + mcs/ilasm/codegen/TypeDef.cs | 5 - mcs/ilasm/codegen/TypeManager.cs | 6 +- mcs/ilasm/parser/ILParser.jay.REMOVED.git-id | 2 +- mcs/jay/Makefile | 5 +- mcs/jay/jay.vcxproj | 214 +- mcs/mcs/mcs.csproj | 462 +-- mcs/mcs/mcs.sln | 46 +- mcs/mcs/tuples.cs | 63 +- ...uild.Tasks.CodeAnalysis.dll.REMOVED.git-id | 1 + .../Microsoft.CSharp.Core.targets | 144 + ...icrosoft.CodeAnalysis.CSharp.Scripting.dll | Bin 0 -> 31096 bytes ...oft.CodeAnalysis.CSharp.dll.REMOVED.git-id | 1 + ....CodeAnalysis.Scripting.dll.REMOVED.git-id | 1 + ...odeAnalysis.VisualBasic.dll.REMOVED.git-id | 1 + .../Microsoft.CodeAnalysis.dll.REMOVED.git-id | 1 + .../Microsoft.Managed.Core.targets | 155 + .../Microsoft.VisualBasic.Core.targets | 134 + ...m.Collections.Immutable.dll.REMOVED.git-id | 1 + .../System.Memory.dll.REMOVED.git-id | 1 + ...tem.Reflection.Metadata.dll.REMOVED.git-id | 1 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23600 bytes .../System.Threading.Tasks.Extensions.dll | Bin 0 -> 33008 bytes .../3.1.0-release/VBCSCompiler.exe | Bin 0 -> 89472 bytes .../3.1.0-release/VBCSCompiler.exe.config | 82 + .../3.1.0-release/csc.exe | Bin 0 -> 56176 bytes .../3.1.0-release/csc.exe.config | 71 + .../3.1.0-release/csc.rsp | 46 + .../3.1.0-release/csi.exe | Bin 0 -> 16240 bytes .../3.1.0-release/csi.exe.config | 81 + .../3.1.0-release/csi.rsp | 15 + .../3.1.0-release/vbc.exe | Bin 0 -> 56176 bytes .../3.1.0-release/vbc.exe.config | 71 + .../3.1.0-release/vbc.rsp | 55 + mcs/tests/test-tuple-11.cs | 20 + mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id | 2 +- mcs/tools/Makefile | 4 +- mcs/tools/gensources/Makefile | 4 + mcs/tools/linker/Makefile | 23 +- mcs/tools/linker/monolinker.exe.sources | 2 + mcs/tools/mono-symbolicate/Makefile | 10 +- .../security/certview/CertificateViewer.cs | 2 +- mcs/tools/sqlmetal/Makefile | 8 +- mcs/tools/sqlmetal/sqlmetal.exe.sources | 401 ++- .../DbLinq.Firebird/FirebirdDataContext.cs | 0 .../FirebirdExpressionTranslator.cs | 0 .../FirebirdSchemaLoader.Columns.cs | 0 .../FirebirdSchemaLoader.Constraints.cs | 0 .../FirebirdSchemaLoader.StoredProcedures.cs | 0 .../FirebirdSchemaLoader.Tables.cs | 0 .../DbLinq.Firebird/FirebirdSchemaLoader.cs | 0 .../DbLinq.Firebird/FirebirdSqlProvider.cs | 0 .../src/DbLinq.Firebird/FirebirdVendor.cs | 0 .../src/DbLinq.Ingres/IngresDataContext.cs | 0 .../IngresSchemaLoader.Columns.cs | 0 .../IngresSchemaLoader.Constraints.cs | 0 .../IngresSchemaLoader.StoredProcedures.cs | 0 .../IngresSchemaLoader.Tables.cs | 0 .../src/DbLinq.Ingres/IngresSchemaLoader.cs | 0 .../src/DbLinq.Ingres/IngresSqlProvider.cs | 0 .../src/DbLinq.Ingres/IngresVendor.cs | 0 .../src/DbLinq.MySql/MySqlDataContext.cs | 0 .../DbLinq.MySql/MySqlSchemaLoader.Columns.cs | 0 .../MySqlSchemaLoader.Constraints.cs | 0 .../MySqlSchemaLoader.StoredProcedures.cs | 0 .../DbLinq.MySql/MySqlSchemaLoader.Tables.cs | 0 .../src/DbLinq.MySql/MySqlSchemaLoader.cs | 0 .../src/DbLinq.MySql/MySqlSqlProvider.cs | 0 .../sqlmetal}/src/DbLinq.MySql/MySqlVendor.cs | 0 .../src/DbLinq.Oracle/OracleDataContext.cs | 0 .../OracleSchemaLoader.Columns.cs | 0 .../OracleSchemaLoader.Constraints.cs | 0 .../OracleSchemaLoader.StoredProcedures.cs | 0 .../OracleSchemaLoader.Tables.cs | 0 .../src/DbLinq.Oracle/OracleSchemaLoader.cs | 0 .../src/DbLinq.Oracle/OracleSqlProvider.cs | 0 .../src/DbLinq.Oracle/OracleVendor.cs | 0 .../src/DbLinq.PostgreSql/PgsqlDataContext.cs | 0 .../PgsqlSchemaLoader.Columns.cs | 0 .../PgsqlSchemaLoader.Constraints.cs | 0 .../PgsqlSchemaLoader.StoredProcedures.cs | 0 .../PgsqlSchemaLoader.Tables.cs | 0 .../DbLinq.PostgreSql/PgsqlSchemaLoader.cs | 0 .../src/DbLinq.PostgreSql/PgsqlSqlProvider.cs | 0 .../src/DbLinq.PostgreSql/PgsqlVendor.cs | 0 .../sqlmetal}/src/DbLinq.ProductInfo.cs | 0 .../DbLinq.SqlServer/SqlServerDataContext.cs | 0 .../SqlServerExpressionTranslator.cs | 0 .../DbLinq.SqlServer/SqlServerSchemaLoader.cs | 0 .../DbLinq.SqlServer/SqlServerSqlProvider.cs | 0 .../SqlServerTypeConversions.cs | 0 .../src/DbLinq.SqlServer/SqlServerVendor.cs | 0 .../src/DbLinq.Sqlite/Schema/DataCommand.cs | 0 .../src/DbLinq.Sqlite/SqliteDataContext.cs | 0 .../SqliteSchemaLoader.Columns.cs | 0 .../SqliteSchemaLoader.Constraints.cs | 0 .../SqliteSchemaLoader.Tables.cs | 0 .../src/DbLinq.Sqlite/SqliteSchemaLoader.cs | 0 .../src/DbLinq.Sqlite/SqliteSqlProvider.cs | 0 .../src/DbLinq.Sqlite/SqliteVendor.cs | 0 .../sqlmetal}/src/DbLinq.snk | Bin .../src/DbLinq/Data/Linq/ChangeAction.cs | 0 .../src/DbLinq/Data/Linq/ChangeSet.cs | 0 .../Data/Linq/DBLinqExtendedAttributte.cs | 0 .../src/DbLinq/Data/Linq/DataContext.cs | 0 .../src/DbLinq/Data/Linq/DataLoadOptions.cs | 0 .../Data/Linq/Database/IDatabaseContext.cs | 0 .../Linq/Database/IDatabaseTransaction.cs | 0 .../Linq/Database/ITransactionalCommand.cs | 0 .../Implementation/DatabaseConnection.cs | 0 .../Implementation/DatabaseContext.cs | 0 .../Implementation/DatabaseTransaction.cs | 0 .../Implementation/TransactionalCommand.cs | 0 .../src/DbLinq/Data/Linq/EntityRef.cs | 0 .../src/DbLinq/Data/Linq/EntitySet.cs | 0 .../src/DbLinq/Data/Linq/IExecuteResult.cs | 0 .../Data/Linq/IMemberModificationHandler.cs | 0 .../sqlmetal}/src/DbLinq/Data/Linq/ITable.cs | 0 .../src/DbLinq/Data/Linq/IVendorProvider.cs | 0 .../Data/Linq/Identity/IIdentityProvider.cs | 0 .../Data/Linq/Identity/IIdentityReader.cs | 0 .../Linq/Identity/IIdentityReaderFactory.cs | 0 .../DbLinq/Data/Linq/Identity/IdentityKey.cs | 0 .../Implementation/IdentityProviderReader.cs | 0 .../Identity/Implementation/IdentityReader.cs | 0 .../Implementation/IdentityReaderFactory.cs | 0 .../Implementation/DisabledEntityTracker.cs | 0 .../Data/Linq/Implementation/EntityState.cs | 0 .../Data/Linq/Implementation/EntityTrack.cs | 0 .../Data/Linq/Implementation/EntityTracker.cs | 0 .../Linq/Implementation/IEntityTracker.cs | 0 .../MemberModificationHandler.cs | 0 .../Data/Linq/Implementation/QueryProvider.cs | 0 .../Linq/Implementation/VendorProvider.cs | 0 .../Linq/Mapping/AttributeMappingSource.cs | 0 .../AttributedAbstractMetaDataMember.cs | 0 .../AttributedAssociationMetaDataMember.cs | 0 .../Mapping/AttributedColumnMetaDataMember.cs | 0 .../Linq/Mapping/AttributedMetaAssociation.cs | 0 .../Linq/Mapping/AttributedMetaFunction.cs | 0 .../Data/Linq/Mapping/AttributedMetaModel.cs | 0 .../Data/Linq/Mapping/AttributedMetaTable.cs | 0 .../Data/Linq/Mapping/AttributedMetaType.cs | 0 .../Data/Linq/Mapping/LambdaMetaAccessor.cs | 0 .../Data/Linq/Mapping/MappingContext.cs | 0 .../Data/Linq/Mapping/XmlMappingSource.cs | 0 .../src/DbLinq/Data/Linq/RefreshMode.cs | 0 .../DbLinq/Data/Linq/Sql/SqlLiteralPart.cs | 0 .../DbLinq/Data/Linq/Sql/SqlParameterPart.cs | 0 .../src/DbLinq/Data/Linq/Sql/SqlPart.cs | 0 .../src/DbLinq/Data/Linq/Sql/SqlStatement.cs | 0 .../Data/Linq/Sql/SqlStatementBuilder.cs | 0 .../Data/Linq/SqlClient/FirebirdProvider.cs | 0 .../Data/Linq/SqlClient/IngresProvider.cs | 0 .../Data/Linq/SqlClient/MySqlProvider.cs | 0 .../Data/Linq/SqlClient/OracleProvider.cs | 0 .../Data/Linq/SqlClient/PostgreSqlProvider.cs | 0 .../Data/Linq/SqlClient/Sql2000Provider.cs | 0 .../Data/Linq/SqlClient/Sql2005Provider.cs | 0 .../Data/Linq/SqlClient/Sql2008Provider.cs | 0 .../Data/Linq/SqlClient/SqlServerProvider.cs | 0 .../Data/Linq/SqlClient/SqliteProvider.cs | 0 .../DbLinq/Data/Linq/Sugar/AbstractQuery.cs | 0 .../DbLinq/Data/Linq/Sugar/BuilderContext.cs | 0 .../src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs | 0 .../src/DbLinq/Data/Linq/Sugar/DirectQuery.cs | 0 .../src/DbLinq/Data/Linq/Sugar/Error.cs | 0 .../DbLinq/Data/Linq/Sugar/ExpressionChain.cs | 0 .../ExpressionMutatorExtensions.cs | 0 .../ExpressionMutatorFactory.cs | 0 .../Implementation/BinaryExpressionMutator.cs | 0 .../ConditionalExpressionMutator.cs | 0 .../ConstantExpressionMutator.cs | 0 .../Implementation/IMemberBindingMutator.cs | 0 .../InvocationExpressionMutator.cs | 0 .../Implementation/LambdaExpressionMutator.cs | 0 .../ListInitExpressionMutator.cs | 0 .../Implementation/MemberAssignmentMutator.cs | 0 .../MemberBindingMutatorFactory.cs | 0 .../Implementation/MemberExpressionMutator.cs | 0 .../MemberInitExpressionMutator.cs | 0 .../MemberListBindingMutator.cs | 0 .../MemberMemberBindingMutator.cs | 0 .../MethodCallExpressionMutator.cs | 0 .../NewArrayExpressionMutator.cs | 0 .../Implementation/NewExpressionMutator.cs | 0 .../ParameterExpressionMutator.cs | 0 .../TypeBinaryExpressionMutator.cs | 0 .../Implementation/UnaryExpressionMutator.cs | 0 .../Data/Linq/Sugar/ExpressionPrecedence.cs | 0 .../DbLinq/Data/Linq/Sugar/ExpressionQuery.cs | 0 .../DbLinq/Data/Linq/Sugar/ExpressionTier.cs | 0 .../Sugar/Expressions/ColumnExpression.cs | 0 .../Sugar/Expressions/CustomExpressionType.cs | 0 .../Sugar/Expressions/EntitySetExpression.cs | 0 .../Sugar/Expressions/ExpressionTranslator.cs | 0 .../Linq/Sugar/Expressions/GroupExpression.cs | 0 .../Expressions/IExecutableExpression.cs | 0 .../Sugar/Expressions/IMutableExpression.cs | 0 .../Expressions/InputParameterExpression.cs | 0 .../Sugar/Expressions/MetaTableExpression.cs | 0 .../Sugar/Expressions/MutableExpression.cs | 0 .../ObjectInputParameterExpression.cs | 0 .../ObjectOutputParameterExpression.cs | 0 .../Expressions/OperandsMutableExpression.cs | 0 .../Sugar/Expressions/OrderByExpression.cs | 0 .../Sugar/Expressions/SelectExpression.cs | 0 .../Sugar/Expressions/SelectOperatorType.cs | 0 .../Sugar/Expressions/SpecialExpression.cs | 0 .../Expressions/SpecialExpressionType.cs | 0 .../Expressions/StartIndexOffsetExpression.cs | 0 .../Sugar/Expressions/SubSelectExpression.cs | 0 .../Linq/Sugar/Expressions/TableExpression.cs | 0 .../Linq/Sugar/Expressions/TableJoinType.cs | 0 .../src/DbLinq/Data/Linq/Sugar/IDataMapper.cs | 0 .../Data/Linq/Sugar/IDataRecordReader.cs | 0 .../Data/Linq/Sugar/IExpressionDispatcher.cs | 0 .../Linq/Sugar/IExpressionLanguageParser.cs | 0 .../Data/Linq/Sugar/IExpressionOptimizer.cs | 0 .../Data/Linq/Sugar/IExpressionQualifier.cs | 0 .../Data/Linq/Sugar/IPrequelAnalyzer.cs | 0 .../DbLinq/Data/Linq/Sugar/IQueryBuilder.cs | 0 .../src/DbLinq/Data/Linq/Sugar/IQueryCache.cs | 0 .../DbLinq/Data/Linq/Sugar/IQueryRunner.cs | 0 .../Sugar/ISpecialExpressionTranslator.cs | 0 .../src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs | 0 .../Linq/Sugar/Implementation/DataMapper.cs | 0 .../Sugar/Implementation/DataRecordReader.cs | 0 .../ExpressionDispatcher.Analyzer.cs | 0 .../ExpressionDispatcher.Registrar.cs | 0 .../Implementation/ExpressionDispatcher.cs | 0 .../ExpressionLanguageParser.cs | 0 .../Implementation/ExpressionOptimizer.cs | 0 .../Implementation/ExpressionQualifier.cs | 0 .../Linq/Sugar/Implementation/LineGrouping.cs | 0 .../Sugar/Implementation/PrequelAnalyzer.cs | 0 .../Implementation/QueryBuilder.Upsert.cs | 0 .../Linq/Sugar/Implementation/QueryBuilder.cs | 0 .../Linq/Sugar/Implementation/QueryCache.cs | 0 .../Linq/Sugar/Implementation/QueryRunner.cs | 0 .../SpecialExpressionTranslator.cs | 0 .../Linq/Sugar/Implementation/SqlBuilder.cs | 0 .../Data/Linq/Sugar/ParameterizedQuery.cs | 0 .../DbLinq/Data/Linq/Sugar/QueryContext.cs | 0 .../src/DbLinq/Data/Linq/Sugar/SelectQuery.cs | 0 .../src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs | 0 .../sqlmetal}/src/DbLinq/Data/Linq/Table.cs | 0 .../src/DbLinq/DbLinqToDoAttribute.cs | 0 .../src/DbLinq/Factory/DbLinqAttribute.cs | 0 .../src/DbLinq/Factory/IObjectFactory.cs | 0 .../Implementation/ReflectionObjectFactory.cs | 0 .../src/DbLinq/Factory/ObjectFactory.cs | 0 .../src/DbLinq/Language/ILanguageWords.cs | 0 .../src/DbLinq/Language/ILanguages.cs | 0 .../Implementation/AbstractEndPluralWords.cs | 0 .../Language/Implementation/AbstractWords.cs | 0 .../Language/Implementation/Languages.cs | 0 .../Implementation/NoLanguageWords.cs | 0 .../src/DbLinq/Schema/AssociationName.cs | 0 .../sqlmetal}/src/DbLinq/Schema/Case.cs | 0 .../sqlmetal}/src/DbLinq/Schema/ColumnName.cs | 0 .../Schema/Dbml/Adapter/ArrayAdapter.cs | 0 .../Schema/Dbml/Adapter/CsvArrayAdapter.cs | 0 .../DbLinq/Schema/Dbml/Adapter/EnumType.cs | 0 .../DbLinq/Schema/Dbml/Adapter/INamedType.cs | 0 .../DbLinq/Schema/Dbml/Adapter/ISimpleList.cs | 0 .../Dbml/Adapter/SpecifiedPropertyUpdater.cs | 0 .../DbLinq/Schema/Dbml/DatabaseSerializer.cs | 0 .../DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs | 0 .../src/DbLinq/Schema/Dbml/DbmlSchema.cs | 0 .../src/DbLinq/Schema/Dbml/DbmlSerializer.cs | 0 .../src/DbLinq/Schema/INameFormatter.cs | 0 .../Schema/Implementation/NameFormatter.cs | 0 .../sqlmetal}/src/DbLinq/Schema/Name.cs | 0 .../sqlmetal}/src/DbLinq/Schema/NameFormat.cs | 0 .../src/DbLinq/Schema/ParameterName.cs | 0 .../src/DbLinq/Schema/ProcedureName.cs | 0 .../sqlmetal}/src/DbLinq/Schema/SchemaName.cs | 0 .../sqlmetal}/src/DbLinq/Schema/TableName.cs | 0 .../src/DbLinq/Schema/WordsExtraction.cs | 0 .../src/DbLinq/System.Data.Linq/Binary.cs | 0 .../ChangeConflictCollection.cs | 0 .../ChangeConflictException.cs | 0 .../DbLinq/System.Data.Linq/CompiledQuery.cs | 0 .../DbLinq/System.Data.Linq/ConflictMode.cs | 0 .../src/DbLinq/System.Data.Linq/DBConvert.cs | 0 .../System.Data.Linq/DuplicateKeyException.cs | 0 ...ignKeyReferenceAlreadyHasValueException.cs | 0 .../System.Data.Linq/IFunctionResult.cs | 0 .../System.Data.Linq/IMultipleResults.cs | 0 .../DbLinq/System.Data.Linq/ISingleResult.cs | 0 .../src/DbLinq/System.Data.Linq/Link.cs | 0 .../System.Data.Linq/MemberChangeConflict.cs | 0 .../System.Data.Linq/ModifiedMemberInfo.cs | 0 .../System.Data.Linq/ObjectChangeConflict.cs | 0 .../AssociationAttribute.cs | 0 .../System.Data.Linq.Mapping/AutoSync.cs | 0 .../ColumnAttribute.cs | 0 .../System.Data.Linq.Mapping/DataAttribute.cs | 0 .../DatabaseAttribute.cs | 0 .../FunctionAttribute.cs | 0 .../InheritanceMappingAttribute.cs | 0 .../System.Data.Linq.Mapping/MappingSource.cs | 0 .../System.Data.Linq.Mapping/MetaAccessor.cs | 0 .../MetaAccessor_2.cs | 0 .../MetaAssociation.cs | 0 .../MetaDataMember.cs | 0 .../System.Data.Linq.Mapping/MetaFunction.cs | 0 .../System.Data.Linq.Mapping/MetaModel.cs | 0 .../System.Data.Linq.Mapping/MetaParameter.cs | 0 .../System.Data.Linq.Mapping/MetaTable.cs | 0 .../System.Data.Linq.Mapping/MetaType.cs | 0 .../ParameterAttribute.cs | 0 .../ProviderAttribute.cs | 0 .../ResultTypeAttribute.cs | 0 .../TableAttribute.cs | 0 .../System.Data.Linq.Mapping/UpdateCheck.cs | 0 .../ObjectMaterializer.cs | 0 .../System.Data.Linq.SqlClient/SqlHelpers.cs | 0 .../System.Data.Linq.SqlClient/SqlMethods.cs | 0 .../System.Data.Linq.SqlClient/SqlProvider.cs | 0 .../sqlmetal}/src/DbLinq/Util/DataCommand.cs | 0 .../src/DbLinq/Util/DbmlExtensions.cs | 0 .../Util/ExpressionChainEqualityComparer.cs | 0 .../DbLinq/Util/ExpressionEqualityComparer.cs | 0 .../src/DbLinq/Util/IDataRecordExtensions.cs | 0 .../src/DbLinq/Util/IDataTypeExtensions.cs | 0 .../DbLinq/Util/IDbDataParameterExtensions.cs | 0 .../src/DbLinq/Util/IThreadSafeDictionary.cs | 0 .../src/DbLinq/Util/LambdaComparer.cs | 0 .../src/DbLinq/Util/MemberInfoExtensions.cs | 0 .../sqlmetal}/src/DbLinq/Util/Output.cs | 0 .../sqlmetal}/src/DbLinq/Util/OutputLevel.cs | 0 .../sqlmetal}/src/DbLinq/Util/Page.cs | 0 .../sqlmetal}/src/DbLinq/Util/Profiler.cs | 0 .../sqlmetal}/src/DbLinq/Util/QuotesHelper.cs | 0 .../DbLinq/Util/ReferenceEqualityComparer.cs | 0 .../src/DbLinq/Util/ReflectionExtensions.cs | 0 .../src/DbLinq/Util/ReflectionUtility.cs | 0 .../src/DbLinq/Util/StringExtensions.cs | 0 .../src/DbLinq/Util/TextWriterExtension.cs | 0 .../src/DbLinq/Util/ThreadSafeDictionary.cs | 0 .../sqlmetal}/src/DbLinq/Util/TypeConvert.cs | 0 .../src/DbLinq/Util/TypeExtensions.cs | 0 .../sqlmetal}/src/DbLinq/Util/TypeLoader.cs | 0 .../src/DbLinq/Vendor/DbSchemaLoader.cs | 0 .../sqlmetal}/src/DbLinq/Vendor/IDataName.cs | 0 .../src/DbLinq/Vendor/IDataTableColumn.cs | 0 .../sqlmetal}/src/DbLinq/Vendor/IDataType.cs | 0 .../src/DbLinq/Vendor/INameAliases.cs | 0 .../src/DbLinq/Vendor/ISchemaLoader.cs | 0 .../src/DbLinq/Vendor/ISqlProvider.cs | 0 .../sqlmetal}/src/DbLinq/Vendor/IVendor.cs | 0 .../Implementation/SchemaLoader.Columns.cs | 0 .../Implementation/SchemaLoader.DataName.cs | 0 .../SchemaLoader.DataTableColumn.cs | 0 .../Implementation/SchemaLoader.ForeignKey.cs | 0 .../Implementation/SchemaLoader.Name.cs | 0 .../SchemaLoader.StoredProcedures.cs | 0 .../Implementation/SchemaLoader.Tables.cs | 0 .../SchemaLoader.TypeMapping.cs | 0 .../Vendor/Implementation/SchemaLoader.cs | 0 .../Vendor/Implementation/SqlProvider.cs | 0 .../Implementation/Vendor.ProcedureResult.cs | 0 .../DbLinq/Vendor/Implementation/Vendor.cs | 0 .../src/DbLinq/Vendor/VendorAttribute.cs | 0 .../src/DbMetal/AbstractParameters.cs | 0 .../DbMetal/Configuration/ProvidersSection.cs | 0 .../DbMetal/Generator/AttributeDefinition.cs | 0 .../src/DbMetal/Generator/CodeDomGenerator.cs | 0 .../src/DbMetal/Generator/CodeWriter.cs | 0 .../EntityInterface/IImplementation.cs | 0 .../Implementation/IModifiedImplementation.cs | 0 .../INotifyPropertyChangedImplementation.cs | 0 .../INotifyPropertyChangingImplementation.cs | 0 .../Implementation/InterfaceImplementation.cs | 0 .../DbMetal/Generator/GenerationContext.cs | 0 .../src/DbMetal/Generator/ICodeGenerator.cs | 0 .../src/DbMetal/Generator/IProcessor.cs | 0 .../DbMetal/Generator/ISchemaLoaderFactory.cs | 0 .../CodeTextGenerator/CSCodeGenerator.cs | 0 .../CodeTextGenerator/CSCodeWriter.cs | 0 .../CodeTextGenerator/CodeGenerator.Class.cs | 0 .../CodeGenerator.Context.Ctor.cs | 0 .../CodeGenerator.Procedure.cs | 0 .../CodeTextGenerator/CodeGenerator.cs | 0 .../Generator/Implementation/Processor.cs | 0 .../Implementation/SchemaLoaderFactory.cs | 0 .../DbMetal/Generator/ParameterDefinition.cs | 0 .../Generator/SpecificationDefinition.cs | 0 .../src/DbMetal/Language/EnglishWords.cs | 0 .../Language/EnglishWords.txt.REMOVED.git-id | 0 .../src/DbMetal/Language/FrenchWords.cs | 0 .../Language/FrenchWords.txt.REMOVED.git-id | 0 .../src/DbMetal/Language/GermanWords.cs | 0 .../src/DbMetal/Language/GermanWords.txt | 0 .../sqlmetal}/src/DbMetal/Mono/Options.cs | 0 .../sqlmetal}/src/DbMetal/Parameters.cs | 0 .../sqlmetal}/src/DbMetal/Program.cs | 0 .../DbMetal/Properties/Settings.Designer.cs | 0 .../sqlmetal}/src/DbMetal/Reference.cs | 0 .../src/DbMetal/Schema/DbmlRename.cs | 0 .../src/DbMetal/Schema/DbmlRenameLoader.cs | 0 .../src/DbMetal/Schema/NameAliasesLoader.cs | 0 .../src/DbMetal/Schema/TableAlias.cs | 0 .../DbMetal/Utility/EnvironmentExtension.cs | 0 .../src/DbMetal/Utility/VariablesExtension.cs | 0 .../xbuild/data/deniedAssembliesList.txt | 56 +- mk/Makefile.in | 4 + mono/Makefile.am | 4 + mono/Makefile.in | 5 + mono/arch/Makefile.in | 4 + mono/arch/amd64/Makefile.in | 4 + mono/arch/arm/Makefile.in | 4 + mono/arch/arm64/Makefile.in | 4 + mono/arch/mips/Makefile.in | 4 + mono/arch/ppc/Makefile.in | 4 + mono/arch/ppc/ppc-codegen.h | 27 + mono/arch/riscv/Makefile.in | 4 + mono/arch/s390x/Makefile.in | 4 + mono/arch/sparc/Makefile.in | 4 + mono/arch/x86/Makefile.in | 4 + mono/benchmark/Makefile.in | 4 + mono/btls/Makefile.in | 4 + mono/btls/btls-ssl-ctx.c | 22 + mono/btls/btls-ssl-ctx.h | 4 + mono/cil/Makefile.in | 4 + mono/dis/Makefile.in | 4 + mono/dis/get.c.REMOVED.git-id | 2 +- mono/eglib/Makefile.in | 4 + mono/eglib/ghashtable.c | 2 +- mono/eglib/glib.h | 10 +- mono/eglib/test/Makefile.am | 2 +- mono/eglib/test/Makefile.in | 6 +- mono/metadata/Makefile.am | 12 + mono/metadata/Makefile.in.REMOVED.git-id | 2 +- mono/metadata/appdomain.c | 171 +- mono/metadata/appdomain.h | 4 +- mono/metadata/assembly.c.REMOVED.git-id | 2 +- mono/metadata/class-init.c.REMOVED.git-id | 2 +- mono/metadata/class-inlines.h | 70 + mono/metadata/class-internals.h | 68 +- mono/metadata/class.c.REMOVED.git-id | 2 +- mono/metadata/class.h | 12 +- mono/metadata/cominterop.c.REMOVED.git-id | 2 +- mono/metadata/coree.c | 4 +- mono/metadata/culture-info.h | 186 +- mono/metadata/custom-attrs.c | 32 +- mono/metadata/debug-helpers.c | 21 + mono/metadata/debug-internals.h | 4 +- mono/metadata/domain-internals.h | 9 + mono/metadata/domain.c | 33 +- mono/metadata/dynamic-image.c | 11 +- mono/metadata/exception-internals.h | 9 +- mono/metadata/exception.c | 34 +- mono/metadata/external-only.c | 93 + mono/metadata/filewatcher.c | 6 +- mono/metadata/filewatcher.h | 4 + mono/metadata/gc.c | 61 +- mono/metadata/handle.h | 8 +- mono/metadata/icall-decl.h | 26 +- mono/metadata/icall-def.h.REMOVED.git-id | 2 +- mono/metadata/icall-internals.h | 15 +- mono/metadata/icall-signatures.h | 283 ++ mono/metadata/icall-table.c | 14 +- mono/metadata/icall-table.h | 20 +- mono/metadata/icall-windows.c | 5 +- mono/metadata/icall.c.REMOVED.git-id | 2 +- mono/metadata/image.c | 302 +- mono/metadata/jit-icall-reg.h | 396 +++ mono/metadata/loader-internals.h | 12 + mono/metadata/loader.c | 614 ++-- mono/metadata/loader.h | 2 +- mono/metadata/locales.c | 93 +- mono/metadata/locales.h | 17 +- mono/metadata/marshal-ilgen.c.REMOVED.git-id | 2 +- mono/metadata/marshal.c.REMOVED.git-id | 2 +- mono/metadata/marshal.h | 37 +- mono/metadata/mempool-internals.h | 2 +- mono/metadata/mempool.c | 20 +- mono/metadata/metadata-cross-helpers.c | 20 + mono/metadata/metadata-internals.h | 178 +- mono/metadata/metadata.c.REMOVED.git-id | 2 +- mono/metadata/metadata.h | 2 +- mono/metadata/method-builder-ilgen.c | 9 +- mono/metadata/method-builder-ilgen.h | 14 +- mono/metadata/method-builder.h | 3 + mono/metadata/monitor.c | 14 +- mono/metadata/mono-config-internals.h | 13 + mono/metadata/mono-config.c | 26 +- mono/metadata/mono-config.h | 2 +- mono/metadata/mono-debug.c | 2 +- mono/metadata/mono-debug.h | 2 + mono/metadata/mono-hash-internals.h | 17 + mono/metadata/mono-hash.c | 27 +- mono/metadata/mono-hash.h | 5 +- mono/metadata/mono-mlist.c | 4 + mono/metadata/mono-perfcounters.c | 425 ++- mono/metadata/mono-perfcounters.h | 29 - mono/metadata/mono-route.h | 1 + mono/metadata/mono-security-windows.c | 3 + mono/metadata/object-internals.h | 91 +- mono/metadata/object-offsets.h | 1 + mono/metadata/object.c.REMOVED.git-id | 2 +- mono/metadata/reflection-internals.h | 3 + mono/metadata/reflection.c | 3101 ----------------- mono/metadata/reflection.c.REMOVED.git-id | 1 + mono/metadata/remoting.c | 52 +- mono/metadata/runtime.c | 35 +- mono/metadata/security-manager.c | 30 - mono/metadata/security-manager.h | 1 - mono/metadata/seq-points-data.c | 5 + mono/metadata/sgen-mono.c | 9 +- mono/metadata/sre-encode.c | 35 +- mono/metadata/sre-save.c.REMOVED.git-id | 2 +- mono/metadata/sre.c.REMOVED.git-id | 2 +- mono/metadata/sysmath.c | 66 + mono/metadata/tabledefs.h | 2 + mono/metadata/threadpool-io.c | 12 +- mono/metadata/threadpool-worker-default.c | 14 +- mono/metadata/threadpool.c | 45 +- mono/metadata/threadpool.h | 2 - mono/metadata/threads-types.h | 9 + mono/metadata/threads.c.REMOVED.git-id | 2 +- mono/metadata/verify.c.REMOVED.git-id | 2 +- mono/metadata/w32event-unix.c | 3 +- mono/metadata/w32file-unix.c.REMOVED.git-id | 2 +- mono/metadata/w32file-win32.c | 161 +- mono/metadata/w32file.c | 23 +- mono/metadata/w32file.h | 12 +- mono/metadata/w32handle.c | 41 +- mono/metadata/w32handle.h | 4 +- mono/metadata/w32mutex-unix.c | 4 +- .../metadata/w32process-unix.c.REMOVED.git-id | 2 +- mono/metadata/w32process.c | 2 +- mono/metadata/w32semaphore-unix.c | 4 +- mono/metadata/w32socket-win32.c | 93 +- mono/metadata/w32socket.c | 8 +- mono/metadata/w32subset.h | 32 + mono/mini/Makefile.am | 38 +- mono/mini/Makefile.am.in | 38 +- mono/mini/Makefile.in.REMOVED.git-id | 2 +- mono/mini/alias-analysis.c | 35 + mono/mini/aot-compiler.c.REMOVED.git-id | 2 +- mono/mini/aot-compiler.h | 2 + mono/mini/aot-runtime.c.REMOVED.git-id | 2 +- mono/mini/aot-runtime.h | 21 +- mono/mini/arrays.cs | 34 +- mono/mini/basic-math.cs | 6 + mono/mini/calls.c | 37 +- mono/mini/cpu-ppc.md | 16 + mono/mini/cpu-ppc64.md | 15 + mono/mini/debugger-agent.c.REMOVED.git-id | 2 +- mono/mini/decompose.c | 7 + mono/mini/driver.c | 61 +- mono/mini/dwarfwriter.c | 8 +- mono/mini/exceptions-amd64.c | 30 +- mono/mini/exceptions-arm.c | 32 +- mono/mini/exceptions-arm64.c | 30 +- mono/mini/exceptions-ppc.c | 25 +- mono/mini/exceptions-x86.c | 21 +- mono/mini/genmdesc.py | 53 +- mono/mini/graph.c | 6 +- mono/mini/interp/interp-internals.h | 11 +- mono/mini/interp/interp.c.REMOVED.git-id | 2 +- mono/mini/interp/mintops.c | 2 +- mono/mini/interp/mintops.def | 94 +- mono/mini/interp/mintops.h | 2 + mono/mini/interp/transform.c.REMOVED.git-id | 2 +- mono/mini/intrinsics.c | 177 +- mono/mini/ir-emit.h | 4 +- mono/mini/jit-icalls.c | 175 +- mono/mini/jit-icalls.h | 4 + mono/mini/jit.h | 10 + mono/mini/lldb.c | 8 +- mono/mini/llvm-jit.cpp | 630 +--- mono/mini/llvm-jit.h | 6 +- mono/mini/llvmonly-runtime.c | 57 +- mono/mini/llvmonly-runtime.h | 10 +- mono/mini/local-propagation.c | 6 + mono/mini/main-core.c | 114 +- mono/mini/memory-access.c | 2 +- mono/mini/method-to-ir.c.REMOVED.git-id | 2 +- mono/mini/mini-amd64.c.REMOVED.git-id | 2 +- mono/mini/mini-amd64.h | 2 +- mono/mini/mini-arm.c.REMOVED.git-id | 2 +- mono/mini/mini-arm.h | 1 - mono/mini/mini-arm64-gsharedvt.c | 1 - mono/mini/mini-arm64.c.REMOVED.git-id | 2 +- mono/mini/mini-arm64.h | 2 +- mono/mini/mini-codegen.c | 10 +- mono/mini/mini-exceptions.c.REMOVED.git-id | 2 +- mono/mini/mini-gc.c | 4 - .../mini-generic-sharing.c.REMOVED.git-id | 2 +- mono/mini/mini-llvm-cpp.cpp | 156 +- mono/mini/mini-llvm-cpp.h | 27 +- mono/mini/mini-llvm.c.REMOVED.git-id | 2 +- mono/mini/mini-llvm.h | 3 +- mono/mini/mini-mips.c.REMOVED.git-id | 2 +- mono/mini/mini-mips.h | 1 - mono/mini/mini-ops.h | 5 +- mono/mini/mini-posix.c | 45 +- mono/mini/mini-ppc.c.REMOVED.git-id | 2 +- mono/mini/mini-ppc.h | 1 - mono/mini/mini-profiler.c | 10 +- mono/mini/mini-riscv.c | 6 + mono/mini/mini-riscv.h | 1 - mono/mini/mini-runtime.c.REMOVED.git-id | 2 +- mono/mini/mini-runtime.h | 40 +- mono/mini/mini-s390x.c.REMOVED.git-id | 2 +- mono/mini/mini-s390x.h | 1 - mono/mini/mini-sparc.c.REMOVED.git-id | 2 +- mono/mini/mini-trampolines.c | 48 +- mono/mini/mini-wasm-debugger.c | 53 +- mono/mini/mini-wasm.c | 6 + mono/mini/mini-windows.c | 4 +- mono/mini/mini-x86.c.REMOVED.git-id | 2 +- mono/mini/mini-x86.h | 1 - mono/mini/mini.c.REMOVED.git-id | 2 +- mono/mini/mini.h.REMOVED.git-id | 2 +- mono/mini/objects.cs | 23 + mono/mini/patch-info.h | 8 +- mono/mini/tramp-amd64-gsharedvt.c | 2 +- mono/mini/tramp-amd64.c | 102 +- mono/mini/tramp-arm-gsharedvt.c | 2 +- mono/mini/tramp-arm.c | 18 +- mono/mini/tramp-arm64-gsharedvt.c | 2 +- mono/mini/tramp-arm64.c | 18 +- mono/mini/tramp-mips.c | 5 +- mono/mini/tramp-ppc.c | 9 +- mono/mini/tramp-riscv.c | 3 +- mono/mini/tramp-s390x.c | 3 +- mono/mini/tramp-x86-gsharedvt.c | 2 +- mono/mini/tramp-x86.c | 14 +- mono/mini/type-checking.c | 21 +- mono/mini/unwind.c | 19 +- mono/mini/version.h | 2 +- mono/mini/wasm_m2n_invoke.g.h | 987 +++++- mono/mini/xdebug.c | 2 +- mono/native/Makefile.am | 34 +- mono/native/Makefile.in.REMOVED.git-id | 2 +- mono/native/mono-native-platform.h | 1 + mono/profiler/Makefile.in | 4 + mono/profiler/log.c.REMOVED.git-id | 2 +- mono/profiler/mprof-report.c.REMOVED.git-id | 2 +- mono/profiler/vtune.c | 1 + mono/sgen/Makefile.in | 4 + mono/sgen/sgen-debug.c | 18 +- mono/tests/Makefile.am.REMOVED.git-id | 2 +- mono/tests/Makefile.in.REMOVED.git-id | 2 +- .../tests/assembly-load-reference/Makefile.am | 12 +- .../tests/assembly-load-reference/Makefile.in | 14 +- mono/tests/common_mixed.mk | 24 + mono/tests/console-output.cs | 4 +- mono/tests/console-output.exe.stderr.expected | 2 +- mono/tests/console-output.exe.stdout.expected | 2 +- mono/tests/custom-modifiers-append.1.il | 148 + mono/tests/custom-modifiers-lib.il | 1 + mono/tests/custom-modifiers.2.cs | 10 + mono/tests/delegate.cs | 6 +- mono/tests/dim-abstractcall.il | 115 + mono/tests/dim-constrained3.il | 68 + mono/tests/dim-constrained3_gm.il | 68 + mono/tests/dim-constrainedcall.il | 592 +--- mono/tests/dim-generic-interface.il | 105 + .../dim-implements-multiple-interfaces.il | 192 + mono/tests/dim-nested-types.il | 165 + mono/tests/dim-protected-accessibility1.il | 117 + mono/tests/dim-protected-accessibility2.il | 131 + mono/tests/dim-reabstraction-generics.il | 178 + mono/tests/dim-reabstraction.il | 178 + mono/tests/dim-sealed.il | 101 + mono/tests/exception.cs | 38 +- mono/tests/fullaot-mixed/Makefile.am | 53 + mono/tests/fullaot-mixed/Makefile.in | 733 ++++ mono/tests/gc-descriptors/Makefile.in | 4 + mono/tests/gh-13056_mono_local_cprop_av.il | 15 + .../gh-13057_mono_local_emulate_ops_av.il | 23 + mono/tests/internalsvisibleto-2048.snk | Bin 0 -> 1172 bytes mono/tests/last-error.cs | 16 + mono/tests/libtest.c.REMOVED.git-id | 2 +- mono/tests/llvmonly-mixed/Makefile.am | 35 +- mono/tests/llvmonly-mixed/Makefile.in | 31 +- mono/tests/pinvoke2.cs | 37 +- mono/tests/process-unref-race.cs | 10 +- mono/tests/testing_gac/Makefile.am | 7 +- mono/tests/testing_gac/Makefile.in | 12 +- mono/tests/twopassvariance.il | 407 +++ mono/unit-tests/Makefile.am | 7 + mono/unit-tests/Makefile.in | 54 +- mono/unit-tests/test-path.c | 85 + mono/utils/Makefile.am | 4 +- mono/utils/Makefile.in.REMOVED.git-id | 2 +- mono/utils/jemalloc/Makefile.in | 4 + mono/utils/mono-compiler.h | 1 + mono/utils/mono-complex.h | 34 +- mono/utils/mono-context.h | 11 - mono/utils/mono-counters.c | 1 + mono/utils/mono-counters.h | 1 + mono/utils/mono-dl-wasm.c | 11 +- mono/utils/mono-error-internals.h | 18 +- mono/utils/mono-error.c | 19 + mono/utils/mono-error.h | 10 + mono/utils/mono-forward-internal.h | 4 + mono/utils/mono-hwcap-ppc.c | 32 +- mono/utils/mono-hwcap-vars.h | 1 + mono/utils/mono-membar.h | 2 + mono/utils/mono-mmap-windows.c | 15 +- mono/utils/mono-mmap.c | 9 + mono/utils/mono-mmap.h | 4 - mono/utils/mono-os-mutex.h | 33 +- mono/utils/mono-os-semaphore-win32.c | 37 + mono/utils/mono-os-semaphore.h | 28 +- mono/utils/mono-os-wait-win32.c | 297 +- mono/utils/mono-os-wait.h | 18 + mono/utils/mono-path.c | 159 +- mono/utils/mono-proclib.c | 30 +- mono/utils/mono-rand.c | 2 +- mono/utils/mono-sha1.c | 4 + mono/utils/mono-state.c | 17 +- mono/utils/mono-threads-coop.c | 67 +- mono/utils/mono-threads-coop.h | 2 +- mono/utils/mono-threads-posix.c | 55 +- mono/utils/mono-threads-wasm.c | 7 +- mono/utils/mono-threads-windows.c | 75 +- mono/utils/mono-threads.c | 16 +- mono/utils/mono-threads.h | 23 +- mono/utils/mono-tls.c | 28 +- mono/utils/mono-tls.h | 9 +- mono/utils/strenc-internals.h | 9 + mono/utils/strenc.c | 20 +- mono/utils/w32api.h | 3 + msvc/Makefile.in | 4 + msvc/build-all.vcxproj | 308 +- msvc/build-external-btls.vcxproj | 346 +- msvc/build-external-llvm.vcxproj | 373 +- msvc/build-init.vcxproj | 377 +- msvc/build-install.vcxproj | 300 +- msvc/build-package.vcxproj | 300 +- msvc/eglib.vcxproj | 324 +- msvc/genmdesc.vcxproj | 700 ++-- msvc/libgc.vcxproj | 294 +- msvc/libgcmonosgen.vcxproj | 348 +- msvc/libmini.vcxproj | 462 +-- msvc/libmono-dynamic.vcxproj | 582 ++-- msvc/libmono-static.vcxproj | 448 +-- msvc/libmonodac.vcxproj | 294 +- msvc/libmonoruntime.vcxproj | 354 +- msvc/libmonoutils.vcxproj | 362 +- msvc/libtest.vcxproj | 354 +- msvc/mono-full-aot-compile-test.vcxproj | 404 +-- msvc/mono-full-aot-run-test.vcxproj | 404 +-- msvc/mono-mini-regression-test.vcxproj | 406 +-- msvc/mono-nunit-test.vcxproj | 446 +-- msvc/mono-profiler-log.vcxproj | 174 + msvc/mono-testdriver-test.vcxproj | 438 +-- msvc/mono.props | 5 + msvc/mono.sln | 977 +++--- msvc/mono.vcxproj | 472 +-- msvc/monodis.vcxproj | 422 +-- msvc/monoposixhelper.vcxproj | 366 +- msvc/pedump.vcxproj | 392 +-- msvc/profiler-vtune.vcxproj | 346 +- msvc/test-invoke.vcxproj | 378 +- msvc/test-metadata.vcxproj | 378 +- msvc/test_eglib.vcxproj | 424 +-- msvc/teste.vcxproj | 378 +- msvc/winsetup.bat | 103 +- po/Makefile.in | 4 + po/mcs/de.gmo | Bin 5406 -> 5406 bytes po/mcs/de.po.REMOVED.git-id | 2 +- po/mcs/es.gmo | Bin 16329 -> 16329 bytes po/mcs/es.po.REMOVED.git-id | 2 +- po/mcs/ja.gmo | Bin 20863 -> 20863 bytes po/mcs/ja.po.REMOVED.git-id | 2 +- po/mcs/mcs.pot | 4 +- po/mcs/pt_BR.gmo | Bin 72806 -> 72806 bytes po/mcs/pt_BR.po.REMOVED.git-id | 2 +- runtime/Makefile.am | 2 +- runtime/Makefile.in | 6 +- samples/Makefile.in | 4 + scripts/Makefile.in | 4 + support/Makefile.in | 4 + support/libm/complex.c | 6 +- support/nl.c | 22 +- support/nl.h | 4 +- tools/Makefile.in | 4 + tools/locale-builder/Makefile.in | 4 + tools/pedump/Makefile.in | 4 + tools/sgen/Makefile.in | 4 + winconfig.h | 663 +--- 2712 files changed, 74169 insertions(+), 40587 deletions(-) create mode 100644 external/cecil/.azure-pipelines.yml create mode 100644 external/cecil/Directory.Build.props delete mode 100644 external/cecil/Mono.Cecil.props delete mode 100644 external/cecil/Mono.Cecil.sln.DotSettings delete mode 100644 external/cecil/Mono/Type.cs delete mode 100644 external/cecil/NetStandard.props delete mode 100644 external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs delete mode 100644 external/cecil/Test/libs/nunit-2.6.2/license.txt delete mode 100644 external/cecil/appveyor.yml rename external/cecil/symbols/mdb/Test/Resources/assemblies/{hello.exe.mdb => simplemdb.exe.mdb} (100%) create mode 100644 external/corefx/src/Common/src/CoreLib/System/Index.cs create mode 100644 external/corefx/src/Common/src/CoreLib/System/Range.cs create mode 100644 external/corefx/src/Common/src/System/Net/IPv4AddressHelper.Common.cs create mode 100644 external/corefx/src/Common/src/System/Net/IPv6AddressHelper.Common.cs create mode 100644 external/corefx/src/System.Memory/src/ApiCompatBaseline.netcoreappaot.txt create mode 100644 external/corefx/src/System.Runtime/tests/System/IndexTests.cs create mode 100644 external/corefx/src/System.Runtime/tests/System/RangeTests.cs create mode 100644 external/corert/src/System.Private.CoreLib/shared/System/Runtime/AmbiguousImplementationException.cs create mode 100644 external/how-to-bump-roslyn-binaries.md create mode 100644 external/illinker-test-assets/wasm/HelloWorld/App.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/HelloWorld.csproj create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Pages/Counter.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Pages/FetchData.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Pages/Index.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Pages/_ViewImports.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Program.cs create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Shared/MainLayout.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Shared/NavMenu.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Shared/SurveyPrompt.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/Startup.cs create mode 100644 external/illinker-test-assets/wasm/HelloWorld/_ViewImports.cshtml create mode 100644 external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/HelloWorld.blazor.config create mode 100644 external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json create mode 100644 external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id create mode 100755 external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js create mode 100644 external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/wasm/mono.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/wasm/mono.wasm.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/bootstrap/bootstrap.min.css.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/bootstrap/bootstrap.min.css.map.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/FONT-LICENSE create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/ICON-LICENSE create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/README.md create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.eot create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.otf create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.svg create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.woff create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/site.css create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/index.html create mode 100644 external/illinker-test-assets/wasm/HelloWorld/wwwroot/sample-data/weather.json create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.xml.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/blazor.boot.json create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.webassembly.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/wasm/mono.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/wasm/mono.wasm.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.Build.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.xml.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/wasm/mono.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/wasm/mono.wasm.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/appStartup.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/index.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandling.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandlingData.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/bootstrap.min.css.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/README.md create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/minibench.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/style.css create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/renderList.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BenchmarkEvents.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BlazorApp.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/DOM.js create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/blazor-frame.html create mode 100644 external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/index.html create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/App.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Newtonsoft.csproj create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Pages/Counter.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Pages/FetchData.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Pages/Index.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Pages/_ViewImports.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Program.cs create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Shared/MainLayout.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Shared/NavMenu.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Shared/SurveyPrompt.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/Startup.cs create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/_ViewImports.cshtml create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/Newtonsoft.blazor.config create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id create mode 100755 external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/wasm/mono.js.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/wasm/mono.wasm.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/bootstrap/bootstrap.min.css.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/bootstrap/bootstrap.min.css.map.REMOVED.git-id create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/FONT-LICENSE create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/ICON-LICENSE create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/README.md create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.eot create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.otf create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.svg create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.woff create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/site.css create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/index.html create mode 100644 external/illinker-test-assets/wasm/Newtonsoft/wwwroot/sample-data/weather.json create mode 100644 external/illinker-test-assets/wasm/wasm.sln delete mode 100644 external/linker/corebuild/build.cmd delete mode 100755 external/linker/corebuild/build.sh delete mode 100644 external/linker/corebuild/dotnet.cmd delete mode 100644 external/linker/corebuild/integration/build.ps1 delete mode 100755 external/linker/corebuild/integration/build.sh delete mode 100644 external/linker/corebuild/restore.cmd delete mode 100755 external/linker/corebuild/restore.sh create mode 100644 external/linker/eng/common/CheckSymbols.ps1 create mode 100644 external/linker/eng/common/PublishToSymbolServers.proj create mode 100644 external/linker/eng/common/SigningValidation.proj create mode 100644 external/linker/eng/common/SourceLinkValidation.ps1 delete mode 100644 external/linker/eng/common/cross/arm/sources.list.vivid delete mode 100644 external/linker/eng/common/cross/arm/sources.list.wily create mode 100644 external/linker/eng/common/cross/arm64/sources.list.buster create mode 100644 external/linker/eng/common/cross/arm64/sources.list.stretch delete mode 100644 external/linker/eng/common/cross/arm64/sources.list.vivid delete mode 100644 external/linker/eng/common/cross/arm64/sources.list.wily delete mode 100644 external/linker/eng/common/cross/x86/sources.list.vivid delete mode 100644 external/linker/eng/common/cross/x86/sources.list.wily create mode 100644 external/linker/eng/common/dotnet-install.cmd create mode 100644 external/linker/eng/common/dotnet-install.ps1 create mode 100644 external/linker/eng/common/dotnet-install.sh create mode 100644 external/linker/eng/common/generate-graph-files.ps1 create mode 100644 external/linker/eng/common/pipeline-logging-functions.ps1 create mode 100644 external/linker/eng/common/pipeline-logging-functions.sh create mode 100644 external/linker/eng/common/post-build/dotnetsymbol-init.ps1 create mode 100644 external/linker/eng/common/post-build/sourcelink-cli-init.ps1 create mode 100644 external/linker/eng/common/post-build/sourcelink-validation.ps1 create mode 100644 external/linker/eng/common/post-build/symbols-validation.ps1 create mode 100644 external/linker/eng/common/sdl/NuGet.config create mode 100644 external/linker/eng/common/sdl/execute-all-sdl-tools.ps1 create mode 100644 external/linker/eng/common/sdl/init-sdl.ps1 create mode 100644 external/linker/eng/common/sdl/packages.config create mode 100644 external/linker/eng/common/sdl/push-gdn.ps1 create mode 100644 external/linker/eng/common/sdl/run-sdl.ps1 create mode 100644 external/linker/eng/common/templates/job/generate-graph-files.yml create mode 100644 external/linker/eng/common/templates/post-build/channels/public-dev-release.yml create mode 100644 external/linker/eng/common/templates/post-build/channels/public-validation-release.yml create mode 100644 external/linker/eng/common/templates/post-build/common-variables.yml create mode 100644 external/linker/eng/common/templates/post-build/post-build.yml create mode 100644 external/linker/eng/common/templates/post-build/promote-build.yml create mode 100644 external/linker/eng/common/templates/post-build/setup-maestro-vars.yml delete mode 100644 external/linker/eng/common/templates/steps/helix-publish.yml create mode 100644 external/linker/external/cecil/.azure-pipelines.yml delete mode 100644 external/linker/external/cecil/.travis.yml create mode 100644 external/linker/external/cecil/Directory.Build.props delete mode 100644 external/linker/external/cecil/Mono.Cecil.props delete mode 100644 external/linker/external/cecil/Mono.Cecil.sln.DotSettings create mode 100644 external/linker/external/cecil/Mono/MergeSort.cs delete mode 100644 external/linker/external/cecil/Mono/Type.cs delete mode 100644 external/linker/external/cecil/NetStandard.props delete mode 100644 external/linker/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs create mode 100644 external/linker/external/cecil/Test/Resources/assemblies/mdb-mismatch.dll.mdb create mode 100644 external/linker/external/cecil/Test/Resources/assemblies/pdb-mismatch.pdb delete mode 100644 external/linker/external/cecil/Test/libs/nunit-2.6.2/license.txt delete mode 100644 external/linker/external/cecil/appveyor.yml rename external/linker/external/cecil/symbols/mdb/Test/Resources/assemblies/{hello.exe.mdb => simplemdb.exe.mdb} (100%) delete mode 100644 external/linker/netci.groovy delete mode 100644 external/linker/src/ILLink.Tasks/AdapterLogger.cs delete mode 100644 external/linker/src/ILLink.Tasks/ILLink.Tasks.nuspec delete mode 100644 external/linker/src/linker/ILLink.props create mode 100644 external/linker/src/linker/Linker.Steps/ReflectionBlockedStep.cs delete mode 100644 external/linker/src/linker/app.config create mode 100644 external/linker/src/linker/runtimeconfig.template.json create mode 100644 external/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp create mode 100644 external/llvm/projects/llvm-cbe/.gitignore create mode 100644 external/llvm/projects/llvm-cbe/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/LICENSE create mode 100644 external/llvm/projects/llvm-cbe/README.md create mode 100644 external/llvm/projects/llvm-cbe/docs/index.html create mode 100644 external/llvm/projects/llvm-cbe/include/sample.h create mode 100644 external/llvm/projects/llvm-cbe/lib/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.cpp.REMOVED.git-id create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.h create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/CTargetMachine.h create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/LLVMBuild.txt create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CBackendTargetInfo.cpp create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/LLVMBuild.txt create mode 100644 external/llvm/projects/llvm-cbe/lib/Target/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/test/.gitignore create mode 100644 external/llvm/projects/llvm-cbe/test/CBEWarningsErrors.txt create mode 100644 external/llvm/projects/llvm-cbe/test/selectionsort/main.c create mode 100644 external/llvm/projects/llvm-cbe/test/test001.c create mode 100644 external/llvm/projects/llvm-cbe/test/test002.c create mode 100644 external/llvm/projects/llvm-cbe/test/test003.c create mode 100644 external/llvm/projects/llvm-cbe/test/test004.c create mode 100644 external/llvm/projects/llvm-cbe/test/test005.c create mode 100644 external/llvm/projects/llvm-cbe/test/test006.c create mode 100644 external/llvm/projects/llvm-cbe/test/test007.c create mode 100644 external/llvm/projects/llvm-cbe/test/test008.c create mode 100644 external/llvm/projects/llvm-cbe/test/test009.c create mode 100644 external/llvm/projects/llvm-cbe/test/test010.c create mode 100644 external/llvm/projects/llvm-cbe/test/test011.c create mode 100644 external/llvm/projects/llvm-cbe/test/test012.c create mode 100644 external/llvm/projects/llvm-cbe/test/test013.c create mode 100644 external/llvm/projects/llvm-cbe/test/test014.c create mode 100644 external/llvm/projects/llvm-cbe/test/test015.c create mode 100644 external/llvm/projects/llvm-cbe/test/test016.c create mode 100644 external/llvm/projects/llvm-cbe/test/test017.c create mode 100644 external/llvm/projects/llvm-cbe/test/test018.c create mode 100644 external/llvm/projects/llvm-cbe/test/test019.c create mode 100644 external/llvm/projects/llvm-cbe/test/test020.c create mode 100644 external/llvm/projects/llvm-cbe/test/test021.c create mode 100644 external/llvm/projects/llvm-cbe/test/test022.c create mode 100644 external/llvm/projects/llvm-cbe/test/test023.c create mode 100644 external/llvm/projects/llvm-cbe/test/test024.c create mode 100644 external/llvm/projects/llvm-cbe/test/test025.c create mode 100644 external/llvm/projects/llvm-cbe/test/test026.c create mode 100644 external/llvm/projects/llvm-cbe/test/test027.c create mode 100644 external/llvm/projects/llvm-cbe/test/test028.c create mode 100644 external/llvm/projects/llvm-cbe/test/test029.c create mode 100644 external/llvm/projects/llvm-cbe/test/test030.c create mode 100644 external/llvm/projects/llvm-cbe/test/test031.c create mode 100644 external/llvm/projects/llvm-cbe/test/test032.c create mode 100644 external/llvm/projects/llvm-cbe/test/test033.c create mode 100644 external/llvm/projects/llvm-cbe/test/test034.c create mode 100644 external/llvm/projects/llvm-cbe/test/test035.c create mode 100644 external/llvm/projects/llvm-cbe/test/test036.c create mode 100644 external/llvm/projects/llvm-cbe/test/test037.c create mode 100644 external/llvm/projects/llvm-cbe/test/test038.c create mode 100644 external/llvm/projects/llvm-cbe/test/test039.c create mode 100644 external/llvm/projects/llvm-cbe/test/test040.c create mode 100644 external/llvm/projects/llvm-cbe/test/test041.c create mode 100644 external/llvm/projects/llvm-cbe/test/test042.c create mode 100644 external/llvm/projects/llvm-cbe/test/test043.c create mode 100644 external/llvm/projects/llvm-cbe/test/test044.c create mode 100644 external/llvm/projects/llvm-cbe/test/test045.c create mode 100644 external/llvm/projects/llvm-cbe/test/test046.c create mode 100644 external/llvm/projects/llvm-cbe/test/test047.c create mode 100644 external/llvm/projects/llvm-cbe/test/test048.c create mode 100644 external/llvm/projects/llvm-cbe/test/test049.c create mode 100644 external/llvm/projects/llvm-cbe/test/test050.c create mode 100644 external/llvm/projects/llvm-cbe/test/test051.c create mode 100644 external/llvm/projects/llvm-cbe/test/test052.c create mode 100644 external/llvm/projects/llvm-cbe/test/test053.c create mode 100644 external/llvm/projects/llvm-cbe/test/test054.c create mode 100644 external/llvm/projects/llvm-cbe/test/test055.c create mode 100644 external/llvm/projects/llvm-cbe/test/test056.c create mode 100644 external/llvm/projects/llvm-cbe/test/test057.c create mode 100644 external/llvm/projects/llvm-cbe/test/test058.c create mode 100644 external/llvm/projects/llvm-cbe/test/test059.c create mode 100644 external/llvm/projects/llvm-cbe/test/test060.c create mode 100644 external/llvm/projects/llvm-cbe/test/test061.c create mode 100644 external/llvm/projects/llvm-cbe/test/test062.c create mode 100644 external/llvm/projects/llvm-cbe/test/test063.c create mode 100644 external/llvm/projects/llvm-cbe/test/test064.c create mode 100644 external/llvm/projects/llvm-cbe/test/test065.c create mode 100644 external/llvm/projects/llvm-cbe/test/test066.c create mode 100644 external/llvm/projects/llvm-cbe/test/test067.c create mode 100644 external/llvm/projects/llvm-cbe/test/test068.c create mode 100644 external/llvm/projects/llvm-cbe/test/test069.c create mode 100644 external/llvm/projects/llvm-cbe/test/test070.c create mode 100644 external/llvm/projects/llvm-cbe/test/test071.c create mode 100644 external/llvm/projects/llvm-cbe/test/test072.c create mode 100644 external/llvm/projects/llvm-cbe/test/test073.c create mode 100644 external/llvm/projects/llvm-cbe/test/test074.c create mode 100644 external/llvm/projects/llvm-cbe/test/test075.c create mode 100644 external/llvm/projects/llvm-cbe/test/test076.c create mode 100644 external/llvm/projects/llvm-cbe/test/test077.c create mode 100644 external/llvm/projects/llvm-cbe/test/test078.c create mode 100644 external/llvm/projects/llvm-cbe/test/test079.c create mode 100644 external/llvm/projects/llvm-cbe/test/test080.c create mode 100644 external/llvm/projects/llvm-cbe/test/test081.c create mode 100644 external/llvm/projects/llvm-cbe/test/test082.c create mode 100644 external/llvm/projects/llvm-cbe/test/test083.c create mode 100644 external/llvm/projects/llvm-cbe/test/test084.c create mode 100644 external/llvm/projects/llvm-cbe/test/test085.c create mode 100644 external/llvm/projects/llvm-cbe/test/test086.c create mode 100644 external/llvm/projects/llvm-cbe/test/test087.c create mode 100644 external/llvm/projects/llvm-cbe/test/test088.c create mode 100644 external/llvm/projects/llvm-cbe/test/test089.c create mode 100644 external/llvm/projects/llvm-cbe/test/test090.c create mode 100644 external/llvm/projects/llvm-cbe/test/test091.c create mode 100644 external/llvm/projects/llvm-cbe/test/test092.c create mode 100644 external/llvm/projects/llvm-cbe/test/test093.c create mode 100644 external/llvm/projects/llvm-cbe/test/test094.c create mode 100644 external/llvm/projects/llvm-cbe/test/test095.c create mode 100644 external/llvm/projects/llvm-cbe/test/test096.c create mode 100644 external/llvm/projects/llvm-cbe/test/test097.c create mode 100644 external/llvm/projects/llvm-cbe/test/test098.c create mode 100644 external/llvm/projects/llvm-cbe/test/test099.c create mode 100644 external/llvm/projects/llvm-cbe/test/test100.c create mode 100644 external/llvm/projects/llvm-cbe/test/test101.c create mode 100644 external/llvm/projects/llvm-cbe/test/test102.c create mode 100644 external/llvm/projects/llvm-cbe/test/test103.c create mode 100644 external/llvm/projects/llvm-cbe/test/test104.c create mode 100644 external/llvm/projects/llvm-cbe/test/test105.c create mode 100644 external/llvm/projects/llvm-cbe/test/testCaseInfo.csv create mode 100755 external/llvm/projects/llvm-cbe/test/testFile.py create mode 100644 external/llvm/projects/llvm-cbe/test/testbad.c create mode 100644 external/llvm/projects/llvm-cbe/tools/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/tools/llvm-cbe/CMakeLists.txt create mode 100644 external/llvm/projects/llvm-cbe/tools/llvm-cbe/LLVMBuild.txt create mode 100644 external/llvm/projects/llvm-cbe/tools/llvm-cbe/llvm-cbe.cpp create mode 100644 external/llvm/scripts/ci/.gitattributes create mode 100644 external/llvm/scripts/ci/.gitignore create mode 100644 external/llvm/scripts/ci/build-external-llvm.bat create mode 100755 external/llvm/scripts/ci/run-jenkins-linux.sh create mode 100755 external/llvm/scripts/ci/run-jenkins-osx.sh create mode 100755 external/llvm/scripts/ci/run-jenkins-windows.bat create mode 100755 external/llvm/scripts/ci/run-jenkins-windows.sh create mode 100755 external/llvm/scripts/ci/setup-vs-msvcbuild-env.bat create mode 100755 external/llvm/scripts/ci/setup-windows-env.bat create mode 100644 external/llvm/test/CodeGen/AArch64/inlineasm-S-constraint.ll create mode 100644 external/llvm/test/CodeGen/AArch64/spill-stack-realignment.mir create mode 100644 external/llvm/test/CodeGen/Hexagon/ifcvt-diamond-ret.mir create mode 100644 external/llvm/test/CodeGen/MIR/PowerPC/ifcvt-diamond-ret.mir create mode 100644 external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-bad-l1.ll create mode 100644 external/llvm/test/CodeGen/PowerPC/no-dup-of-bdnz.ll delete mode 100644 external/llvm/test/CodeGen/X86/clobber-fi0.ll create mode 100644 external/llvm/test/CodeGen/X86/domain-reassignment-implicit-def.ll create mode 100644 external/llvm/test/CodeGen/X86/domain-reassignment-test.ll delete mode 100644 external/llvm/test/CodeGen/X86/eflags-copy-expansion.mir create mode 100644 external/llvm/test/CodeGen/X86/flags-copy-lowering.mir create mode 100644 external/llvm/test/CodeGen/X86/pr37264.ll create mode 100644 external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/Inputs/ppc64_elf_module_b.s create mode 100644 external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/ppc64_elf.s create mode 100644 external/llvm/test/MC/Mips/unsupported-relocation.s create mode 100644 external/llvm/test/Transforms/DeadArgElim/musttail-caller.ll create mode 100644 external/llvm/test/Transforms/JumpThreading/header-succ.ll create mode 100644 external/llvm/test/Transforms/MergeFunc/inline-asm.ll create mode 100644 external/llvm/test/Transforms/MergeFunc/weak-small.ll rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.CSharp.Core.targets (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.CodeAnalysis.CSharp.Scripting.dll (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.CodeAnalysis.dll.REMOVED.git-id (100%) create mode 100644 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.amd64.dll.REMOVED.git-id create mode 100644 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.x86.dll.REMOVED.git-id rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.Managed.Core.targets (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/Microsoft.VisualBasic.Core.targets (100%) create mode 100755 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Roslyn.Compilers.Extension.dll create mode 100755 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Buffers.dll rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/System.Collections.Immutable.dll.REMOVED.git-id (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/System.Memory.dll.REMOVED.git-id (100%) create mode 100644 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Numerics.Vectors.dll.REMOVED.git-id rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/System.Reflection.Metadata.dll.REMOVED.git-id (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/System.Runtime.CompilerServices.Unsafe.dll (100%) create mode 100644 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Text.Encoding.CodePages.dll.REMOVED.git-id rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/System.Threading.Tasks.Extensions.dll (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/VBCSCompiler.exe (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/VBCSCompiler.exe.config (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/csc.exe (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/csc.exe.config (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/csc.rsp (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/csi.exe (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/csi.exe.config (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/csi.rsp (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/vbc.exe (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/vbc.exe.config (100%) rename {mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0 => external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release}/vbc.rsp (100%) create mode 100755 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Roslyn.Compilers.Extension.pdb create mode 100755 external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Roslyn.Compilers.Extension.pkgdef delete mode 100644 mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection/DispatchProxy.cs rename mcs/class/{System.Data.Linq/src/DbLinq/Data/Linq/ITable.Extended.cs => Facades/System.Reflection.DispatchProxy/TypeForwarders.cs} (72%) delete mode 100644 mcs/class/Facades/System.Reflection.TypeExtensions/corefx/SR.cs create mode 100644 mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileData.cs create mode 100644 mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileReader.cs create mode 100644 mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/Records.cs create mode 100644 mcs/class/System.Core/win32_net_4_x_System.Core.dll.exclude.sources create mode 100644 mcs/class/System.Core/winaot_System.Core_test.dll.exclude.sources create mode 100644 mcs/class/System.Core/winaot_System.Core_test.dll.sources rename mcs/class/System.Data.Linq/{src/DbLinq/System.Data.Linq => }/Assembly/AssemblyInfo.cs (54%) create mode 100644 mcs/class/System.Data.Linq/ReferenceSources/Error.cs create mode 100644 mcs/class/System.Data.Linq/ReferenceSources/SR.cs create mode 100644 mcs/class/System.Data.Linq/ReferenceSources/Strings.cs create mode 100644 mcs/class/System.Data.Linq/ReferenceSources/ThisAssembly.cs rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/BinaryTest.cs (92%) rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/DataContextTest.cs (86%) rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/EntitySetTest.cs (94%) rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/NullProvider.cs (100%) rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/PeopleTable.cs (96%) rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/Providers/DataContextTestBase.cs (96%) rename mcs/class/System.Data.Linq/{src/DbLinq.SqlServer/Test => Test/SqlServer}/MsSqlDataContextTest.cs (72%) rename mcs/class/System.Data.Linq/{src/DbLinq => }/Test/TableTest.cs (96%) delete mode 100644 mcs/class/System.Data.Linq/src/Build Northwind parameters.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.Firebird/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Firebird/Test/TestBase.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.Ingres/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Ingres/Test/TestBase.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.MySql/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.MySql/Test/TestBase.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.Oracle/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase_odp.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Test/TestBase.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/TestBase.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/DirectDataContext.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase_mono.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataContext.Extended.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ReadMe.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Notes.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Table.Extended.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/MonoTODOAttribute.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Properties/AssemblyInfo.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.xsd delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/Sql2000Provider.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq/Test/AttributeMappingSourceTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/CsvArrayAdapterTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/ExpressionEqualityComparerTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/IDataTypeExtensionsTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Properties/AssemblyInfo.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Attach.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/CompositePK_Test.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContext.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataLoadOptions_Test.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DynamicLinqTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteCommand_Test.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteQuery_Test.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Internals/ReflectionTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Advanced.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Conversion_Operators.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Count_Sum_Min_Max_Avg.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/ExsistIn_Any_All.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/GroupBy_Having.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Inheritance.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Insert_Update_Delete.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Join.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Linq101SamplesModifiedAttribute.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Null.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object Loading.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object_Identity.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OptimisticConcurrence.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OrderBy.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Paging.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Select_Distinct.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/String_Date_functions.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Top_Bottom.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/UnionAll_Union_Intersect.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Views.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Where.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/MetalTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Ing.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Mysql.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Pg.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2SQLite.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program3Ora.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Properties/AssemblyInfo.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_AllTypes_MySql.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Complex.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_GroupBy.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Operands.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Subquery.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_AnyCountFirst.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Conversions.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_DateTimeFunctions.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_EntitySet.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Join.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Maths.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_ReferenceLoading.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_StringFunctions.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/StoredProcTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Table.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/TestBase.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Transactions.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/VerticalPartitioningTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest_BulkInsert.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbLinq/Test/System.Data.Linq.Mapping/ColumnAttributeTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbLinq/Test/TypeContextTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/AllTypes all to Cs.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/AllTypes to Cs.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/DB all to Cs.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/DB all to DBML.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/DB to Cs.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/DB to DBML.txt delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/Properties/AssemblyInfo.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbMetal/Test/AppRunner.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbMetal/Test/CreateDbmlFromSqliteDbTest.cs delete mode 100755 mcs/class/System.Data.Linq/src/DbMetal/Test/CreateEntitiesFromSqliteDbTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/Test/EnglishWordsTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/Test/FrenchWordsTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/Test/NameFormatterTest.cs delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/oraFieldRenames.xml delete mode 100644 mcs/class/System.Data.Linq/src/DbMetal/pgsqlFieldRenames.xml delete mode 100644 mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Program.cs delete mode 100644 mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/AssemblyInfo.cs delete mode 100644 mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Resources.Designer.cs delete mode 100644 mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Settings.Designer.cs delete mode 100644 mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Program.cs delete mode 100644 mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Properties/AssemblyInfo.cs delete mode 100644 mcs/class/System.Data.Linq/src/readme.txt create mode 100644 mcs/class/System.Data/corefx/DataReaderExtensions.cs create mode 100644 mcs/class/System.Data/corefx/DbProviderFactories.mobile.cs create mode 100644 mcs/class/System.IO.Compression/System.IO.Compression_xtest.dll.sources create mode 100644 mcs/class/System.IO.Compression/corefx/BrotliStubs.cs create mode 100644 mcs/class/System.IO.Compression/corefx/Interop.Libraries.cs create mode 100644 mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.exclude.sources create mode 100644 mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.sources create mode 100644 mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression_xtest.dll.exclude.sources create mode 100644 mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.exclude.sources create mode 100644 mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.sources create mode 100644 mcs/class/System.Net.Http/HttpClient.DefaultHandler.cs create mode 100644 mcs/class/System.Net.Http/HttpClientHandler.wasm.cs create mode 100644 mcs/class/System.Net.Http/HttpRequestMessage.Mono.cs rename mcs/class/System.Net.Http/{HeaderUtils.Legacy.cs => PlatformHelper.Legacy.cs} (63%) rename mcs/class/System.Net.Http/{HeaderUtils.SocketsHandler.cs => PlatformHelper.SocketsHandler.cs} (75%) delete mode 100644 mcs/class/System.Net.Http/StreamContent.Mono.cs create mode 100644 mcs/class/System.Net.Http/corefx/ReadOnlyMemoryContent.cs create mode 100644 mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.exclude.sources create mode 100644 mcs/class/System.Net.Http/socketshandler.sources create mode 100644 mcs/class/System.Net.Http/wasm_System.Net.Http.dll.exclude.sources create mode 100644 mcs/class/System.Private.CoreLib/Makefile create mode 100644 mcs/class/System.Private.CoreLib/Microsoft.Win32.SafeHandles/SafeWaitHandle.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/Microsoft.Win32/UnsafeNativeMethods.cs create mode 100644 mcs/class/System.Private.CoreLib/Mono/MonoDomain.cs create mode 100644 mcs/class/System.Private.CoreLib/Mono/MonoDomainSetup.cs create mode 100644 mcs/class/System.Private.CoreLib/Mono/MonoListItem.cs create mode 100644 mcs/class/System.Private.CoreLib/Mono/RuntimeHandles.cs create mode 100644 mcs/class/System.Private.CoreLib/Resources/SR.common.cs create mode 100644 mcs/class/System.Private.CoreLib/Resources/SR.cs.REMOVED.git-id create mode 100644 mcs/class/System.Private.CoreLib/System.Collections.Generic/ArraySortHelper.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Collections.Generic/Comparer.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Collections.Generic/EqualityComparer.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Diagnostics/Debugger.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Diagnostics/StackFrame.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Diagnostics/StackTrace.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Windows.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.cs create mode 100644 mcs/class/System.Private.CoreLib/System.IO/FileLoadException.cs create mode 100644 mcs/class/System.Private.CoreLib/System.IO/Stream.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Private.CoreLib.csproj create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/AssemblyBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorOnTypeBuilderInst.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/CustomAttributeBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/DerivedTypes.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicILInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.notsupported.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/EnumBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventOnTypeBuilderInst.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldOnTypeBuilderInst.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/GenericTypeParameterBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/ILGenerator.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/LocalBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodOnTypeBuilderInst.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/ModuleBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/MonoArrayMethod.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/ParameterBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyOnTypeBuilderInst.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/SignatureHelper.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilder.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilderInstantiation.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Emit/UnmanagedMarshal.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection.Metadata/AssemblyExtensions.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/Assembly.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/AssemblyName.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeData.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeTypedArgument.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/FieldInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/MemberInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/MethodBase.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeAssembly.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeEventInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeExceptionHandlingClause.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeFieldInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeLocalVariableInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodBody.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeModule.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimeParameterInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Reflection/RuntimePropertyInfo.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Resources/ManifestBasedResourceGroveler.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/DependentHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/JitHelpers.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeFeature.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeHelpers.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/CriticalHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/GCHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/InteropExtensions.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/Marshal.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/MarshalAsAttribute.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Windows.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyDependencyResolver.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyLoadContext.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime.Remoting.Contexts/Context.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime/GCSettings.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Runtime/RuntimeImports.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Security/DynamicSecurityMethodAttribute.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/EventWaitHandle.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/Interlocked.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/Monitor.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/Mutex.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/Overlapped.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/PreAllocatedOverlapped.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/RegisteredWaitHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/Semaphore.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/StackCrawlMark.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/Thread.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/ThreadPool.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/ThreadPoolBoundHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System.Threading/WaitHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System/AppContext.cs create mode 100644 mcs/class/System.Private.CoreLib/System/ArgIterator.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Array.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Attribute.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Buffer.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Delegate.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Enum.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Environment.Unix.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Environment.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Exception.cs create mode 100644 mcs/class/System.Private.CoreLib/System/GC.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Math.cs create mode 100644 mcs/class/System.Private.CoreLib/System/MathF.cs create mode 100644 mcs/class/System.Private.CoreLib/System/MissingMemberException.cs create mode 100644 mcs/class/System.Private.CoreLib/System/ModuleHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System/MulticastDelegate.cs create mode 100644 mcs/class/System.Private.CoreLib/System/NotImplemented.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Nullable.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Object.cs create mode 100644 mcs/class/System.Private.CoreLib/System/RuntimeArgumentHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System/RuntimeFieldHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System/RuntimeMethodHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System/RuntimeType.cs create mode 100644 mcs/class/System.Private.CoreLib/System/RuntimeTypeHandle.cs create mode 100644 mcs/class/System.Private.CoreLib/System/String.cs create mode 100644 mcs/class/System.Private.CoreLib/System/Type.cs create mode 100644 mcs/class/System.Private.CoreLib/System/TypeIdentifier.cs create mode 100644 mcs/class/System.Private.CoreLib/System/TypeLoadException.cs create mode 100644 mcs/class/System.Private.CoreLib/System/TypeNameParser.cs create mode 100644 mcs/class/System.Private.CoreLib/System/TypedReference.cs create mode 100644 mcs/class/System.Private.CoreLib/System/ValueType.cs create mode 100644 mcs/class/System.Private.CoreLib/System/WeakReference.T.cs create mode 100644 mcs/class/System.Private.CoreLib/System/WeakReference.cs create mode 100644 mcs/class/System.Private.CoreLib/System/__ComObject.cs create mode 100644 mcs/class/System.Security/ReferenceSources/DataProtector.cs create mode 100644 mcs/class/System.Security/corefx/SR.cs create mode 100644 mcs/class/System.Security/testing_aot_full_System.Security_test.dll.exclude.sources create mode 100644 mcs/class/System.ServiceModel/testing_aot_full_System.ServiceModel.dll.exclude.sources create mode 100644 mcs/class/System.ServiceModel/testing_aot_full_interp_System.ServiceModel.dll.exclude.sources create mode 100644 mcs/class/System.ServiceModel/testing_aot_hybrid_System.ServiceModel.dll.exclude.sources create mode 100644 mcs/class/System.ServiceModel/wasm_System.ServiceModel.dll.exclude.sources create mode 100644 mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.exclude.sources create mode 100644 mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.sources create mode 100644 mcs/class/System/ReferenceSources/DynamicRoleClaimProvider.cs create mode 100644 mcs/class/System/System.IO/FileSystemWatcher.DefaultEventAttribute.cs rename mcs/class/{System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/Sql2005Provider.cs => System/System.Net.NetworkInformation/FreeBSDNetworkInterface.cs} (77%) create mode 100644 mcs/class/System/System.Net.Security/SslApplicationProtocol.pns.cs create mode 100644 mcs/class/System/System.Net.Security/SslClientAuthenticationOptions.pns.cs create mode 100644 mcs/class/System/System.Net.Security/SslServerAuthenticationOptions.pns.cs create mode 100644 mcs/class/System/Test/TestData/testclienteku.contoso.com.pfx create mode 100644 mcs/class/System/Test/TestData/testnoeku.contoso.com.pfx create mode 100644 mcs/class/System/Test/TestData/testselfsignedservereku.contoso.com.pfx rename mcs/class/{System.Net.Http => System/Test}/TestData/testservereku.contoso.com.pfx (100%) create mode 100644 mcs/class/System/corefx/CertificateRequest.cs create mode 100644 mcs/class/System/corefx/X509SignatureGenerator.cs create mode 100644 mcs/class/System/win32_net_4_x_System_test.dll.sources create mode 100644 mcs/class/System/win32_net_4_x_System_xtest.dll.exclude.sources create mode 100644 mcs/class/System/winaot_System_test.dll.sources create mode 100644 mcs/class/System/xammac_net_4_5_System_xtest.dll.exclude.sources rename mcs/class/corlib/{System/Guid.MonoTouch.cs => CommonCrypto/Guid.cs} (90%) create mode 100644 mcs/class/corlib/System.IO/Path.ns21.cs create mode 100644 mcs/class/corlib/corefx/AesCcm.cs create mode 100644 mcs/class/corlib/corefx/AesGcm.cs create mode 100644 mcs/class/corlib/corefx/DiagnosticCounter.cs create mode 100644 mcs/class/corlib/corefx/EnumeratorCancellationAttribute.cs create mode 100644 mcs/class/corlib/corefx/IncrementingEventCounter.cs create mode 100644 mcs/class/corlib/corefx/IncrementingPollingCounter.cs create mode 100644 mcs/class/corlib/corefx/PbeEncryptionAlgorithm.cs create mode 100644 mcs/class/corlib/corefx/PbeParameters.cs create mode 100644 mcs/class/corlib/corefx/PollingCounter.cs create mode 100644 mcs/class/corlib/corefx/RuntimeFeature.cs create mode 100644 mcs/class/corlib/corefx/Stream.cs create mode 100644 mcs/class/corlib/corefx/SwitchExpressionException.cs create mode 100644 mcs/class/corlib/corefx/TaskAsyncEnumerableExtensions.cs create mode 100644 mcs/class/corlib/corefx/TextWriter.cs create mode 100644 mcs/class/corlib/corefx/ThrowHelper.cs create mode 100644 mcs/class/corlib/corert/CancellationTokenRegistration.cs create mode 100644 mcs/class/corlib/legacy/ActivationServices.cs create mode 100644 mcs/class/corlib/legacy/CallContext.cs create mode 100644 mcs/class/corlib/legacy/Context.cs create mode 100644 mcs/class/corlib/legacy/IRemotingTypeInfo.cs create mode 100644 mcs/class/corlib/legacy/MarshalByRefObject.cs create mode 100644 mcs/class/corlib/legacy/ObjectHandle.cs create mode 100644 mcs/class/corlib/legacy/RealProxy.cs create mode 100644 mcs/class/corlib/legacy/RemotingServices.cs create mode 100644 mcs/class/corlib/testing_aot_common_corlib.dll.exclude.sources create mode 100644 mcs/class/corlib/testing_aot_common_corlib.dll.sources create mode 100644 mcs/class/corlib/testing_aot_common_corlib_test.dll.exclude.sources delete mode 100644 mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.exclude.sources delete mode 100644 mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.sources create mode 100644 mcs/class/corlib/winaot_corlib_test.dll.sources rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.Concurrent.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Debug.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.FileVersionInfo.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Tools.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Dynamic.Runtime.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Globalization.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.Primitives.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.Expressions.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Extensions.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Primitives.dll (100%) create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Resources.ResourceManager.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Extensions.dll (100%) create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Numerics.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Algorithms.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Primitives.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.CodePages.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.Extensions.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.Parallel.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.ValueTuple.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.ReaderWriter.dll (100%) rename mcs/class/lib/monolite-linux/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.XDocument.dll (100%) create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.Concurrent.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Debug.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.FileVersionInfo.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Tools.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Dynamic.Runtime.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Globalization.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.Primitives.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.Expressions.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Extensions.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Primitives.dll (100%) create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Resources.ResourceManager.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Extensions.dll (100%) create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Numerics.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Algorithms.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Primitives.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.CodePages.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.Extensions.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.Parallel.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.ValueTuple.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.ReaderWriter.dll (100%) rename mcs/class/lib/monolite-macos/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.XDocument.dll (100%) create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.Concurrent.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Debug.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.FileVersionInfo.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Tools.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Dynamic.Runtime.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Globalization.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.Primitives.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.Expressions.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Extensions.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Primitives.dll (100%) create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Resources.ResourceManager.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Extensions.dll (100%) create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Numerics.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Algorithms.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Primitives.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.CodePages.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.Extensions.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.Parallel.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.ValueTuple.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.ReaderWriter.dll (100%) rename mcs/class/lib/monolite-unix/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.XDocument.dll (100%) create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.Concurrent.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Collections.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Debug.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.FileVersionInfo.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Diagnostics.Tools.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Dynamic.Runtime.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Globalization.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.Primitives.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.FileSystem.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.IO.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.Expressions.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Linq.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Extensions.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Reflection.Primitives.dll (100%) create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Resources.ResourceManager.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Extensions.dll (100%) create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.Numerics.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Runtime.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Algorithms.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Security.Cryptography.Primitives.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.CodePages.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.Extensions.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Text.Encoding.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.Parallel.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.Tasks.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Threading.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.ValueTuple.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.ReaderWriter.dll (100%) rename mcs/class/lib/monolite-win32/{d0aa6798-834d-11e9-b38a-3b0d70487d01 => 62731146-81CF-4D61-826D-9A8DDED14432}/Facades/System.Xml.XDocument.dll (100%) create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id create mode 100644 mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id delete mode 100644 mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id delete mode 100644 mcs/errors/cs1503-18.cs create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CSharp.Core.targets create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.Scripting.dll create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.dll.REMOVED.git-id create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Managed.Core.targets create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.VisualBasic.Core.targets create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Collections.Immutable.dll.REMOVED.git-id create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Memory.dll.REMOVED.git-id create mode 100644 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Reflection.Metadata.dll.REMOVED.git-id create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Runtime.CompilerServices.Unsafe.dll create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Threading.Tasks.Extensions.dll create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe.config create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe.config create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.rsp create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe.config create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.rsp create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe.config create mode 100755 mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.rsp create mode 100644 mcs/tests/test-tuple-11.cs rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdExpressionTranslator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Firebird/FirebirdVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Ingres/IngresVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.MySql/MySqlVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Oracle/OracleVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.PostgreSql/PgsqlVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.ProductInfo.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.SqlServer/SqlServerDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.SqlServer/SqlServerSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.SqlServer/SqlServerSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.SqlServer/SqlServerTypeConversions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.SqlServer/SqlServerVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/Schema/DataCommand.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteDataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.Sqlite/SqliteVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq.snk (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/ChangeAction.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/ChangeSet.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/DataContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/DataLoadOptions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/IDatabaseContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/EntityRef.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/EntitySet.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/IExecuteResult.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/IMemberModificationHandler.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/ITable.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/IVendorProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/IIdentityReader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/IdentityKey.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/EntityState.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/EntityTrack.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/EntityTracker.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/QueryProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Implementation/VendorProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/MappingContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/RefreshMode.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sql/SqlPart.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sql/SqlStatement.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/BuilderContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/DirectQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Error.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IDataMapper.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IQueryCache.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/QueryContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/SelectQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Data/Linq/Table.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/DbLinqToDoAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Factory/DbLinqAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Factory/IObjectFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Factory/ObjectFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Language/ILanguageWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Language/ILanguages.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Language/Implementation/AbstractWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Language/Implementation/Languages.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Language/Implementation/NoLanguageWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/AssociationName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Case.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/ColumnName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/Adapter/EnumType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/Adapter/INamedType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/DatabaseSerializer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/DbmlSchema.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Dbml/DbmlSerializer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/INameFormatter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Implementation/NameFormatter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/Name.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/NameFormat.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/ParameterName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/ProcedureName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/SchemaName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/TableName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Schema/WordsExtraction.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/Binary.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ChangeConflictException.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/CompiledQuery.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ConflictMode.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/DBConvert.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/DuplicateKeyException.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/IFunctionResult.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/IMultipleResults.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ISingleResult.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/Link.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/MemberChangeConflict.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/DataCommand.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/DbmlExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/ExpressionChainEqualityComparer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/ExpressionEqualityComparer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/IDataRecordExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/IDataTypeExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/IDbDataParameterExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/IThreadSafeDictionary.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/LambdaComparer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/MemberInfoExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/Output.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/OutputLevel.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/Page.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/Profiler.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/QuotesHelper.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/ReferenceEqualityComparer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/ReflectionExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/ReflectionUtility.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/StringExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/TextWriterExtension.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/ThreadSafeDictionary.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/TypeConvert.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/TypeExtensions.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Util/TypeLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/DbSchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/IDataName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/IDataTableColumn.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/IDataType.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/INameAliases.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/ISchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/ISqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/IVendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SchemaLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/SqlProvider.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/Implementation/Vendor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbLinq/Vendor/VendorAttribute.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/AbstractParameters.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Configuration/ProvidersSection.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/AttributeDefinition.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/CodeDomGenerator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/CodeWriter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/EntityInterface/IImplementation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/GenerationContext.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/ICodeGenerator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/IProcessor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/ISchemaLoaderFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/Processor.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/ParameterDefinition.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Generator/SpecificationDefinition.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Language/EnglishWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Language/EnglishWords.txt.REMOVED.git-id (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Language/FrenchWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Language/FrenchWords.txt.REMOVED.git-id (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Language/GermanWords.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Language/GermanWords.txt (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Mono/Options.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Parameters.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Program.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Properties/Settings.Designer.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Reference.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Schema/DbmlRename.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Schema/DbmlRenameLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Schema/NameAliasesLoader.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Schema/TableAlias.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Utility/EnvironmentExtension.cs (100%) rename mcs/{class/System.Data.Linq => tools/sqlmetal}/src/DbMetal/Utility/VariablesExtension.cs (100%) create mode 100644 mono/metadata/icall-signatures.h create mode 100644 mono/metadata/jit-icall-reg.h create mode 100644 mono/metadata/mono-config-internals.h create mode 100644 mono/metadata/mono-hash-internals.h delete mode 100644 mono/metadata/reflection.c create mode 100644 mono/metadata/reflection.c.REMOVED.git-id create mode 100644 mono/tests/common_mixed.mk create mode 100644 mono/tests/custom-modifiers-append.1.il create mode 100644 mono/tests/dim-abstractcall.il create mode 100644 mono/tests/dim-constrained3.il create mode 100644 mono/tests/dim-constrained3_gm.il create mode 100644 mono/tests/dim-generic-interface.il create mode 100644 mono/tests/dim-implements-multiple-interfaces.il create mode 100644 mono/tests/dim-nested-types.il create mode 100644 mono/tests/dim-protected-accessibility1.il create mode 100644 mono/tests/dim-protected-accessibility2.il create mode 100644 mono/tests/dim-reabstraction-generics.il create mode 100644 mono/tests/dim-reabstraction.il create mode 100644 mono/tests/dim-sealed.il create mode 100644 mono/tests/fullaot-mixed/Makefile.am create mode 100644 mono/tests/fullaot-mixed/Makefile.in create mode 100644 mono/tests/gh-13056_mono_local_cprop_av.il create mode 100644 mono/tests/gh-13057_mono_local_emulate_ops_av.il create mode 100644 mono/tests/internalsvisibleto-2048.snk create mode 100644 mono/tests/last-error.cs create mode 100644 mono/tests/twopassvariance.il create mode 100644 mono/unit-tests/test-path.c create mode 100644 mono/utils/mono-os-semaphore-win32.c create mode 100644 mono/utils/strenc-internals.h create mode 100644 msvc/mono-profiler-log.vcxproj diff --git a/Makefile.am b/Makefile.am index a16d230452..0c69b39b4a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,11 +19,17 @@ build_with_msvc = build_without_msvc = msvc endif +if ENABLE_NETCORE +update_submodules = +else +update_submodules = update_submodules +endif + SUBDIRS = $(build_with_msvc) mk po $(libgc_dir) llvm mono $(ikvm_native_dir) support data runtime scripts man samples $(tools_dir) $(build_without_msvc) $(docs_dir) acceptance-tests # Keep in sync with SUBDIRS -DIST_SUBDIRS = $(build_with_msvc) m4 mk po $(libgc_dir) llvm mono ikvm-native support data runtime scripts man samples tools $(build_without_msvc) docs acceptance-tests +DIST_SUBDIRS = $(build_with_msvc) m4 mk po $(libgc_dir) llvm mono ikvm-native support data runtime scripts man samples tools $(build_without_msvc) docs acceptance-tests netcore -all: update_submodules +all: $(update_submodules) update_submodules: @cd $(srcdir) && scripts/update_submodules.sh diff --git a/Makefile.in b/Makefile.in index a54d9fc4fd..f903429977 100644 --- a/Makefile.in +++ b/Makefile.in @@ -241,6 +241,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -371,8 +373,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -489,9 +493,11 @@ MONOTOUCH_SUBDIRS = $(libgc_dir) mono @ENABLE_MSVC_TRUE@build_with_msvc = msvc @ENABLE_MSVC_FALSE@build_without_msvc = msvc @ENABLE_MSVC_TRUE@build_without_msvc = +@ENABLE_NETCORE_FALSE@update_submodules = update_submodules +@ENABLE_NETCORE_TRUE@update_submodules = SUBDIRS = $(build_with_msvc) mk po $(libgc_dir) llvm mono $(ikvm_native_dir) support data runtime scripts man samples $(tools_dir) $(build_without_msvc) $(docs_dir) acceptance-tests # Keep in sync with SUBDIRS -DIST_SUBDIRS = $(build_with_msvc) m4 mk po $(libgc_dir) llvm mono ikvm-native support data runtime scripts man samples tools $(build_without_msvc) docs acceptance-tests +DIST_SUBDIRS = $(build_with_msvc) m4 mk po $(libgc_dir) llvm mono ikvm-native support data runtime scripts man samples tools $(build_without_msvc) docs acceptance-tests netcore EXTRA_DIST = \ README.md \ LICENSE \ @@ -1009,7 +1015,7 @@ uninstall-am: .PRECIOUS: Makefile -all: update_submodules +all: $(update_submodules) update_submodules: @cd $(srcdir) && scripts/update_submodules.sh diff --git a/README.md b/README.md index 7c799b8ee0..5cdbd38762 100644 --- a/README.md +++ b/README.md @@ -306,6 +306,9 @@ faster under the Xen virtualization system. * `--with-large-heap=yes,no` - Enable support for GC heaps larger than 3GB. + * This only applies only to the Boehm garbage collector, the SGen garbage +collector does not use this configuration option. + * This defaults to `no`. * `--enable-small-config=yes,no` - Enable some tweaks to reduce memory usage diff --git a/acceptance-tests/Makefile.in.REMOVED.git-id b/acceptance-tests/Makefile.in.REMOVED.git-id index c6f09d063e..f5f42dfdac 100644 --- a/acceptance-tests/Makefile.in.REMOVED.git-id +++ b/acceptance-tests/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -82211f291c887f62ce30cc2305884e307855ecd8 \ No newline at end of file +f52b3c52f452b58b3574d18627f00353ac002e09 \ No newline at end of file diff --git a/acceptance-tests/SUBMODULES.json b/acceptance-tests/SUBMODULES.json index d81043b42b..a9215de06f 100644 --- a/acceptance-tests/SUBMODULES.json +++ b/acceptance-tests/SUBMODULES.json @@ -10,7 +10,7 @@ { "name": "coreclr", "url": "git://github.com/mono/coreclr.git", - "rev": "1e8d7a94155a04a6556a7ae9ef8dc5841b3ab206", + "rev": "90f7060935732bb624e1f325d23f63072433725f", "remote-branch": "origin/mono", "branch": "mono", "directory": "coreclr" diff --git a/config.h.in b/config.h.in index 64d4f00d75..1792a5bee3 100644 --- a/config.h.in +++ b/config.h.in @@ -342,6 +342,10 @@ 0 if you don't. */ #undef HAVE_DECL_INTERLOCKEDINCREMENT64 +/* Define to 1 if you have the declaration of `pthread_mutexattr_setprotocol', + and to 0 if you don't. */ +#undef HAVE_DECL_PTHREAD_MUTEXATTR_SETPROTOCOL + /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R @@ -1368,6 +1372,9 @@ /* Host Platform is Darwin */ #undef HOST_DARWIN +/* Targeting the Fuchsia platform */ +#undef HOST_FUCHSIA + /* ... */ #undef HOST_MIPS diff --git a/configure.REMOVED.git-id b/configure.REMOVED.git-id index bf3b79eea0..eda9086ec5 100644 --- a/configure.REMOVED.git-id +++ b/configure.REMOVED.git-id @@ -1 +1 @@ -5cddb32e13af11623b2e96384461a2595fae2237 \ No newline at end of file +a133e8adbcdbb6319c3fa3ba0de894b7140e121e \ No newline at end of file diff --git a/configure.ac.REMOVED.git-id b/configure.ac.REMOVED.git-id index f5c719e40b..be0e498519 100644 --- a/configure.ac.REMOVED.git-id +++ b/configure.ac.REMOVED.git-id @@ -1 +1 @@ -c29bc5931daf65abd230d8b4ff4469ff74250676 \ No newline at end of file +366d1ab3d533c3643d80c6c17bdd9e283cb44c07 \ No newline at end of file diff --git a/data/Makefile.in b/data/Makefile.in index 974bbc8d69..38b21af9b1 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -265,6 +265,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -395,8 +397,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/data/lldb/monobt.py b/data/lldb/monobt.py index 162e30f2b6..e9e7d7d9f2 100644 --- a/data/lldb/monobt.py +++ b/data/lldb/monobt.py @@ -20,7 +20,7 @@ def print_frames(thread, num_frames, current_thread): ipoffset = frame.EvaluateExpression('ip').GetValueAsUnsigned() insn = '' if ipoffset != 0: - ipoffset -= frame.EvaluateExpression('rtm->code').GetValueAsUnsigned() + ipoffset -= frame.EvaluateExpression('imethod->code').GetValueAsUnsigned() insn = "\"" + frame.EvaluateExpression('mono_interp_opname [*ip]').summary[1:-1] + "\"" var = '%s::%s @ %d %s || %s' % (klassname, methodname, ipoffset, insn, frame) except Exception as e: diff --git a/data/net_2_0/Browsers/Makefile.in b/data/net_2_0/Browsers/Makefile.in index 86eff4efc8..09300cb0fe 100644 --- a/data/net_2_0/Browsers/Makefile.in +++ b/data/net_2_0/Browsers/Makefile.in @@ -186,6 +186,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -316,8 +318,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/data/net_2_0/Makefile.in b/data/net_2_0/Makefile.in index a55ee9fdd0..5fa64cb367 100644 --- a/data/net_2_0/Makefile.in +++ b/data/net_2_0/Makefile.in @@ -246,6 +246,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -376,8 +378,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/data/net_4_0/Browsers/Makefile.in b/data/net_4_0/Browsers/Makefile.in index 39e058cc51..a7dc12ef19 100644 --- a/data/net_4_0/Browsers/Makefile.in +++ b/data/net_4_0/Browsers/Makefile.in @@ -186,6 +186,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -316,8 +318,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/data/net_4_0/Makefile.in b/data/net_4_0/Makefile.in index b1295834ce..59c13fd044 100644 --- a/data/net_4_0/Makefile.in +++ b/data/net_4_0/Makefile.in @@ -246,6 +246,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -376,8 +378,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/data/net_4_5/Browsers/Makefile.in b/data/net_4_5/Browsers/Makefile.in index c9df52b599..6e7cf9fbd6 100644 --- a/data/net_4_5/Browsers/Makefile.in +++ b/data/net_4_5/Browsers/Makefile.in @@ -186,6 +186,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -316,8 +318,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/data/net_4_5/Makefile.in b/data/net_4_5/Makefile.in index f672865bd0..7c7cbc914a 100644 --- a/data/net_4_5/Makefile.in +++ b/data/net_4_5/Makefile.in @@ -246,6 +246,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -376,8 +378,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/docs/Makefile.in b/docs/Makefile.in index 02b2ac2417..5c242bd2a3 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -187,6 +187,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -317,8 +319,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/docs/deploy/mono-api-class.html b/docs/deploy/mono-api-class.html index 654d8fb571..768be803d4 100644 --- a/docs/deploy/mono-api-class.html +++ b/docs/deploy/mono-api-class.html @@ -1149,8 +1149,7 @@ mono_class_is_enum (MonoClass *klass)
Syntax
gboolean -mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, - gboolean check_interfaces) +mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces)

diff --git a/docs/deploy/mono-api-internal.html b/docs/deploy/mono-api-internal.html index 9a00103080..63758ff1e3 100644 --- a/docs/deploy/mono-api-internal.html +++ b/docs/deploy/mono-api-internal.html @@ -231,8 +231,7 @@

Syntax
-
gunichar2* -mono_unicode_from_external (const gchar *in, gsize *bytes) +
gunichar2*mono_unicode_from_external (const gchar *in, gsize *bytes)

@@ -491,14 +490,14 @@ mono_marshal_get_delegate_invoke (MonoMethod *method, MonoDelegate *del)

Syntax
MonoMethod* -mono_marshal_get_icall_wrapper (MonoMethodSignature *sig, const char *name, gconstpointer func, gboolean check_exceptions) +mono_marshal_get_icall_wrapper (MonoJitICallInfo *callinfo, gboolean check_exceptions)

Description
- Generates IL code for the icall wrapper. The generated method - calls the unmanaged code in func.
+ Generates IL code for the JIT icall wrapper. The generated method + calls the unmanaged code in callinfo->func.
diff --git a/docs/deploy/mono-api-methods.html b/docs/deploy/mono-api-methods.html index c32cf6b873..6eee87c9ca 100644 --- a/docs/deploy/mono-api-methods.html +++ b/docs/deploy/mono-api-methods.html @@ -1026,7 +1026,7 @@ mono_method_body_get_object (MonoDomain *domain, MonoMethod *method)

Parameters
domain an app domain
method a method
Return value
-
A System.Reflection.MethodBody object representing the method method. +
A System.Reflection.MethodBody/RuntimeMethodBody object representing the method method.
diff --git a/docs/deploy/mono-api-reflection.html b/docs/deploy/mono-api-reflection.html index bc95706675..8c4c5e34b5 100644 --- a/docs/deploy/mono-api-reflection.html +++ b/docs/deploy/mono-api-reflection.html @@ -765,7 +765,7 @@ mono_method_body_get_object (MonoDomain *domain, MonoMethod *method)

Parameters
domain an app domain
method a method
Return value
-
A System.Reflection.MethodBody object representing the method method. +
A System.Reflection.MethodBody/RuntimeMethodBody object representing the method method.
diff --git a/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.Primitives.cs b/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.Primitives.cs index 60bef670da..2eed1c12b6 100644 --- a/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.Primitives.cs +++ b/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.Primitives.cs @@ -29,6 +29,7 @@ [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ImmutableObjectAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.InitializationEventAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISite))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISupportInitialize))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.LocalizableAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.MergablePropertyAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.NotifyParentPropertyAttribute))] diff --git a/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.TypeConverter.cs b/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.TypeConverter.cs index 9ee5647431..5b6c1f89cd 100644 --- a/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.TypeConverter.cs +++ b/external/api-snapshot/profiles/monodroid/Facades/System.ComponentModel.TypeConverter.cs @@ -26,6 +26,7 @@ [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionChangeEventArgs))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionChangeEventHandler))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionConverter))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.Container))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CustomTypeDescriptor))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.DateTimeConverter))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.DateTimeOffsetConverter))] diff --git a/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.DispatchProxy.cs b/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.DispatchProxy.cs index 95f1b0adf4..f76bc7630e 100644 --- a/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.DispatchProxy.cs +++ b/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.DispatchProxy.cs @@ -15,50 +15,4 @@ [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] [assembly:System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.RequestMinimum, SkipVerification=true)] -namespace System -{ - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoDocumentationNoteAttribute : System.MonoTODOAttribute - { - public MonoDocumentationNoteAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoExtensionAttribute : System.MonoTODOAttribute - { - public MonoExtensionAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoInternalNoteAttribute : System.MonoTODOAttribute - { - public MonoInternalNoteAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoLimitationAttribute : System.MonoTODOAttribute - { - public MonoLimitationAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoNotSupportedAttribute : System.MonoTODOAttribute - { - public MonoNotSupportedAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoTODOAttribute : System.Attribute - { - public MonoTODOAttribute() { } - public MonoTODOAttribute(string comment) { } - public string Comment { get { throw null; } } - } -} -namespace System.Reflection -{ - public abstract partial class DispatchProxy - { - [System.MonoTODOAttribute] - protected DispatchProxy() { } - [System.MonoTODOAttribute] - public static T Create() where TProxy : System.Reflection.DispatchProxy { throw null; } - [System.MonoTODOAttribute] - protected abstract object Invoke(System.Reflection.MethodInfo targetMethod, object[] args); - } -} +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.DispatchProxy))] diff --git a/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.TypeExtensions.cs b/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.TypeExtensions.cs index 34089a9594..806e9f5849 100644 --- a/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.TypeExtensions.cs +++ b/external/api-snapshot/profiles/monodroid/Facades/System.Reflection.TypeExtensions.cs @@ -14,81 +14,11 @@ [assembly:System.Reflection.AssemblyTitleAttribute("System.Reflection.TypeExtensions")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.AssemblyExtensions))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.BindingFlags))] -namespace System.Reflection -{ - public static partial class AssemblyExtensions - { - public static System.Type[] GetExportedTypes(System.Reflection.Assembly assembly) { throw null; } - public static System.Reflection.Module[] GetModules(System.Reflection.Assembly assembly) { throw null; } - public static System.Type[] GetTypes(System.Reflection.Assembly assembly) { throw null; } - } - public static partial class EventInfoExtensions - { - public static System.Reflection.MethodInfo GetAddMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetAddMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetRaiseMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetRaiseMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetRemoveMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetRemoveMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - } - public static partial class MemberInfoExtensions - { - public static int GetMetadataToken(this System.Reflection.MemberInfo member) { throw null; } - public static bool HasMetadataToken(this System.Reflection.MemberInfo member) { throw null; } - } - public static partial class MethodInfoExtensions - { - public static System.Reflection.MethodInfo GetBaseDefinition(System.Reflection.MethodInfo method) { throw null; } - } - public static partial class ModuleExtensions - { - public static System.Guid GetModuleVersionId(this System.Reflection.Module module) { throw null; } - public static bool HasModuleVersionId(this System.Reflection.Module module) { throw null; } - } - public static partial class PropertyInfoExtensions - { - public static System.Reflection.MethodInfo[] GetAccessors(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo[] GetAccessors(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetGetMethod(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo GetGetMethod(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetSetMethod(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo GetSetMethod(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - } - public static partial class TypeExtensions - { - public static System.Reflection.ConstructorInfo GetConstructor(System.Type type, System.Type[] types) { throw null; } - public static System.Reflection.ConstructorInfo[] GetConstructors(System.Type type) { throw null; } - public static System.Reflection.ConstructorInfo[] GetConstructors(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MemberInfo[] GetDefaultMembers(System.Type type) { throw null; } - public static System.Reflection.EventInfo GetEvent(System.Type type, string name) { throw null; } - public static System.Reflection.EventInfo GetEvent(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.EventInfo[] GetEvents(System.Type type) { throw null; } - public static System.Reflection.EventInfo[] GetEvents(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.FieldInfo GetField(System.Type type, string name) { throw null; } - public static System.Reflection.FieldInfo GetField(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.FieldInfo[] GetFields(System.Type type) { throw null; } - public static System.Reflection.FieldInfo[] GetFields(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type[] GetGenericArguments(System.Type type) { throw null; } - public static System.Type[] GetInterfaces(System.Type type) { throw null; } - public static System.Reflection.MemberInfo[] GetMember(System.Type type, string name) { throw null; } - public static System.Reflection.MemberInfo[] GetMember(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MemberInfo[] GetMembers(System.Type type) { throw null; } - public static System.Reflection.MemberInfo[] GetMembers(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name, System.Type[] types) { throw null; } - public static System.Reflection.MethodInfo[] GetMethods(System.Type type) { throw null; } - public static System.Reflection.MethodInfo[] GetMethods(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type GetNestedType(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type[] GetNestedTypes(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo[] GetProperties(System.Type type) { throw null; } - public static System.Reflection.PropertyInfo[] GetProperties(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Type returnType) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Type returnType, System.Type[] types) { throw null; } - public static bool IsAssignableFrom(System.Type type, System.Type c) { throw null; } - public static bool IsInstanceOfType(System.Type type, object o) { throw null; } - } -} +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.EventInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MemberInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MethodInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.ModuleExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.PropertyInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.TypeExtensions))] diff --git a/external/api-snapshot/profiles/monodroid/Facades/netstandard.cs.REMOVED.git-id b/external/api-snapshot/profiles/monodroid/Facades/netstandard.cs.REMOVED.git-id index 4416fc4988..c51896e67b 100644 --- a/external/api-snapshot/profiles/monodroid/Facades/netstandard.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monodroid/Facades/netstandard.cs.REMOVED.git-id @@ -1 +1 @@ -a438847534be72b44f416c7d8fa4304d446ad10a \ No newline at end of file +faec721a749e501975809f748630ed297fd55e50 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monodroid/System.Core.cs.REMOVED.git-id b/external/api-snapshot/profiles/monodroid/System.Core.cs.REMOVED.git-id index 76a23a64db..b8462a1350 100644 --- a/external/api-snapshot/profiles/monodroid/System.Core.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monodroid/System.Core.cs.REMOVED.git-id @@ -1 +1 @@ -0f27d5dca93a66ef6d5377c8ded4782c7bddc1e6 \ No newline at end of file +d3f38c586a1a7c0e3938542a54de451f4a80c303 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monodroid/System.Data.cs.REMOVED.git-id b/external/api-snapshot/profiles/monodroid/System.Data.cs.REMOVED.git-id index 02e8c79ace..1aec78a335 100644 --- a/external/api-snapshot/profiles/monodroid/System.Data.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monodroid/System.Data.cs.REMOVED.git-id @@ -1 +1 @@ -d603652b9b57ec864e79dd5433bf440acad6afc7 \ No newline at end of file +997751320b5755767912d16a10920d73fac82394 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monodroid/System.IO.Compression.cs b/external/api-snapshot/profiles/monodroid/System.IO.Compression.cs index 3595c721ab..797c539482 100644 --- a/external/api-snapshot/profiles/monodroid/System.IO.Compression.cs +++ b/external/api-snapshot/profiles/monodroid/System.IO.Compression.cs @@ -15,12 +15,65 @@ [assembly:System.Reflection.AssemblyTitleAttribute("System.IO.Compression.dll")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] +[assembly:System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.RequestMinimum, SkipVerification=true)] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.CompressionLevel))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.CompressionMode))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.DeflateStream))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.GZipStream))] namespace System.IO.Compression { + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public partial struct BrotliDecoder : System.IDisposable + { + private object _dummy; + private int _dummyPrimitive; + public System.Buffers.OperationStatus Decompress(System.ReadOnlySpan source, System.Span destination, out int bytesConsumed, out int bytesWritten) { throw null; } + public void Dispose() { } + public static bool TryDecompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten) { throw null; } + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public partial struct BrotliEncoder : System.IDisposable + { + private object _dummy; + private int _dummyPrimitive; + public BrotliEncoder(int quality, int window) { throw null; } + public System.Buffers.OperationStatus Compress(System.ReadOnlySpan source, System.Span destination, out int bytesConsumed, out int bytesWritten, bool isFinalBlock) { throw null; } + public void Dispose() { } + public System.Buffers.OperationStatus Flush(System.Span destination, out int bytesWritten) { throw null; } + public static int GetMaxCompressedLength(int length) { throw null; } + public static bool TryCompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten) { throw null; } + public static bool TryCompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten, int quality, int window) { throw null; } + } + public sealed partial class BrotliStream : System.IO.Stream + { + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel, bool leaveOpen) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionMode mode) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionMode mode, bool leaveOpen) { } + public System.IO.Stream BaseStream { get { throw null; } } + public override bool CanRead { get { throw null; } } + public override bool CanSeek { get { throw null; } } + public override bool CanWrite { get { throw null; } } + public override long Length { get { throw null; } } + public override long Position { get { throw null; } set { } } + public override System.IAsyncResult BeginRead(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw null; } + public override System.IAsyncResult BeginWrite(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw null; } + protected override void Dispose(bool disposing) { } + public override int EndRead(System.IAsyncResult asyncResult) { throw null; } + public override void EndWrite(System.IAsyncResult asyncResult) { } + public override void Flush() { } + public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { throw null; } + public override int Read(byte[] buffer, int offset, int count) { throw null; } + public override int Read(System.Span buffer) { throw null; } + public override System.Threading.Tasks.Task ReadAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { throw null; } + public override System.Threading.Tasks.ValueTask ReadAsync(System.Memory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public override long Seek(long offset, System.IO.SeekOrigin origin) { throw null; } + public override void SetLength(long value) { } + public override void Write(byte[] buffer, int offset, int count) { } + public override void Write(System.ReadOnlySpan buffer) { } + public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { throw null; } + public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + } public partial class ZipArchive : System.IDisposable { public ZipArchive(System.IO.Stream stream) { } diff --git a/external/api-snapshot/profiles/monodroid/System.Net.Http.cs b/external/api-snapshot/profiles/monodroid/System.Net.Http.cs index 27c48b2fb5..507b05e716 100644 --- a/external/api-snapshot/profiles/monodroid/System.Net.Http.cs +++ b/external/api-snapshot/profiles/monodroid/System.Net.Http.cs @@ -27,7 +27,7 @@ namespace System.Net.Http public ByteArrayContent(byte[] content) { } public ByteArrayContent(byte[] content, int offset, int count) { } protected override System.Threading.Tasks.Task CreateContentReadStreamAsync() { throw null; } - protected internal override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } + protected override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } protected internal override bool TryComputeLength(out long length) { throw null; } } public enum ClientCertificateOption @@ -76,6 +76,10 @@ namespace System.Net.Http public System.Threading.Tasks.Task GetStreamAsync(System.Uri requestUri) { throw null; } public System.Threading.Tasks.Task GetStringAsync(string requestUri) { throw null; } public System.Threading.Tasks.Task GetStringAsync(System.Uri requestUri) { throw null; } + public System.Threading.Tasks.Task PatchAsync(string requestUri, System.Net.Http.HttpContent content) { throw null; } + public System.Threading.Tasks.Task PatchAsync(string requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) { throw null; } + public System.Threading.Tasks.Task PatchAsync(System.Uri requestUri, System.Net.Http.HttpContent content) { throw null; } + public System.Threading.Tasks.Task PatchAsync(System.Uri requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) { throw null; } public System.Threading.Tasks.Task PostAsync(string requestUri, System.Net.Http.HttpContent content) { throw null; } public System.Threading.Tasks.Task PostAsync(string requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) { throw null; } public System.Threading.Tasks.Task PostAsync(System.Uri requestUri, System.Net.Http.HttpContent content) { throw null; } @@ -99,6 +103,7 @@ namespace System.Net.Http public System.Security.Cryptography.X509Certificates.X509CertificateCollection ClientCertificates { get { throw null; } } public System.Net.CookieContainer CookieContainer { get { throw null; } set { } } public System.Net.ICredentials Credentials { get { throw null; } set { } } + public static System.Func DangerousAcceptAnyServerCertificateValidator { get { throw null; } } public System.Net.ICredentials DefaultProxyCredentials { get { throw null; } set { } } public int MaxAutomaticRedirections { get { throw null; } set { } } public int MaxConnectionsPerServer { get { throw null; } set { } } @@ -137,7 +142,7 @@ namespace System.Net.Http public System.Threading.Tasks.Task ReadAsByteArrayAsync() { throw null; } public System.Threading.Tasks.Task ReadAsStreamAsync() { throw null; } public System.Threading.Tasks.Task ReadAsStringAsync() { throw null; } - protected internal abstract System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context); + protected abstract System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context); protected internal abstract bool TryComputeLength(out long length); } public abstract partial class HttpMessageHandler : System.IDisposable @@ -163,6 +168,7 @@ namespace System.Net.Http public static System.Net.Http.HttpMethod Head { get { throw null; } } public string Method { get { throw null; } } public static System.Net.Http.HttpMethod Options { get { throw null; } } + public static System.Net.Http.HttpMethod Patch { get { throw null; } } public static System.Net.Http.HttpMethod Post { get { throw null; } } public static System.Net.Http.HttpMethod Put { get { throw null; } } public static System.Net.Http.HttpMethod Trace { get { throw null; } } @@ -205,6 +211,7 @@ namespace System.Net.Http public string ReasonPhrase { get { throw null; } set { } } public System.Net.Http.HttpRequestMessage RequestMessage { get { throw null; } set { } } public System.Net.HttpStatusCode StatusCode { get { throw null; } set { } } + public System.Net.Http.Headers.HttpResponseHeaders TrailingHeaders { get { throw null; } } public System.Version Version { get { throw null; } set { } } public void Dispose() { } protected virtual void Dispose(bool disposing) { } @@ -225,9 +232,10 @@ namespace System.Net.Http public MultipartContent(string subtype) { } public MultipartContent(string subtype, string boundary) { } public virtual void Add(System.Net.Http.HttpContent content) { } + protected override System.Threading.Tasks.Task CreateContentReadStreamAsync() { throw null; } protected override void Dispose(bool disposing) { } public System.Collections.Generic.IEnumerator GetEnumerator() { throw null; } - protected internal override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } + protected override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; } protected internal override bool TryComputeLength(out long length) { throw null; } } @@ -239,13 +247,46 @@ namespace System.Net.Http public void Add(System.Net.Http.HttpContent content, string name) { } public void Add(System.Net.Http.HttpContent content, string name, string fileName) { } } + public sealed partial class ReadOnlyMemoryContent : System.Net.Http.HttpContent + { + public ReadOnlyMemoryContent(System.ReadOnlyMemory content) { } + protected override System.Threading.Tasks.Task CreateContentReadStreamAsync() { throw null; } + protected override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } + protected internal override bool TryComputeLength(out long length) { throw null; } + } + public sealed partial class SocketsHttpHandler : System.Net.Http.HttpMessageHandler, System.IDisposable + { + public SocketsHttpHandler() { } + public bool AllowAutoRedirect { get { throw null; } set { } } + public System.Net.DecompressionMethods AutomaticDecompression { get { throw null; } set { } } + public System.TimeSpan ConnectTimeout { get { throw null; } set { } } + public System.Net.CookieContainer CookieContainer { get { throw null; } set { } } + public System.Net.ICredentials Credentials { get { throw null; } set { } } + public System.Net.ICredentials DefaultProxyCredentials { get { throw null; } set { } } + public System.TimeSpan Expect100ContinueTimeout { get { throw null; } set { } } + public int MaxAutomaticRedirections { get { throw null; } set { } } + public int MaxConnectionsPerServer { get { throw null; } set { } } + public int MaxResponseDrainSize { get { throw null; } set { } } + public int MaxResponseHeadersLength { get { throw null; } set { } } + public System.TimeSpan PooledConnectionIdleTimeout { get { throw null; } set { } } + public System.TimeSpan PooledConnectionLifetime { get { throw null; } set { } } + public bool PreAuthenticate { get { throw null; } set { } } + public System.Collections.Generic.IDictionary Properties { get { throw null; } } + public System.Net.IWebProxy Proxy { get { throw null; } set { } } + public System.TimeSpan ResponseDrainTimeout { get { throw null; } set { } } + public System.Net.Security.SslClientAuthenticationOptions SslOptions { get { throw null; } set { } } + public bool UseCookies { get { throw null; } set { } } + public bool UseProxy { get { throw null; } set { } } + protected override void Dispose(bool disposing) { } + protected internal override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { throw null; } + } public partial class StreamContent : System.Net.Http.HttpContent { public StreamContent(System.IO.Stream content) { } public StreamContent(System.IO.Stream content, int bufferSize) { } protected override System.Threading.Tasks.Task CreateContentReadStreamAsync() { throw null; } protected override void Dispose(bool disposing) { } - protected internal override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } + protected override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } protected internal override bool TryComputeLength(out long length) { throw null; } } public partial class StringContent : System.Net.Http.ByteArrayContent @@ -468,17 +509,18 @@ namespace System.Net.Http.Headers public override string ToString() { throw null; } public static bool TryParse(string input, out System.Net.Http.Headers.MediaTypeHeaderValue parsedValue) { throw null; } } - public sealed partial class MediaTypeWithQualityHeaderValue : System.Net.Http.Headers.MediaTypeHeaderValue + public sealed partial class MediaTypeWithQualityHeaderValue : System.Net.Http.Headers.MediaTypeHeaderValue, System.ICloneable { - public MediaTypeWithQualityHeaderValue(string mediaType) : base (default(string)) { } - public MediaTypeWithQualityHeaderValue(string mediaType, double quality) : base (default(string)) { } + public MediaTypeWithQualityHeaderValue(string mediaType) : base (default(System.Net.Http.Headers.MediaTypeHeaderValue)) { } + public MediaTypeWithQualityHeaderValue(string mediaType, double quality) : base (default(System.Net.Http.Headers.MediaTypeHeaderValue)) { } public System.Nullable Quality { get { throw null; } set { } } public static new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue Parse(string input) { throw null; } + object System.ICloneable.Clone() { throw null; } public static bool TryParse(string input, out System.Net.Http.Headers.MediaTypeWithQualityHeaderValue parsedValue) { throw null; } } public partial class NameValueHeaderValue : System.ICloneable { - protected internal NameValueHeaderValue(System.Net.Http.Headers.NameValueHeaderValue source) { } + protected NameValueHeaderValue(System.Net.Http.Headers.NameValueHeaderValue source) { } public NameValueHeaderValue(string name) { } public NameValueHeaderValue(string name, string value) { } public string Name { get { throw null; } } @@ -606,12 +648,13 @@ namespace System.Net.Http.Headers public override string ToString() { throw null; } public static bool TryParse(string input, out System.Net.Http.Headers.TransferCodingHeaderValue parsedValue) { throw null; } } - public sealed partial class TransferCodingWithQualityHeaderValue : System.Net.Http.Headers.TransferCodingHeaderValue + public sealed partial class TransferCodingWithQualityHeaderValue : System.Net.Http.Headers.TransferCodingHeaderValue, System.ICloneable { - public TransferCodingWithQualityHeaderValue(string value) : base (default(string)) { } - public TransferCodingWithQualityHeaderValue(string value, double quality) : base (default(string)) { } + public TransferCodingWithQualityHeaderValue(string value) : base (default(System.Net.Http.Headers.TransferCodingHeaderValue)) { } + public TransferCodingWithQualityHeaderValue(string value, double quality) : base (default(System.Net.Http.Headers.TransferCodingHeaderValue)) { } public System.Nullable Quality { get { throw null; } set { } } public static new System.Net.Http.Headers.TransferCodingWithQualityHeaderValue Parse(string input) { throw null; } + object System.ICloneable.Clone() { throw null; } public static bool TryParse(string input, out System.Net.Http.Headers.TransferCodingWithQualityHeaderValue parsedValue) { throw null; } } public partial class ViaHeaderValue : System.ICloneable diff --git a/external/api-snapshot/profiles/monodroid/System.Xml.cs.REMOVED.git-id b/external/api-snapshot/profiles/monodroid/System.Xml.cs.REMOVED.git-id index 131e6efd34..87273170ba 100644 --- a/external/api-snapshot/profiles/monodroid/System.Xml.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monodroid/System.Xml.cs.REMOVED.git-id @@ -1 +1 @@ -d08fc2a0f76356799f0c3866ee88c089a1b44ffc \ No newline at end of file +58b5b7f5d1934f76d073804edc65534dba5e310a \ No newline at end of file diff --git a/external/api-snapshot/profiles/monodroid/System.cs.REMOVED.git-id b/external/api-snapshot/profiles/monodroid/System.cs.REMOVED.git-id index 2b10bc7664..94625b1480 100644 --- a/external/api-snapshot/profiles/monodroid/System.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monodroid/System.cs.REMOVED.git-id @@ -1 +1 @@ -c876fc10c44dfbcd52c7bbff4f0aa7e6b9dd856d \ No newline at end of file +37208de3822bb74521236d8b06326e9e402b24c7 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monodroid/mscorlib.cs.REMOVED.git-id b/external/api-snapshot/profiles/monodroid/mscorlib.cs.REMOVED.git-id index f045e64a87..b2a1558118 100644 --- a/external/api-snapshot/profiles/monodroid/mscorlib.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monodroid/mscorlib.cs.REMOVED.git-id @@ -1 +1 @@ -505ae17b8dc98c3bbf1edd670f5bcc78ed694c38 \ No newline at end of file +2acb945e78fa15edc6839274ca4c17b9e5fbe024 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.Primitives.cs b/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.Primitives.cs index 60bef670da..2eed1c12b6 100644 --- a/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.Primitives.cs +++ b/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.Primitives.cs @@ -29,6 +29,7 @@ [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ImmutableObjectAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.InitializationEventAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISite))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISupportInitialize))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.LocalizableAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.MergablePropertyAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.NotifyParentPropertyAttribute))] diff --git a/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.TypeConverter.cs b/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.TypeConverter.cs index 9ee5647431..5b6c1f89cd 100644 --- a/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.TypeConverter.cs +++ b/external/api-snapshot/profiles/monotouch/Facades/System.ComponentModel.TypeConverter.cs @@ -26,6 +26,7 @@ [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionChangeEventArgs))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionChangeEventHandler))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionConverter))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.Container))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CustomTypeDescriptor))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.DateTimeConverter))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.DateTimeOffsetConverter))] diff --git a/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.DispatchProxy.cs b/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.DispatchProxy.cs index 95f1b0adf4..f76bc7630e 100644 --- a/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.DispatchProxy.cs +++ b/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.DispatchProxy.cs @@ -15,50 +15,4 @@ [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] [assembly:System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.RequestMinimum, SkipVerification=true)] -namespace System -{ - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoDocumentationNoteAttribute : System.MonoTODOAttribute - { - public MonoDocumentationNoteAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoExtensionAttribute : System.MonoTODOAttribute - { - public MonoExtensionAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoInternalNoteAttribute : System.MonoTODOAttribute - { - public MonoInternalNoteAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoLimitationAttribute : System.MonoTODOAttribute - { - public MonoLimitationAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoNotSupportedAttribute : System.MonoTODOAttribute - { - public MonoNotSupportedAttribute(string comment) { } - } - [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] - internal partial class MonoTODOAttribute : System.Attribute - { - public MonoTODOAttribute() { } - public MonoTODOAttribute(string comment) { } - public string Comment { get { throw null; } } - } -} -namespace System.Reflection -{ - public abstract partial class DispatchProxy - { - [System.MonoTODOAttribute] - protected DispatchProxy() { } - [System.MonoTODOAttribute] - public static T Create() where TProxy : System.Reflection.DispatchProxy { throw null; } - [System.MonoTODOAttribute] - protected abstract object Invoke(System.Reflection.MethodInfo targetMethod, object[] args); - } -} +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.DispatchProxy))] diff --git a/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.TypeExtensions.cs b/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.TypeExtensions.cs index 34089a9594..806e9f5849 100644 --- a/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.TypeExtensions.cs +++ b/external/api-snapshot/profiles/monotouch/Facades/System.Reflection.TypeExtensions.cs @@ -14,81 +14,11 @@ [assembly:System.Reflection.AssemblyTitleAttribute("System.Reflection.TypeExtensions")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.AssemblyExtensions))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.BindingFlags))] -namespace System.Reflection -{ - public static partial class AssemblyExtensions - { - public static System.Type[] GetExportedTypes(System.Reflection.Assembly assembly) { throw null; } - public static System.Reflection.Module[] GetModules(System.Reflection.Assembly assembly) { throw null; } - public static System.Type[] GetTypes(System.Reflection.Assembly assembly) { throw null; } - } - public static partial class EventInfoExtensions - { - public static System.Reflection.MethodInfo GetAddMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetAddMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetRaiseMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetRaiseMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetRemoveMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetRemoveMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - } - public static partial class MemberInfoExtensions - { - public static int GetMetadataToken(this System.Reflection.MemberInfo member) { throw null; } - public static bool HasMetadataToken(this System.Reflection.MemberInfo member) { throw null; } - } - public static partial class MethodInfoExtensions - { - public static System.Reflection.MethodInfo GetBaseDefinition(System.Reflection.MethodInfo method) { throw null; } - } - public static partial class ModuleExtensions - { - public static System.Guid GetModuleVersionId(this System.Reflection.Module module) { throw null; } - public static bool HasModuleVersionId(this System.Reflection.Module module) { throw null; } - } - public static partial class PropertyInfoExtensions - { - public static System.Reflection.MethodInfo[] GetAccessors(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo[] GetAccessors(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetGetMethod(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo GetGetMethod(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetSetMethod(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo GetSetMethod(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - } - public static partial class TypeExtensions - { - public static System.Reflection.ConstructorInfo GetConstructor(System.Type type, System.Type[] types) { throw null; } - public static System.Reflection.ConstructorInfo[] GetConstructors(System.Type type) { throw null; } - public static System.Reflection.ConstructorInfo[] GetConstructors(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MemberInfo[] GetDefaultMembers(System.Type type) { throw null; } - public static System.Reflection.EventInfo GetEvent(System.Type type, string name) { throw null; } - public static System.Reflection.EventInfo GetEvent(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.EventInfo[] GetEvents(System.Type type) { throw null; } - public static System.Reflection.EventInfo[] GetEvents(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.FieldInfo GetField(System.Type type, string name) { throw null; } - public static System.Reflection.FieldInfo GetField(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.FieldInfo[] GetFields(System.Type type) { throw null; } - public static System.Reflection.FieldInfo[] GetFields(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type[] GetGenericArguments(System.Type type) { throw null; } - public static System.Type[] GetInterfaces(System.Type type) { throw null; } - public static System.Reflection.MemberInfo[] GetMember(System.Type type, string name) { throw null; } - public static System.Reflection.MemberInfo[] GetMember(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MemberInfo[] GetMembers(System.Type type) { throw null; } - public static System.Reflection.MemberInfo[] GetMembers(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name, System.Type[] types) { throw null; } - public static System.Reflection.MethodInfo[] GetMethods(System.Type type) { throw null; } - public static System.Reflection.MethodInfo[] GetMethods(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type GetNestedType(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type[] GetNestedTypes(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo[] GetProperties(System.Type type) { throw null; } - public static System.Reflection.PropertyInfo[] GetProperties(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Type returnType) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Type returnType, System.Type[] types) { throw null; } - public static bool IsAssignableFrom(System.Type type, System.Type c) { throw null; } - public static bool IsInstanceOfType(System.Type type, object o) { throw null; } - } -} +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.EventInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MemberInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MethodInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.ModuleExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.PropertyInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.TypeExtensions))] diff --git a/external/api-snapshot/profiles/monotouch/Facades/netstandard.cs.REMOVED.git-id b/external/api-snapshot/profiles/monotouch/Facades/netstandard.cs.REMOVED.git-id index 4416fc4988..c51896e67b 100644 --- a/external/api-snapshot/profiles/monotouch/Facades/netstandard.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monotouch/Facades/netstandard.cs.REMOVED.git-id @@ -1 +1 @@ -a438847534be72b44f416c7d8fa4304d446ad10a \ No newline at end of file +faec721a749e501975809f748630ed297fd55e50 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monotouch/System.Core.cs.REMOVED.git-id b/external/api-snapshot/profiles/monotouch/System.Core.cs.REMOVED.git-id index babb75b265..c56c4eed0a 100644 --- a/external/api-snapshot/profiles/monotouch/System.Core.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monotouch/System.Core.cs.REMOVED.git-id @@ -1 +1 @@ -7778ed32622d805dcf7b92ebc3cb615205382a38 \ No newline at end of file +a2903c6766e68bca999f5676b4a81e8d36db472c \ No newline at end of file diff --git a/external/api-snapshot/profiles/monotouch/System.Data.cs.REMOVED.git-id b/external/api-snapshot/profiles/monotouch/System.Data.cs.REMOVED.git-id index 02e8c79ace..1aec78a335 100644 --- a/external/api-snapshot/profiles/monotouch/System.Data.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monotouch/System.Data.cs.REMOVED.git-id @@ -1 +1 @@ -d603652b9b57ec864e79dd5433bf440acad6afc7 \ No newline at end of file +997751320b5755767912d16a10920d73fac82394 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monotouch/System.IO.Compression.cs b/external/api-snapshot/profiles/monotouch/System.IO.Compression.cs index 3595c721ab..797c539482 100644 --- a/external/api-snapshot/profiles/monotouch/System.IO.Compression.cs +++ b/external/api-snapshot/profiles/monotouch/System.IO.Compression.cs @@ -15,12 +15,65 @@ [assembly:System.Reflection.AssemblyTitleAttribute("System.IO.Compression.dll")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] +[assembly:System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.RequestMinimum, SkipVerification=true)] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.CompressionLevel))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.CompressionMode))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.DeflateStream))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.GZipStream))] namespace System.IO.Compression { + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public partial struct BrotliDecoder : System.IDisposable + { + private object _dummy; + private int _dummyPrimitive; + public System.Buffers.OperationStatus Decompress(System.ReadOnlySpan source, System.Span destination, out int bytesConsumed, out int bytesWritten) { throw null; } + public void Dispose() { } + public static bool TryDecompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten) { throw null; } + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public partial struct BrotliEncoder : System.IDisposable + { + private object _dummy; + private int _dummyPrimitive; + public BrotliEncoder(int quality, int window) { throw null; } + public System.Buffers.OperationStatus Compress(System.ReadOnlySpan source, System.Span destination, out int bytesConsumed, out int bytesWritten, bool isFinalBlock) { throw null; } + public void Dispose() { } + public System.Buffers.OperationStatus Flush(System.Span destination, out int bytesWritten) { throw null; } + public static int GetMaxCompressedLength(int length) { throw null; } + public static bool TryCompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten) { throw null; } + public static bool TryCompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten, int quality, int window) { throw null; } + } + public sealed partial class BrotliStream : System.IO.Stream + { + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel, bool leaveOpen) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionMode mode) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionMode mode, bool leaveOpen) { } + public System.IO.Stream BaseStream { get { throw null; } } + public override bool CanRead { get { throw null; } } + public override bool CanSeek { get { throw null; } } + public override bool CanWrite { get { throw null; } } + public override long Length { get { throw null; } } + public override long Position { get { throw null; } set { } } + public override System.IAsyncResult BeginRead(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw null; } + public override System.IAsyncResult BeginWrite(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw null; } + protected override void Dispose(bool disposing) { } + public override int EndRead(System.IAsyncResult asyncResult) { throw null; } + public override void EndWrite(System.IAsyncResult asyncResult) { } + public override void Flush() { } + public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { throw null; } + public override int Read(byte[] buffer, int offset, int count) { throw null; } + public override int Read(System.Span buffer) { throw null; } + public override System.Threading.Tasks.Task ReadAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { throw null; } + public override System.Threading.Tasks.ValueTask ReadAsync(System.Memory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public override long Seek(long offset, System.IO.SeekOrigin origin) { throw null; } + public override void SetLength(long value) { } + public override void Write(byte[] buffer, int offset, int count) { } + public override void Write(System.ReadOnlySpan buffer) { } + public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { throw null; } + public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + } public partial class ZipArchive : System.IDisposable { public ZipArchive(System.IO.Stream stream) { } diff --git a/external/api-snapshot/profiles/monotouch/System.Net.Http.cs b/external/api-snapshot/profiles/monotouch/System.Net.Http.cs index cd095374c8..b56a900918 100644 --- a/external/api-snapshot/profiles/monotouch/System.Net.Http.cs +++ b/external/api-snapshot/profiles/monotouch/System.Net.Http.cs @@ -79,6 +79,10 @@ namespace System.Net.Http public System.Threading.Tasks.Task GetStreamAsync(System.Uri requestUri) { throw null; } public System.Threading.Tasks.Task GetStringAsync(string requestUri) { throw null; } public System.Threading.Tasks.Task GetStringAsync(System.Uri requestUri) { throw null; } + public System.Threading.Tasks.Task PatchAsync(string requestUri, System.Net.Http.HttpContent content) { throw null; } + public System.Threading.Tasks.Task PatchAsync(string requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) { throw null; } + public System.Threading.Tasks.Task PatchAsync(System.Uri requestUri, System.Net.Http.HttpContent content) { throw null; } + public System.Threading.Tasks.Task PatchAsync(System.Uri requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) { throw null; } public System.Threading.Tasks.Task PostAsync(string requestUri, System.Net.Http.HttpContent content) { throw null; } public System.Threading.Tasks.Task PostAsync(string requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) { throw null; } public System.Threading.Tasks.Task PostAsync(System.Uri requestUri, System.Net.Http.HttpContent content) { throw null; } @@ -102,6 +106,7 @@ namespace System.Net.Http public System.Security.Cryptography.X509Certificates.X509CertificateCollection ClientCertificates { get { throw null; } } public System.Net.CookieContainer CookieContainer { get { throw null; } set { } } public System.Net.ICredentials Credentials { get { throw null; } set { } } + public static System.Func DangerousAcceptAnyServerCertificateValidator { get { throw null; } } public System.Net.ICredentials DefaultProxyCredentials { get { throw null; } set { } } public int MaxAutomaticRedirections { get { throw null; } set { } } public int MaxConnectionsPerServer { get { throw null; } set { } } @@ -166,6 +171,7 @@ namespace System.Net.Http public static System.Net.Http.HttpMethod Head { get { throw null; } } public string Method { get { throw null; } } public static System.Net.Http.HttpMethod Options { get { throw null; } } + public static System.Net.Http.HttpMethod Patch { get { throw null; } } public static System.Net.Http.HttpMethod Post { get { throw null; } } public static System.Net.Http.HttpMethod Put { get { throw null; } } public static System.Net.Http.HttpMethod Trace { get { throw null; } } @@ -208,6 +214,7 @@ namespace System.Net.Http public string ReasonPhrase { get { throw null; } set { } } public System.Net.Http.HttpRequestMessage RequestMessage { get { throw null; } set { } } public System.Net.HttpStatusCode StatusCode { get { throw null; } set { } } + public System.Net.Http.Headers.HttpResponseHeaders TrailingHeaders { get { throw null; } } public System.Version Version { get { throw null; } set { } } public void Dispose() { } protected virtual void Dispose(bool disposing) { } @@ -242,6 +249,12 @@ namespace System.Net.Http public void Add(System.Net.Http.HttpContent content, string name) { } public void Add(System.Net.Http.HttpContent content, string name, string fileName) { } } + public sealed partial class ReadOnlyMemoryContent : System.Net.Http.HttpContent + { + public ReadOnlyMemoryContent(System.ReadOnlyMemory content) { } + protected internal override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) { throw null; } + protected internal override bool TryComputeLength(out long length) { throw null; } + } public partial class StreamContent : System.Net.Http.HttpContent { public StreamContent(System.IO.Stream content) { } diff --git a/external/api-snapshot/profiles/monotouch/System.Xml.cs.REMOVED.git-id b/external/api-snapshot/profiles/monotouch/System.Xml.cs.REMOVED.git-id index 131e6efd34..87273170ba 100644 --- a/external/api-snapshot/profiles/monotouch/System.Xml.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monotouch/System.Xml.cs.REMOVED.git-id @@ -1 +1 @@ -d08fc2a0f76356799f0c3866ee88c089a1b44ffc \ No newline at end of file +58b5b7f5d1934f76d073804edc65534dba5e310a \ No newline at end of file diff --git a/external/api-snapshot/profiles/monotouch/System.cs.REMOVED.git-id b/external/api-snapshot/profiles/monotouch/System.cs.REMOVED.git-id index 6db1613d30..a4ff5cc014 100644 --- a/external/api-snapshot/profiles/monotouch/System.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monotouch/System.cs.REMOVED.git-id @@ -1 +1 @@ -471dc3bfaf12041985008efef21da18be5b4995c \ No newline at end of file +593c0f8865b7e48b38ce75d6dd591bd91ee53416 \ No newline at end of file diff --git a/external/api-snapshot/profiles/monotouch/mscorlib.cs.REMOVED.git-id b/external/api-snapshot/profiles/monotouch/mscorlib.cs.REMOVED.git-id index e36364e141..6771f3284a 100644 --- a/external/api-snapshot/profiles/monotouch/mscorlib.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/monotouch/mscorlib.cs.REMOVED.git-id @@ -1 +1 @@ -ad43bd0bc249bd936072912d1338451bbadf2f3c \ No newline at end of file +0a755339351eb199a7326f0fbbc559fca1b33b55 \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.Primitives.cs b/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.Primitives.cs index 60bef670da..2eed1c12b6 100644 --- a/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.Primitives.cs +++ b/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.Primitives.cs @@ -29,6 +29,7 @@ [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ImmutableObjectAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.InitializationEventAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISite))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISupportInitialize))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.LocalizableAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.MergablePropertyAttribute))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.NotifyParentPropertyAttribute))] diff --git a/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.TypeConverter.cs b/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.TypeConverter.cs index 9ee5647431..5b6c1f89cd 100644 --- a/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.TypeConverter.cs +++ b/external/api-snapshot/profiles/net_4_x/Facades/System.ComponentModel.TypeConverter.cs @@ -26,6 +26,7 @@ [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionChangeEventArgs))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionChangeEventHandler))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CollectionConverter))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.Container))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.CustomTypeDescriptor))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.DateTimeConverter))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.DateTimeOffsetConverter))] diff --git a/external/api-snapshot/profiles/net_4_x/Facades/System.Reflection.TypeExtensions.cs b/external/api-snapshot/profiles/net_4_x/Facades/System.Reflection.TypeExtensions.cs index 34089a9594..806e9f5849 100644 --- a/external/api-snapshot/profiles/net_4_x/Facades/System.Reflection.TypeExtensions.cs +++ b/external/api-snapshot/profiles/net_4_x/Facades/System.Reflection.TypeExtensions.cs @@ -14,81 +14,11 @@ [assembly:System.Reflection.AssemblyTitleAttribute("System.Reflection.TypeExtensions")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.AssemblyExtensions))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.BindingFlags))] -namespace System.Reflection -{ - public static partial class AssemblyExtensions - { - public static System.Type[] GetExportedTypes(System.Reflection.Assembly assembly) { throw null; } - public static System.Reflection.Module[] GetModules(System.Reflection.Assembly assembly) { throw null; } - public static System.Type[] GetTypes(System.Reflection.Assembly assembly) { throw null; } - } - public static partial class EventInfoExtensions - { - public static System.Reflection.MethodInfo GetAddMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetAddMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetRaiseMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetRaiseMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetRemoveMethod(System.Reflection.EventInfo eventInfo) { throw null; } - public static System.Reflection.MethodInfo GetRemoveMethod(System.Reflection.EventInfo eventInfo, bool nonPublic) { throw null; } - } - public static partial class MemberInfoExtensions - { - public static int GetMetadataToken(this System.Reflection.MemberInfo member) { throw null; } - public static bool HasMetadataToken(this System.Reflection.MemberInfo member) { throw null; } - } - public static partial class MethodInfoExtensions - { - public static System.Reflection.MethodInfo GetBaseDefinition(System.Reflection.MethodInfo method) { throw null; } - } - public static partial class ModuleExtensions - { - public static System.Guid GetModuleVersionId(this System.Reflection.Module module) { throw null; } - public static bool HasModuleVersionId(this System.Reflection.Module module) { throw null; } - } - public static partial class PropertyInfoExtensions - { - public static System.Reflection.MethodInfo[] GetAccessors(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo[] GetAccessors(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetGetMethod(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo GetGetMethod(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - public static System.Reflection.MethodInfo GetSetMethod(System.Reflection.PropertyInfo property) { throw null; } - public static System.Reflection.MethodInfo GetSetMethod(System.Reflection.PropertyInfo property, bool nonPublic) { throw null; } - } - public static partial class TypeExtensions - { - public static System.Reflection.ConstructorInfo GetConstructor(System.Type type, System.Type[] types) { throw null; } - public static System.Reflection.ConstructorInfo[] GetConstructors(System.Type type) { throw null; } - public static System.Reflection.ConstructorInfo[] GetConstructors(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MemberInfo[] GetDefaultMembers(System.Type type) { throw null; } - public static System.Reflection.EventInfo GetEvent(System.Type type, string name) { throw null; } - public static System.Reflection.EventInfo GetEvent(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.EventInfo[] GetEvents(System.Type type) { throw null; } - public static System.Reflection.EventInfo[] GetEvents(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.FieldInfo GetField(System.Type type, string name) { throw null; } - public static System.Reflection.FieldInfo GetField(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.FieldInfo[] GetFields(System.Type type) { throw null; } - public static System.Reflection.FieldInfo[] GetFields(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type[] GetGenericArguments(System.Type type) { throw null; } - public static System.Type[] GetInterfaces(System.Type type) { throw null; } - public static System.Reflection.MemberInfo[] GetMember(System.Type type, string name) { throw null; } - public static System.Reflection.MemberInfo[] GetMember(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MemberInfo[] GetMembers(System.Type type) { throw null; } - public static System.Reflection.MemberInfo[] GetMembers(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.MethodInfo GetMethod(System.Type type, string name, System.Type[] types) { throw null; } - public static System.Reflection.MethodInfo[] GetMethods(System.Type type) { throw null; } - public static System.Reflection.MethodInfo[] GetMethods(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type GetNestedType(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Type[] GetNestedTypes(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo[] GetProperties(System.Type type) { throw null; } - public static System.Reflection.PropertyInfo[] GetProperties(System.Type type, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Reflection.BindingFlags bindingAttr) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Type returnType) { throw null; } - public static System.Reflection.PropertyInfo GetProperty(System.Type type, string name, System.Type returnType, System.Type[] types) { throw null; } - public static bool IsAssignableFrom(System.Type type, System.Type c) { throw null; } - public static bool IsInstanceOfType(System.Type type, object o) { throw null; } - } -} +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.EventInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MemberInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MethodInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.ModuleExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.PropertyInfoExtensions))] +[assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.TypeExtensions))] diff --git a/external/api-snapshot/profiles/net_4_x/Facades/netstandard.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/Facades/netstandard.cs.REMOVED.git-id index 4416fc4988..c51896e67b 100644 --- a/external/api-snapshot/profiles/net_4_x/Facades/netstandard.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/Facades/netstandard.cs.REMOVED.git-id @@ -1 +1 @@ -a438847534be72b44f416c7d8fa4304d446ad10a \ No newline at end of file +faec721a749e501975809f748630ed297fd55e50 \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/Microsoft.Build.Utilities.v4.0.cs b/external/api-snapshot/profiles/net_4_x/Microsoft.Build.Utilities.v4.0.cs index e898a9f8d3..e90cb6ae44 100644 --- a/external/api-snapshot/profiles/net_4_x/Microsoft.Build.Utilities.v4.0.cs +++ b/external/api-snapshot/profiles/net_4_x/Microsoft.Build.Utilities.v4.0.cs @@ -189,9 +189,13 @@ namespace Microsoft.Build.Utilities public static string GetPathToDotNetFrameworkSdk(Microsoft.Build.Utilities.TargetDotNetFrameworkVersion version) { throw null; } [System.MonoTODOAttribute] public static string GetPathToDotNetFrameworkSdkFile(string fileName, Microsoft.Build.Utilities.TargetDotNetFrameworkVersion version) { throw null; } + public static System.Collections.Generic.IList GetPathToReferenceAssemblies(System.Runtime.Versioning.FrameworkName frameworkName) { throw null; } + public static System.Collections.Generic.IList GetPathToReferenceAssemblies(string targetFrameworkRootPath, System.Runtime.Versioning.FrameworkName frameworkName) { throw null; } + public static System.Collections.Generic.IList GetPathToReferenceAssemblies(string targetFrameworkIdentifier, string targetFrameworkVersion, string targetFrameworkProfile) { throw null; } public static string GetPathToStandardLibraries(string targetFrameworkIdentifier, string targetFrameworkVersion, string targetFrameworkProfile) { throw null; } [System.MonoTODOAttribute] public static string GetPathToSystemFile(string fileName) { throw null; } + public static System.Collections.Generic.IList GetSupportedTargetFrameworks() { throw null; } } public abstract partial class ToolTask : Microsoft.Build.Utilities.Task, Microsoft.Build.Framework.ICancelableTask, Microsoft.Build.Framework.ITask { diff --git a/external/api-snapshot/profiles/net_4_x/Mono.Cecil.Mdb.cs b/external/api-snapshot/profiles/net_4_x/Mono.Cecil.Mdb.cs index bb852cffd7..52c351c5a3 100644 --- a/external/api-snapshot/profiles/net_4_x/Mono.Cecil.Mdb.cs +++ b/external/api-snapshot/profiles/net_4_x/Mono.Cecil.Mdb.cs @@ -2,12 +2,12 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -[assembly:System.Reflection.AssemblyVersionAttribute("0.10.3.0")] +[assembly:System.Reflection.AssemblyVersionAttribute("0.11.0.0")] [assembly:System.CLSCompliantAttribute(false)] [assembly:System.Diagnostics.DebuggableAttribute(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly:System.Reflection.AssemblyCopyrightAttribute("Copyright © 2008 - 2018 Jb Evain")] -[assembly:System.Reflection.AssemblyFileVersionAttribute("0.10.3.0")] -[assembly:System.Reflection.AssemblyInformationalVersionAttribute("0.10.3.0")] +[assembly:System.Reflection.AssemblyFileVersionAttribute("0.11.0.0")] +[assembly:System.Reflection.AssemblyInformationalVersionAttribute("0.11.0.0")] [assembly:System.Reflection.AssemblyProductAttribute("Mono.Cecil")] [assembly:System.Reflection.AssemblyTitleAttribute("Mono.Cecil.Mdb")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] diff --git a/external/api-snapshot/profiles/net_4_x/Mono.Cecil.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/Mono.Cecil.cs.REMOVED.git-id index 04962d5233..0adebc3f08 100644 --- a/external/api-snapshot/profiles/net_4_x/Mono.Cecil.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/Mono.Cecil.cs.REMOVED.git-id @@ -1 +1 @@ -ed9a4bcc93fc24d0f19acec9216b467b0d80f5fb \ No newline at end of file +ae5c2ba6031a8cbc764d92b0b73afdfddcc41486 \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/Mono.Debugger.Soft.cs b/external/api-snapshot/profiles/net_4_x/Mono.Debugger.Soft.cs index 60bcfe1aaa..67e31bc26d 100644 --- a/external/api-snapshot/profiles/net_4_x/Mono.Debugger.Soft.cs +++ b/external/api-snapshot/profiles/net_4_x/Mono.Debugger.Soft.cs @@ -65,6 +65,7 @@ namespace Mono.Debugger.Soft internal AssemblyMirror() { } public Mono.Debugger.Soft.AppDomainMirror Domain { get { throw null; } } public Mono.Debugger.Soft.MethodMirror EntryPoint { get { throw null; } } + public bool HasDebugInfo { get { throw null; } } public bool HasFetchedPdb { get { throw null; } } public bool HasPdb { get { throw null; } } public bool IsDynamic { get { throw null; } } @@ -850,6 +851,7 @@ namespace Mono.Debugger.Soft public Mono.Debugger.Soft.Event GetNextEvent() { throw null; } public Mono.Debugger.Soft.Event GetNextEvent(int timeout) { throw null; } public Mono.Debugger.Soft.EventSet GetNextEventSet() { throw null; } + public Mono.Debugger.Soft.EventSet GetNextEventSet(int timeoutInMilliseconds) { throw null; } [System.ObsoleteAttribute("Use GetNextEventSet () instead")] public T GetNextEvent() where T : Mono.Debugger.Soft.Event { throw null; } public System.Collections.Generic.IList GetThreads() { throw null; } diff --git a/external/api-snapshot/profiles/net_4_x/System.Core.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/System.Core.cs.REMOVED.git-id index ea0c02d3aa..6452cd75de 100644 --- a/external/api-snapshot/profiles/net_4_x/System.Core.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/System.Core.cs.REMOVED.git-id @@ -1 +1 @@ -1d07f529e45ff235d033ff3e01d19d8866105451 \ No newline at end of file +184ec5ae8a201598917197c20232db8d032dd8fd \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/System.Data.Linq.cs b/external/api-snapshot/profiles/net_4_x/System.Data.Linq.cs index 1f42292edb..99b2fa2498 100644 --- a/external/api-snapshot/profiles/net_4_x/System.Data.Linq.cs +++ b/external/api-snapshot/profiles/net_4_x/System.Data.Linq.cs @@ -16,48 +16,10 @@ [assembly:System.Resources.NeutralResourcesLanguageAttribute("en-US")] [assembly:System.Resources.SatelliteContractVersionAttribute("4.0.0.0")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] -[assembly:System.Runtime.CompilerServices.InternalsVisibleToAttribute("sqlmetal, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f40083f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f2792309259f")] -[assembly:System.Runtime.CompilerServices.InternalsVisibleToAttribute("sqlmetal_test_net_2_0, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f40083f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f2792309259f")] -[assembly:System.Runtime.CompilerServices.InternalsVisibleToAttribute("sqlmetal_test_net_4_0, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f40083f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f2792309259f")] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] [assembly:System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly:System.Security.AllowPartiallyTrustedCallersAttribute] -namespace DbLinq.Util -{ - public abstract partial class BaseLock : System.IDisposable - { - protected System.Threading.ReaderWriterLockSlim _Locks; - public BaseLock(System.Threading.ReaderWriterLockSlim locks) { } - public abstract void Dispose(); - } - public static partial class Locks - { - public static System.Threading.ReaderWriterLockSlim GetLockInstance() { throw null; } - public static System.Threading.ReaderWriterLockSlim GetLockInstance(System.Threading.LockRecursionPolicy recursionPolicy) { throw null; } - public static void GetReadLock(System.Threading.ReaderWriterLockSlim locks) { } - public static void GetReadOnlyLock(System.Threading.ReaderWriterLockSlim locks) { } - public static void GetWriteLock(System.Threading.ReaderWriterLockSlim locks) { } - public static void ReleaseLock(System.Threading.ReaderWriterLockSlim locks) { } - public static void ReleaseReadLock(System.Threading.ReaderWriterLockSlim locks) { } - public static void ReleaseReadOnlyLock(System.Threading.ReaderWriterLockSlim locks) { } - public static void ReleaseWriteLock(System.Threading.ReaderWriterLockSlim locks) { } - } - public partial class ReadLock : DbLinq.Util.BaseLock - { - public ReadLock(System.Threading.ReaderWriterLockSlim locks) : base (default(System.Threading.ReaderWriterLockSlim)) { } - public override void Dispose() { } - } - public partial class ReadOnlyLock : DbLinq.Util.BaseLock - { - public ReadOnlyLock(System.Threading.ReaderWriterLockSlim locks) : base (default(System.Threading.ReaderWriterLockSlim)) { } - public override void Dispose() { } - } - public partial class WriteLock : DbLinq.Util.BaseLock - { - public WriteLock(System.Threading.ReaderWriterLockSlim locks) : base (default(System.Threading.ReaderWriterLockSlim)) { } - public override void Dispose() { } - } -} +[assembly:System.Security.SecurityCriticalAttribute] namespace System { [System.AttributeUsageAttribute(System.AttributeTargets.All, AllowMultiple=true)] @@ -120,35 +82,20 @@ namespace System.Data.Linq public sealed partial class ChangeConflictCollection : System.Collections.Generic.ICollection, System.Collections.Generic.IEnumerable, System.Collections.ICollection, System.Collections.IEnumerable { internal ChangeConflictCollection() { } - [System.MonoTODOAttribute] public int Count { get { throw null; } } - [System.MonoTODOAttribute] public System.Data.Linq.ObjectChangeConflict this[int index] { get { throw null; } } - [System.MonoTODOAttribute] bool System.Collections.Generic.ICollection.IsReadOnly { get { throw null; } } - [System.MonoTODOAttribute] bool System.Collections.ICollection.IsSynchronized { get { throw null; } } - [System.MonoTODOAttribute] object System.Collections.ICollection.SyncRoot { get { throw null; } } - [System.MonoTODOAttribute] public void Clear() { } - [System.MonoTODOAttribute] public bool Contains(System.Data.Linq.ObjectChangeConflict item) { throw null; } - [System.MonoTODOAttribute] public void CopyTo(System.Data.Linq.ObjectChangeConflict[] array, int arrayIndex) { } - [System.MonoTODOAttribute] public System.Collections.Generic.IEnumerator GetEnumerator() { throw null; } - [System.MonoTODOAttribute] public bool Remove(System.Data.Linq.ObjectChangeConflict item) { throw null; } - [System.MonoTODOAttribute] public void ResolveAll(System.Data.Linq.RefreshMode mode) { } - [System.MonoTODOAttribute] public void ResolveAll(System.Data.Linq.RefreshMode mode, bool autoResolveDeletes) { } - [System.MonoTODOAttribute] void System.Collections.Generic.ICollection.Add(System.Data.Linq.ObjectChangeConflict item) { } - [System.MonoTODOAttribute] void System.Collections.ICollection.CopyTo(System.Array array, int index) { } - [System.MonoTODOAttribute] System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; } } public partial class ChangeConflictException : System.Exception @@ -168,16 +115,23 @@ namespace System.Data.Linq public sealed partial class CompiledQuery { internal CompiledQuery() { } - [System.MonoTODOAttribute] public System.Linq.Expressions.LambdaExpression Expression { get { throw null; } } - [System.MonoTODOAttribute] + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } - [System.MonoTODOAttribute] public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } - [System.MonoTODOAttribute] public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } - [System.MonoTODOAttribute] public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } + public static System.Func Compile(System.Linq.Expressions.Expression> query) where TArg0 : System.Data.Linq.DataContext { throw null; } } public enum ConflictMode { @@ -198,7 +152,6 @@ namespace System.Data.Linq public System.IO.TextWriter Log { get { throw null; } set { } } public System.Data.Linq.Mapping.MetaModel Mapping { get { throw null; } } public bool ObjectTrackingEnabled { get { throw null; } set { } } - public bool QueryCacheEnabled { get { throw null; } set { } } public System.Data.Common.DbTransaction Transaction { get { throw null; } set { } } public void CreateDatabase() { } protected internal System.Linq.IQueryable CreateMethodCallQuery(object instance, System.Reflection.MethodInfo methodInfo, params object[] parameters) { throw null; } @@ -210,12 +163,11 @@ namespace System.Data.Linq protected internal void ExecuteDynamicDelete(object entity) { } protected internal void ExecuteDynamicInsert(object entity) { } protected internal void ExecuteDynamicUpdate(object entity) { } - protected System.Data.Linq.IExecuteResult ExecuteMethodCall(object instance, System.Reflection.MethodInfo methodInfo, params object[] parameters) { throw null; } + protected internal System.Data.Linq.IExecuteResult ExecuteMethodCall(object instance, System.Reflection.MethodInfo methodInfo, params object[] parameters) { throw null; } public System.Collections.IEnumerable ExecuteQuery(System.Type elementType, string query, params object[] parameters) { throw null; } - public System.Collections.Generic.IEnumerable ExecuteQuery(string query, params object[] parameters) where TResult : new() { throw null; } + public System.Collections.Generic.IEnumerable ExecuteQuery(string query, params object[] parameters) { throw null; } public System.Data.Linq.ChangeSet GetChangeSet() { throw null; } public System.Data.Common.DbCommand GetCommand(System.Linq.IQueryable query) { throw null; } - public System.Data.IDbCommand GetIDbCommand(System.Linq.IQueryable query) { throw null; } public System.Data.Linq.ITable GetTable(System.Type type) { throw null; } public System.Data.Linq.Table GetTable() where TEntity : class { throw null; } public void Refresh(System.Data.Linq.RefreshMode mode, System.Collections.IEnumerable entities) { } @@ -232,16 +184,12 @@ namespace System.Data.Linq public DataLoadOptions() { } public void AssociateWith(System.Linq.Expressions.LambdaExpression expression) { } public void AssociateWith(System.Linq.Expressions.Expression> expression) { } - public bool GetAssociationCriteria(System.Reflection.MemberInfo memberInfo, out System.Linq.Expressions.LambdaExpression associationCriteria) { throw null; } - public bool IsImmediate(System.Reflection.MemberInfo memberInfo) { throw null; } public void LoadWith(System.Linq.Expressions.LambdaExpression expression) { } public void LoadWith(System.Linq.Expressions.Expression> expression) { } } public static partial class DBConvert { - [System.MonoTODOAttribute] public static object ChangeType(object value, System.Type type) { throw null; } - [System.MonoTODOAttribute] public static T ChangeType(object value) { throw null; } } public partial class DuplicateKeyException : System.InvalidOperationException @@ -256,7 +204,6 @@ namespace System.Data.Linq { private TEntity entity; private object _dummy; - private int _dummyPrimitive; public EntityRef(System.Collections.Generic.IEnumerable source) { throw null; } public EntityRef(System.Data.Linq.EntityRef entityRef) { throw null; } public EntityRef(TEntity entity) { throw null; } @@ -268,13 +215,10 @@ namespace System.Data.Linq public EntitySet() { } public EntitySet(System.Action onAdd, System.Action onRemove) { } public int Count { get { throw null; } } - public bool HasAssignedValues { get { throw null; } } public bool HasLoadedOrAssignedValues { get { throw null; } } - public bool HasLoadedValues { get { throw null; } } public bool IsDeferred { get { throw null; } } public TEntity this[int index] { get { throw null; } set { } } bool System.Collections.Generic.ICollection.IsReadOnly { get { throw null; } } - int System.Collections.ICollection.Count { get { throw null; } } bool System.Collections.ICollection.IsSynchronized { get { throw null; } } object System.Collections.ICollection.SyncRoot { get { throw null; } } bool System.Collections.IList.IsFixedSize { get { throw null; } } @@ -299,12 +243,10 @@ namespace System.Data.Linq void System.Collections.ICollection.CopyTo(System.Array array, int index) { } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; } int System.Collections.IList.Add(object value) { throw null; } - void System.Collections.IList.Clear() { } bool System.Collections.IList.Contains(object value) { throw null; } int System.Collections.IList.IndexOf(object value) { throw null; } void System.Collections.IList.Insert(int index, object value) { } void System.Collections.IList.Remove(object value) { } - void System.Collections.IList.RemoveAt(int index) { } System.Collections.IList System.ComponentModel.IListSource.GetList() { throw null; } } public partial class ForeignKeyReferenceAlreadyHasValueException : System.InvalidOperationException @@ -345,68 +287,54 @@ namespace System.Data.Linq void InsertAllOnSubmit(System.Collections.IEnumerable entities); void InsertOnSubmit(object entity); } - [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Size=1)] + public partial interface ITable : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Linq.IQueryable, System.Linq.IQueryable where TEntity : class + { + void Attach(TEntity entity); + void DeleteOnSubmit(TEntity entity); + void InsertOnSubmit(TEntity entity); + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] public partial struct Link { - [System.MonoTODOAttribute] + private T underlyingValue; + private object _dummy; + private int _dummyPrimitive; public Link(System.Collections.Generic.IEnumerable source) { throw null; } - [System.MonoTODOAttribute] public Link(System.Data.Linq.Link link) { throw null; } - [System.MonoTODOAttribute] public Link(T value) { throw null; } - [System.MonoTODOAttribute] public bool HasLoadedOrAssignedValue { get { throw null; } } - [System.MonoTODOAttribute] public bool HasValue { get { throw null; } } - [System.MonoTODOAttribute] public T Value { get { throw null; } set { } } } public sealed partial class MemberChangeConflict { internal MemberChangeConflict() { } - [System.MonoTODOAttribute] public object CurrentValue { get { throw null; } } - [System.MonoTODOAttribute] public object DatabaseValue { get { throw null; } } - [System.MonoTODOAttribute] public bool IsModified { get { throw null; } } - [System.MonoTODOAttribute] public bool IsResolved { get { throw null; } } - [System.MonoTODOAttribute] public System.Reflection.MemberInfo Member { get { throw null; } } - [System.MonoTODOAttribute] public object OriginalValue { get { throw null; } } - [System.MonoTODOAttribute] public void Resolve(System.Data.Linq.RefreshMode refreshMode) { } - [System.MonoTODOAttribute] public void Resolve(object value) { } } - [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Size=1)] + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] public partial struct ModifiedMemberInfo { - [System.MonoTODOAttribute] + private object _dummy; public object CurrentValue { get { throw null; } } - [System.MonoTODOAttribute] public System.Reflection.MemberInfo Member { get { throw null; } } - [System.MonoTODOAttribute] public object OriginalValue { get { throw null; } } } public sealed partial class ObjectChangeConflict { internal ObjectChangeConflict() { } - [System.MonoTODOAttribute] public bool IsDeleted { get { throw null; } } - [System.MonoTODOAttribute] public bool IsResolved { get { throw null; } } - [System.MonoTODOAttribute] public System.Collections.ObjectModel.ReadOnlyCollection MemberConflicts { get { throw null; } } - [System.MonoTODOAttribute] public object Object { get { throw null; } } - [System.MonoTODOAttribute] public void Resolve() { } - [System.MonoTODOAttribute] public void Resolve(System.Data.Linq.RefreshMode refreshMode) { } - [System.MonoTODOAttribute] public void Resolve(System.Data.Linq.RefreshMode refreshMode, bool autoResolveDeletes) { } } public enum RefreshMode @@ -415,7 +343,7 @@ namespace System.Data.Linq KeepCurrentValues = 0, OverwriteCurrentValues = 2, } - public sealed partial class Table : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.ComponentModel.IListSource, System.Data.Linq.ITable, System.Linq.IQueryable, System.Linq.IQueryable, System.Linq.IQueryProvider where TEntity : class + public sealed partial class Table : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.ComponentModel.IListSource, System.Data.Linq.ITable, System.Data.Linq.ITable, System.Linq.IQueryable, System.Linq.IQueryable, System.Linq.IQueryProvider where TEntity : class { internal Table() { } public System.Data.Linq.DataContext Context { get { throw null; } } @@ -447,16 +375,14 @@ namespace System.Data.Linq void System.Data.Linq.ITable.AttachAll(System.Collections.IEnumerable entities, bool asModified) { } void System.Data.Linq.ITable.DeleteAllOnSubmit(System.Collections.IEnumerable entities) { } void System.Data.Linq.ITable.DeleteOnSubmit(object entity) { } - [System.ObsoleteAttribute("NOT IMPLEMENTED YET")] System.Data.Linq.ModifiedMemberInfo[] System.Data.Linq.ITable.GetModifiedMembers(object entity) { throw null; } - [System.ObsoleteAttribute("NOT IMPLEMENTED YET")] object System.Data.Linq.ITable.GetOriginalEntityState(object entity) { throw null; } void System.Data.Linq.ITable.InsertAllOnSubmit(System.Collections.IEnumerable entities) { } void System.Data.Linq.ITable.InsertOnSubmit(object entity) { } - System.Linq.IQueryable System.Linq.IQueryProvider.CreateQuery(System.Linq.Expressions.Expression expression) { throw null; } - System.Linq.IQueryable System.Linq.IQueryProvider.CreateQuery(System.Linq.Expressions.Expression expr) { throw null; } + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining, NoOptimization)]System.Linq.IQueryable System.Linq.IQueryProvider.CreateQuery(System.Linq.Expressions.Expression expression) { throw null; } + System.Linq.IQueryable System.Linq.IQueryProvider.CreateQuery(System.Linq.Expressions.Expression expression) { throw null; } object System.Linq.IQueryProvider.Execute(System.Linq.Expressions.Expression expression) { throw null; } - S System.Linq.IQueryProvider.Execute(System.Linq.Expressions.Expression expression) { throw null; } + TResult System.Linq.IQueryProvider.Execute(System.Linq.Expressions.Expression expression) { throw null; } public override string ToString() { throw null; } } } @@ -538,11 +464,8 @@ namespace System.Data.Linq.Mapping protected MetaAccessor() { } public abstract System.Type Type { get; } public abstract object GetBoxedValue(object instance); - [System.MonoTODOAttribute] public virtual bool HasAssignedValue(object instance) { throw null; } - [System.MonoTODOAttribute] public virtual bool HasLoadedValue(object instance) { throw null; } - [System.MonoTODOAttribute] public virtual bool HasValue(object instance) { throw null; } public abstract void SetBoxedValue(ref object instance, object value); } @@ -725,109 +648,66 @@ namespace System.Data.Linq.Mapping } namespace System.Data.Linq.SqlClient { - public partial class Sql2000Provider : System.Data.Linq.SqlClient.SqlProvider + public sealed partial class Sql2000Provider : System.Data.Linq.SqlClient.SqlProvider { public Sql2000Provider() { } } - public partial class Sql2005Provider : System.Data.Linq.SqlClient.SqlProvider + public sealed partial class Sql2005Provider : System.Data.Linq.SqlClient.SqlProvider { public Sql2005Provider() { } } - public partial class Sql2008Provider : System.Data.Linq.SqlClient.SqlProvider + public sealed partial class Sql2008Provider : System.Data.Linq.SqlClient.SqlProvider { public Sql2008Provider() { } } public static partial class SqlHelpers { - [System.MonoTODOAttribute] public static string GetStringContainsPattern(string text, char escape) { throw null; } - [System.MonoTODOAttribute] public static string GetStringEndsWithPattern(string text, char escape) { throw null; } - [System.MonoTODOAttribute] public static string GetStringStartsWithPattern(string text, char escape) { throw null; } - [System.MonoTODOAttribute] public static string TranslateVBLikePattern(string pattern, char escape) { throw null; } } public static partial class SqlMethods { - [System.MonoTODOAttribute] public static int DateDiffDay(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffDay(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffDay(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffDay(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffHour(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffHour(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffHour(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffHour(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMicrosecond(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMicrosecond(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMicrosecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMicrosecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMillisecond(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMillisecond(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMillisecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMillisecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMinute(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMinute(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMinute(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMinute(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMonth(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffMonth(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMonth(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffMonth(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffNanosecond(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffNanosecond(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffNanosecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffNanosecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffSecond(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffSecond(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffSecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffSecond(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffYear(System.DateTime startDate, System.DateTime endDate) { throw null; } - [System.MonoTODOAttribute] public static int DateDiffYear(System.DateTimeOffset startDate, System.DateTimeOffset endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffYear(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static System.Nullable DateDiffYear(System.Nullable startDate, System.Nullable endDate) { throw null; } - [System.MonoTODOAttribute] public static bool Like(string matchExpression, string pattern) { throw null; } - [System.MonoTODOAttribute] public static bool Like(string matchExpression, string pattern, char escapeCharacter) { throw null; } } - [System.MonoTODOAttribute] public partial class SqlProvider : System.IDisposable { public SqlProvider() { } @@ -839,29 +719,17 @@ namespace System.Data.Linq.SqlClient.Implementation { public abstract partial class ObjectMaterializer where TDataReader : System.Data.Common.DbDataReader { - [System.MonoTODOAttribute] public object[] Arguments; - [System.MonoTODOAttribute] public System.Data.Common.DbDataReader BufferReader; - [System.MonoTODOAttribute] public TDataReader DataReader; - [System.MonoTODOAttribute] public object[] Globals; - [System.MonoTODOAttribute] public object[] Locals; - [System.MonoTODOAttribute] public int[] Ordinals; - [System.MonoTODOAttribute] public ObjectMaterializer() { } - [System.MonoTODOAttribute] public abstract bool CanDeferLoad { get; } - [System.MonoTODOAttribute] public static System.Collections.Generic.IEnumerable Convert(System.Collections.IEnumerable source) { throw null; } - [System.MonoTODOAttribute] public static System.Linq.IGrouping CreateGroup(TKey key, System.Collections.Generic.IEnumerable items) { throw null; } - [System.MonoTODOAttribute] public static System.Linq.IOrderedEnumerable CreateOrderedEnumerable(System.Collections.Generic.IEnumerable items) { throw null; } - [System.MonoTODOAttribute] public static System.Exception ErrorAssignmentToNull(System.Type type) { throw null; } public abstract System.Collections.IEnumerable ExecuteSubQuery(int iSubQuery, object[] args); public abstract System.Collections.Generic.IEnumerable GetLinkSource(int globalLink, int localFactory, object[] keyValues); diff --git a/external/api-snapshot/profiles/net_4_x/System.Data.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/System.Data.cs.REMOVED.git-id index e81f6dbca8..4d5db885be 100644 --- a/external/api-snapshot/profiles/net_4_x/System.Data.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/System.Data.cs.REMOVED.git-id @@ -1 +1 @@ -65d7f06b1029494fa48ec9e06777eee77b95f6d7 \ No newline at end of file +65cac5819f53dc216d274aac847182e239f5ff12 \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/System.IO.Compression.cs b/external/api-snapshot/profiles/net_4_x/System.IO.Compression.cs index 775e3fa327..1ef708c163 100644 --- a/external/api-snapshot/profiles/net_4_x/System.IO.Compression.cs +++ b/external/api-snapshot/profiles/net_4_x/System.IO.Compression.cs @@ -15,12 +15,65 @@ [assembly:System.Reflection.AssemblyTitleAttribute("System.IO.Compression.dll")] [assembly:System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)] [assembly:System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)] +[assembly:System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.RequestMinimum, SkipVerification=true)] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.CompressionLevel))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.CompressionMode))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.DeflateStream))] [assembly:System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.IO.Compression.GZipStream))] namespace System.IO.Compression { + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public partial struct BrotliDecoder : System.IDisposable + { + private object _dummy; + private int _dummyPrimitive; + public System.Buffers.OperationStatus Decompress(System.ReadOnlySpan source, System.Span destination, out int bytesConsumed, out int bytesWritten) { throw null; } + public void Dispose() { } + public static bool TryDecompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten) { throw null; } + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public partial struct BrotliEncoder : System.IDisposable + { + private object _dummy; + private int _dummyPrimitive; + public BrotliEncoder(int quality, int window) { throw null; } + public System.Buffers.OperationStatus Compress(System.ReadOnlySpan source, System.Span destination, out int bytesConsumed, out int bytesWritten, bool isFinalBlock) { throw null; } + public void Dispose() { } + public System.Buffers.OperationStatus Flush(System.Span destination, out int bytesWritten) { throw null; } + public static int GetMaxCompressedLength(int length) { throw null; } + public static bool TryCompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten) { throw null; } + public static bool TryCompress(System.ReadOnlySpan source, System.Span destination, out int bytesWritten, int quality, int window) { throw null; } + } + public sealed partial class BrotliStream : System.IO.Stream + { + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel, bool leaveOpen) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionMode mode) { } + public BrotliStream(System.IO.Stream stream, System.IO.Compression.CompressionMode mode, bool leaveOpen) { } + public System.IO.Stream BaseStream { get { throw null; } } + public override bool CanRead { get { throw null; } } + public override bool CanSeek { get { throw null; } } + public override bool CanWrite { get { throw null; } } + public override long Length { get { throw null; } } + public override long Position { get { throw null; } set { } } + public override System.IAsyncResult BeginRead(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw null; } + public override System.IAsyncResult BeginWrite(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw null; } + protected override void Dispose(bool disposing) { } + public override int EndRead(System.IAsyncResult asyncResult) { throw null; } + public override void EndWrite(System.IAsyncResult asyncResult) { } + public override void Flush() { } + public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { throw null; } + public override int Read(byte[] buffer, int offset, int count) { throw null; } + public override int Read(System.Span buffer) { throw null; } + public override System.Threading.Tasks.Task ReadAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { throw null; } + public override System.Threading.Tasks.ValueTask ReadAsync(System.Memory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public override long Seek(long offset, System.IO.SeekOrigin origin) { throw null; } + public override void SetLength(long value) { } + public override void Write(byte[] buffer, int offset, int count) { } + public override void Write(System.ReadOnlySpan buffer) { } + public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { throw null; } + public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + } public partial class ZipArchive : System.IDisposable { public ZipArchive(System.IO.Stream stream) { } diff --git a/external/api-snapshot/profiles/net_4_x/System.Net.Http.cs b/external/api-snapshot/profiles/net_4_x/System.Net.Http.cs index e9d58217eb..5635b7ae1c 100644 --- a/external/api-snapshot/profiles/net_4_x/System.Net.Http.cs +++ b/external/api-snapshot/profiles/net_4_x/System.Net.Http.cs @@ -211,6 +211,7 @@ namespace System.Net.Http public string ReasonPhrase { get { throw null; } set { } } public System.Net.Http.HttpRequestMessage RequestMessage { get { throw null; } set { } } public System.Net.HttpStatusCode StatusCode { get { throw null; } set { } } + public System.Net.Http.Headers.HttpResponseHeaders TrailingHeaders { get { throw null; } } public System.Version Version { get { throw null; } set { } } public void Dispose() { } protected virtual void Dispose(bool disposing) { } diff --git a/external/api-snapshot/profiles/net_4_x/System.Security.cs b/external/api-snapshot/profiles/net_4_x/System.Security.cs index dd46d61429..463934b943 100644 --- a/external/api-snapshot/profiles/net_4_x/System.Security.cs +++ b/external/api-snapshot/profiles/net_4_x/System.Security.cs @@ -58,6 +58,21 @@ namespace System.Security.Cryptography CurrentUser = 0, LocalMachine = 1, } + public abstract partial class DataProtector + { + protected DataProtector(string applicationName, string primaryPurpose, string[] specificPurposes) { } + protected string ApplicationName { get { throw null; } } + protected virtual bool PrependHashedPurposeToPlaintext { get { throw null; } } + protected string PrimaryPurpose { get { throw null; } } + protected System.Collections.Generic.IEnumerable SpecificPurposes { get { throw null; } } + public static System.Security.Cryptography.DataProtector Create(string providerClass, string applicationName, string primaryPurpose, params string[] specificPurposes) { throw null; } + protected virtual byte[] GetHashedPurpose() { throw null; } + public abstract bool IsReprotectRequired(byte[] encryptedData); + public byte[] Protect(byte[] userData) { throw null; } + protected abstract byte[] ProviderProtect(byte[] userData); + protected abstract byte[] ProviderUnprotect(byte[] encryptedData); + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining, NoOptimization)]public byte[] Unprotect(byte[] encryptedData) { throw null; } + } public enum MemoryProtectionScope { CrossProcess = 1, diff --git a/external/api-snapshot/profiles/net_4_x/System.Xml.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/System.Xml.cs.REMOVED.git-id index b39c84ccaf..37775b50e2 100644 --- a/external/api-snapshot/profiles/net_4_x/System.Xml.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/System.Xml.cs.REMOVED.git-id @@ -1 +1 @@ -4f2963152b661f2e60a55c67fe84ef968ce065a8 \ No newline at end of file +b0dd2e592082da2607e0373fc26feea32e89117f \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/System.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/System.cs.REMOVED.git-id index 79ccd46bfe..63ac7b975d 100644 --- a/external/api-snapshot/profiles/net_4_x/System.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/System.cs.REMOVED.git-id @@ -1 +1 @@ -cae17c3c9a4c8c124b8fc63aabb49906a9bac010 \ No newline at end of file +0613b729a2a86a759624e3244f1588c5c808a665 \ No newline at end of file diff --git a/external/api-snapshot/profiles/net_4_x/mscorlib.cs.REMOVED.git-id b/external/api-snapshot/profiles/net_4_x/mscorlib.cs.REMOVED.git-id index ec32dcdb2f..807287467a 100644 --- a/external/api-snapshot/profiles/net_4_x/mscorlib.cs.REMOVED.git-id +++ b/external/api-snapshot/profiles/net_4_x/mscorlib.cs.REMOVED.git-id @@ -1 +1 @@ -c1b96e23e4f3169d32fd0b3e2e81f63a56107ccc \ No newline at end of file +2476fc6154a8eecaf9df364441c9300312bfe89c \ No newline at end of file diff --git a/external/bockbuild/packages/gtk-sharp.py b/external/bockbuild/packages/gtk-sharp.py index b35cf23fb2..1df3444c0c 100644 --- a/external/bockbuild/packages/gtk-sharp.py +++ b/external/bockbuild/packages/gtk-sharp.py @@ -4,7 +4,7 @@ class GtkSharp212ReleasePackage (Package): Package.__init__(self, 'gtk-sharp', sources=['git://github.com/mono/gtk-sharp.git'], git_branch='gtk-sharp-2-12-branch', - revision='372b03b5cf68af8088e1fec00c201ea057578021', + revision='2e6bab50c5873674fa7da3102c36f182aa0baf34', override_properties={ 'configure': './bootstrap-2.12 --prefix=%{package_prefix}', } diff --git a/external/boringssl/crypto/x509/by_dir.c b/external/boringssl/crypto/x509/by_dir.c index 4445b058a2..25d5f9a068 100644 --- a/external/boringssl/crypto/x509/by_dir.c +++ b/external/boringssl/crypto/x509/by_dir.c @@ -68,6 +68,12 @@ #include "../internal.h" +#ifdef OPENSSL_WINDOWS +#define LIST_SEPARATOR_CHAR ';' +#else +#define LIST_SEPARATOR_CHAR ':' +#endif + typedef struct lookup_dir_hashes_st { unsigned long hash; int suffix; @@ -203,7 +209,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) s = dir; p = s; do { - if ((*p == ':') || (*p == '\0')) { + if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0')) { BY_DIR_ENTRY *ent; ss = s; s = p + 1; diff --git a/external/boringssl/crypto/x509/x509_def.c b/external/boringssl/crypto/x509/x509_def.c index 2bf2240c35..7cfdd9c820 100644 --- a/external/boringssl/crypto/x509/x509_def.c +++ b/external/boringssl/crypto/x509/x509_def.c @@ -59,7 +59,17 @@ /* TODO(fork): cleanup */ +#ifdef OPENSSL_WINDOWS +/* OpenSSL defaults on Windows. */ +#ifdef _WIN64 +#define OPENSSLDIR "C:\\Program Files\\Common Files\\SSL" +#else +#define OPENSSLDIR "C:\\Program Files (x86)\\Common Files\\SSL" +#endif +#else #define OPENSSLDIR "/etc/ssl" +#endif + #define X509_CERT_AREA OPENSSLDIR #define X509_CERT_DIR OPENSSLDIR "/certs" #define X509_CERT_FILE OPENSSLDIR "/cert.pem" diff --git a/external/cecil/.azure-pipelines.yml b/external/cecil/.azure-pipelines.yml new file mode 100644 index 0000000000..f463b22cf1 --- /dev/null +++ b/external/cecil/.azure-pipelines.yml @@ -0,0 +1,38 @@ +trigger: +- master + +pr: +- master + +jobs: +- job: Linux + pool: + vmImage: 'ubuntu-16.04' + steps: + - script: | + dotnet build -c Debug Mono.Cecil.sln + displayName: 'Build' + - script: | + dotnet test --no-build -c Debug -f netcoreapp2.1 Mono.Cecil.sln + displayName: 'Test .NET Core' + - task: NuGetToolInstaller@0 + displayName: 'Install nuget' + - task: NuGetCommand@2 + inputs: + command: 'custom' + arguments: 'install NUnit.Console -Version 3.9.0 -OutputDirectory ./packages' + displayName: 'Get NUnit.Console' + - script: | + mono ./packages/NUnit.ConsoleRunner.3.9.0/tools/nunit3-console.exe ./Mono.Cecil.nunit + displayName: 'Test .NET 4.0 using Mono' + +- job: Windows + pool: + vmImage: 'vs2017-win2016' + steps: + - script: | + dotnet build -c Debug Mono.Cecil.sln + displayName: 'Build' + - script: | + dotnet test --no-build -c Debug Mono.Cecil.sln + displayName: 'Test' diff --git a/external/cecil/Directory.Build.props b/external/cecil/Directory.Build.props new file mode 100644 index 0000000000..fd9bb8ab08 --- /dev/null +++ b/external/cecil/Directory.Build.props @@ -0,0 +1,27 @@ + + + false + false + false + Debug;Release + true + true + $(MSBuildThisFileDirectory)\cecil.snk + $(DefineConstants);NET_CORE + + + + true + $(net40FrameworkPathOverride) + /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.0-api/ + /usr/lib/mono/4.0-api/ + + + + + + + $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Mono.Cecil.overrides))\Mono.Cecil.overrides + + + diff --git a/external/cecil/Mono.Cecil.Cil/CodeReader.cs b/external/cecil/Mono.Cecil.Cil/CodeReader.cs index f7f11d5d9e..ac5b31be05 100644 --- a/external/cecil/Mono.Cecil.Cil/CodeReader.cs +++ b/external/cecil/Mono.Cecil.Cil/CodeReader.cs @@ -471,8 +471,6 @@ namespace Mono.Cecil.Cil { ReadScopes (scope.scopes); } -#if !READ_ONLY - public ByteBuffer PatchRawMethodBody (MethodDefinition method, CodeWriter writer, out int code_size, out MetadataToken local_var_token) { var position = MoveTo (method); @@ -664,8 +662,5 @@ namespace Mono.Cecil.Cil { } } } - -#endif - } } diff --git a/external/cecil/Mono.Cecil.Cil/CodeWriter.cs b/external/cecil/Mono.Cecil.Cil/CodeWriter.cs index 2003f104f6..88942e1258 100644 --- a/external/cecil/Mono.Cecil.Cil/CodeWriter.cs +++ b/external/cecil/Mono.Cecil.Cil/CodeWriter.cs @@ -18,8 +18,6 @@ using Mono.Cecil.PE; using RVA = System.UInt32; -#if !READ_ONLY - namespace Mono.Cecil.Cil { sealed class CodeWriter : ByteBuffer { @@ -655,5 +653,3 @@ namespace Mono.Cecil.Cil { } } } - -#endif diff --git a/external/cecil/Mono.Cecil.Cil/PortablePdb.cs b/external/cecil/Mono.Cecil.Cil/PortablePdb.cs index 4f734f38ef..b5515ba913 100644 --- a/external/cecil/Mono.Cecil.Cil/PortablePdb.cs +++ b/external/cecil/Mono.Cecil.Cil/PortablePdb.cs @@ -60,12 +60,10 @@ namespace Mono.Cecil.Cil { this.debug_reader = new MetadataReader (image, module, this.reader); } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new PortablePdbWriterProvider (); } -#endif public bool ProcessDebugHeader (ImageDebugHeader header) { @@ -200,12 +198,11 @@ namespace Mono.Cecil.Cil { this.reader = reader; } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new EmbeddedPortablePdbWriterProvider (); } -#endif + public bool ProcessDebugHeader (ImageDebugHeader header) { return reader.ProcessDebugHeader (header); @@ -222,9 +219,6 @@ namespace Mono.Cecil.Cil { } } - -#if !READ_ONLY - public sealed class PortablePdbWriterProvider : ISymbolWriterProvider { public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) @@ -472,8 +466,6 @@ namespace Mono.Cecil.Cil { } } -#endif - static class PdbGuidMapping { static readonly Dictionary guid_language = new Dictionary (); diff --git a/external/cecil/Mono.Cecil.Cil/Symbols.cs b/external/cecil/Mono.Cecil.Cil/Symbols.cs index 3095318097..f1f85a0a60 100644 --- a/external/cecil/Mono.Cecil.Cil/Symbols.cs +++ b/external/cecil/Mono.Cecil.Cil/Symbols.cs @@ -750,9 +750,8 @@ namespace Mono.Cecil.Cil { } public interface ISymbolReader : IDisposable { -#if !READ_ONLY + ISymbolWriterProvider GetWriterProvider (); -#endif bool ProcessDebugHeader (ImageDebugHeader header); MethodDebugInformation Read (MethodDefinition method); } @@ -938,7 +937,7 @@ namespace Mono.Cecil.Cil { var suffix = GetSymbolNamespace (kind); - var cecil_name = typeof (SymbolProvider).Assembly ().GetName (); + var cecil_name = typeof (SymbolProvider).Assembly.GetName (); var name = new SR.AssemblyName { Name = cecil_name.Name + "." + suffix, @@ -1011,8 +1010,6 @@ namespace Mono.Cecil.Cil { } } -#if !READ_ONLY - public interface ISymbolWriter : IDisposable { ISymbolReaderProvider GetReaderProvider (); @@ -1045,8 +1042,6 @@ namespace Mono.Cecil.Cil { throw new NotSupportedException (); } } - -#endif } namespace Mono.Cecil { diff --git a/external/cecil/Mono.Cecil.Metadata/Buffers.cs b/external/cecil/Mono.Cecil.Metadata/Buffers.cs index d87cb2a225..0dbf56852b 100644 --- a/external/cecil/Mono.Cecil.Metadata/Buffers.cs +++ b/external/cecil/Mono.Cecil.Metadata/Buffers.cs @@ -16,8 +16,6 @@ using Mono.Cecil.PE; using RVA = System.UInt32; -#if !READ_ONLY - namespace Mono.Cecil.Metadata { sealed class TableHeapBuffer : HeapBuffer { @@ -501,5 +499,3 @@ namespace Mono.Cecil.Metadata { } } } - -#endif diff --git a/external/cecil/Mono.Cecil.Metadata/Utilities.cs b/external/cecil/Mono.Cecil.Metadata/Utilities.cs index 3a4330da50..e299872517 100644 --- a/external/cecil/Mono.Cecil.Metadata/Utilities.cs +++ b/external/cecil/Mono.Cecil.Metadata/Utilities.cs @@ -300,7 +300,6 @@ namespace Mono.Cecil { return MetadataToken.Zero; } -#if !READ_ONLY public static uint CompressMetadataToken (this CodedIndex self, MetadataToken token) { uint ret = 0; @@ -561,7 +560,6 @@ namespace Mono.Cecil { exit: throw new ArgumentException (); } -#endif public static int GetSize (this CodedIndex self, Func counter) { diff --git a/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs b/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs index b741f684a6..9c85a425b3 100644 --- a/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs +++ b/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs @@ -11,8 +11,6 @@ using System; using System.IO; -#if !READ_ONLY - namespace Mono.Cecil.PE { class BinaryStreamWriter : BinaryWriter { @@ -89,5 +87,3 @@ namespace Mono.Cecil.PE { } } } - -#endif diff --git a/external/cecil/Mono.Cecil.PE/ByteBuffer.cs b/external/cecil/Mono.Cecil.PE/ByteBuffer.cs index 8aee04bafd..9a6567ce15 100644 --- a/external/cecil/Mono.Cecil.PE/ByteBuffer.cs +++ b/external/cecil/Mono.Cecil.PE/ByteBuffer.cs @@ -160,8 +160,6 @@ namespace Mono.Cecil.PE { return value; } -#if !READ_ONLY - public void WriteByte (byte value) { if (position == buffer.Length) @@ -334,8 +332,5 @@ namespace Mono.Cecil.PE { Buffer.BlockCopy (current, 0, buffer, 0, current_length); this.buffer = buffer; } - -#endif - } } diff --git a/external/cecil/Mono.Cecil.PE/ImageWriter.cs b/external/cecil/Mono.Cecil.PE/ImageWriter.cs index 95a36c1307..bf7ed91368 100644 --- a/external/cecil/Mono.Cecil.PE/ImageWriter.cs +++ b/external/cecil/Mono.Cecil.PE/ImageWriter.cs @@ -11,8 +11,6 @@ using System; using System.IO; -#if !READ_ONLY - using Mono.Cecil.Cil; using Mono.Cecil.Metadata; @@ -360,6 +358,11 @@ namespace Mono.Cecil.PE { WriteUInt32 (characteristics); } + uint GetRVAFileOffset (Section section, RVA rva) + { + return section.PointerToRawData + rva - section.VirtualAddress; + } + void MoveTo (uint pointer) { BaseStream.Seek (pointer, SeekOrigin.Begin); @@ -367,7 +370,7 @@ namespace Mono.Cecil.PE { void MoveToRVA (Section section, RVA rva) { - BaseStream.Seek (section.PointerToRawData + rva - section.VirtualAddress, SeekOrigin.Begin); + BaseStream.Seek (GetRVAFileOffset (section, rva), SeekOrigin.Begin); } void MoveToRVA (TextSegment segment) @@ -811,6 +814,14 @@ namespace Mono.Cecil.PE { return pe_header_size + SizeOfOptionalHeader () + (sections * section_header_size); } + public void PatchMvid (Guid guid) + { + uint offset = GetRVAFileOffset (text, text_map.GetRVA (TextSegment.GuidHeap)); + BaseStream.Seek (offset, SeekOrigin.Begin); + var arr = guid.ToByteArray (); + BaseStream.Write (arr, 0, arr.Length); + } + void PatchWin32Resources (ByteBuffer resources) { PatchResourceDirectoryTable (resources); @@ -851,5 +862,3 @@ namespace Mono.Cecil.PE { } } } - -#endif diff --git a/external/cecil/Mono.Cecil.PE/TextMap.cs b/external/cecil/Mono.Cecil.PE/TextMap.cs index 614691b6ad..c0061c5927 100644 --- a/external/cecil/Mono.Cecil.PE/TextMap.cs +++ b/external/cecil/Mono.Cecil.PE/TextMap.cs @@ -10,8 +10,6 @@ using System; -#if !READ_ONLY - using RVA = System.UInt32; namespace Mono.Cecil.PE { @@ -108,5 +106,3 @@ namespace Mono.Cecil.PE { } } } - -#endif diff --git a/external/cecil/Mono.Cecil.Tests.props b/external/cecil/Mono.Cecil.Tests.props index 284408a56e..bd6df1f5e4 100644 --- a/external/cecil/Mono.Cecil.Tests.props +++ b/external/cecil/Mono.Cecil.Tests.props @@ -1,49 +1,16 @@ - - + - $(MSBuildProjectDirectory) true - - - true - - - false - - + - 3.10.1 + 3.11.0 - 15.8.0 + 15.9.0 - 3.10.0 + 3.12.0 - - - False - $(MSBuildThisFileDirectory)\Test\libs\nunit-2.6.2\nunit.core.dll - - - False - $(MSBuildThisFileDirectory)\Test\libs\nunit-2.6.2\nunit.core.interfaces.dll - - - False - $(MSBuildThisFileDirectory)\Test\libs\nunit-2.6.2\nunit.framework.dll - - - - - - - true - - diff --git a/external/cecil/Mono.Cecil.csproj b/external/cecil/Mono.Cecil.csproj index 8bb3b26031..3129b8feec 100644 --- a/external/cecil/Mono.Cecil.csproj +++ b/external/cecil/Mono.Cecil.csproj @@ -1,9 +1,7 @@ - - + - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - Mono.Cecil + netstandard2.0;net40 + true @@ -15,6 +13,4 @@ - - diff --git a/external/cecil/Mono.Cecil.nunit b/external/cecil/Mono.Cecil.nunit index 6bab390eee..4ea9a9646e 100644 --- a/external/cecil/Mono.Cecil.nunit +++ b/external/cecil/Mono.Cecil.nunit @@ -1,9 +1,9 @@ - - - - - - + + + + + + diff --git a/external/cecil/Mono.Cecil.nuspec b/external/cecil/Mono.Cecil.nuspec index 27b8a36c6c..bd37488c37 100644 --- a/external/cecil/Mono.Cecil.nuspec +++ b/external/cecil/Mono.Cecil.nuspec @@ -2,7 +2,7 @@ Mono.Cecil - 0.10.3.0 + 0.11.0.0 Mono.Cecil Jb Evain Jb Evain @@ -14,23 +14,29 @@ en-US assembly assemblies module modules il cil msil bytecode reflection injection cecil mono aop - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + + + diff --git a/external/cecil/Mono.Cecil.props b/external/cecil/Mono.Cecil.props deleted file mode 100644 index bc3bd30cb5..0000000000 --- a/external/cecil/Mono.Cecil.props +++ /dev/null @@ -1,111 +0,0 @@ - - - - net_4_0_Debug - AnyCPU - $(MSBuildThisFileDirectory) - 512 - 2.0 - Library - true - $(MSBuildThisFileDirectory)\cecil.snk - Library - $(BuildDirectory)\bin\$(Configuration)\ - $(MSBuildToolsPath)\Microsoft.CSharp.targets - true - false - false - - - true - full - false - $(DefineConstants);DEBUG;TRACE; - prompt - 4 - - - pdbonly - true - $(DefineConstants);TRACE; - prompt - 4 - false - - - $(DefineConstants);READ_ONLY; - - - v3.5 - $(DefineConstants);NET_3_5; - - - v4.0 - $(DefineConstants);NET_4_0; - - - v4.6.2 - $(DefineConstants);NET_4_0; - - - netcoreapp2.0 - netstandard1.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Mono.Cecil.overrides))\Mono.Cecil.overrides - - - - - - diff --git a/external/cecil/Mono.Cecil.sln b/external/cecil/Mono.Cecil.sln index 1c64c2dec7..7b3ff986c1 100644 --- a/external/cecil/Mono.Cecil.sln +++ b/external/cecil/Mono.Cecil.sln @@ -1,309 +1,67 @@ + Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26927.1 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28516.95 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{74E5ECE0-06B4-401C-AEBA-E8DD53E17943}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil", "Mono.Cecil.csproj", "{16C3FA32-4775-497F-8794-DD5AF13CFE22}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Symbols", "Symbols", "{929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Pdb", "symbols\pdb\Mono.Cecil.Pdb.csproj", "{4D22D51C-4230-46AF-8657-4FD757D9C8BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Mdb", "symbols\mdb\Mono.Cecil.Mdb.csproj", "{5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Tests", "Test\Mono.Cecil.Tests.csproj", "{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Tests", "Test\Mono.Cecil.Tests.csproj", "{EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Mdb", "symbols\mdb\Mono.Cecil.Mdb.csproj", "{8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Mdb.Tests", "symbols\mdb\Test\Mono.Cecil.Mdb.Tests.csproj", "{901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Mdb.Tests", "symbols\mdb\Test\Mono.Cecil.Mdb.Tests.csproj", "{AC71DF9C-99FA-4A63-990A-66C8010355A6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Pdb.Tests", "symbols\pdb\Test\Mono.Cecil.Pdb.Tests.csproj", "{50FC1815-A653-48D0-95E2-DB48CB01F4E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Pdb", "symbols\pdb\Mono.Cecil.Pdb.csproj", "{63E6915C-7EA4-4D76-AB28-0D7191EEA626}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{70E05599-64EE-4C11-A2F8-EE4113309039}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Pdb.Tests", "symbols\pdb\Test\Mono.Cecil.Pdb.Tests.csproj", "{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks.Tests", "rocks\Test\Mono.Cecil.Rocks.Tests.csproj", "{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E0893F44-CB9F-49C5-B38C-70082EFC5072}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Rocks.Tests", "rocks\Test\Mono.Cecil.Rocks.Tests.csproj", "{EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - net_3_5_Debug_ReadOnly|Any CPU = net_3_5_Debug_ReadOnly|Any CPU - net_3_5_Debug|Any CPU = net_3_5_Debug|Any CPU - net_3_5_Release_ReadOnly|Any CPU = net_3_5_Release_ReadOnly|Any CPU - net_3_5_Release|Any CPU = net_3_5_Release|Any CPU - net_4_0_Debug_ReadOnly|Any CPU = net_4_0_Debug_ReadOnly|Any CPU - net_4_0_Debug|Any CPU = net_4_0_Debug|Any CPU - net_4_0_Release_ReadOnly|Any CPU = net_4_0_Release_ReadOnly|Any CPU - net_4_0_Release|Any CPU = net_4_0_Release|Any CPU - net_462_Debug_ReadOnly|Any CPU = net_462_Debug_ReadOnly|Any CPU - net_462_Debug|Any CPU = net_462_Debug|Any CPU - net_462_Release_ReadOnly|Any CPU = net_462_Release_ReadOnly|Any CPU - net_462_Release|Any CPU = net_462_Release|Any CPU - netstandard_Debug_ReadOnly|Any CPU = netstandard_Debug_ReadOnly|Any CPU - netstandard_Debug|Any CPU = netstandard_Debug|Any CPU - netstandard_Release_ReadOnly|Any CPU = netstandard_Release_ReadOnly|Any CPU - netstandard_Release|Any CPU = netstandard_Release|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Debug_ReadOnly|Any CPU.ActiveCfg = net_462_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Debug_ReadOnly|Any CPU.Build.0 = net_462_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Debug|Any CPU.ActiveCfg = net_462_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Debug|Any CPU.Build.0 = net_462_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Release_ReadOnly|Any CPU.ActiveCfg = net_462_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Release_ReadOnly|Any CPU.Build.0 = net_462_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Release|Any CPU.ActiveCfg = net_462_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_462_Release|Any CPU.Build.0 = net_462_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Release|Any CPU.Build.0 = Release|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Release|Any CPU.Build.0 = Release|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Release|Any CPU.Build.0 = Release|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Release|Any CPU.Build.0 = Release|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Release|Any CPU.Build.0 = Release|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Release|Any CPU.Build.0 = Release|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Release|Any CPU.Build.0 = Release|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1} - {AC71DF9C-99FA-4A63-990A-66C8010355A6} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1} - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D75C0801-AFCB-4B1F-90AD-2B7852A74E6A} + SolutionGuid = {97A7013A-E1DE-4D11-93C5-212D0A7E85C9} EndGlobalSection EndGlobal diff --git a/external/cecil/Mono.Cecil.sln.DotSettings b/external/cecil/Mono.Cecil.sln.DotSettings deleted file mode 100644 index b1aed5eade..0000000000 --- a/external/cecil/Mono.Cecil.sln.DotSettings +++ /dev/null @@ -1,39 +0,0 @@ - - DO_NOT_SHOW - True - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - END_OF_LINE - END_OF_LINE - END_OF_LINE - END_OF_LINE - END_OF_LINE - 1 - 1 - False - False - False - False - True - True - True - True - True - True - False - True - True - False - False - False - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - True - C:\sources\cecil\Mono.Cecil.sln.DotSettings - True - 1 - True - True - True - True - None \ No newline at end of file diff --git a/external/cecil/Mono.Cecil/AssemblyDefinition.cs b/external/cecil/Mono.Cecil/AssemblyDefinition.cs index f02b93f299..264e9d8625 100644 --- a/external/cecil/Mono.Cecil/AssemblyDefinition.cs +++ b/external/cecil/Mono.Cecil/AssemblyDefinition.cs @@ -100,8 +100,6 @@ namespace Mono.Cecil { for (int i = 0; i < modules.Count; i++) modules [i].Dispose (); } - -#if !READ_ONLY public static AssemblyDefinition CreateAssembly (AssemblyNameDefinition assemblyName, string moduleName, ModuleKind kind) { return CreateAssembly (assemblyName, moduleName, new ModuleParameters { Kind = kind }); @@ -122,7 +120,6 @@ namespace Mono.Cecil { return assembly; } -#endif public static AssemblyDefinition ReadAssembly (string fileName) { @@ -153,8 +150,6 @@ namespace Mono.Cecil { return assembly; } -#if !READ_ONLY - public void Write (string fileName) { Write (fileName, new WriterParameters ()); @@ -184,7 +179,6 @@ namespace Mono.Cecil { { main_module.Write (stream, parameters); } -#endif public override string ToString () { diff --git a/external/cecil/Mono.Cecil/AssemblyInfo.cs b/external/cecil/Mono.Cecil/AssemblyInfo.cs index 5571093b64..b5455d1b86 100644 --- a/external/cecil/Mono.Cecil/AssemblyInfo.cs +++ b/external/cecil/Mono.Cecil/AssemblyInfo.cs @@ -14,11 +14,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle (Consts.AssemblyName)] -#if !NET_CORE [assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")] -#endif +[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)] [assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)] [assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)] [assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)] -[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)] diff --git a/external/cecil/Mono.Cecil/AssemblyReader.cs b/external/cecil/Mono.Cecil/AssemblyReader.cs index bf16b8a6fc..2ec791c898 100644 --- a/external/cecil/Mono.Cecil/AssemblyReader.cs +++ b/external/cecil/Mono.Cecil/AssemblyReader.cs @@ -69,12 +69,11 @@ namespace Mono.Cecil { if (parameters.metadata_resolver != null) module.metadata_resolver = parameters.metadata_resolver; -#if !READ_ONLY if (parameters.metadata_importer_provider != null) module.metadata_importer = parameters.metadata_importer_provider.GetMetadataImporter (module); + if (parameters.reflection_importer_provider != null) module.reflection_importer = parameters.reflection_importer_provider.GetReflectionImporter (module); -#endif GetMetadataKind (module, parameters); diff --git a/external/cecil/Mono.Cecil/AssemblyWriter.cs b/external/cecil/Mono.Cecil/AssemblyWriter.cs index f7b555933f..1e39197ee8 100644 --- a/external/cecil/Mono.Cecil/AssemblyWriter.cs +++ b/external/cecil/Mono.Cecil/AssemblyWriter.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Text; +using System.Security.Cryptography; using Mono; using Mono.Collections.Generic; @@ -29,8 +30,6 @@ using GuidIndex = System.UInt32; namespace Mono.Cecil { -#if !READ_ONLY - using ModuleRow = Row; using TypeRefRow = Row; using TypeDefRow = Row; @@ -103,13 +102,13 @@ namespace Mono.Cecil { if (symbol_writer_provider == null && parameters.WriteSymbols) symbol_writer_provider = new DefaultSymbolWriterProvider (); -#if !NET_CORE if (parameters.StrongNameKeyPair != null && name != null) { name.PublicKey = parameters.StrongNameKeyPair.PublicKey; module.Attributes |= ModuleAttributes.StrongNameSigned; } -#endif + if (parameters.DeterministicMvid) + module.Mvid = Guid.Empty; var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider); try { module.metadata_builder = metadata; @@ -122,16 +121,58 @@ namespace Mono.Cecil { stream.value.SetLength (0); writer.WriteImage (); -#if !NET_CORE if (parameters.StrongNameKeyPair != null) CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair); -#endif + if (parameters.DeterministicMvid) { + module.Mvid = ComputeGuid (stream.value); + writer.PatchMvid (module.Mvid); + } } } finally { module.metadata_builder = null; } } + static void CopyStreamChunk (Stream stream, Stream dest_stream, byte [] buffer, int length) + { + while (length > 0) { + int read = stream.Read (buffer, 0, System.Math.Min (buffer.Length, length)); + dest_stream.Write (buffer, 0, read); + length -= read; + } + } + + static byte [] ComputeHash (Stream stream) + { + const int buffer_size = 8192; + + var sha1 = new SHA1Managed (); + + stream.Seek (0, SeekOrigin.Begin); + var buffer = new byte [buffer_size]; + + using (var crypto_stream = new CryptoStream (Stream.Null, sha1, CryptoStreamMode.Write)) + CopyStreamChunk (stream, crypto_stream, buffer, (int) stream.Length); + return sha1.Hash; + } + + static unsafe Guid ComputeGuid (Stream stream) + { + byte[] hashCode = ComputeHash (stream); + + // From corefx/src/System.Reflection.Metadata/src/System/Reflection/Metadata/BlobContentId.cs + Guid guid = default(Guid); + byte* guidPtr = (byte*)&guid; + for (var i = 0; i < 16; i++) { + guidPtr[i] = hashCode[i]; + } + // modify the guid data so it decodes to the form of a "random" guid ala rfc4122 + guidPtr[7] = (byte)((guidPtr[7] & 0x0f) | (4 << 4)); + guidPtr[8] = (byte)((guidPtr[8] & 0x3f) | (2 << 6)); + + return guid; + } + static void BuildMetadata (ModuleDefinition module, MetadataBuilder metadata) { if (!module.HasImage) { @@ -1202,10 +1243,8 @@ namespace Mono.Cecil { var table = GetTable (Table.File); var hash = resource.Hash; -#if !NET_CORE if (hash.IsNullOrEmpty ()) hash = CryptoService.ComputeHash (resource.File); -#endif return (uint) table.AddRow (new FileRow ( FileAttributes.ContainsNoMetaData, @@ -1923,7 +1962,7 @@ namespace Mono.Cecil { static ElementType GetConstantType (Type type) { - switch (type.GetTypeCode ()) { + switch (Type.GetTypeCode (type)) { case TypeCode.Boolean: return ElementType.Boolean; case TypeCode.Byte: @@ -2983,7 +3022,7 @@ namespace Mono.Cecil { if (value == null) throw new ArgumentNullException (); - switch (value.GetType ().GetTypeCode ()) { + switch (Type.GetTypeCode (value.GetType ())) { case TypeCode.Boolean: WriteByte ((byte) (((bool) value) ? 1 : 0)); break; @@ -3296,8 +3335,6 @@ namespace Mono.Cecil { } } -#endif - static partial class Mixin { public static bool TryGetUniqueDocument (this MethodDebugInformation info, out Document document) diff --git a/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs b/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs index c10a826db9..b64ba4c8b6 100644 --- a/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs +++ b/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs @@ -191,10 +191,7 @@ namespace Mono.Cecil { string paths; try { - // AppContext is only available on platforms that implement .NET Standard 1.6 - var appContextType = Type.GetType ("System.AppContext, System.AppContext, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", throwOnError: false); - var getData = appContextType?.GetTypeInfo ().GetDeclaredMethod ("GetData"); - paths = (string) getData?.Invoke (null, new [] { "TRUSTED_PLATFORM_ASSEMBLIES" }); + paths = (string) AppDomain.CurrentDomain.GetData ("TRUSTED_PLATFORM_ASSEMBLIES"); } catch { paths = null; } @@ -380,7 +377,7 @@ namespace Mono.Cecil { return null; } -#endif + static string GetAssemblyFile (AssemblyNameReference reference, string prefix, string gac) { var gac_folder = new StringBuilder () @@ -396,7 +393,7 @@ namespace Mono.Cecil { Path.Combine (gac, reference.Name), gac_folder.ToString ()), reference.Name + ".dll"); } - +#endif public void Dispose () { Dispose (true); diff --git a/external/cecil/Mono.Cecil/Import.cs b/external/cecil/Mono.Cecil/Import.cs index 68b5cab49e..4a6c3e0623 100644 --- a/external/cecil/Mono.Cecil/Import.cs +++ b/external/cecil/Mono.Cecil/Import.cs @@ -17,8 +17,6 @@ using Mono.Cecil.Metadata; namespace Mono.Cecil { -#if !READ_ONLY - public interface IMetadataImporterProvider { IMetadataImporter GetMetadataImporter (ModuleDefinition module); } @@ -155,9 +153,7 @@ namespace Mono.Cecil { { typeof (float), ElementType.R4 }, { typeof (double), ElementType.R8 }, { typeof (string), ElementType.String }, -#if !NET_CORE { typeof (TypedReference), ElementType.TypedByRef }, -#endif { typeof (IntPtr), ElementType.I }, { typeof (UIntPtr), ElementType.U }, { typeof (object), ElementType.Object }, @@ -178,7 +174,7 @@ namespace Mono.Cecil { type.Name, module, ImportScope (type), - type.IsValueType ()); + type.IsValueType); reference.etype = ImportElementType (type); @@ -187,7 +183,7 @@ namespace Mono.Cecil { else reference.Namespace = type.Namespace ?? string.Empty; - if (type.IsGenericType ()) + if (type.IsGenericType) ImportGenericParameters (reference, type.GetGenericArguments ()); return reference; @@ -195,12 +191,12 @@ namespace Mono.Cecil { protected virtual IMetadataScope ImportScope (Type type) { - return ImportScope (type.Assembly ()); + return ImportScope (type.Assembly); } static bool ImportOpenGenericType (Type type, ImportGenericKind import_kind) { - return type.IsGenericType () && type.IsGenericTypeDefinition () && import_kind == ImportGenericKind.Open; + return type.IsGenericType && type.IsGenericTypeDefinition && import_kind == ImportGenericKind.Open; } static bool ImportOpenGenericMethod (SR.MethodBase method, ImportGenericKind import_kind) @@ -224,7 +220,7 @@ namespace Mono.Cecil { if (type.IsArray) return new ArrayType (ImportType (type.GetElementType (), context), type.GetArrayRank ()); - if (type.IsGenericType ()) + if (type.IsGenericType) return ImportGenericInstance (type, context); if (type.IsGenericParameter) @@ -238,8 +234,8 @@ namespace Mono.Cecil { if (context.IsEmpty) throw new InvalidOperationException (); - if (type.DeclaringMethod () != null) - return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod ()), type.GenericParameterPosition); + if (type.DeclaringMethod != null) + return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod), type.GenericParameterPosition); if (type.DeclaringType != null) return context.TypeParameter (NormalizeTypeFullName (type.DeclaringType), type.GenericParameterPosition); @@ -287,7 +283,7 @@ namespace Mono.Cecil { static bool IsGenericInstance (Type type) { - return type.IsGenericType () && !type.IsGenericTypeDefinition (); + return type.IsGenericType && !type.IsGenericTypeDefinition; } static ElementType ImportElementType (Type type) @@ -315,10 +311,8 @@ namespace Mono.Cecil { reference = new AssemblyNameReference (name.Name, name.Version) { PublicKeyToken = name.GetPublicKeyToken (), -#if !NET_CORE Culture = name.CultureInfo.Name, HashAlgorithm = (AssemblyHashAlgorithm) name.HashAlgorithm, -#endif }; module.AssemblyReferences.Add (reference); @@ -364,20 +358,12 @@ namespace Mono.Cecil { static SR.FieldInfo ResolveFieldDefinition (SR.FieldInfo field) { -#if NET_CORE - throw new NotImplementedException (); -#else return field.Module.ResolveField (field.MetadataToken); -#endif } static SR.MethodBase ResolveMethodDefinition (SR.MethodBase method) { -#if NET_CORE - throw new NotImplementedException (); -#else return method.Module.ResolveMethod (method.MetadataToken); -#endif } MethodReference ImportMethod (SR.MethodBase method, ImportGenericContext context, ImportGenericKind import_kind) @@ -761,8 +747,6 @@ namespace Mono.Cecil { } } -#endif - static partial class Mixin { public static void CheckModule (ModuleDefinition module) diff --git a/external/cecil/Mono.Cecil/ModuleDefinition.cs b/external/cecil/Mono.Cecil/ModuleDefinition.cs index 92160da1ac..977462b6c7 100644 --- a/external/cecil/Mono.Cecil/ModuleDefinition.cs +++ b/external/cecil/Mono.Cecil/ModuleDefinition.cs @@ -31,10 +31,8 @@ namespace Mono.Cecil { ReadingMode reading_mode; internal IAssemblyResolver assembly_resolver; internal IMetadataResolver metadata_resolver; -#if !READ_ONLY internal IMetadataImporterProvider metadata_importer_provider; internal IReflectionImporterProvider reflection_importer_provider; -#endif Stream symbol_stream; ISymbolReaderProvider symbol_reader_provider; bool read_symbols; @@ -63,7 +61,6 @@ namespace Mono.Cecil { set { metadata_resolver = value; } } -#if !READ_ONLY public IMetadataImporterProvider MetadataImporterProvider { get { return metadata_importer_provider; } set { metadata_importer_provider = value; } @@ -73,7 +70,6 @@ namespace Mono.Cecil { get { return reflection_importer_provider; } set { reflection_importer_provider = value; } } -#endif public Stream SymbolStream { get { return symbol_stream; } @@ -117,8 +113,6 @@ namespace Mono.Cecil { } } -#if !READ_ONLY - public sealed class ModuleParameters { ModuleKind kind; @@ -127,10 +121,8 @@ namespace Mono.Cecil { TargetArchitecture architecture; IAssemblyResolver assembly_resolver; IMetadataResolver metadata_resolver; -#if !READ_ONLY IMetadataImporterProvider metadata_importer_provider; IReflectionImporterProvider reflection_importer_provider; -#endif public ModuleKind Kind { get { return kind; } @@ -162,7 +154,6 @@ namespace Mono.Cecil { set { metadata_resolver = value; } } -#if !READ_ONLY public IMetadataImporterProvider MetadataImporterProvider { get { return metadata_importer_provider; } set { metadata_importer_provider = value; } @@ -172,7 +163,6 @@ namespace Mono.Cecil { get { return reflection_importer_provider; } set { reflection_importer_provider = value; } } -#endif public ModuleParameters () { @@ -183,25 +173,7 @@ namespace Mono.Cecil { static TargetRuntime GetCurrentRuntime () { -#if !NET_CORE return typeof (object).Assembly.ImageRuntimeVersion.ParseRuntime (); -#else - var corlib_name = AssemblyNameReference.Parse (typeof (object).Assembly ().FullName); - var corlib_version = corlib_name.Version; - - switch (corlib_version.Major) { - case 1: - return corlib_version.Minor == 0 - ? TargetRuntime.Net_1_0 - : TargetRuntime.Net_1_1; - case 2: - return TargetRuntime.Net_2_0; - case 4: - return TargetRuntime.Net_4_0; - default: - throw new NotSupportedException (); - } -#endif } } @@ -227,9 +199,7 @@ namespace Mono.Cecil { Stream symbol_stream; ISymbolWriterProvider symbol_writer_provider; bool write_symbols; -#if !NET_CORE SR.StrongNameKeyPair key_pair; -#endif public uint? Timestamp { get { return timestamp; } @@ -251,15 +221,13 @@ namespace Mono.Cecil { set { write_symbols = value; } } -#if !NET_CORE public SR.StrongNameKeyPair StrongNameKeyPair { get { return key_pair; } set { key_pair = value; } } -#endif - } -#endif + public bool DeterministicMvid { get; set; } + } public sealed class ModuleDefinition : ModuleReference, ICustomAttributeProvider, ICustomDebugInformationProvider, IDisposable { @@ -293,11 +261,10 @@ namespace Mono.Cecil { internal AssemblyDefinition assembly; MethodDefinition entry_point; -#if !READ_ONLY internal IReflectionImporter reflection_importer; internal IMetadataImporter metadata_importer; ICustomMetadataWriter custom_writer; -#endif + Collection custom_attributes; Collection references; Collection modules; @@ -307,9 +274,7 @@ namespace Mono.Cecil { internal Collection custom_infos; -#if !READ_ONLY internal MetadataBuilder metadata_builder; -#endif public bool IsMain { get { return kind != ModuleKind.NetModule; } @@ -399,7 +364,6 @@ namespace Mono.Cecil { get { return assembly; } } -#if !READ_ONLY internal IReflectionImporter ReflectionImporter { get { if (reflection_importer == null) @@ -429,7 +393,6 @@ namespace Mono.Cecil { get { return custom_writer; } set { custom_writer = value; } } -#endif public IAssemblyResolver AssemblyResolver { get { @@ -783,8 +746,6 @@ namespace Mono.Cecil { return MetadataResolver.Resolve (type); } -#if !READ_ONLY - static void CheckContext (IGenericParameterProvider context, ModuleDefinition module) { if (context == null) @@ -956,8 +917,6 @@ namespace Mono.Cecil { return MetadataImporter.ImportReference (method, context); } -#endif - public IMetadataTokenProvider LookupToken (int token) { return LookupToken (new MetadataToken ((uint) token)); @@ -1029,8 +988,6 @@ namespace Mono.Cecil { return Image.DebugHeader ?? new ImageDebugHeader (); } -#if !READ_ONLY - public static ModuleDefinition CreateModule (string name, ModuleKind kind) { return CreateModule (name, new ModuleParameters { Kind = kind }); @@ -1058,12 +1015,11 @@ namespace Mono.Cecil { if (parameters.MetadataResolver != null) module.metadata_resolver = parameters.MetadataResolver; -#if !READ_ONLY if (parameters.MetadataImporterProvider != null) module.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter (module); + if (parameters.ReflectionImporterProvider != null) module.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter (module); -#endif if (parameters.Kind != ModuleKind.NetModule) { var assembly = new AssemblyDefinition (); @@ -1085,8 +1041,6 @@ namespace Mono.Cecil { return new AssemblyNameDefinition (name, Mixin.ZeroVersion); } -#endif - public void ReadSymbols () { if (string.IsNullOrEmpty (file_name)) @@ -1178,8 +1132,6 @@ namespace Mono.Cecil { parameters); } -#if !READ_ONLY - public void Write (string fileName) { Write (fileName, new WriterParameters ()); @@ -1218,9 +1170,6 @@ namespace Mono.Cecil { ModuleWriter.WriteModule (this, Disposable.NotOwned (stream), parameters); } - -#endif - } static partial class Mixin { @@ -1335,16 +1284,6 @@ namespace Mono.Cecil { return Path.GetFullPath (file_stream.Name); } -#if !NET_4_0 - public static void CopyTo (this Stream self, Stream target) - { - var buffer = new byte [1024 * 8]; - int read; - while ((read = self.Read (buffer, 0, buffer.Length)) > 0) - target.Write (buffer, 0, read); - } -#endif - public static TargetRuntime ParseRuntime (this string self) { if (string.IsNullOrEmpty (self)) diff --git a/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs b/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs index 51f4ca1359..a37d3b90c1 100644 --- a/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs +++ b/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs @@ -27,10 +27,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if !READ_ONLY - -#if !NET_CORE - using System; using System.Security.Cryptography; @@ -246,8 +242,3 @@ namespace Mono.Security.Cryptography { } } } - -#endif - -#endif - diff --git a/external/cecil/Mono.Security.Cryptography/CryptoService.cs b/external/cecil/Mono.Security.Cryptography/CryptoService.cs index 840276d290..284d9bb809 100644 --- a/external/cecil/Mono.Security.Cryptography/CryptoService.cs +++ b/external/cecil/Mono.Security.Cryptography/CryptoService.cs @@ -8,10 +8,6 @@ // Licensed under the MIT/X11 license. // -#if !READ_ONLY - -#if !NET_CORE - using System; using System.IO; using System.Reflection; @@ -152,7 +148,3 @@ namespace Mono.Cecil { } } } - -#endif - -#endif diff --git a/external/cecil/Mono/Type.cs b/external/cecil/Mono/Type.cs deleted file mode 100644 index fd53f81b4a..0000000000 --- a/external/cecil/Mono/Type.cs +++ /dev/null @@ -1,137 +0,0 @@ -// -// Author: -// Jb Evain (jbevain@gmail.com) -// -// Copyright (c) 2008 - 2015 Jb Evain -// Copyright (c) 2008 - 2011 Novell, Inc. -// -// Licensed under the MIT/X11 license. -// - -using System; -using System.Reflection; - -#if NET_CORE -using System.Collections.Generic; -#endif - -namespace Mono { - -#if NET_CORE - enum TypeCode { - Empty = 0, - Object = 1, - DBNull = 2, - Boolean = 3, - Char = 4, - SByte = 5, - Byte = 6, - Int16 = 7, - UInt16 = 8, - Int32 = 9, - UInt32 = 10, - Int64 = 11, - UInt64 = 12, - Single = 13, - Double = 14, - Decimal = 15, - DateTime = 16, - String = 18 - } -#endif - - static class TypeExtensions { - -#if NET_CORE - private static readonly Dictionary TypeCodeMap = new Dictionary - { - { typeof (bool), TypeCode.Boolean }, - { typeof (char), TypeCode.Char }, - { typeof (sbyte), TypeCode.SByte }, - { typeof (byte), TypeCode.Byte }, - { typeof (short), TypeCode.Int16 }, - { typeof (ushort), TypeCode.UInt16 }, - { typeof (int), TypeCode.Int32 }, - { typeof (uint), TypeCode.UInt32 }, - { typeof (long), TypeCode.Int64 }, - { typeof (ulong), TypeCode.UInt64 }, - { typeof (float), TypeCode.Single }, - { typeof (double), TypeCode.Double }, - { typeof (decimal), TypeCode.Decimal }, - { typeof (DateTime), TypeCode.DateTime }, - { typeof (string), TypeCode.String }, - }; -#endif - - public static TypeCode GetTypeCode (this Type type) - { -#if NET_CORE - if (type == null) - return TypeCode.Empty; - - TypeCode code; - if (!TypeCodeMap.TryGetValue (type, out code)) - return TypeCode.Object; - - return code; -#else - return Type.GetTypeCode (type); -#endif - } - - public static Assembly Assembly (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().Assembly; -#else - return type.Assembly; -#endif - } - - public static MethodBase DeclaringMethod (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().DeclaringMethod; -#else - return type.DeclaringMethod; -#endif - } - - public static Type [] GetGenericArguments (this Type type) - { -#if NET_CORE - var info = type.GetTypeInfo (); - return info.IsGenericTypeDefinition ? info.GenericTypeParameters : info.GenericTypeArguments; -#else - return type.GetGenericArguments (); -#endif - } - - public static bool IsGenericType (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().IsGenericType; -#else - return type.IsGenericType; -#endif - } - - public static bool IsGenericTypeDefinition (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().IsGenericTypeDefinition; -#else - return type.IsGenericTypeDefinition; -#endif - } - - public static bool IsValueType (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().IsValueType; -#else - return type.IsValueType; -#endif - } - } -} diff --git a/external/cecil/NetStandard.props b/external/cecil/NetStandard.props deleted file mode 100644 index bc0bacc6ef..0000000000 --- a/external/cecil/NetStandard.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - $(DefineConstants);NET_CORE; - false - false - true - - diff --git a/external/cecil/ProjectInfo.cs b/external/cecil/ProjectInfo.cs index 3b6952c1a3..0e24c67a68 100644 --- a/external/cecil/ProjectInfo.cs +++ b/external/cecil/ProjectInfo.cs @@ -15,6 +15,6 @@ using System.Runtime.InteropServices; [assembly: ComVisible (false)] -[assembly: AssemblyVersion ("0.10.3.0")] -[assembly: AssemblyFileVersion ("0.10.3.0")] -[assembly: AssemblyInformationalVersion ("0.10.3.0")] +[assembly: AssemblyVersion ("0.11.0.0")] +[assembly: AssemblyFileVersion ("0.11.0.0")] +[assembly: AssemblyInformationalVersion ("0.11.0.0")] diff --git a/external/cecil/Test/Mono.Cecil.Tests.csproj b/external/cecil/Test/Mono.Cecil.Tests.csproj index 45856234a3..2d3d8e4467 100644 --- a/external/cecil/Test/Mono.Cecil.Tests.csproj +++ b/external/cecil/Test/Mono.Cecil.Tests.csproj @@ -1,45 +1,21 @@ - - + - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} - Mono.Cecil.Tests - Mono.Cecil.Tests + netcoreapp2.1;net40 - - - 4.3.0 - - - 4.3.0 - - - 4.3.0 - - - 4.3.0 - - - 4.3.0 - + - 2.3.2 - - - 2.3.2 + 2.10.0 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {8559dd7f-a16f-46d0-a05a-9139faeba8fd} Mono.Cecil.Mdb - {63e6915c-7ea4-4d76-ab28-0d7191eea626} Mono.Cecil.Pdb @@ -50,5 +26,4 @@ - - \ No newline at end of file + diff --git a/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs b/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs index 476e17bbac..046791bfab 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs @@ -1,11 +1,24 @@ using System; using System.IO; -using System.Reflection; +using System.Runtime.CompilerServices; using Mono.Cecil.Cil; using NUnit.Framework; using Mono.Cecil.PE; +#if !NET_CORE +namespace System.Runtime.CompilerServices { + + [AttributeUsage (AttributeTargets.Parameter, Inherited = false)] + public sealed class CallerFilePathAttribute : Attribute { + } + + [AttributeUsage (AttributeTargets.Parameter, Inherited = false)] + public sealed class CallerMemberNameAttribute : Attribute { + } +} +#endif + namespace Mono.Cecil.Tests { public abstract class BaseTestFixture { @@ -16,49 +29,61 @@ namespace Mono.Cecil.Tests { Assert.Ignore (); } - public static string GetResourcePath (string name, Assembly assembly) + protected static void IgnoreOnCoreClr () { - return Path.Combine (FindResourcesDirectory (assembly), name); + if (Platform.OnCoreClr) + Assert.Ignore (); } - public static string GetAssemblyResourcePath (string name, Assembly assembly) + protected static void OnlyOnWindows () { - return GetResourcePath (Path.Combine ("assemblies", name), assembly); + if (!Platform.OnWindows) + Assert.Ignore (); } - public static string GetCSharpResourcePath (string name, Assembly assembly) + public static string GetResourcePath (string name, string sourceFilePath) { - return GetResourcePath (Path.Combine ("cs", name), assembly); + return Path.Combine (FindResourcesDirectory (sourceFilePath), name); } - public static string GetILResourcePath (string name, Assembly assembly) + public static string GetAssemblyResourcePath (string name, [CallerFilePath] string sourceFilePath = "") { - return GetResourcePath (Path.Combine ("il", name), assembly); + return GetResourcePath (Path.Combine ("assemblies", name), sourceFilePath); } - public ModuleDefinition GetResourceModule (string name) + public static string GetCSharpResourcePath (string name, [CallerFilePath] string sourceFilePath = "") { - return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, GetType ().Assembly)); + return GetResourcePath (Path.Combine ("cs", name), sourceFilePath); } - public ModuleDefinition GetResourceModule (string name, ReaderParameters parameters) + public static string GetILResourcePath (string name, [CallerFilePath] string sourceFilePath = "") { - return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, GetType ().Assembly), parameters); + return GetResourcePath (Path.Combine ("il", name), sourceFilePath); } - public ModuleDefinition GetResourceModule (string name, ReadingMode mode) + public ModuleDefinition GetResourceModule (string name, [CallerFilePath] string sourceFilePath = "") { - return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, GetType ().Assembly), new ReaderParameters (mode)); + return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, sourceFilePath)); } - public Stream GetResourceStream (string name) + public ModuleDefinition GetResourceModule (string name, ReaderParameters parameters, [CallerFilePath] string sourceFilePath = "") { - return new FileStream (GetAssemblyResourcePath (name, GetType ().Assembly), FileMode.Open, FileAccess.Read); + return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, sourceFilePath), parameters); } - internal Image GetResourceImage (string name) + public ModuleDefinition GetResourceModule (string name, ReadingMode mode, [CallerFilePath] string sourceFilePath = "") { - var file = new FileStream (GetAssemblyResourcePath (name, GetType ().Assembly), FileMode.Open, FileAccess.Read); + return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, sourceFilePath), new ReaderParameters (mode)); + } + + public Stream GetResourceStream (string name, [CallerFilePath] string sourceFilePath = "") + { + return new FileStream (GetAssemblyResourcePath (name, sourceFilePath), FileMode.Open, FileAccess.Read); + } + + internal Image GetResourceImage (string name, [CallerFilePath] string sourceFilePath = "") + { + var file = new FileStream (GetAssemblyResourcePath (name, sourceFilePath), FileMode.Open, FileAccess.Read); return ImageReader.ReadImage (Disposable.Owned (file as Stream), file.Name); } @@ -72,9 +97,9 @@ namespace Mono.Cecil.Tests { return ModuleDefinition.ReadModule (GetType ().Module.FullyQualifiedName, parameters); } - public static string FindResourcesDirectory (Assembly assembly) + public static string FindResourcesDirectory (string sourceFilePath) { - var path = Path.GetDirectoryName (new Uri (assembly.CodeBase).LocalPath); + var path = Path.GetDirectoryName (sourceFilePath); while (!Directory.Exists (Path.Combine (path, "Resources"))) { var old = path; path = Path.GetDirectoryName (path); @@ -97,19 +122,19 @@ namespace Mono.Cecil.Tests { return str.Trim ().Replace ("\r\n", "\n"); } - public static void TestModule (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false) + public static void TestModule (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false, [CallerFilePath] string sourceFilePath = "") { - Run (new ModuleTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections)); + Run (new ModuleTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath)); } - public static void TestCSharp (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false) + public static void TestCSharp (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false, [CallerFilePath] string sourceFilePath = "") { - Run (new CSharpTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections)); + Run (new CSharpTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath)); } - public static void TestIL (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false) + public static void TestIL (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false, [CallerFilePath] string sourceFilePath = "") { - Run (new ILTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections)); + Run (new ILTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath)); } static void Run (TestCase testCase) @@ -123,13 +148,11 @@ namespace Mono.Cecil.Tests { if (testCase.ReadOnly) return; -#if !READ_ONLY using (var runner = new TestRunner (testCase, TestCaseType.WriteFromDeferred)) runner.RunTest (); using (var runner = new TestRunner (testCase, TestCaseType.WriteFromImmediate)) runner.RunTest (); -#endif } } @@ -142,12 +165,11 @@ namespace Mono.Cecil.Tests { public readonly IAssemblyResolver AssemblyResolver; public readonly Action Test; public readonly bool ApplyWindowsRuntimeProjections; + public readonly string SourceFilePath; public abstract string ModuleLocation { get; } - protected Assembly Assembly { get { return Test.Method.Module.Assembly; } } - - protected TestCase (Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) + protected TestCase (Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") { Test = test; Verify = verify; @@ -156,6 +178,7 @@ namespace Mono.Cecil.Tests { SymbolWriterProvider = symbolWriterProvider; AssemblyResolver = assemblyResolver; ApplyWindowsRuntimeProjections = applyWindowsRuntimeProjections; + SourceFilePath = sourceFilePath; } } @@ -163,15 +186,15 @@ namespace Mono.Cecil.Tests { public readonly string Module; - public ModuleTestCase (string module, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) - : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections) + public ModuleTestCase (string module, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") + : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath) { Module = module; } public override string ModuleLocation { - get { return BaseTestFixture.GetAssemblyResourcePath (Module, Assembly); } + get { return BaseTestFixture.GetAssemblyResourcePath (Module, SourceFilePath); } } } @@ -179,8 +202,8 @@ namespace Mono.Cecil.Tests { public readonly string File; - public CSharpTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) - : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections) + public CSharpTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") + : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath) { File = file; } @@ -189,7 +212,7 @@ namespace Mono.Cecil.Tests { { get { - return CompilationService.CompileResource (BaseTestFixture.GetCSharpResourcePath (File, Assembly)); + return CompilationService.CompileResource (BaseTestFixture.GetCSharpResourcePath (File, SourceFilePath)); } } } @@ -198,8 +221,8 @@ namespace Mono.Cecil.Tests { public readonly string File; - public ILTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) - : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections) + public ILTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") + : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath) { File = file; } @@ -208,7 +231,7 @@ namespace Mono.Cecil.Tests { { get { - return CompilationService.CompileResource (BaseTestFixture.GetILResourcePath (File, Assembly)); ; + return CompilationService.CompileResource (BaseTestFixture.GetILResourcePath (File, SourceFilePath)); ; } } } @@ -244,14 +267,12 @@ namespace Mono.Cecil.Tests { case TestCaseType.ReadDeferred: parameters.ReadingMode = ReadingMode.Deferred; return ModuleDefinition.ReadModule (location, parameters); -#if !READ_ONLY case TestCaseType.WriteFromImmediate: parameters.ReadingMode = ReadingMode.Immediate; return RoundTrip (location, parameters, "cecil-irt"); case TestCaseType.WriteFromDeferred: parameters.ReadingMode = ReadingMode.Deferred; return RoundTrip (location, parameters, "cecil-drt"); -#endif default: return null; } @@ -265,7 +286,6 @@ namespace Mono.Cecil.Tests { return (ISymbolReaderProvider) Activator.CreateInstance (test_case.SymbolReaderProvider); } -#if !READ_ONLY ISymbolWriterProvider GetSymbolWriterProvider () { if (test_case.SymbolReaderProvider == null) @@ -273,7 +293,6 @@ namespace Mono.Cecil.Tests { return (ISymbolWriterProvider) Activator.CreateInstance (test_case.SymbolWriterProvider); } -#endif IAssemblyResolver GetAssemblyResolver () { @@ -286,7 +305,6 @@ namespace Mono.Cecil.Tests { return test_resolver; } -#if !READ_ONLY ModuleDefinition RoundTrip (string location, ReaderParameters reader_parameters, string folder) { var rt_folder = Path.Combine (Path.GetTempPath (), folder); @@ -309,7 +327,7 @@ namespace Mono.Cecil.Tests { return ModuleDefinition.ReadModule (rt_module, reader_parameters); } -#endif + public void RunTest () { var module = GetModule (); @@ -333,9 +351,7 @@ namespace Mono.Cecil.Tests { enum TestCaseType { ReadImmediate, ReadDeferred, -#if !READ_ONLY WriteFromImmediate, WriteFromDeferred, -#endif } } diff --git a/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs b/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs deleted file mode 100644 index 63bd9b8acb..0000000000 --- a/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -#if NET_3_5 || NET_4_0 -namespace System.Runtime.CompilerServices { - [AttributeUsage (AttributeTargets.Parameter, Inherited = false)] - public sealed class CallerMemberNameAttribute : Attribute { - public CallerMemberNameAttribute () - { - } - } -} -#endif \ No newline at end of file diff --git a/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs b/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs index 5501d571d0..681db51b35 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs @@ -11,7 +11,6 @@ using NUnit.Framework; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Emit; using CS = Microsoft.CodeAnalysis.CSharp; -using VB = Microsoft.CodeAnalysis.VisualBasic; #endif namespace Mono.Cecil.Tests { @@ -37,6 +36,14 @@ namespace Mono.Cecil.Tests { get { return TryGetType ("System.Runtime.Loader.AssemblyLoadContext, System.Runtime.Loader, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") != null; } } + public static bool OnWindows { + get { return Environment.OSVersion.Platform == PlatformID.Win32NT; } + } + + public static bool HasNativePdbSupport { + get { return OnWindows && !OnMono; } + } + static Type TryGetType (string assemblyQualifiedName) { try { @@ -90,7 +97,7 @@ namespace Mono.Cecil.Tests { if (extension == ".il") return IlasmCompilationService.Instance.Compile (name); - if (extension == ".cs" || extension == ".vb") + if (extension == ".cs") #if NET_CORE return RoslynCompilationService.Instance.Compile (name); #else @@ -182,14 +189,6 @@ namespace Mono.Cecil.Tests { new [] { CS.SyntaxFactory.ParseSyntaxTree (source) }, references, new CS.CSharpCompilationOptions (OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Release)); - - case ".vb": - return VB.VisualBasicCompilation.Create ( - assemblyName, - new [] { VB.SyntaxFactory.ParseSyntaxTree (source) }, - references, - new VB.VisualBasicCompilationOptions (OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Release)); - default: throw new NotSupportedException (); } @@ -320,7 +319,7 @@ namespace Mono.Cecil.Tests { public static ProcessOutput ILAsm (string source, string output) { var ilasm = "ilasm"; - if (!Platform.OnMono) + if (Platform.OnWindows) ilasm = NetFrameworkTool ("ilasm"); return RunProcess (ilasm, "/nologo", "/dll", "/out:" + Quote (output), Quote (source)); diff --git a/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs b/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs index 970b3aa569..74ae750d1c 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs @@ -437,7 +437,7 @@ namespace Mono.Cecil.Tests { [Test] public void InterfaceImplementation () { - IgnoreOnMono(); + OnlyOnWindows (); // Mono's ilasm doesn't support .interfaceimpl TestIL ("ca-iface-impl.il", module => { var type = module.GetType ("FooType"); @@ -493,7 +493,6 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY [Test] public void DefineCustomAttributeFromBlob () { @@ -531,7 +530,7 @@ namespace Mono.Cecil.Tests { module.Dispose (); } -#endif + static void AssertCustomAttribute (string expected, CustomAttribute attribute) { Assert.AreEqual (expected, PrettyPrint (attribute)); diff --git a/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs index 13c8474eac..fa5562e90c 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs @@ -207,7 +207,6 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY [Test] public void ExternalPdbDeterministicAssembly () { @@ -236,6 +235,5 @@ namespace Mono.Cecil.Tests { Assert.IsTrue (header.Entries.Any (e => e.Directory.Type == ImageDebugType.EmbeddedPortablePdb)); }, symbolReaderProvider: typeof (EmbeddedPortablePdbReaderProvider), symbolWriterProvider: typeof (EmbeddedPortablePdbWriterProvider)); } -#endif } } diff --git a/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs index bc12f5e0db..70100eac14 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.Collections.Generic; using System.IO; @@ -361,8 +360,9 @@ namespace Mono.Cecil.Tests { static ModuleDefinition CreateModule (string name) { - return ModuleDefinition.CreateModule (name, ModuleKind.Dll); + var resolver = new DefaultAssemblyResolver (); + resolver.AddSearchDirectory (Path.GetDirectoryName (typeof (ImportCecilTests).Assembly.Location)); + return ModuleDefinition.CreateModule (name, new ModuleParameters { Kind = ModuleKind.Dll, AssemblyResolver = resolver }); } } } -#endif diff --git a/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs index c99ca4fc44..33b51eedff 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.Collections.Generic; using System.IO; @@ -427,4 +426,3 @@ namespace Mono.Cecil.Tests { } } } -#endif diff --git a/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs b/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs index 15fd5fb42a..5af097bc96 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs @@ -284,7 +284,7 @@ namespace Mono.Cecil.Tests { [Test] public void BranchOutsideMethod () { - IgnoreOnMono (); + OnlyOnWindows (); // Mono's ilasm doesn't support branching outside of method TestIL ("branch-out.il", module => { var type = module.GetType ("Foo"); diff --git a/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs index 2fbe55a098..8e73750bf8 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs @@ -12,7 +12,6 @@ namespace Mono.Cecil.Tests { [TestFixture] public class ModuleTests : BaseTestFixture { -#if !READ_ONLY [Test] public void CreateModuleEscapesAssemblyName () { @@ -22,7 +21,6 @@ namespace Mono.Cecil.Tests { module = ModuleDefinition.CreateModule ("Test.exe", ModuleKind.Console); Assert.AreEqual ("Test", module.Assembly.Name.Name); } -#endif [Test] public void SingleModule () @@ -49,8 +47,7 @@ namespace Mono.Cecil.Tests { [Test] public void MultiModules () { - if (Platform.OnCoreClr) - return; + IgnoreOnCoreClr (); TestModule("mma.exe", module => { var assembly = module.Assembly; @@ -160,8 +157,7 @@ namespace Mono.Cecil.Tests { [Test] public void ExportedTypeFromNetModule () { - if (Platform.OnCoreClr) - return; + IgnoreOnCoreClr (); TestModule ("mma.exe", module => { Assert.IsTrue (module.HasExportedTypes); @@ -215,6 +211,8 @@ namespace Mono.Cecil.Tests { [Test] public void Win32FileVersion () { + IgnoreOnCoreClr (); + TestModule ("libhello.dll", module => { var version = FileVersionInfo.GetVersionInfo (module.FileName); @@ -282,7 +280,7 @@ namespace Mono.Cecil.Tests { [Test] public void OwnedStreamModuleFileName () { - var path = GetAssemblyResourcePath ("hello.exe", GetType ().Assembly); + var path = GetAssemblyResourcePath ("hello.exe"); using (var file = File.Open (path, FileMode.Open)) { using (var module = ModuleDefinition.ReadModule (file)) @@ -294,7 +292,6 @@ namespace Mono.Cecil.Tests { } } -#if !READ_ONLY [Test] public void ReadAndWriteFile () { @@ -327,6 +324,5 @@ namespace Mono.Cecil.Tests { // Ensure you can still delete the file File.Delete (path); } -#endif } } diff --git a/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs b/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs index 34d998a6d7..8263871106 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.IO; using System.Linq; @@ -672,4 +671,3 @@ class Program } } } -#endif \ No newline at end of file diff --git a/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs index f65b889b60..bb57570109 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs @@ -134,7 +134,7 @@ namespace Mono.Cecil.Tests { var parameters = new ReaderParameters { AssemblyResolver = resolver }; var types = ModuleDefinition.ReadModule ( - CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs", typeof (ResolveTests).Assembly)), + CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs")), parameters); resolver.Register (types.Assembly); @@ -155,7 +155,7 @@ namespace Mono.Cecil.Tests { var parameters = new ReaderParameters { AssemblyResolver = resolver }; var types = ModuleDefinition.ReadModule ( - CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs", typeof (ResolveTests).Assembly)), + CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs")), parameters); resolver.Register (types.Assembly); diff --git a/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs b/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs index c3106f424c..ceaf240cbc 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs @@ -93,7 +93,6 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY [Test] public void DefineSecurityDeclarationByBlob () { @@ -126,7 +125,6 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("System.String", argument.Type.FullName); Assert.AreEqual (permission_set, argument.Value); } -#endif [Test] public void SecurityDeclarationWithoutAttributes () diff --git a/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs b/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs index b453bcc983..941f4a1c6a 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.IO; @@ -16,12 +15,10 @@ namespace Mono.Cecil.Tests { [Test] public void DefaultPdb () { - IgnoreOnMono (); - TestModule ("libpdb.dll", module => { Assert.IsTrue (module.HasSymbols); Assert.AreEqual (typeof (NativePdbReader), module.SymbolReader.GetType ()); - }, symbolReaderProvider: typeof (DefaultSymbolReaderProvider), symbolWriterProvider: typeof (DefaultSymbolWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (DefaultSymbolReaderProvider), symbolWriterProvider: typeof (DefaultSymbolWriterProvider)); } [Test] @@ -133,5 +130,3 @@ namespace Mono.Cecil.Tests { } } } - -#endif diff --git a/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs b/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs index 0bdb48c4c3..9147764f01 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs @@ -30,8 +30,6 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY - [Test] public void EmptyStructLayout () { @@ -45,8 +43,6 @@ namespace Mono.Cecil.Tests { }) ; } -#endif - [Test] public void SimpleInterfaces () { diff --git a/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs b/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs index fb39e33428..65616294fd 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs @@ -68,23 +68,13 @@ namespace Mono.Cecil.Tests { void LoadWindowsSdk (string registryVersion, string windowsKitsVersion, Action registerAssembliesCallback) { -#if NET_4_0 using (var localMachine32Key = RegistryKey.OpenBaseKey (RegistryHive.LocalMachine, RegistryView.Registry32)) { using (var sdkKey = localMachine32Key.OpenSubKey (@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v" + registryVersion)) { -#else - { - // this will fail on 64-bit process as there's no way (other than pinoke) to read from 32-bit registry view - using (var sdkKey = Registry.LocalMachine.OpenSubKey (@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\" + registryVersion)) { -#endif string installationFolder = null; if (sdkKey != null) installationFolder = (string)sdkKey.GetValue ("InstallationFolder"); if (string.IsNullOrEmpty (installationFolder)) { -#if NET_4_0 var programFilesX86 = Environment.GetFolderPath (Environment.SpecialFolder.ProgramFilesX86); -#else - var programFilesX86 = Environment.GetEnvironmentVariable ("ProgramFiles(x86)"); -#endif installationFolder = Path.Combine (programFilesX86, @"Windows Kits\" + windowsKitsVersion); } registerAssembliesCallback (installationFolder); diff --git a/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs b/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs index d5ed3b0b33..9b10fd5cf8 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs @@ -65,7 +65,6 @@ namespace Mono.Cecil.Tests { }, verify: false, assemblyResolver: WindowsRuntimeAssemblyResolver.CreateInstance (), applyWindowsRuntimeProjections: true); } -#if !READ_ONLY [Test] public void CanStripType () { @@ -93,7 +92,6 @@ namespace Mono.Cecil.Tests { } }, readOnly: true, verify: false, assemblyResolver: assemblyResolver, applyWindowsRuntimeProjections: true); } -#endif } [TestFixture] diff --git a/external/cecil/Test/libs/nunit-2.6.2/license.txt b/external/cecil/Test/libs/nunit-2.6.2/license.txt deleted file mode 100644 index 530a6e0036..0000000000 --- a/external/cecil/Test/libs/nunit-2.6.2/license.txt +++ /dev/null @@ -1,15 +0,0 @@ -Copyright 2002-2012 Charlie Poole -Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov -Copyright 2000-2002 Philip A. Craig - -This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. - -Portions Copyright 2002-2012 Charlie Poole or Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright 2000-2002 Philip A. Craig - -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. diff --git a/external/cecil/appveyor.yml b/external/cecil/appveyor.yml deleted file mode 100644 index 9150a13a3a..0000000000 --- a/external/cecil/appveyor.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: 0.9.6.{build} -configuration: net_4_0_Debug -build: - project: Mono.Cecil.sln - verbosity: minimal -test_script: -- nunit-console.exe Mono.Cecil.nunit -notifications: -- provider: Webhook - url: https://webhooks.gitter.im/e/925de8a68a6d8d3ce68e - on_build_success: false - on_build_failure: false - on_build_status_changed: true \ No newline at end of file diff --git a/external/cecil/rocks/Mono.Cecil.Rocks.csproj b/external/cecil/rocks/Mono.Cecil.Rocks.csproj index 045606b4e0..3d66047a9d 100644 --- a/external/cecil/rocks/Mono.Cecil.Rocks.csproj +++ b/external/cecil/rocks/Mono.Cecil.Rocks.csproj @@ -1,23 +1,15 @@ - - + - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC} - Mono.Cecil.Rocks - Mono.Cecil.Rocks + netstandard2.0;net40 + $(DefineConstants);INSIDE_ROCKS + + + Mono.Cecil + + - - - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - - - - - - $(DefineConstants);INSIDE_ROCKS - \ No newline at end of file diff --git a/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj b/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj index 7c1946c5cf..5bab176335 100644 --- a/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj +++ b/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj @@ -1,22 +1,16 @@ - - + - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} - Mono.Cecil.Rocks.Tests - Mono.Cecil.Rocks.Tests + netcoreapp2.1;net40 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} Mono.Cecil.Tests - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC} Mono.Cecil.Rocks @@ -26,5 +20,4 @@ - - \ No newline at end of file + diff --git a/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs b/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs index 0c2c125d42..948b5df62a 100644 --- a/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs +++ b/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs @@ -1,3 +1,5 @@ +#if !NET_CORE + using System.Security.Permissions; using NUnit.Framework; @@ -60,3 +62,5 @@ namespace Mono.Cecil.Tests { } } } + +#endif diff --git a/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs b/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs index bcb9336bc7..2ada1059f9 100644 --- a/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs +++ b/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using Mono.Cecil.Rocks; @@ -123,4 +122,3 @@ namespace Mono.Cecil.Tests { } } } -#endif \ No newline at end of file diff --git a/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj b/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj index 310016bb42..08256ba728 100644 --- a/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj +++ b/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj @@ -1,13 +1,10 @@ - - + - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD} - Mono.Cecil.Mdb - Mono.Cecil.Mdb + netstandard2.0;net40 + $(DefineConstants);CECIL - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil @@ -16,9 +13,4 @@ - - - - $(DefineConstants);CECIL - diff --git a/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs b/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs index 2244e9faa6..3e2dd18e45 100644 --- a/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs +++ b/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs @@ -50,12 +50,10 @@ namespace Mono.Cecil.Mdb { this.documents = new Dictionary (); } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new MdbWriterProvider (); } -#endif public bool ProcessDebugHeader (ImageDebugHeader header) { diff --git a/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs b/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs index 8c3dbe3edc..becbb4f88c 100644 --- a/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs +++ b/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs @@ -18,7 +18,6 @@ using Mono.CompilerServices.SymbolWriter; namespace Mono.Cecil.Mdb { -#if !READ_ONLY public sealed class MdbWriterProvider : ISymbolWriterProvider { public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) @@ -211,5 +210,4 @@ namespace Mono.Cecil.Mdb { } } } -#endif } diff --git a/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj b/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj index 81cfc63eca..8475ec4c1d 100644 --- a/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj +++ b/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj @@ -1,22 +1,16 @@ - - + - {AC71DF9C-99FA-4A63-990A-66C8010355A6} - Mono.Cecil.Mdb.Tests - Mono.Cecil.Mdb.Tests + netcoreapp2.1;net40 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} Mono.Cecil.Tests - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD} Mono.Cecil.Mdb @@ -26,5 +20,4 @@ - - \ No newline at end of file + diff --git a/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs b/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs index 2b58f7fbab..6041efaac2 100644 --- a/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs +++ b/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using Mono.Cecil.Mdb; using NUnit.Framework; @@ -11,7 +10,7 @@ namespace Mono.Cecil.Tests { [Test] public void MdbWithJustLineInfo () { - TestModule ("hello.exe", module => { + TestModule ("simplemdb.exe", module => { var type = module.GetType ("Program"); var main = type.GetMethod ("Main"); @@ -83,4 +82,3 @@ namespace Mono.Cecil.Tests { } } } -#endif \ No newline at end of file diff --git a/external/cecil/symbols/mdb/Test/Resources/assemblies/hello.exe.mdb b/external/cecil/symbols/mdb/Test/Resources/assemblies/simplemdb.exe.mdb similarity index 100% rename from external/cecil/symbols/mdb/Test/Resources/assemblies/hello.exe.mdb rename to external/cecil/symbols/mdb/Test/Resources/assemblies/simplemdb.exe.mdb diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj b/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj index eeebce1520..265159d482 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj @@ -1,14 +1,10 @@ - - + - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} - Mono.Cecil.Pdb - Mono.Cecil.Pdb + netstandard2.0;net40 0649 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil @@ -17,6 +13,4 @@ - - diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs index f694e2701c..e64ec78d1e 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs @@ -8,8 +8,6 @@ using System.Runtime.InteropServices; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { [Guid ("B01FAFEB-C450-3A4D-BEEC-B4CEEC01E006")] @@ -18,5 +16,3 @@ namespace Mono.Cecil.Pdb { interface ISymUnmanagedDocumentWriter { } } - -#endif diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs index 81cc6a3a90..c55c2b1112 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs @@ -13,8 +13,6 @@ using System.Runtime.InteropServices.ComTypes; using Mono.Cecil.Cil; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { [Guid ("0B97726E-9E6D-4f05-9A26-424022093CAA")] @@ -86,5 +84,3 @@ namespace Mono.Cecil.Pdb { [In] int sigToken); } } - -#endif diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs index b175c06a4e..297df0cb41 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { [ComImport, InterfaceType (ComInterfaceType.InterfaceIsIUnknown), Guid ("BA3FEE4C-ECB9-4e41-83B7-183FA41CD859")] @@ -792,5 +790,3 @@ namespace Mono.Cecil.Pdb { } } } - -#endif diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs index 468e88208a..9280e0f7e6 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs @@ -35,12 +35,11 @@ namespace Mono.Cecil.Pdb { this.pdb_file = file; } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new NativePdbWriterProvider (); } -#endif + /* uint Magic = 0x53445352; Guid Signature; diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs index 4e295290fb..a0a07476e6 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs @@ -18,8 +18,6 @@ using Mono.Cecil.Cil; using Mono.Cecil.PE; using Mono.Collections.Generic; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { public class NativePdbWriter : ISymbolWriter { @@ -362,5 +360,3 @@ namespace Mono.Cecil.Pdb { } } } - -#endif diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs index eb75f3d11d..2008eb0026 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs @@ -65,8 +65,6 @@ namespace Mono.Cecil.Pdb { } } -#if !READ_ONLY - public sealed class NativePdbWriterProvider : ISymbolWriterProvider { public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) @@ -125,6 +123,4 @@ namespace Mono.Cecil.Pdb { return new NativePdbWriterProvider ().GetSymbolWriter (module, symbolStream); } } - -#endif } diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs index a2bd1a2bd8..83cea8e54b 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs @@ -9,8 +9,6 @@ using System; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { internal class SymDocumentWriter @@ -28,5 +26,3 @@ namespace Mono.Cecil.Pdb } } } - -#endif diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs index 5ecf2173bd..7006c68c7d 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs @@ -13,8 +13,6 @@ using System.Runtime.InteropServices; using Mono.Cecil.Cil; using Mono.Collections.Generic; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { internal class SymWriter @@ -156,5 +154,3 @@ namespace Mono.Cecil.Pdb } } } - -#endif diff --git a/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj b/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj index 54fccb03e4..38112e21a7 100644 --- a/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj +++ b/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj @@ -1,22 +1,16 @@ - - + - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} - Mono.Cecil.Pdb.Tests - Mono.Cecil.Pdb.Tests + netcoreapp2.1;net40 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} Mono.Cecil.Tests - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} Mono.Cecil.Pdb @@ -26,5 +20,4 @@ - - \ No newline at end of file + diff --git a/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs b/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs index b6fdcdf566..2269cb5c92 100644 --- a/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs +++ b/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System.IO; using System.Linq; @@ -57,7 +56,7 @@ namespace Mono.Cecil.Tests { IL_0020: ldloc.1 IL_0021: ret ", main); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -83,7 +82,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("i", variables [0].Name); Assert.IsFalse (variables [0].IsDebuggerHidden); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -103,7 +102,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.CSharp, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -123,7 +122,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.Basic, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -143,28 +142,28 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.FSharp, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void EmptyEnumerable () { TestModule ("empty-iterator.dll", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void EmptyRootNamespace () { TestModule ("EmptyRootNamespace.dll", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void VisualBasicNamespace () { TestModule ("AVbTest.exe", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } @@ -218,7 +217,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("u", variable.Name); Assert.IsFalse (variable.IsDebuggerHidden); Assert.AreEqual (5, variable.Index); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -276,7 +275,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("u", constant.Name); Assert.AreEqual (null, constant.Value); Assert.AreEqual (MetadataType.String, constant.ConstantType.MetadataType); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -325,7 +324,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (ImportTargetKind.DefineNamespaceAlias, target.Kind); Assert.AreEqual ("Foo2", target.Alias); Assert.AreEqual ("System.Reflection", target.Namespace); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -339,7 +338,7 @@ namespace Mono.Cecil.Tests { Assert.IsNotNull (symbol); Assert.IsNotNull (symbol.StateMachineKickOffMethod); Assert.AreEqual ("System.Threading.Tasks.Task ComplexPdb.Program::TestAsync()", symbol.StateMachineKickOffMethod.FullName); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -372,7 +371,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (move_next, async_body.ResumeMethods [0]); Assert.AreEqual (move_next, async_body.ResumeMethods [1]); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -408,13 +407,14 @@ namespace Mono.Cecil.Tests { } Assert.AreEqual ("System", import.Targets [0].Namespace); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void CreateMethodFromScratch () { - IgnoreOnMono (); + if (!Platform.HasNativePdbSupport) + Assert.Ignore (); var module = ModuleDefinition.CreateModule ("Pan", ModuleKind.Dll); var type = new TypeDefinition ("Pin", "Pon", TypeAttributes.Public | TypeAttributes.Abstract | TypeAttributes.Sealed, module.ImportReference (typeof (object))); @@ -465,4 +465,3 @@ namespace Mono.Cecil.Tests { } } } -#endif \ No newline at end of file diff --git a/external/corefx/src/Common/src/CoreLib/System.Private.CoreLib.Shared.projitems b/external/corefx/src/Common/src/CoreLib/System.Private.CoreLib.Shared.projitems index 82a1966179..59b2edd8f7 100644 --- a/external/corefx/src/Common/src/CoreLib/System.Private.CoreLib.Shared.projitems +++ b/external/corefx/src/Common/src/CoreLib/System.Private.CoreLib.Shared.projitems @@ -199,6 +199,7 @@ + @@ -273,6 +274,7 @@ + diff --git a/external/corefx/src/Common/src/CoreLib/System/Boolean.cs b/external/corefx/src/Common/src/CoreLib/System/Boolean.cs index fda749d5f3..bdbfc22bf8 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Boolean.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Boolean.cs @@ -21,12 +21,12 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Boolean : IComparable, IConvertible, IComparable, IEquatable + public readonly struct Boolean : IComparable, IConvertible, IComparable, IEquatable { // // Member Variables // - private bool m_value; // Do not rename (binary serialization) + private readonly bool m_value; // Do not rename (binary serialization) // The true value. // diff --git a/external/corefx/src/Common/src/CoreLib/System/Byte.cs b/external/corefx/src/Common/src/CoreLib/System/Byte.cs index 4a2592eb17..a182d9471e 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Byte.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Byte.cs @@ -14,9 +14,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Byte : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct Byte : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private byte m_value; // Do not rename (binary serialization) + private readonly byte m_value; // Do not rename (binary serialization) // The maximum value that a Byte may represent: 255. public const byte MaxValue = (byte)0xFF; diff --git a/external/corefx/src/Common/src/CoreLib/System/Char.cs b/external/corefx/src/Common/src/CoreLib/System/Char.cs index c403925f52..c4641d1299 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Char.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Char.cs @@ -23,12 +23,12 @@ namespace System #if !MONO [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Char : IComparable, IComparable, IEquatable, IConvertible + public readonly struct Char : IComparable, IComparable, IEquatable, IConvertible { // // Member Variables // - private char m_value; // Do not rename (binary serialization) + private readonly char m_value; // Do not rename (binary serialization) // // Public Constants diff --git a/external/corefx/src/Common/src/CoreLib/System/Collections/ObjectModel/Collection.cs b/external/corefx/src/Common/src/CoreLib/System/Collections/ObjectModel/Collection.cs index 99def02bfd..93828201b8 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Collections/ObjectModel/Collection.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Collections/ObjectModel/Collection.cs @@ -16,8 +16,6 @@ namespace System.Collections.ObjectModel public class Collection : IList, IList, IReadOnlyList { private IList items; // Do not rename (binary serialization) - [NonSerialized] - private Object _syncRoot; public Collection() { @@ -53,7 +51,7 @@ namespace System.Collections.ObjectModel ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } - if (index < 0 || index >= items.Count) + if ((uint)index >= (uint)items.Count) { ThrowHelper.ThrowArgumentOutOfRange_IndexException(); } @@ -110,9 +108,9 @@ namespace System.Collections.ObjectModel ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } - if (index < 0 || index > items.Count) + if ((uint)index > (uint)items.Count) { - ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_ListInsert); + ThrowHelper.ThrowArgumentOutOfRange_IndexException(); } InsertItem(index, item); @@ -138,7 +136,7 @@ namespace System.Collections.ObjectModel ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } - if (index < 0 || index >= items.Count) + if ((uint)index >= (uint)items.Count) { ThrowHelper.ThrowArgumentOutOfRange_IndexException(); } @@ -188,19 +186,7 @@ namespace System.Collections.ObjectModel { get { - if (_syncRoot == null) - { - ICollection c = items as ICollection; - if (c != null) - { - _syncRoot = c.SyncRoot; - } - else - { - System.Threading.Interlocked.CompareExchange(ref _syncRoot, new Object(), null); - } - } - return _syncRoot; + return (items is ICollection coll) ? coll.SyncRoot : this; } } @@ -231,8 +217,7 @@ namespace System.Collections.ObjectModel ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } - T[] tArray = array as T[]; - if (tArray != null) + if (array is T[] tArray) { items.CopyTo(tArray, index); } @@ -310,8 +295,7 @@ namespace System.Collections.ObjectModel // readonly collections are fixed size, if our internal item // collection does not implement IList. Note that Array implements // IList, and therefore T[] and U[] will be fixed-size. - IList list = items as IList; - if (list != null) + if (items is IList list) { return list.IsFixedSize; } diff --git a/external/corefx/src/Common/src/CoreLib/System/DateTimeOffset.cs b/external/corefx/src/Common/src/CoreLib/System/DateTimeOffset.cs index 52b97f048f..2bb35fafa7 100644 --- a/external/corefx/src/Common/src/CoreLib/System/DateTimeOffset.cs +++ b/external/corefx/src/Common/src/CoreLib/System/DateTimeOffset.cs @@ -33,7 +33,7 @@ namespace System #if !MONO [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct DateTimeOffset : IComparable, IFormattable, IComparable, IEquatable, ISerializable, IDeserializationCallback, ISpanFormattable + public readonly struct DateTimeOffset : IComparable, IFormattable, IComparable, IEquatable, ISerializable, IDeserializationCallback, ISpanFormattable { // Constants internal const Int64 MaxOffset = TimeSpan.TicksPerHour * 14; @@ -51,8 +51,8 @@ namespace System public static readonly DateTimeOffset UnixEpoch = new DateTimeOffset(DateTime.UnixEpochTicks, TimeSpan.Zero); // Instance Fields - private DateTime _dateTime; - private Int16 _offsetMinutes; + private readonly DateTime _dateTime; + private readonly Int16 _offsetMinutes; // Constructors @@ -555,8 +555,8 @@ namespace System { try { - _offsetMinutes = ValidateOffset(Offset); - _dateTime = ValidateDate(ClockDateTime, Offset); + ValidateOffset(Offset); + ValidateDate(ClockDateTime, Offset); } catch (ArgumentException e) { diff --git a/external/corefx/src/Common/src/CoreLib/System/Double.cs b/external/corefx/src/Common/src/CoreLib/System/Double.cs index 0f11a4a252..f865871a9b 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Double.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Double.cs @@ -26,9 +26,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Double : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct Double : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private double m_value; // Do not rename (binary serialization) + private readonly double m_value; // Do not rename (binary serialization) // // Public Constants @@ -228,7 +228,7 @@ namespace System [MethodImpl(MethodImplOptions.AggressiveInlining)] // 64-bit constants make the IL unusually large that makes the inliner to reject the method public override int GetHashCode() { - var bits = Unsafe.As(ref m_value); + var bits = BitConverter.DoubleToInt64Bits(m_value); // Optimized check for IsNan() || IsZero() if (((bits - 1) & 0x7FFFFFFFFFFFFFFF) >= 0x7FF0000000000000) diff --git a/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormat.cs b/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormat.cs index 312aaf0a05..0ff7b424b5 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormat.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormat.cs @@ -461,8 +461,8 @@ namespace System } // This is a flag to indicate if we are format the dates using Hebrew calendar. - bool isHebrewCalendar = ((CalendarId)cal.ID == CalendarId.HEBREW); - bool isJapaneseCalendar = ((CalendarId)cal.ID == CalendarId.JAPAN); + bool isHebrewCalendar = !GlobalizationMode.Invariant && ((CalendarId)cal.ID == CalendarId.HEBREW); + bool isJapaneseCalendar = !GlobalizationMode.Invariant && ((CalendarId)cal.ID == CalendarId.JAPAN); // This is a flag to indicate if we are formating hour/minute/second only. bool bTimeOnly = true; @@ -584,7 +584,7 @@ namespace System if (tokenLen <= 2) { int day = cal.GetDayOfMonth(dateTime); - if (isHebrewCalendar) + if (isHebrewCalendar && !GlobalizationMode.Invariant) { // For Hebrew calendar, we need to convert numbers to Hebrew text for yyyy, MM, and dd values. HebrewFormatDigits(result, day); @@ -612,7 +612,7 @@ namespace System int month = cal.GetMonth(dateTime); if (tokenLen <= 2) { - if (isHebrewCalendar) + if (isHebrewCalendar && !GlobalizationMode.Invariant) { // For Hebrew calendar, we need to convert numbers to Hebrew text for yyyy, MM, and dd values. HebrewFormatDigits(result, month); @@ -624,7 +624,7 @@ namespace System } else { - if (isHebrewCalendar) + if (isHebrewCalendar && !GlobalizationMode.Invariant) { result.Append(FormatHebrewMonthName(dateTime, month, tokenLen, dtfi)); } @@ -670,7 +670,7 @@ namespace System { FormatDigits(result, year, tokenLen <= 2 ? tokenLen : 2); } - else if ((CalendarId)cal.ID == CalendarId.HEBREW) + else if (isHebrewCalendar && !GlobalizationMode.Invariant) { HebrewFormatDigits(result, year); } diff --git a/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormatInfo.cs.REMOVED.git-id b/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormatInfo.cs.REMOVED.git-id index ae55785620..833847d2d2 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormatInfo.cs.REMOVED.git-id +++ b/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeFormatInfo.cs.REMOVED.git-id @@ -1 +1 @@ -314120f3cfcb0de6415530f7dca52ec5e4bc7a90 \ No newline at end of file +07a3c46e17aed107177859626d0ca573363b0821 \ No newline at end of file diff --git a/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeParse.cs.REMOVED.git-id b/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeParse.cs.REMOVED.git-id index 95e1a7229c..a7ab00dd3f 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeParse.cs.REMOVED.git-id +++ b/external/corefx/src/Common/src/CoreLib/System/Globalization/DateTimeParse.cs.REMOVED.git-id @@ -1 +1 @@ -0dccb4fcb01a2b425dc04ac71bbc7969ad7c2326 \ No newline at end of file +63f3e793e95c338fe7b364780a6492b962cb5f5b \ No newline at end of file diff --git a/external/corefx/src/Common/src/CoreLib/System/Globalization/TimeSpanParse.cs b/external/corefx/src/Common/src/CoreLib/System/Globalization/TimeSpanParse.cs index fd09023ccd..1cecccbebe 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Globalization/TimeSpanParse.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Globalization/TimeSpanParse.cs @@ -766,7 +766,7 @@ namespace System.Globalization } } - result.parsedTimeSpan._ticks = ticks; + result.parsedTimeSpan = new TimeSpan(ticks); return true; } @@ -894,7 +894,7 @@ namespace System.Globalization } } - result.parsedTimeSpan._ticks = ticks; + result.parsedTimeSpan = new TimeSpan(ticks); return true; } @@ -1020,7 +1020,7 @@ namespace System.Globalization } } - result.parsedTimeSpan._ticks = ticks; + result.parsedTimeSpan = new TimeSpan(ticks); return true; } @@ -1092,7 +1092,7 @@ namespace System.Globalization } } - result.parsedTimeSpan._ticks = ticks; + result.parsedTimeSpan = new TimeSpan(ticks); return true; } @@ -1162,7 +1162,7 @@ namespace System.Globalization } } - result.parsedTimeSpan._ticks = ticks; + result.parsedTimeSpan = new TimeSpan(ticks); return true; } @@ -1361,7 +1361,7 @@ namespace System.Globalization ticks = -ticks; } - result.parsedTimeSpan._ticks = ticks; + result.parsedTimeSpan = new TimeSpan(ticks); return true; } else @@ -1456,7 +1456,7 @@ namespace System.Globalization internal bool TryParse(ReadOnlySpan input, ref TimeSpanResult result) { - result.parsedTimeSpan._ticks = 0; + result.parsedTimeSpan = default; _str = input; _len = input.Length; @@ -1525,7 +1525,7 @@ namespace System.Globalization return result.SetFailure(ParseFailureKind.Format, nameof(SR.Format_BadTimeSpan)); } - result.parsedTimeSpan._ticks = time; + result.parsedTimeSpan = new TimeSpan(time); return true; } diff --git a/external/corefx/src/Common/src/CoreLib/System/HResults.cs b/external/corefx/src/Common/src/CoreLib/System/HResults.cs index ffc47d85bf..86762e3b14 100644 --- a/external/corefx/src/Common/src/CoreLib/System/HResults.cs +++ b/external/corefx/src/Common/src/CoreLib/System/HResults.cs @@ -27,6 +27,7 @@ namespace System { internal const int COR_E_ABANDONEDMUTEX = unchecked((int)0x8013152D); internal const int COR_E_AMBIGUOUSMATCH = unchecked((int)0x8000211D); + internal const int COR_E_AMBIGUOUSIMPLEMENTATION = unchecked((int)0x8013106A); internal const int COR_E_APPDOMAINUNLOADED = unchecked((int)0x80131014); internal const int COR_E_APPLICATION = unchecked((int)0x80131600); internal const int COR_E_ARGUMENT = unchecked((int)0x80070057); diff --git a/external/corefx/src/Common/src/CoreLib/System/IO/StreamWriter.cs b/external/corefx/src/Common/src/CoreLib/System/IO/StreamWriter.cs index 31a0913b1c..2d108a517b 100644 --- a/external/corefx/src/Common/src/CoreLib/System/IO/StreamWriter.cs +++ b/external/corefx/src/Common/src/CoreLib/System/IO/StreamWriter.cs @@ -232,6 +232,68 @@ namespace System.IO } } +#if MONO // Copied from CoreFX-master (NS2.1) + public override ValueTask DisposeAsync() + { +#if __MonoCS__ + return GetType() != typeof(StreamWriter) ? base.DisposeAsync() : new ValueTask(DisposeAsyncCore()); +#else + return GetType() != typeof(StreamWriter) ? base.DisposeAsync() : DisposeAsyncCore(); +#endif + } + +#if __MonoCS__ + private async Task DisposeAsyncCore() +#else + private async ValueTask DisposeAsyncCore() +#endif + { + // Same logic as in Dispose(), but with async flushing. + Debug.Assert(GetType() == typeof(StreamWriter)); + try + { + if (_stream != null) + { + await FlushAsync().ConfigureAwait(false); + } + } + finally + { + CloseStreamFromDispose(disposing: true); + } + GC.SuppressFinalize(this); + } + + private void CloseStreamFromDispose(bool disposing) + { + // Dispose of our resources if this StreamWriter is closable. + if (!LeaveOpen && _stream != null) + { + try + { + // Attempt to close the stream even if there was an IO error from Flushing. + // Note that Stream.Close() can potentially throw here (may or may not be + // due to the same Flush error). In this case, we still need to ensure + // cleaning up internal resources, hence the finally block. + if (disposing) + { + _stream.Close(); + } + } + finally + { + _stream = null; + _byteBuffer = null; + _charBuffer = null; + _encoding = null; + _encoder = null; + _charLen = 0; + base.Dispose(disposing); + } + } + } +#endif + public override void Flush() { CheckAsyncTaskInProgress(); diff --git a/external/corefx/src/Common/src/CoreLib/System/IO/TextWriter.cs b/external/corefx/src/Common/src/CoreLib/System/IO/TextWriter.cs index 1445f53bef..e9dd87f13d 100644 --- a/external/corefx/src/Common/src/CoreLib/System/IO/TextWriter.cs +++ b/external/corefx/src/Common/src/CoreLib/System/IO/TextWriter.cs @@ -80,6 +80,21 @@ namespace System.IO GC.SuppressFinalize(this); } +#if MONO // Copied from CoreFX-master (NS2.1) + public virtual ValueTask DisposeAsync() + { + try + { + Dispose(); + return default; + } + catch (Exception exc) + { + return new ValueTask(Task.FromException(exc)); + } + } +#endif + // Clears all buffers for this TextWriter and causes any buffered data to be // written to the underlying device. This default method is empty, but // descendant classes can override the method to provide the appropriate diff --git a/external/corefx/src/Common/src/CoreLib/System/Index.cs b/external/corefx/src/Common/src/CoreLib/System/Index.cs new file mode 100644 index 0000000000..9767b981ef --- /dev/null +++ b/external/corefx/src/Common/src/CoreLib/System/Index.cs @@ -0,0 +1,149 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace System +{ + /// Represent a type can be used to index a collection either from the start or the end. + /// + /// Index is used by the C# compiler to support the new index syntax + /// + /// int[] someArray = new int[5] { 1, 2, 3, 4, 5 } ; + /// int lastElement = someArray[^1]; // lastElement = 5 + /// + /// + public readonly struct Index : IEquatable + { + private readonly int _value; + + /// Construct an Index using a value and indicating if the index is from the start or from the end. + /// The index value. it has to be zero or positive number. + /// Indicating if the index is from the start or from the end. + /// + /// If the Index constructed from the end, index value 1 means pointing at the last element and index value 0 means pointing at beyond last element. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Index(int value, bool fromEnd = false) + { + if (value < 0) + { + ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException(); + } + + if (fromEnd) + _value = ~value; + else + _value = value; + } + + // The following private constructors mainly created for perf reason to avoid the checks + private Index(int value) + { + _value = value; + } + + /// Create an Index pointing at first element. + public static Index Start => new Index(0); + + /// Create an Index pointing at beyond last element. + public static Index End => new Index(~0); + + /// Create an Index from the start at the position indicated by the value. + /// The index value from the start. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Index FromStart(int value) + { + if (value < 0) + { + ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException(); + } + + return new Index(value); + } + + /// Create an Index from the end at the position indicated by the value. + /// The index value from the end. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Index FromEnd(int value) + { + if (value < 0) + { + ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException(); + } + + return new Index(~value); + } + + /// Returns the index value. + public int Value + { + get + { + if (_value < 0) + return ~_value; + else + return _value; + } + } + + /// Indicates whether the index is from the start or the end. + public bool IsFromEnd => _value < 0; + + /// Calculate the offset from the start using the giving collection length. + /// The length of the collection that the Index will be used with. length has to be a positive value + /// + /// For performance reason, we don't validate the input length parameter and the returned offset value against negative values. + /// we don't validate either the returned offset is greater than the input length. + /// It is expected Index will be used with collections which always have non negative length/count. If the returned offset is negative and + /// then used to index a collection will get out of range exception which will be same affect as the validation. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public int GetOffset(int length) + { + int offset; + + if (IsFromEnd) + offset = length - (~_value); + else + offset = _value; + + return offset; + } + + /// Indicates whether the current Index object is equal to another object of the same type. + /// An object to compare with this object + public override bool Equals(object value) => value is Index && _value == ((Index)value)._value; + + /// Indicates whether the current Index object is equal to another Index object. + /// An object to compare with this object + public bool Equals (Index other) => _value == other._value; + + /// Returns the hash code for this instance. + public override int GetHashCode() => _value; + + /// Converts integer number to an Index. + public static implicit operator Index(int value) => FromStart(value); + + /// Converts the value of the current Index object to its equivalent string representation. + public override string ToString() + { + if (IsFromEnd) + return ToStringFromEnd(); + + return ((uint)Value).ToString(); + } + + private string ToStringFromEnd() + { + Span span = stackalloc char[11]; // 1 for ^ and 10 for longest possible uint value + bool formatted = ((uint)Value).TryFormat(span.Slice(1), out int charsWritten); + Debug.Assert(formatted); + span[0] = '^'; + return new string(span.Slice(0, charsWritten + 1)); + } + + } +} diff --git a/external/corefx/src/Common/src/CoreLib/System/Int16.cs b/external/corefx/src/Common/src/CoreLib/System/Int16.cs index 42e7ee017c..97773175d8 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Int16.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Int16.cs @@ -14,9 +14,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Int16 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct Int16 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private short m_value; // Do not rename (binary serialization) + private readonly short m_value; // Do not rename (binary serialization) public const short MaxValue = (short)0x7FFF; public const short MinValue = unchecked((short)0x8000); diff --git a/external/corefx/src/Common/src/CoreLib/System/Int32.cs b/external/corefx/src/Common/src/CoreLib/System/Int32.cs index be86a22fb3..7c7156592b 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Int32.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Int32.cs @@ -14,9 +14,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Int32 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct Int32 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private int m_value; // Do not rename (binary serialization) + private readonly int m_value; // Do not rename (binary serialization) public const int MaxValue = 0x7fffffff; public const int MinValue = unchecked((int)0x80000000); diff --git a/external/corefx/src/Common/src/CoreLib/System/Int64.cs b/external/corefx/src/Common/src/CoreLib/System/Int64.cs index f8331e2b5d..bd2b362216 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Int64.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Int64.cs @@ -14,9 +14,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Int64 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct Int64 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private long m_value; // Do not rename (binary serialization) + private readonly long m_value; // Do not rename (binary serialization) public const long MaxValue = 0x7fffffffffffffffL; public const long MinValue = unchecked((long)0x8000000000000000L); diff --git a/external/corefx/src/Common/src/CoreLib/System/IntPtr.cs b/external/corefx/src/Common/src/CoreLib/System/IntPtr.cs index 44638ddd8e..dc63b5de46 100644 --- a/external/corefx/src/Common/src/CoreLib/System/IntPtr.cs +++ b/external/corefx/src/Common/src/CoreLib/System/IntPtr.cs @@ -17,13 +17,13 @@ namespace System { [Serializable] [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] - public struct IntPtr : IEquatable, ISerializable + public readonly struct IntPtr : IEquatable, ISerializable { // WARNING: We allow diagnostic tools to directly inspect this member (_value). // See https://github.com/dotnet/corert/blob/master/Documentation/design-docs/diagnostics/diagnostics-tools-contract.md for more details. // Please do not change the type, the name, or the semantic usage of this member without understanding the implication for tools. // Get in touch with the diagnostics team if you have questions. - private unsafe void* _value; // Do not rename (binary serialization) + private readonly unsafe void* _value; // Do not rename (binary serialization) [Intrinsic] public static readonly IntPtr Zero; diff --git a/external/corefx/src/Common/src/CoreLib/System/Memory.cs b/external/corefx/src/Common/src/CoreLib/System/Memory.cs index 20134c2ebc..847b4c7dc6 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Memory.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Memory.cs @@ -22,7 +22,7 @@ namespace System /// [DebuggerTypeProxy(typeof(MemoryDebugView<>))] [DebuggerDisplay("{ToString(),raw}")] - public readonly struct Memory + public readonly struct Memory : IEquatable> { // NOTE: With the current implementation, Memory and ReadOnlyMemory must have the same layout, // as code uses Unsafe.As to cast between them. diff --git a/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.Fast.cs b/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.Fast.cs index d256887a9f..869a52c52e 100644 --- a/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.Fast.cs +++ b/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.Fast.cs @@ -376,6 +376,60 @@ namespace System return new Span(ref Unsafe.Add(ref Unsafe.As(ref array.GetRawSzArrayData()), start), array.Length - start); } + /// + /// Creates a new span over the portion of the target array. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Span AsSpan(this T[] array, Index startIndex) + { + if (array == null) + { + if (!startIndex.Equals(Index.Start)) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); + + return default; + } + + if (default(T) == null && array.GetType() != typeof(T[])) + ThrowHelper.ThrowArrayTypeMismatchException(); + + int actualIndex = startIndex.GetOffset(array.Length); + if ((uint)actualIndex > (uint)array.Length) + ThrowHelper.ThrowArgumentOutOfRangeException(); + + return new Span(ref Unsafe.Add(ref Unsafe.As(ref array.GetRawSzArrayData()), actualIndex), array.Length - actualIndex); + } + + /// + /// Creates a new span over the portion of the target array. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Span AsSpan(this T[] array, Range range) + { + if (array == null) + { + Index startIndex = range.Start; + Index endIndex = range.End; + + if (!startIndex.Equals(Index.Start) || !endIndex.Equals(Index.Start)) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); + + return default; + } + + if (default(T) == null && array.GetType() != typeof(T[])) + ThrowHelper.ThrowArrayTypeMismatchException(); + +#if __MonoCS__ + var offsetAndLength = range.GetOffsetAndLength(array.Length); + int start = offsetAndLength.Offset; + int length = offsetAndLength.Length; +#else + (int start, int length) = range.GetOffsetAndLength(array.Length); +#endif + return new Span(ref Unsafe.Add(ref Unsafe.As(ref array.GetRawSzArrayData()), start), length); + } + /// /// Creates a new readonly span over the portion of the target string. /// @@ -474,6 +528,26 @@ namespace System return new ReadOnlyMemory(text, start, text.Length - start); } + /// Creates a new over the portion of the target string. + /// The target string. + /// The index at which to begin this slice. + public static ReadOnlyMemory AsMemory(this string text, Index startIndex) + { + if (text == null) + { + if (!startIndex.Equals(Index.Start)) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text); + + return default; + } + + int actualIndex = startIndex.GetOffset(text.Length); + if ((uint)actualIndex > (uint)text.Length) + ThrowHelper.ThrowArgumentOutOfRangeException(); + + return new ReadOnlyMemory(text, actualIndex, text.Length - actualIndex); + } + /// Creates a new over the portion of the target string. /// The target string. /// The index at which to begin this slice. @@ -496,5 +570,31 @@ namespace System return new ReadOnlyMemory(text, start, length); } + + /// Creates a new over the portion of the target string. + /// The target string. + /// The range used to indicate the start and length of the sliced string. + public static ReadOnlyMemory AsMemory(this string text, Range range) + { + if (text == null) + { + Index startIndex = range.Start; + Index endIndex = range.End; + + if (!startIndex.Equals(Index.Start) || !endIndex.Equals(Index.Start)) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.text); + + return default; + } + +#if __MonoCS__ + var offsetAndLength = range.GetOffsetAndLength(text.Length); + int start = offsetAndLength.Offset; + int length = offsetAndLength.Length; +#else + (int start, int length) = range.GetOffsetAndLength(text.Length); +#endif + return new ReadOnlyMemory(text, start, length); + } } } diff --git a/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.cs b/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.cs index a706b7b685..97b98a2e41 100644 --- a/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.cs +++ b/external/corefx/src/Common/src/CoreLib/System/MemoryExtensions.cs @@ -106,7 +106,7 @@ namespace System } /// - /// Removes all leading and trailing occurrences of a set of characters specified + /// Removes all leading and trailing occurrences of a set of characters specified /// in a readonly span from the span. /// /// The source span from which the characters are removed. @@ -118,7 +118,7 @@ namespace System } /// - /// Removes all leading occurrences of a set of characters specified + /// Removes all leading occurrences of a set of characters specified /// in a readonly span from the span. /// /// The source span from which the characters are removed. @@ -147,7 +147,7 @@ namespace System } /// - /// Removes all trailing occurrences of a set of characters specified + /// Removes all trailing occurrences of a set of characters specified /// in a readonly span from the span. /// /// The source span from which the characters are removed. @@ -212,7 +212,7 @@ namespace System } /// - /// Searches for the specified sequence and returns the index of its first occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified sequence and returns the index of its first occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The sequence to search for. @@ -231,7 +231,7 @@ namespace System } /// - /// Searches for the specified value and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified value and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The value to search for. @@ -254,7 +254,7 @@ namespace System } /// - /// Searches for the specified sequence and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified sequence and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The sequence to search for. @@ -273,7 +273,7 @@ namespace System } /// - /// Determines whether two sequences are equal by comparing the elements using IEquatable{T}.Equals(T). + /// Determines whether two sequences are equal by comparing the elements using IEquatable{T}.Equals(T). /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool SequenceEqual(this Span span, ReadOnlySpan other) @@ -292,7 +292,7 @@ namespace System } /// - /// Determines the relative order of the sequences being compared by comparing the elements using IComparable{T}.CompareTo(T). + /// Determines the relative order of the sequences being compared by comparing the elements using IComparable{T}.CompareTo(T). /// public static int SequenceCompareTo(this Span span, ReadOnlySpan other) where T : IComparable @@ -315,7 +315,7 @@ namespace System } /// - /// Searches for the specified value and returns the index of its first occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified value and returns the index of its first occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The value to search for. @@ -338,7 +338,7 @@ namespace System } /// - /// Searches for the specified sequence and returns the index of its first occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified sequence and returns the index of its first occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The sequence to search for. @@ -357,7 +357,7 @@ namespace System } /// - /// Searches for the specified value and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified value and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The value to search for. @@ -380,7 +380,7 @@ namespace System } /// - /// Searches for the specified sequence and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). + /// Searches for the specified sequence and returns the index of its last occurrence. If not found, returns -1. Values are compared using IEquatable{T}.Equals(T). /// /// The span to search. /// The sequence to search for. @@ -441,7 +441,7 @@ namespace System } /// - /// Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator. If not found, returns -1. + /// Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator. If not found, returns -1. /// /// The span to search. /// The set of values to search for. @@ -480,7 +480,7 @@ namespace System } /// - /// Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator. If not found, returns -1. + /// Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator. If not found, returns -1. /// /// The span to search. /// One of the values to search for. @@ -502,7 +502,7 @@ namespace System } /// - /// Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator. If not found, returns -1. + /// Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator. If not found, returns -1. /// /// The span to search. /// The set of values to search for. @@ -563,7 +563,7 @@ namespace System } /// - /// Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator. If not found, returns -1. + /// Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator. If not found, returns -1. /// /// The span to search. /// The set of values to search for. @@ -602,7 +602,7 @@ namespace System } /// - /// Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator. If not found, returns -1. + /// Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator. If not found, returns -1. /// /// The span to search. /// One of the values to search for. @@ -624,7 +624,7 @@ namespace System } /// - /// Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator. If not found, returns -1. + /// Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator. If not found, returns -1. /// /// The span to search. /// The set of values to search for. @@ -643,7 +643,7 @@ namespace System } /// - /// Determines whether two sequences are equal by comparing the elements using IEquatable{T}.Equals(T). + /// Determines whether two sequences are equal by comparing the elements using IEquatable{T}.Equals(T). /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool SequenceEqual(this ReadOnlySpan span, ReadOnlySpan other) @@ -661,7 +661,7 @@ namespace System } /// - /// Determines the relative order of the sequences being compared by comparing the elements using IComparable{T}.CompareTo(T). + /// Determines the relative order of the sequences being compared by comparing the elements using IComparable{T}.CompareTo(T). /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int SequenceCompareTo(this ReadOnlySpan span, ReadOnlySpan other) @@ -840,6 +840,19 @@ namespace System return new Span(segment.Array, segment.Offset + start, segment.Count - start); } + /// + /// Creates a new Span over the portion of the target array beginning + /// at 'startIndex' and ending at the end of the segment. + /// + /// The target array. + /// The index at which to begin the Span. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Span AsSpan(this ArraySegment segment, Index startIndex) + { + int actualIndex = startIndex.GetOffset(segment.Count); + return AsSpan(segment, actualIndex); + } + /// /// Creates a new Span over the portion of the target array beginning /// at 'start' index and ending at 'end' index (exclusive). @@ -863,6 +876,24 @@ namespace System return new Span(segment.Array, segment.Offset + start, length); } + /// + /// Creates a new Span over the portion of the target array using the range start and end indexes + /// + /// The target array. + /// The range which has start and end indexes to use for slicing the array. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Span AsSpan(this ArraySegment segment, Range range) + { +#if __MonoCS__ + var offsetAndLength = range.GetOffsetAndLength(segment.Count); + int start = offsetAndLength.Offset; + int length = offsetAndLength.Length; +#else + (int start, int length) = range.GetOffsetAndLength(segment.Count); +#endif + return new Span(segment.Array, segment.Offset + start, length); + } + /// /// Creates a new memory over the target array. /// @@ -881,6 +912,24 @@ namespace System /// public static Memory AsMemory(this T[] array, int start) => new Memory(array, start); + /// + /// Creates a new memory over the portion of the target array starting from + /// 'startIndex' to the end of the array. + /// + public static Memory AsMemory(this T[] array, Index startIndex) + { + if (array == null) + { + if (!startIndex.Equals(Index.Start)) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); + + return default; + } + + int actualIndex = startIndex.GetOffset(array.Length); + return new Memory(array, actualIndex); + } + /// /// Creates a new memory over the portion of the target array beginning /// at 'start' index and ending at 'end' index (exclusive). @@ -895,6 +944,32 @@ namespace System /// public static Memory AsMemory(this T[] array, int start, int length) => new Memory(array, start, length); + /// + /// Creates a new memory over the portion of the target array beginning at inclusive start index of the range + /// and ending at the exclusive end index of the range. + /// + public static Memory AsMemory(this T[] array, Range range) + { + if (array == null) + { + Index startIndex = range.Start; + Index endIndex = range.End; + if (!startIndex.Equals(Index.Start) || !endIndex.Equals(Index.Start)) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); + + return default; + } + +#if __MonoCS__ + var offsetAndLength = range.GetOffsetAndLength(array.Length); + int start = offsetAndLength.Offset; + int length = offsetAndLength.Length; +#else + (int start, int length) = range.GetOffsetAndLength(array.Length); +#endif + return new Memory(array, start, length); + } + /// /// Creates a new memory over the portion of the target array. /// @@ -945,7 +1020,7 @@ namespace System /// Copies the contents of the array into the span. If the source /// and destinations overlap, this method behaves as if the original values in /// a temporary location before the destination is overwritten. - /// + /// ///The array to copy items from. /// The span to copy items into. /// @@ -962,7 +1037,7 @@ namespace System /// Copies the contents of the array into the memory. If the source /// and destinations overlap, this method behaves as if the original values are in /// a temporary location before the destination is overwritten. - /// + /// ///The array to copy items from. /// The memory to copy items into. /// @@ -1061,16 +1136,16 @@ namespace System // nuint x2 = xLength // nuint y1 = (nuint)Unsafe.ByteOffset(xRef, yRef) // nuint y2 = y1 + yLength - // + // // xRef relative to xRef is 0. - // + // // x2 is simply x1 + xLength. This cannot overflow. - // + // // yRef relative to xRef is (yRef - xRef). If (yRef - xRef) is // negative, casting it to an unsigned 32-bit integer turns it into // (yRef - xRef + 2³²). So, in the example above, y1 moves to the right // of x2. - // + // // y2 is simply y1 + yLength. Note that this can overflow, as in the // example above, which must be avoided. // @@ -1097,11 +1172,11 @@ namespace System // integers: // // == (y1 < xLength) || (y1 > -yLength) - // + // // Due to modulo arithmetic, this gives exactly same result *except* if // yLength is zero, since 2³² - 0 is 0 and not 2³². So the case // y.IsEmpty must be handled separately first. - // + // /// /// Determines whether two sequences overlap in memory. diff --git a/external/corefx/src/Common/src/CoreLib/System/Numerics/Vector.cs.REMOVED.git-id b/external/corefx/src/Common/src/CoreLib/System/Numerics/Vector.cs.REMOVED.git-id index d38ef5f8b6..3819e72fce 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Numerics/Vector.cs.REMOVED.git-id +++ b/external/corefx/src/Common/src/CoreLib/System/Numerics/Vector.cs.REMOVED.git-id @@ -1 +1 @@ -42f86d9297702f8f4ec33ba22ca710dbb86e0ffc \ No newline at end of file +f41ad300bc92a5c9c315f3a82fefa6f9857efef1 \ No newline at end of file diff --git a/external/corefx/src/Common/src/CoreLib/System/Range.cs b/external/corefx/src/Common/src/CoreLib/System/Range.cs new file mode 100644 index 0000000000..fc5ec52423 --- /dev/null +++ b/external/corefx/src/Common/src/CoreLib/System/Range.cs @@ -0,0 +1,130 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace System +{ + /// Represent a range has start and end indexes. + /// + /// Range is used by the C# compiler to support the range syntax. + /// + /// int[] someArray = new int[5] { 1, 2, 3, 4, 5 }; + /// int[] subArray1 = someArray[0..2]; // { 1, 2 } + /// int[] subArray2 = someArray[1..^0]; // { 2, 3, 4, 5 } + /// + /// + public readonly struct Range : IEquatable + { + /// Represent the inclusive start index of the Range. + public Index Start { get; } + + /// Represent the exclusive end index of the Range. + public Index End { get; } + + /// Construct a Range object using the start and end indexes. + /// Represent the inclusive start index of the range. + /// Represent the exclusive end index of the range. + public Range(Index start, Index end) + { + Start = start; + End = end; + } + + /// Indicates whether the current Range object is equal to another object of the same type. + /// An object to compare with this object + public override bool Equals(object value) + { + if (value is Range) + { + Range r = (Range)value; + return r.Start.Equals(Start) && r.End.Equals(End); + } + + return false; + } + + /// Indicates whether the current Range object is equal to another Range object. + /// An object to compare with this object + public bool Equals (Range other) => other.Start.Equals(Start) && other.End.Equals(End); + + /// Returns the hash code for this instance. + public override int GetHashCode() + { + return HashCode.Combine(Start.GetHashCode(), End.GetHashCode()); + } + + /// Converts the value of the current Range object to its equivalent string representation. + public override string ToString() + { + Span span = stackalloc char[2 + (2 * 11)]; // 2 for "..", then for each index 1 for '^' and 10 for longest possible uint + int charsWritten; + int pos = 0; + + if (Start.IsFromEnd) + { + span[0] = '^'; + pos = 1; + } + bool formatted = ((uint)Start.Value).TryFormat(span.Slice(pos), out charsWritten); + Debug.Assert(formatted); + pos += charsWritten; + + span[pos++] = '.'; + span[pos++] = '.'; + + if (End.IsFromEnd) + { + span[pos++] = '^'; + } + formatted = ((uint)End.Value).TryFormat(span.Slice(pos), out charsWritten); + Debug.Assert(formatted); + pos += charsWritten; + + return new string(span.Slice(0, pos)); + } + + /// Create a Range object starting from start index to the end of the collection. + public static Range StartAt(Index start) => new Range(start, Index.End); + + /// Create a Range object starting from first element in the collection to the end Index. + public static Range EndAt(Index end) => new Range(Index.Start, end); + + /// Create a Range object starting from first element to the end. + public static Range All => new Range(Index.Start, Index.End); + + /// Calculate the start offset and length of range object using a collection length. + /// The length of the collection that the range will be used with. length has to be a positive value. + /// + /// For performance reason, we don't validate the input length parameter against negative values. + /// It is expected Range will be used with collections which always have non negative length/count. + /// We validate the range is inside the length scope though. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public (int Offset, int Length) GetOffsetAndLength(int length) + { + int start; + Index startIndex = Start; + if (startIndex.IsFromEnd) + start = length - startIndex.Value; + else + start = startIndex.Value; + + int end; + Index endIndex = End; + if (endIndex.IsFromEnd) + end = length - endIndex.Value; + else + end = endIndex.Value; + + if ((uint)end > (uint)length || (uint)start > (uint)end) + { + ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.length); + } + + return (start, end - start); + } + } +} diff --git a/external/corefx/src/Common/src/CoreLib/System/ReadOnlyMemory.cs b/external/corefx/src/Common/src/CoreLib/System/ReadOnlyMemory.cs index c9f9a720b8..11a9c3ce7c 100644 --- a/external/corefx/src/Common/src/CoreLib/System/ReadOnlyMemory.cs +++ b/external/corefx/src/Common/src/CoreLib/System/ReadOnlyMemory.cs @@ -22,7 +22,7 @@ namespace System /// [DebuggerTypeProxy(typeof(MemoryDebugView<>))] [DebuggerDisplay("{ToString(),raw}")] - public readonly struct ReadOnlyMemory + public readonly struct ReadOnlyMemory : IEquatable> { // NOTE: With the current implementation, Memory and ReadOnlyMemory must have the same layout, // as code uses Unsafe.As to cast between them. diff --git a/external/corefx/src/Common/src/CoreLib/System/Reflection/PropertyInfo.cs b/external/corefx/src/Common/src/CoreLib/System/Reflection/PropertyInfo.cs index ff8a02e96d..28550be060 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Reflection/PropertyInfo.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Reflection/PropertyInfo.cs @@ -2,11 +2,13 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; using System.Diagnostics; using System.Globalization; namespace System.Reflection { + [Serializable] public abstract class PropertyInfo : MemberInfo { protected PropertyInfo() { } diff --git a/external/corefx/src/Common/src/CoreLib/System/Runtime/CompilerServices/RuntimeFeature.cs b/external/corefx/src/Common/src/CoreLib/System/Runtime/CompilerServices/RuntimeFeature.cs index c6a97eca20..cf592f9f1f 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Runtime/CompilerServices/RuntimeFeature.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Runtime/CompilerServices/RuntimeFeature.cs @@ -4,7 +4,7 @@ namespace System.Runtime.CompilerServices { - public static class RuntimeFeature + public static partial class RuntimeFeature { /// /// Name of the Portable PDB feature. @@ -30,6 +30,12 @@ namespace System.Runtime.CompilerServices case DefaultImplementationsOfInterfaces: #endif return true; +#if MONO + case nameof(IsDynamicCodeSupported): + return IsDynamicCodeSupported; + case nameof(IsDynamicCodeCompiled): + return IsDynamicCodeCompiled; +#endif } return false; diff --git a/external/corefx/src/Common/src/CoreLib/System/Runtime/InteropServices/HandleRef.cs b/external/corefx/src/Common/src/CoreLib/System/Runtime/InteropServices/HandleRef.cs index 64d0553130..c81a701996 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Runtime/InteropServices/HandleRef.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Runtime/InteropServices/HandleRef.cs @@ -4,12 +4,12 @@ namespace System.Runtime.InteropServices { - public struct HandleRef + public readonly struct HandleRef { // ! Do not add or rearrange fields as the EE depends on this layout. //------------------------------------------------------------------ - private object _wrapper; - private IntPtr _handle; + private readonly object _wrapper; + private readonly IntPtr _handle; //------------------------------------------------------------------ public HandleRef(object wrapper, IntPtr handle) diff --git a/external/corefx/src/Common/src/CoreLib/System/Runtime/Serialization/SerializationInfoEnumerator.cs b/external/corefx/src/Common/src/CoreLib/System/Runtime/Serialization/SerializationInfoEnumerator.cs index 6399510736..ba84e65423 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Runtime/Serialization/SerializationInfoEnumerator.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Runtime/Serialization/SerializationInfoEnumerator.cs @@ -7,11 +7,11 @@ using System.Diagnostics; namespace System.Runtime.Serialization { - public struct SerializationEntry + public readonly struct SerializationEntry { - private string _name; - private object _value; - private Type _type; + private readonly string _name; + private readonly object _value; + private readonly Type _type; internal SerializationEntry(string entryName, object entryValue, Type entryType) { diff --git a/external/corefx/src/Common/src/CoreLib/System/SByte.cs b/external/corefx/src/Common/src/CoreLib/System/SByte.cs index 5fedd0f343..292814211c 100644 --- a/external/corefx/src/Common/src/CoreLib/System/SByte.cs +++ b/external/corefx/src/Common/src/CoreLib/System/SByte.cs @@ -14,9 +14,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct SByte : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct SByte : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private sbyte m_value; // Do not rename (binary serialization) + private readonly sbyte m_value; // Do not rename (binary serialization) // The maximum value that a Byte may represent: 127. public const sbyte MaxValue = (sbyte)0x7F; diff --git a/external/corefx/src/Common/src/CoreLib/System/Single.cs b/external/corefx/src/Common/src/CoreLib/System/Single.cs index 7cb1bd449e..d22eb91aed 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Single.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Single.cs @@ -25,9 +25,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct Single : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct Single : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private float m_value; // Do not rename (binary serialization) + private readonly float m_value; // Do not rename (binary serialization) // // Public constants @@ -219,7 +219,7 @@ namespace System public override int GetHashCode() { - var bits = Unsafe.As(ref m_value); + var bits = BitConverter.SingleToInt32Bits(m_value); // Optimized check for IsNan() || IsZero() if (((bits - 1) & 0x7FFFFFFF) >= 0x7F800000) diff --git a/external/corefx/src/Common/src/CoreLib/System/String.cs b/external/corefx/src/Common/src/CoreLib/System/String.cs index 00aec0515a..e4898a7c08 100644 --- a/external/corefx/src/Common/src/CoreLib/System/String.cs +++ b/external/corefx/src/Common/src/CoreLib/System/String.cs @@ -648,7 +648,7 @@ namespace System // // IConvertible implementation - // + // public TypeCode GetTypeCode() { diff --git a/external/corefx/src/Common/src/CoreLib/System/Threading/AsyncLocal.cs b/external/corefx/src/Common/src/CoreLib/System/Threading/AsyncLocal.cs index 3531265bec..cd6d86b881 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Threading/AsyncLocal.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Threading/AsyncLocal.cs @@ -86,16 +86,16 @@ namespace System.Threading void OnValueChanged(object previousValue, object currentValue, bool contextChanged); } - public struct AsyncLocalValueChangedArgs + public readonly struct AsyncLocalValueChangedArgs { - public T PreviousValue { get; private set; } - public T CurrentValue { get; private set; } + public T PreviousValue { get; } + public T CurrentValue { get; } // // If the value changed because we changed to a different ExecutionContext, this is true. If it changed // because someone set the Value property, this is false. // - public bool ThreadContextChanged { get; private set; } + public bool ThreadContextChanged { get; } internal AsyncLocalValueChangedArgs(T previousValue, T currentValue, bool contextChanged) : this() diff --git a/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/TaskExtensions.cs b/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/TaskExtensions.cs index 55687d58b5..22fcef136f 100644 --- a/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/TaskExtensions.cs +++ b/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/TaskExtensions.cs @@ -48,6 +48,7 @@ namespace System.Threading.Tasks Task.FromCanceled(new CancellationToken(true)); } +#if !MONO // these methods were moved to TaskAsyncEnumerableExtensions /// Configures how awaits on the tasks returned from an async disposable will be performed. /// The source async disposable. /// Whether to capture and marshal back to the current context. @@ -72,5 +73,6 @@ namespace System.Threading.Tasks public static ConfiguredCancelableAsyncEnumerable WithCancellation( this IAsyncEnumerable source, CancellationToken cancellationToken) => new ConfiguredCancelableAsyncEnumerable(source, continueOnCapturedContext: true, cancellationToken); +#endif } } diff --git a/external/corefx/src/Common/src/CoreLib/System/TimeSpan.cs b/external/corefx/src/Common/src/CoreLib/System/TimeSpan.cs index 4293ed505b..c4e93dd270 100644 --- a/external/corefx/src/Common/src/CoreLib/System/TimeSpan.cs +++ b/external/corefx/src/Common/src/CoreLib/System/TimeSpan.cs @@ -28,7 +28,7 @@ namespace System // an appropriate custom ILMarshaler to keep WInRT interop scenarios enabled. // [Serializable] - public struct TimeSpan : IComparable, IComparable, IEquatable, IFormattable, ISpanFormattable + public readonly struct TimeSpan : IComparable, IComparable, IEquatable, IFormattable, ISpanFormattable { public const long TicksPerMillisecond = 10000; private const double MillisecondsPerTick = 1.0 / TicksPerMillisecond; @@ -65,7 +65,7 @@ namespace System // internal so that DateTime doesn't have to call an extra get // method for some arithmetic operations. - internal long _ticks; // Do not rename (binary serialization) + internal readonly long _ticks; // Do not rename (binary serialization) public TimeSpan(long ticks) { diff --git a/external/corefx/src/Common/src/CoreLib/System/UInt16.cs b/external/corefx/src/Common/src/CoreLib/System/UInt16.cs index 155a2f87d3..778b38af16 100644 --- a/external/corefx/src/Common/src/CoreLib/System/UInt16.cs +++ b/external/corefx/src/Common/src/CoreLib/System/UInt16.cs @@ -15,9 +15,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct UInt16 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct UInt16 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private ushort m_value; // Do not rename (binary serialization) + private readonly ushort m_value; // Do not rename (binary serialization) public const ushort MaxValue = (ushort)0xFFFF; public const ushort MinValue = 0; diff --git a/external/corefx/src/Common/src/CoreLib/System/UInt32.cs b/external/corefx/src/Common/src/CoreLib/System/UInt32.cs index 93aba0bdb5..507daf813b 100644 --- a/external/corefx/src/Common/src/CoreLib/System/UInt32.cs +++ b/external/corefx/src/Common/src/CoreLib/System/UInt32.cs @@ -15,9 +15,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct UInt32 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct UInt32 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private uint m_value; // Do not rename (binary serialization) + private readonly uint m_value; // Do not rename (binary serialization) public const uint MaxValue = (uint)0xffffffff; public const uint MinValue = 0U; diff --git a/external/corefx/src/Common/src/CoreLib/System/UInt64.cs b/external/corefx/src/Common/src/CoreLib/System/UInt64.cs index 3e2cec0203..05157eb7b0 100644 --- a/external/corefx/src/Common/src/CoreLib/System/UInt64.cs +++ b/external/corefx/src/Common/src/CoreLib/System/UInt64.cs @@ -15,9 +15,9 @@ namespace System #if !MONO [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct UInt64 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable + public readonly struct UInt64 : IComparable, IConvertible, IFormattable, IComparable, IEquatable, ISpanFormattable { - private ulong m_value; // Do not rename (binary serialization) + private readonly ulong m_value; // Do not rename (binary serialization) public const ulong MaxValue = (ulong)0xffffffffffffffffL; public const ulong MinValue = 0x0; diff --git a/external/corefx/src/Common/src/CoreLib/System/UIntPtr.cs b/external/corefx/src/Common/src/CoreLib/System/UIntPtr.cs index 6de5a4470b..624d49732d 100644 --- a/external/corefx/src/Common/src/CoreLib/System/UIntPtr.cs +++ b/external/corefx/src/Common/src/CoreLib/System/UIntPtr.cs @@ -20,9 +20,9 @@ namespace System #if !MONO [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] #endif - public struct UIntPtr : IEquatable, ISerializable + public readonly struct UIntPtr : IEquatable, ISerializable { - private unsafe void* _value; // Do not rename (binary serialization) + private readonly unsafe void* _value; // Do not rename (binary serialization) [Intrinsic] public static readonly UIntPtr Zero; diff --git a/external/corefx/src/Common/src/Interop/Interop.Odbc.cs b/external/corefx/src/Common/src/Interop/Interop.Odbc.cs index 913ff04eea..b48c2fb340 100644 --- a/external/corefx/src/Common/src/Interop/Interop.Odbc.cs +++ b/external/corefx/src/Common/src/Interop/Interop.Odbc.cs @@ -94,19 +94,15 @@ internal static partial class Interop // SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute); // #endif - [DllImport(Interop.Libraries.Odbc32)] + [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLColumnsW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string TableName, /*SQLSMALLINT*/Int16 NameLen3, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string ColumnName, /*SQLSMALLINT*/Int16 NameLen4); @@ -118,7 +114,6 @@ internal static partial class Interop internal static extern /*SQLRETURN*/ODBC32.RetCode SQLDriverConnectW( /*SQLHDBC*/OdbcConnectionHandle hdbc, /*SQLHWND*/IntPtr hwnd, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string connectionstring, /*SQLSMALLINT*/Int16 cbConnectionstring, /*SQLCHAR* */IntPtr connectionstringout, @@ -135,7 +130,6 @@ internal static partial class Interop [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLExecDirectW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string StatementText, /*SQLINTEGER*/Int32 TextLength); @@ -200,7 +194,6 @@ internal static partial class Interop /*SQLHANDLE*/ OdbcHandle Handle, /*SQLSMALLINT*/ Int16 RecNumber, /*SQLSMALLINT*/ Int16 DiagIdentifier, - [MarshalAs(UnmanagedType.LPWStr)] /*SQLPOINTER*/ StringBuilder rchState, /*SQLSMALLINT*/ Int16 BufferLength, /*SQLSMALLINT* */ out Int16 StringLength); @@ -252,43 +245,39 @@ internal static partial class Interop [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLPrepareW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string StatementText, /*SQLINTEGER*/Int32 TextLength); [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLPrimaryKeysW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string TableName, /*SQLSMALLINT*/Int16 NameLen3); [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLProcedureColumnsW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string CatalogName, + /*SQLCHAR* */ string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string SchemaName, + /*SQLCHAR* */ string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string ProcName, + /*SQLCHAR* */ string ProcName, /*SQLSMALLINT*/Int16 NameLen3, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string ColumnName, + /*SQLCHAR* */ string ColumnName, /*SQLSMALLINT*/Int16 NameLen4); - [DllImport(Interop.Libraries.Odbc32)] + [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLProceduresW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string CatalogName, + /*SQLCHAR* */ string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string SchemaName, + /*SQLCHAR* */ string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */ string ProcName, + /*SQLCHAR* */ string ProcName, /*SQLSMALLINT*/Int16 NameLen3); [DllImport(Interop.Libraries.Odbc32)] @@ -359,13 +348,10 @@ internal static partial class Interop internal static extern /*SQLRETURN*/ODBC32.RetCode SQLSpecialColumnsW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, /*SQLUSMALLINT*/ODBC32.SQL_SPECIALCOLS IdentifierType, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string TableName, /*SQLSMALLINT*/Int16 NameLen3, /*SQLUSMALLINT*/ODBC32.SQL_SCOPE Scope, @@ -374,31 +360,24 @@ internal static partial class Interop [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLStatisticsW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string TableName, /*SQLSMALLINT*/Int16 NameLen3, /*SQLUSMALLINT*/Int16 Unique, /*SQLUSMALLINT*/Int16 Reserved); - [DllImport(Interop.Libraries.Odbc32)] + [DllImport(Interop.Libraries.Odbc32, CharSet = CharSet.Unicode)] internal static extern /*SQLRETURN*/ODBC32.RetCode SQLTablesW( /*SQLHSTMT*/OdbcStatementHandle StatementHandle, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string CatalogName, /*SQLSMALLINT*/Int16 NameLen1, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string SchemaName, /*SQLSMALLINT*/Int16 NameLen2, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string TableName, /*SQLSMALLINT*/Int16 NameLen3, - [In, MarshalAs(UnmanagedType.LPWStr)] /*SQLCHAR* */string TableType, /*SQLSMALLINT*/Int16 NameLen4); } diff --git a/external/corefx/src/Common/src/Interop/OSX/System.Security.Cryptography.Native.Apple/Interop.Ssl.cs b/external/corefx/src/Common/src/Interop/OSX/System.Security.Cryptography.Native.Apple/Interop.Ssl.cs index 2f826c499b..ae16eac035 100644 --- a/external/corefx/src/Common/src/Interop/OSX/System.Security.Cryptography.Native.Apple/Interop.Ssl.cs +++ b/external/corefx/src/Common/src/Interop/OSX/System.Security.Cryptography.Native.Apple/Interop.Ssl.cs @@ -4,8 +4,10 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Globalization; +using System.Net.Security; using System.Runtime.InteropServices; using System.Security.Authentication; using Microsoft.Win32.SafeHandles; @@ -27,6 +29,17 @@ internal static partial class Interop // and set *dataLength to the number of bytes actually transferred. internal unsafe delegate int SSLWriteFunc(void* connection, byte* data, void** dataLength); + private static readonly SafeCreateHandle s_cfHttp2Str = CoreFoundation.CFStringCreateWithCString("h2"); + private static readonly SafeCreateHandle s_cfHttp11Str = CoreFoundation.CFStringCreateWithCString("http/1.1"); + + private static readonly IntPtr[] s_cfAlpnHttp2Protocol = new IntPtr[] { s_cfHttp2Str.DangerousGetHandle() }; + private static readonly IntPtr[] s_cfAlpnHttp11Protocol = new IntPtr[] { s_cfHttp11Str.DangerousGetHandle() }; + private static readonly IntPtr[] s_cfAlpnHttp211Protocol = new IntPtr[] { s_cfHttp2Str.DangerousGetHandle(), s_cfHttp11Str.DangerousGetHandle() }; + + private static readonly SafeCreateHandle s_cfAlpnHttp11Protocols = CoreFoundation.CFArrayCreate(s_cfAlpnHttp11Protocol, (UIntPtr)1); + private static readonly SafeCreateHandle s_cfAlpnHttp2Protocols = CoreFoundation.CFArrayCreate(s_cfAlpnHttp2Protocol, (UIntPtr)1); + private static readonly SafeCreateHandle s_cfAlpnHttp211Protocols = CoreFoundation.CFArrayCreate(s_cfAlpnHttp211Protocol , (UIntPtr)2); + internal enum PAL_TlsHandshakeState { Unknown, @@ -388,6 +401,12 @@ internal static partial class Interop int cbTargetName, out int osStatus); + [DllImport(Interop.Libraries.AppleCryptoNative, EntryPoint = "AppleCryptoNative_SSLSetALPNProtocols")] + internal static extern int SSLSetALPNProtocols(SafeSslHandle ctx, SafeCreateHandle cfProtocolsRefs, out int osStatus); + + [DllImport(Interop.Libraries.AppleCryptoNative, EntryPoint = "AppleCryptoNative_SslGetAlpnSelected")] + internal static extern int SslGetAlpnSelected(SafeSslHandle ssl, out SafeCFDataHandle protocol); + [DllImport(Interop.Libraries.AppleCryptoNative, EntryPoint = "AppleCryptoNative_SslHandshake")] internal static extern PAL_TlsHandshakeState SslHandshake(SafeSslHandle sslHandle); @@ -569,6 +588,80 @@ internal static partial class Interop throw new SslException(); } + internal static unsafe void SslCtxSetAlpnProtos(SafeSslHandle ctx, List protocols) + { + SafeCreateHandle cfProtocolsRefs = null; + SafeCreateHandle[] cfProtocolsArrayRef = null; + try + { + if (protocols.Count == 1 && protocols[0] == SslApplicationProtocol.Http2) + { + cfProtocolsRefs = s_cfAlpnHttp211Protocols; + } + else if (protocols.Count == 1 && protocols[0] == SslApplicationProtocol.Http11) + { + cfProtocolsRefs = s_cfAlpnHttp11Protocols; + } + else if (protocols.Count == 2 && protocols[0] == SslApplicationProtocol.Http2 && protocols[1] == SslApplicationProtocol.Http11) + { + cfProtocolsRefs = s_cfAlpnHttp211Protocols; + } + else + { + // we did not match common case. This is more expensive path allocating Core Foundation objects. + cfProtocolsArrayRef = new SafeCreateHandle[protocols.Count]; + IntPtr[] protocolsPtr = new System.IntPtr[protocols.Count]; + + for (int i = 0; i < protocols.Count; i++) + { + cfProtocolsArrayRef[i] = CoreFoundation.CFStringCreateWithCString(protocols[i].ToString()); + protocolsPtr[i] = cfProtocolsArrayRef[i].DangerousGetHandle(); + } + + cfProtocolsRefs = CoreFoundation.CFArrayCreate(protocolsPtr, (UIntPtr)protocols.Count); + } + + int osStatus; + int result = SSLSetALPNProtocols(ctx, cfProtocolsRefs, out osStatus); + if (result != 1) + { + throw CreateExceptionForOSStatus(osStatus); + } + } + finally + { + if (cfProtocolsArrayRef != null) + { + for (int i = 0; i < cfProtocolsArrayRef.Length ; i++) + { + cfProtocolsArrayRef[i]?.Dispose(); + } + + cfProtocolsRefs?.Dispose(); + } + } + } + + internal static byte[] SslGetAlpnSelected(SafeSslHandle ssl) + { + SafeCFDataHandle protocol; + + if (SslGetAlpnSelected(ssl, out protocol) != 1 || protocol == null) + { + return null; + } + + try + { + byte[] result = Interop.CoreFoundation.CFGetData(protocol); + return result; + } + finally + { + protocol.Dispose(); + } + } + public static bool SslCheckHostnameMatch(SafeSslHandle handle, string hostName, DateTime notBefore) { int result; diff --git a/external/corefx/src/Common/src/System/Net/IPv4AddressHelper.Common.cs b/external/corefx/src/Common/src/System/Net/IPv4AddressHelper.Common.cs new file mode 100644 index 0000000000..e2815bfcf1 --- /dev/null +++ b/external/corefx/src/Common/src/System/Net/IPv4AddressHelper.Common.cs @@ -0,0 +1,329 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System +{ + internal static partial class IPv4AddressHelper + { + internal const long Invalid = -1; + private const long MaxIPv4Value = uint.MaxValue; // the native parser cannot handle MaxIPv4Value, only MaxIPv4Value - 1 + private const int Octal = 8; + private const int Decimal = 10; + private const int Hex = 16; + + private const int NumberOfLabels = 4; + + // Only called from the IPv6Helper, only parse the canonical format + internal static unsafe int ParseHostNumber(ReadOnlySpan str, int start, int end) + { + byte* numbers = stackalloc byte[NumberOfLabels]; + ParseCanonical(str, numbers, start, end); + return (numbers[0] << 24) + (numbers[1] << 16) + (numbers[2] << 8) + numbers[3]; + } + + // + // IsValid + // + // Performs IsValid on a substring. Updates the index to where we + // believe the IPv4 address ends + // + // Inputs: + // name + // string containing possible IPv4 address + // + // start + // offset in to start checking for IPv4 address + // + // end + // offset in of the last character we can touch in the check + // + // Outputs: + // end + // index of last character in we checked + // + // allowIPv6 + // enables parsing IPv4 addresses embedded in IPv6 address literals + // + // notImplicitFile + // do not consider this URI holding an implicit filename + // + // unknownScheme + // the check is made on an unknown scheme (suppress IPv4 canonicalization) + // + // Assumes: + // The address string is terminated by either + // end of the string, characters ':' '/' '\' '?' + // + // + // Returns: + // bool + // + // Throws: + // Nothing + // + + //Remark: MUST NOT be used unless all input indexes are verified and trusted. + internal static unsafe bool IsValid(char* name, int start, ref int end, bool allowIPv6, bool notImplicitFile, bool unknownScheme) + { + // IPv6 can only have canonical IPv4 embedded. Unknown schemes will not attempt parsing of non-canonical IPv4 addresses. + if (allowIPv6 || unknownScheme) + { + return IsValidCanonical(name, start, ref end, allowIPv6, notImplicitFile); + } + else + { + return ParseNonCanonical(name, start, ref end, notImplicitFile) != Invalid; + } + } + + // Assumes: + // has been validated and contains only decimal digits in groups + // of 8-bit numbers and the characters '.' + // Address may terminate with ':' or with the end of the string + // + private static unsafe bool ParseCanonical(ReadOnlySpan name, byte* numbers, int start, int end) + { + for (int i = 0; i < NumberOfLabels; ++i) + { + + byte b = 0; + char ch; + for (; (start < end) && (ch = name[start]) != '.' && ch != ':'; ++start) + { + b = (byte)(b * 10 + (byte)(ch - '0')); + } + numbers[i] = b; + ++start; + } + return numbers[0] == 127; + } + + // + // IsValidCanonical + // + // Checks if the substring is a valid canonical IPv4 address or an IPv4 address embedded in an IPv6 literal + // This is an attempt to parse ABNF productions from RFC3986, Section 3.2.2: + // IP-literal = "[" ( IPv6address / IPvFuture ) "]" + // IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet + // dec-octet = DIGIT ; 0-9 + // / %x31-39 DIGIT ; 10-99 + // / "1" 2DIGIT ; 100-199 + // / "2" %x30-34 DIGIT ; 200-249 + // / "25" %x30-35 ; 250-255 + // + internal static unsafe bool IsValidCanonical(char* name, int start, ref int end, bool allowIPv6, bool notImplicitFile) + { + int dots = 0; + int number = 0; + bool haveNumber = false; + bool firstCharIsZero = false; + + while (start < end) + { + char ch = name[start]; + if (allowIPv6) + { + // for ipv4 inside ipv6 the terminator is either ScopeId, prefix or ipv6 terminator + if (ch == ']' || ch == '/' || ch == '%') + break; + } + else if (ch == '/' || ch == '\\' || (notImplicitFile && (ch == ':' || ch == '?' || ch == '#'))) + { + break; + } + + if (ch <= '9' && ch >= '0') + { + if (!haveNumber && (ch == '0')) + { + if ((start + 1 < end) && name[start + 1] == '0') + { + // 00 is not allowed as a prefix. + return false; + } + + firstCharIsZero = true; + } + + haveNumber = true; + number = number * 10 + (name[start] - '0'); + if (number > 255) + { + return false; + } + } + else if (ch == '.') + { + if (!haveNumber || (number > 0 && firstCharIsZero)) + { + // 0 is not allowed to prefix a number. + return false; + } + ++dots; + haveNumber = false; + number = 0; + firstCharIsZero = false; + } + else + { + return false; + } + ++start; + } + bool res = (dots == 3) && haveNumber; + if (res) + { + end = start; + } + return res; + } + + // Parse any canonical or noncanonical IPv4 formats and return a long between 0 and MaxIPv4Value. + // Return Invalid (-1) for failures. + // If the address has less than three dots, only the rightmost section is assumed to contain the combined value for + // the missing sections: 0xFF00FFFF == 0xFF.0x00.0xFF.0xFF == 0xFF.0xFFFF + internal static unsafe long ParseNonCanonical(char* name, int start, ref int end, bool notImplicitFile) + { + int numberBase = Decimal; + char ch; + long* parts = stackalloc long[4]; + long currentValue = 0; + bool atLeastOneChar = false; + + // Parse one dotted section at a time + int dotCount = 0; // Limit 3 + int current = start; + for (; current < end; current++) + { + ch = name[current]; + currentValue = 0; + + // Figure out what base this section is in + numberBase = Decimal; + if (ch == '0') + { + numberBase = Octal; + current++; + atLeastOneChar = true; + if (current < end) + { + ch = name[current]; + if (ch == 'x' || ch == 'X') + { + numberBase = Hex; + current++; + atLeastOneChar = false; + } + } + } + + // Parse this section + for (; current < end; current++) + { + ch = name[current]; + int digitValue; + + if ((numberBase == Decimal || numberBase == Hex) && '0' <= ch && ch <= '9') + { + digitValue = ch - '0'; + } + else if (numberBase == Octal && '0' <= ch && ch <= '7') + { + digitValue = ch - '0'; + } + else if (numberBase == Hex && 'a' <= ch && ch <= 'f') + { + digitValue = ch + 10 - 'a'; + } + else if (numberBase == Hex && 'A' <= ch && ch <= 'F') + { + digitValue = ch + 10 - 'A'; + } + else + { + break; // Invalid/terminator + } + + currentValue = (currentValue * numberBase) + digitValue; + + if (currentValue > MaxIPv4Value) // Overflow + { + return Invalid; + } + + atLeastOneChar = true; + } + + if (current < end && name[current] == '.') + { + if (dotCount >= 3 // Max of 3 dots and 4 segments + || !atLeastOneChar // No empty segmets: 1...1 + // Only the last segment can be more than 255 (if there are less than 3 dots) + || currentValue > 0xFF) + { + return Invalid; + } + parts[dotCount] = currentValue; + dotCount++; + atLeastOneChar = false; + continue; + } + // We don't get here unless We find an invalid character or a terminator + break; + } + + // Terminators + if (!atLeastOneChar) + { + return Invalid; // Empty trailing segment: 1.1.1. + } + else if (current >= end) + { + // end of string, allowed + } + else if ((ch = name[current]) == '/' || ch == '\\' || (notImplicitFile && (ch == ':' || ch == '?' || ch == '#'))) + { + end = current; + } + else + { + // not a valid terminating character + return Invalid; + } + + parts[dotCount] = currentValue; + + // Parsed, reassemble and check for overflows + switch (dotCount) + { + case 0: // 0xFFFFFFFF + if (parts[0] > MaxIPv4Value) + { + return Invalid; + } + return parts[0]; + case 1: // 0xFF.0xFFFFFF + if (parts[1] > 0xffffff) + { + return Invalid; + } + return (parts[0] << 24) | (parts[1] & 0xffffff); + case 2: // 0xFF.0xFF.0xFFFF + if (parts[2] > 0xffff) + { + return Invalid; + } + return (parts[0] << 24) | ((parts[1] & 0xff) << 16) | (parts[2] & 0xffff); + case 3: // 0xFF.0xFF.0xFF.0xFF + if (parts[3] > 0xff) + { + return Invalid; + } + return (parts[0] << 24) | ((parts[1] & 0xff) << 16) | ((parts[2] & 0xff) << 8) | (parts[3] & 0xff); + default: + return Invalid; + } + } + } +} diff --git a/external/corefx/src/Common/src/System/Net/IPv6AddressHelper.Common.cs b/external/corefx/src/Common/src/System/Net/IPv6AddressHelper.Common.cs new file mode 100644 index 0000000000..bcdab2776f --- /dev/null +++ b/external/corefx/src/Common/src/System/Net/IPv6AddressHelper.Common.cs @@ -0,0 +1,415 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System +{ + internal static partial class IPv6AddressHelper + { + private const int NumberOfLabels = 8; + + // RFC 5952 Section 4.2.3 + // Longest consecutive sequence of zero segments, minimum 2. + // On equal, first sequence wins. <-1, -1> for no compression. + internal unsafe static (int longestSequenceStart, int longestSequenceLength) FindCompressionRange( + ReadOnlySpan numbers) + { + int longestSequenceLength = 0, longestSequenceStart = -1, currentSequenceLength = 0; + + for (int i = 0; i < numbers.Length; i++) + { + if (numbers[i] == 0) + { + currentSequenceLength++; + if (currentSequenceLength > longestSequenceLength) + { + longestSequenceLength = currentSequenceLength; + longestSequenceStart = i - currentSequenceLength + 1; + } + } + else + { + currentSequenceLength = 0; + } + } + + return longestSequenceLength > 1 ? + (longestSequenceStart, longestSequenceStart + longestSequenceLength) : + (-1, -1); + } + + // Returns true if the IPv6 address should be formatted with an embedded IPv4 address: + // ::192.168.1.1 + internal unsafe static bool ShouldHaveIpv4Embedded(ReadOnlySpan numbers) + { + // 0:0 : 0:0 : x:x : x.x.x.x + if (numbers[0] == 0 && numbers[1] == 0 && numbers[2] == 0 && numbers[3] == 0 && numbers[6] != 0) + { + // RFC 5952 Section 5 - 0:0 : 0:0 : 0:[0 | FFFF] : x.x.x.x + if (numbers[4] == 0 && (numbers[5] == 0 || numbers[5] == 0xFFFF)) + { + return true; + } + // SIIT - 0:0 : 0:0 : FFFF:0 : x.x.x.x + else if (numbers[4] == 0xFFFF && numbers[5] == 0) + { + return true; + } + } + + // ISATAP + return numbers[4] == 0 && numbers[5] == 0x5EFE; + } + + // + // IsValidStrict + // + // Determine whether a name is a valid IPv6 address. Rules are: + // + // * 8 groups of 16-bit hex numbers, separated by ':' + // * a *single* run of zeros can be compressed using the symbol '::' + // * an optional string of a ScopeID delimited by '%' + // * the last 32 bits in an address can be represented as an IPv4 address + // + // Difference between IsValid() and IsValidStrict() is that IsValid() expects part of the string to + // be ipv6 address where as IsValidStrict() expects strict ipv6 address. + // + // Inputs: + // name + // IPv6 address in string format + // + // Outputs: + // Nothing + // + // Assumes: + // the correct name is terminated by ']' character + // + // Returns: + // true if is IPv6 address, else false + // + // Throws: + // Nothing + // + + // Remarks: MUST NOT be used unless all input indexes are verified and trusted. + // start must be next to '[' position, or error is reported + internal unsafe static bool IsValidStrict(char* name, int start, ref int end) + { + int sequenceCount = 0; + int sequenceLength = 0; + bool haveCompressor = false; + bool haveIPv4Address = false; + bool expectingNumber = true; + int lastSequence = 1; + + bool needsClosingBracket = false; + if (start < end && name[start] == '[') + { + start++; + needsClosingBracket = true; + } + + int i; + for (i = start; i < end; ++i) + { + if (Uri.IsHexDigit(name[i])) + { + ++sequenceLength; + expectingNumber = false; + } + else + { + if (sequenceLength > 4) + { + return false; + } + if (sequenceLength != 0) + { + ++sequenceCount; + lastSequence = i - sequenceLength; + sequenceLength = 0; + } + switch (name[i]) + { + case '%': + while (i + 1 < end) + { + i++; + if (name[i] == ']') + { + goto case ']'; + } + else if (name[i] == '/') + { + goto case '/'; + } +#if !MONO // zoneId can be a string, see https://github.com/dotnet/corefx/issues/27529 + else if (name[i] < '0' || name[i] > '9') + { + // scope ID must only contain digits + return false; + } +#endif + } + break; + case ']': + if (!needsClosingBracket) + { + return false; + } + needsClosingBracket = false; + + // If there's more after the closing bracket, it must be a port. + // We don't use the port, but we still validate it. + if (i + 1 < end && name[i + 1] != ':') + { + return false; + } + + // If there is a port, it must either be a hexadecimal or decimal number. + if (i + 3 < end && name[i + 2] == '0' && name[i + 3] == 'x') + { + i += 4; + for (; i < end; i++) + { + if (!Uri.IsHexDigit(name[i])) + { + return false; + } + } + } + else + { + i += 2; + for (; i < end; i++) + { + if (name[i] < '0' || name[i] > '9') + { + return false; + } + } + } + continue; + case ':': + if ((i > 0) && (name[i - 1] == ':')) + { + if (haveCompressor) + { + // can only have one per IPv6 address + return false; + } + haveCompressor = true; + expectingNumber = false; + } + else + { + expectingNumber = true; + } + break; + + case '/': + return false; + + case '.': + if (haveIPv4Address) + { + return false; + } + + i = end; + if (!IPv4AddressHelper.IsValid(name, lastSequence, ref i, true, false, false)) + { + return false; + } + // ipv4 address takes 2 slots in ipv6 address, one was just counted meeting the '.' + ++sequenceCount; + lastSequence = i - sequenceLength; + sequenceLength = 0; + haveIPv4Address = true; + --i; // it will be incremented back on the next loop + break; + + default: + return false; + } + sequenceLength = 0; + } + } + + if (sequenceLength != 0) + { + if (sequenceLength > 4) + { + return false; + } + + ++sequenceCount; + } + + // these sequence counts are -1 because it is implied in end-of-sequence + + const int ExpectedSequenceCount = 8; + return + !expectingNumber && + (haveCompressor ? (sequenceCount < ExpectedSequenceCount) : (sequenceCount == ExpectedSequenceCount)) && + !needsClosingBracket; + } + + // + // Parse + // + // Convert this IPv6 address into a sequence of 8 16-bit numbers + // + // Inputs: + // Name + // The validated IPv6 address + // + // Outputs: + // numbers + // Array filled in with the numbers in the IPv6 groups + // + // PrefixLength + // Set to the number after the prefix separator (/) if found + // + // Assumes: + // has been validated and contains only hex digits in groups of + // 16-bit numbers, the characters ':' and '/', and a possible IPv4 + // address + // + // Throws: + // Nothing + // + + internal static unsafe void Parse(ReadOnlySpan address, ushort* numbers, int start, ref string scopeId) + { + int number = 0; + int index = 0; + int compressorIndex = -1; + bool numberIsValid = true; + + //This used to be a class instance member but have not been used so far + int PrefixLength = 0; + if (address[start] == '[') + { + ++start; + } + + for (int i = start; i < address.Length && address[i] != ']';) + { + switch (address[i]) + { + case '%': + if (numberIsValid) + { + numbers[index++] = (ushort)number; + numberIsValid = false; + } + + start = i; + for (++i; i < address.Length && address[i] != ']' && address[i] != '/'; ++i) + { + } + scopeId = new string(address.Slice(start, i - start)); + // ignore prefix if any + for (; i < address.Length && address[i] != ']'; ++i) + { + } + break; + + case ':': + numbers[index++] = (ushort)number; + number = 0; + ++i; + if (address[i] == ':') + { + compressorIndex = index; + ++i; + } + else if ((compressorIndex < 0) && (index < 6)) + { + // no point checking for IPv4 address if we don't + // have a compressor or we haven't seen 6 16-bit + // numbers yet + break; + } + + // check to see if the upcoming number is really an IPv4 + // address. If it is, convert it to 2 ushort numbers + for (int j = i; j < address.Length && + (address[j] != ']') && + (address[j] != ':') && + (address[j] != '%') && + (address[j] != '/') && + (j < i + 4); ++j) + { + + if (address[j] == '.') + { + // we have an IPv4 address. Find the end of it: + // we know that since we have a valid IPv6 + // address, the only things that will terminate + // the IPv4 address are the prefix delimiter '/' + // or the end-of-string (which we conveniently + // delimited with ']') + while (j < address.Length && (address[j] != ']') && (address[j] != '/') && (address[j] != '%')) + { + ++j; + } + number = IPv4AddressHelper.ParseHostNumber(address, i, j); + numbers[index++] = (ushort)(number >> 16); + numbers[index++] = (ushort)number; + i = j; + + // set this to avoid adding another number to + // the array if there's a prefix + number = 0; + numberIsValid = false; + break; + } + } + break; + + case '/': + if (numberIsValid) + { + numbers[index++] = (ushort)number; + numberIsValid = false; + } + + // since we have a valid IPv6 address string, the prefix + // length is the last token in the string + for (++i; address[i] != ']'; ++i) + { + PrefixLength = PrefixLength * 10 + (address[i] - '0'); + } + break; + + default: + number = number * 16 + Uri.FromHex(address[i++]); + break; + } + } + + // add number to the array if its not the prefix length or part of + // an IPv4 address that's already been handled + if (numberIsValid) + { + numbers[index++] = (ushort)number; + } + + // if we had a compressor sequence ("::") then we need to expand the + // numbers array + if (compressorIndex > 0) + { + int toIndex = NumberOfLabels - 1; + int fromIndex = index - 1; + + for (int i = index - compressorIndex; i > 0; --i) + { + numbers[toIndex--] = numbers[fromIndex]; + numbers[fromIndex--] = 0; + } + } + } + } +} diff --git a/external/corefx/src/Common/tests/System/Net/Http/LoopbackServer.AuthenticationHelpers.cs b/external/corefx/src/Common/tests/System/Net/Http/LoopbackServer.AuthenticationHelpers.cs index 30af11e3d3..69e51b1cd2 100644 --- a/external/corefx/src/Common/tests/System/Net/Http/LoopbackServer.AuthenticationHelpers.cs +++ b/external/corefx/src/Common/tests/System/Net/Http/LoopbackServer.AuthenticationHelpers.cs @@ -108,7 +108,7 @@ namespace System.Net.Test.Common for (int i = 0; i < values.Length; i++) { string trimmedValue = values[i].Trim(); - if (trimmedValue.Contains(nameof(username))) + if (trimmedValue.StartsWith(nameof(username))) { // Username is a quoted string. int startIndex = trimmedValue.IndexOf('"'); @@ -123,11 +123,11 @@ namespace System.Net.Test.Common if (string.IsNullOrEmpty(username)) return false; } - else if (trimmedValue.Contains(nameof(userhash)) && trimmedValue.Contains("true")) + else if (trimmedValue.StartsWith(nameof(userhash)) && trimmedValue.Contains("true")) { userhash = true; } - else if (trimmedValue.Contains(nameof(uri))) + else if (trimmedValue.StartsWith(nameof(uri))) { int startIndex = trimmedValue.IndexOf('"'); if (startIndex != -1) @@ -140,7 +140,7 @@ namespace System.Net.Test.Common if (string.IsNullOrEmpty(uri)) return false; } - else if (trimmedValue.Contains(nameof(realm))) + else if (trimmedValue.StartsWith(nameof(realm))) { // Realm is a quoted string. int startIndex = trimmedValue.IndexOf('"'); @@ -154,7 +154,7 @@ namespace System.Net.Test.Common if (string.IsNullOrEmpty(realm)) return false; } - else if (trimmedValue.Contains(nameof(cnonce))) + else if (trimmedValue.StartsWith(nameof(cnonce))) { // CNonce is a quoted string. int startIndex = trimmedValue.IndexOf('"'); @@ -164,7 +164,7 @@ namespace System.Net.Test.Common cnonce = trimmedValue.Substring(startIndex, trimmedValue.Length - startIndex - 1); } } - else if (trimmedValue.Contains(nameof(nonce))) + else if (trimmedValue.StartsWith(nameof(nonce))) { // Nonce is a quoted string. int startIndex = trimmedValue.IndexOf('"'); @@ -178,7 +178,7 @@ namespace System.Net.Test.Common if (string.IsNullOrEmpty(nonce)) return false; } - else if (trimmedValue.Contains(nameof(response))) + else if (trimmedValue.StartsWith(nameof(response))) { // response is a quoted string. int startIndex = trimmedValue.IndexOf('"'); @@ -192,7 +192,7 @@ namespace System.Net.Test.Common if (string.IsNullOrEmpty(response)) return false; } - else if (trimmedValue.Contains(nameof(algorithm))) + else if (trimmedValue.StartsWith(nameof(algorithm))) { int startIndex = trimmedValue.IndexOf('='); if (startIndex != -1) @@ -201,7 +201,7 @@ namespace System.Net.Test.Common algorithm = trimmedValue.Substring(startIndex, trimmedValue.Length - startIndex).Trim(); } } - else if (trimmedValue.Contains(nameof(opaque))) + else if (trimmedValue.StartsWith(nameof(opaque))) { // Opaque is a quoted string. int startIndex = trimmedValue.IndexOf('"'); @@ -211,7 +211,7 @@ namespace System.Net.Test.Common opaque = trimmedValue.Substring(startIndex, trimmedValue.Length - startIndex - 1); } } - else if (trimmedValue.Contains(nameof(qop))) + else if (trimmedValue.StartsWith(nameof(qop))) { int startIndex = trimmedValue.IndexOf('"'); if (startIndex != -1) @@ -225,7 +225,7 @@ namespace System.Net.Test.Common qop = trimmedValue.Substring(startIndex, trimmedValue.Length - startIndex).Trim(); } } - else if (trimmedValue.Contains(nameof(nc))) + else if (trimmedValue.StartsWith(nameof(nc))) { int startIndex = trimmedValue.IndexOf('='); if (startIndex != -1) diff --git a/external/corefx/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs b/external/corefx/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs index 8ec7c9555a..586cbba1c4 100644 --- a/external/corefx/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs +++ b/external/corefx/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs @@ -39,6 +39,8 @@ namespace System public static partial class PlatformDetection { public static bool IsReflectionEmitSupported; + public static bool SupportsAlpn { get { throw null; } } + public static bool SupportsClientAlpn { get { throw null; } } public static bool ClientWebSocketPartialMessagesSupported { get { throw null; } } public static bool HasWindowsShell { get { throw null; } } public static bool IsArmProcess { get { throw null; } } diff --git a/external/corefx/src/CoreFx.Private.TestUtilities/src/System/PlatformDetection.cs b/external/corefx/src/CoreFx.Private.TestUtilities/src/System/PlatformDetection.cs index a0c3a567b3..1eb4c69a8d 100644 --- a/external/corefx/src/CoreFx.Private.TestUtilities/src/System/PlatformDetection.cs +++ b/external/corefx/src/CoreFx.Private.TestUtilities/src/System/PlatformDetection.cs @@ -39,12 +39,20 @@ namespace System public static bool IsNotWinRTSupported => !IsWinRTSupported; public static bool IsNotMacOsHighSierraOrHigher => !IsMacOsHighSierraOrHigher; - public static bool IsSsl2AndSsl3Supported => false; public static bool SupportsX509Chain => true; public static bool SupportsCertRevocation => true; public static bool IsDomainJoinedMachine => !Environment.MachineName.Equals(Environment.UserDomainName, StringComparison.OrdinalIgnoreCase); + // Windows - Schannel supports alpn from win8.1/2012 R2 and higher. + // Linux - OpenSsl supports alpn from openssl 1.0.2 and higher. + // OSX - SecureTransport doesn't expose alpn APIs. #30492 + public static bool SupportsAlpn => (IsWindows && !IsWindows7) || + (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && + (OpenSslVersion.Major >= 1 && (OpenSslVersion.Minor >= 1 || OpenSslVersion.Build >= 2))); + public static bool SupportsClientAlpn => SupportsAlpn || + (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && PlatformDetection.OSXVersion > new Version(10, 12)); + // Officially, .Net Native only supports processes running in an AppContainer. However, the majority of tests still work fine // in a normal Win32 process and we often do so as running in an AppContainer imposes a substantial tax in debuggability // and investigatability. This predicate is used in ConditionalFacts to disable the specific tests that really need to be diff --git a/external/corefx/src/Native/Unix/System.Native/pal_io.c b/external/corefx/src/Native/Unix/System.Native/pal_io.c index ffa8ca72bd..d68eb4b583 100644 --- a/external/corefx/src/Native/Unix/System.Native/pal_io.c +++ b/external/corefx/src/Native/Unix/System.Native/pal_io.c @@ -120,16 +120,6 @@ c_static_assert(PAL_SEEK_SET == SEEK_SET); c_static_assert(PAL_SEEK_CUR == SEEK_CUR); c_static_assert(PAL_SEEK_END == SEEK_END); -// Validate our FileAdvice enum values are correct for the platform -#if HAVE_POSIX_ADVISE -c_static_assert(PAL_POSIX_FADV_NORMAL == POSIX_FADV_NORMAL); -c_static_assert(PAL_POSIX_FADV_RANDOM == POSIX_FADV_RANDOM); -c_static_assert(PAL_POSIX_FADV_SEQUENTIAL == POSIX_FADV_SEQUENTIAL); -c_static_assert(PAL_POSIX_FADV_WILLNEED == POSIX_FADV_WILLNEED); -c_static_assert(PAL_POSIX_FADV_DONTNEED == POSIX_FADV_DONTNEED); -c_static_assert(PAL_POSIX_FADV_NOREUSE == POSIX_FADV_NOREUSE); -#endif - // Validate our NotifyEvents enum values are correct for the platform #if HAVE_INOTIFY c_static_assert(PAL_IN_ACCESS == IN_ACCESS); @@ -1074,6 +1064,18 @@ int32_t SystemNative_Poll(struct PollEvent* pollEvents, uint32_t eventCount, int int32_t SystemNative_PosixFAdvise(intptr_t fd, int64_t offset, int64_t length, int32_t advice) { #if HAVE_POSIX_ADVISE + // POSIX_FADV_* may be different on each platform. Convert the values from PAL to the system's. + int32_t actualAdvice; + switch (advice) + { + case PAL_POSIX_FADV_NORMAL: actualAdvice = POSIX_FADV_NORMAL; break; + case PAL_POSIX_FADV_RANDOM: actualAdvice = POSIX_FADV_RANDOM; break; + case PAL_POSIX_FADV_SEQUENTIAL: actualAdvice = POSIX_FADV_SEQUENTIAL; break; + case PAL_POSIX_FADV_WILLNEED: actualAdvice = POSIX_FADV_WILLNEED; break; + case PAL_POSIX_FADV_DONTNEED: actualAdvice = POSIX_FADV_DONTNEED; break; + case PAL_POSIX_FADV_NOREUSE: actualAdvice = POSIX_FADV_NOREUSE; break; + default: return EINVAL; // According to the man page + } int32_t result; while (( result = @@ -1085,7 +1087,7 @@ int32_t SystemNative_PosixFAdvise(intptr_t fd, int64_t offset, int64_t length, i ToFileDescriptor(fd), (off_t)offset, (off_t)length, - advice)) < 0 && errno == EINTR); + actualAdvice)) < 0 && errno == EINTR); return result; #else // Not supported on this platform. Caller can ignore this failure since it's just a hint. diff --git a/external/corefx/src/Native/Unix/System.Native/pal_networking.c b/external/corefx/src/Native/Unix/System.Native/pal_networking.c index 4f6d6a6c15..dc933d58bb 100644 --- a/external/corefx/src/Native/Unix/System.Native/pal_networking.c +++ b/external/corefx/src/Native/Unix/System.Native/pal_networking.c @@ -764,6 +764,7 @@ static void ConvertMessageHeaderToMsghdr(struct msghdr* header, const struct Mes header->msg_iovlen = (__typeof__(header->msg_iovlen))iovlen; header->msg_control = messageHeader->ControlBuffer; header->msg_controllen = (uint32_t)messageHeader->ControlBufferLen; + header->msg_flags = 0; } int32_t SystemNative_GetControlMessageBufferSize(int32_t isIPv4, int32_t isIPv6) @@ -1221,7 +1222,7 @@ int32_t SystemNative_ReceiveMessage(intptr_t socket, struct MessageHeader* messa assert((int32_t)header.msg_namelen <= messageHeader->SocketAddressLen); messageHeader->SocketAddressLen = Min((int32_t)header.msg_namelen, messageHeader->SocketAddressLen); - + assert(header.msg_controllen <= (size_t)messageHeader->ControlBufferLen); messageHeader->ControlBufferLen = Min((int32_t)header.msg_controllen, messageHeader->ControlBufferLen); @@ -1257,7 +1258,7 @@ int32_t SystemNative_SendMessage(intptr_t socket, struct MessageHeader* messageH ConvertMessageHeaderToMsghdr(&header, messageHeader, fd); ssize_t res; - while ((res = sendmsg(fd, &header, flags)) < 0 && errno == EINTR); + while ((res = sendmsg(fd, &header, socketFlags)) < 0 && errno == EINTR); if (res != -1) { *sent = res; diff --git a/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.c b/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.c index b74819caba..0dbbb6486b 100644 --- a/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.c +++ b/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.c @@ -3,6 +3,15 @@ // See the LICENSE file in the project root for more information. #include "pal_ssl.h" +#include + +// 10.13.4 introduced public API but linking would fail on all prior versions. +// For that reason we use function pointers instead of direct call. +// This can be revisited after we drop support for 10.12. + +static OSStatus (*SSLSetALPNProtocolsPtr)(SSLContextRef context, CFArrayRef protocols) = NULL; +static OSStatus (*SSLCopyALPNProtocolsPtr)(SSLContextRef context, CFArrayRef* protocols) = NULL; +// end of ALPN. SSLContextRef AppleCryptoNative_SslCreateContext(int32_t isServer) { @@ -60,8 +69,7 @@ int32_t AppleCryptoNative_SslSetMaxProtocolVersion(SSLContextRef sslContext, PAL return SSLSetProtocolVersionMax(sslContext, protocol); } -int32_t -AppleCryptoNative_SslCopyCertChain(SSLContextRef sslContext, SecTrustRef* pChainOut, int32_t* pOSStatus) +int32_t AppleCryptoNative_SslCopyCertChain(SSLContextRef sslContext, SecTrustRef* pChainOut, int32_t* pOSStatus) { if (pChainOut != NULL) *pChainOut = NULL; @@ -107,14 +115,12 @@ static int32_t AppleCryptoNative_SslSetSessionOption(SSLContextRef sslContext, return *pOSStatus == noErr; } -int32_t -AppleCryptoNative_SslSetBreakOnServerAuth(SSLContextRef sslContext, int32_t setBreak, int32_t* pOSStatus) +int32_t AppleCryptoNative_SslSetBreakOnServerAuth(SSLContextRef sslContext, int32_t setBreak, int32_t* pOSStatus) { return AppleCryptoNative_SslSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, setBreak, pOSStatus); } -int32_t -AppleCryptoNative_SslSetBreakOnClientAuth(SSLContextRef sslContext, int32_t setBreak, int32_t* pOSStatus) +int32_t AppleCryptoNative_SslSetBreakOnClientAuth(SSLContextRef sslContext, int32_t setBreak, int32_t* pOSStatus) { return AppleCryptoNative_SslSetSessionOption(sslContext, kSSLSessionOptionBreakOnClientAuth, setBreak, pOSStatus); } @@ -153,8 +159,52 @@ int32_t AppleCryptoNative_SslSetTargetName(SSLContextRef sslContext, return *pOSStatus == noErr; } -int32_t -AppleCryptoNative_SslSetIoCallbacks(SSLContextRef sslContext, SSLReadFunc readFunc, SSLWriteFunc writeFunc) +int32_t AppleCryptoNative_SSLSetALPNProtocols(SSLContextRef sslContext, + CFArrayRef protocols, + int32_t* pOSStatus) +{ + if (sslContext == NULL || protocols == NULL || pOSStatus == NULL) + return -1; + + if (!SSLSetALPNProtocolsPtr) + { + // not available. + *pOSStatus = 0; + return 1; + } + // The underlying call handles NULL inputs, so just pass it through + *pOSStatus = (*SSLSetALPNProtocolsPtr)(sslContext, protocols); + return *pOSStatus == noErr; +} + +int32_t AppleCryptoNative_SslGetAlpnSelected(SSLContextRef sslContext, CFDataRef* protocol) +{ + if (sslContext == NULL || protocol == NULL) + return -1; + + *protocol = NULL; + if (!SSLCopyALPNProtocolsPtr) + { + // not available. + return 0; + } + + CFArrayRef protocols = NULL; + OSStatus osStatus = (*SSLCopyALPNProtocolsPtr)(sslContext, &protocols); + + if (osStatus == noErr && protocols != NULL && CFArrayGetCount(protocols) > 0) + { + *protocol = + CFStringCreateExternalRepresentation(NULL, CFArrayGetValueAtIndex(protocols, 0), kCFStringEncodingASCII, 0); + } + + if (protocols) + CFRelease(protocols); + + return *protocol != NULL; +} + +int32_t AppleCryptoNative_SslSetIoCallbacks(SSLContextRef sslContext, SSLReadFunc readFunc, SSLWriteFunc writeFunc) { return SSLSetIOFuncs(sslContext, readFunc, writeFunc); } @@ -214,8 +264,7 @@ AppleCryptoNative_SslWrite(SSLContextRef sslContext, const uint8_t* buf, uint32_ return PAL_TlsIo_Success; } -PAL_TlsIo -AppleCryptoNative_SslRead(SSLContextRef sslContext, uint8_t* buf, uint32_t bufLen, uint32_t* written) +PAL_TlsIo AppleCryptoNative_SslRead(SSLContextRef sslContext, uint8_t* buf, uint32_t bufLen, uint32_t* written) { if (written == NULL) return PAL_TlsIo_Unknown; @@ -249,8 +298,7 @@ AppleCryptoNative_SslRead(SSLContextRef sslContext, uint8_t* buf, uint32_t bufLe return OSStatusToPAL_TlsIo(status); } -int32_t -AppleCryptoNative_SslIsHostnameMatch(SSLContextRef sslContext, CFStringRef cfHostname, CFDateRef notBefore) +int32_t AppleCryptoNative_SslIsHostnameMatch(SSLContextRef sslContext, CFStringRef cfHostname, CFDateRef notBefore) { if (sslContext == NULL || notBefore == NULL) return -1; @@ -395,3 +443,9 @@ int32_t AppleCryptoNative_SslGetCipherSuite(SSLContextRef sslContext, uint32_t* return SSLGetNegotiatedCipher(sslContext, pCipherSuiteOut); } + +__attribute__((constructor)) static void InitializeAppleCryptoSslShim() +{ + SSLSetALPNProtocolsPtr = (OSStatus(*)(SSLContextRef, CFArrayRef))dlsym(RTLD_DEFAULT, "SSLSetALPNProtocols"); + SSLCopyALPNProtocolsPtr = (OSStatus(*)(SSLContextRef, CFArrayRef*))dlsym(RTLD_DEFAULT, "SSLCopyALPNProtocols"); +} diff --git a/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.h b/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.h index 1d9bec4d4b..fc44df51dd 100644 --- a/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.h +++ b/external/corefx/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_ssl.h @@ -138,6 +138,21 @@ DLLEXPORT int32_t AppleCryptoNative_SslSetTargetName(SSLContextRef sslContext, int32_t cbTargetName, int32_t* pOSStatus); +/* +Set list of application protocols for ClientHello. + +Returns 1 on success, 0 on failure, other values for invalid state. + +Output: +pOSStatus: Receives the value from SSLSetALPNData() +*/ +DLLEXPORT int32_t AppleCryptoNative_SSLSetALPNProtocols(SSLContextRef sslContext, CFArrayRef protocols, int32_t* pOSStatus); + +/* +Get negotiated protocol value from ServerHello. +*/ +DLLEXPORT int32_t AppleCryptoNative_SslGetAlpnSelected(SSLContextRef sslContext, CFDataRef *protocol); + /* Register the callbacks for reading and writing data to the SSL context. diff --git a/external/corefx/src/Native/Unix/configure.cmake b/external/corefx/src/Native/Unix/configure.cmake index 6d7e788ee5..e9e9bd3a7b 100644 --- a/external/corefx/src/Native/Unix/configure.cmake +++ b/external/corefx/src/Native/Unix/configure.cmake @@ -6,5 +6,5 @@ # # !!!! IMPORTANT !!!! # -# The last reviewed revision: 045ff75053df6ba4e385aeb9bc969494b216f992 +# The last reviewed revision: b70c466082dfdc30de89808e34097b30e6124b75 # diff --git a/external/corefx/src/System.ComponentModel.EventBasedAsync/src/System/ComponentModel/BackgroundWorker.cs b/external/corefx/src/System.ComponentModel.EventBasedAsync/src/System/ComponentModel/BackgroundWorker.cs index b8873ec06b..4a4b7ef52f 100644 --- a/external/corefx/src/System.ComponentModel.EventBasedAsync/src/System/ComponentModel/BackgroundWorker.cs +++ b/external/corefx/src/System.ComponentModel.EventBasedAsync/src/System/ComponentModel/BackgroundWorker.cs @@ -9,6 +9,9 @@ using System.Threading.Tasks; namespace System.ComponentModel { +#if MONO + [System.ComponentModel.DefaultEventAttribute("DoWork")] +#endif public class BackgroundWorker : Component { // Private instance members diff --git a/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/Design/Serialization/RootDesignerSerializerAttribute.cs b/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/Design/Serialization/RootDesignerSerializerAttribute.cs index afc47f765d..6501b21fd5 100644 --- a/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/Design/Serialization/RootDesignerSerializerAttribute.cs +++ b/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/Design/Serialization/RootDesignerSerializerAttribute.cs @@ -12,7 +12,7 @@ namespace System.ComponentModel.Design.Serialization /// being used as a root object. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = true)] - [Obsolete("This attribute has been deprecated. Use DesignerSerializerAttribute instead. For example, to specify a root designer for CodeDom, use DesignerSerializerAttribute(...,typeof(TypeCodeDomSerializer)). http://go.microsoft.com/fwlink/?linkid=14202")] + [Obsolete("This attribute has been deprecated. Use DesignerSerializerAttribute instead. For example, to specify a root designer for CodeDom, use DesignerSerializerAttribute(...,typeof(TypeCodeDomSerializer)). https://go.microsoft.com/fwlink/?linkid=14202")] public sealed class RootDesignerSerializerAttribute : Attribute { private string _typeId; diff --git a/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/IComNativeDescriptorHandler.cs b/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/IComNativeDescriptorHandler.cs index 0111ff5d28..9f3ebf8615 100644 --- a/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/IComNativeDescriptorHandler.cs +++ b/external/corefx/src/System.ComponentModel.TypeConverter/src/System/ComponentModel/IComNativeDescriptorHandler.cs @@ -14,7 +14,7 @@ namespace System.ComponentModel /// Top level mapping layer between a COM object and TypeDescriptor. /// /// - [Obsolete("This interface has been deprecated. Add a TypeDescriptionProvider to handle type TypeDescriptor.ComObjectType instead. http://go.microsoft.com/fwlink/?linkid=14202")] + [Obsolete("This interface has been deprecated. Add a TypeDescriptionProvider to handle type TypeDescriptor.ComObjectType instead. https://go.microsoft.com/fwlink/?linkid=14202")] public interface IComNativeDescriptorHandler { /// diff --git a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbCommand.cs b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbCommand.cs index fc47aecb56..92ce6ab913 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbCommand.cs +++ b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbCommand.cs @@ -8,7 +8,7 @@ using System.Threading; namespace System.Data.Common { - public abstract class DbCommand : Component, IDbCommand + public abstract class DbCommand : Component, IDbCommand, IAsyncDisposable { protected DbCommand() : base() { @@ -222,5 +222,29 @@ namespace System.Data.Common public abstract object ExecuteScalar(); public abstract void Prepare(); + + public virtual Task PrepareAsync(CancellationToken cancellationToken = default) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + + try + { + Prepare(); + return Task.CompletedTask; + } + catch (Exception e) + { + return Task.FromException(e); + } + } + + public virtual ValueTask DisposeAsync() + { + Dispose(); + return default; + } } } diff --git a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnection.cs b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnection.cs index 9dba89aeff..edbbe0d03c 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnection.cs +++ b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnection.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace System.Data.Common { - public abstract partial class DbConnection : Component, IDbConnection + public abstract partial class DbConnection : Component, IDbConnection, IAsyncDisposable { #pragma warning disable 649 // ignore unassigned field warning internal bool _suppressStateChangeForReconnection; @@ -128,5 +128,65 @@ namespace System.Data.Common } } } + + protected virtual ValueTask BeginDbTransactionAsync(IsolationLevel isolationLevel, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return new ValueTask(Task.FromCanceled(cancellationToken)); + } + + try + { + return new ValueTask(BeginDbTransaction(isolationLevel)); + } + catch (Exception e) + { + return new ValueTask(Task.FromException(e)); + } + } + + public ValueTask BeginTransactionAsync(CancellationToken cancellationToken = default) + => BeginDbTransactionAsync(IsolationLevel.Unspecified, cancellationToken); + + public ValueTask BeginTransactionAsync(IsolationLevel isolationLevel, CancellationToken cancellationToken = default) + => BeginDbTransactionAsync(isolationLevel, cancellationToken); + + public virtual Task CloseAsync() + { + try + { + Close(); + return Task.CompletedTask; + } + catch (Exception e) + { + return Task.FromException(e); + } + } + + public virtual ValueTask DisposeAsync() + { + Dispose(); + return default; + } + + public virtual Task ChangeDatabaseAsync(string databaseName, CancellationToken cancellationToken = default) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + + try + { + ChangeDatabase(databaseName); + return Task.CompletedTask; + } + catch (Exception e) + { + return Task.FromException(e); + } + } } } diff --git a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataReader.cs b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataReader.cs index ff30a418e5..84a2e6d26a 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataReader.cs +++ b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataReader.cs @@ -10,7 +10,7 @@ using System.Threading; namespace System.Data.Common { - public abstract class DbDataReader : MarshalByRefObject, IDataReader, IEnumerable + public abstract class DbDataReader : MarshalByRefObject, IDataReader, IEnumerable, IAsyncDisposable { protected DbDataReader() : base() { } @@ -247,5 +247,24 @@ namespace System.Data.Common } } } + + public virtual Task CloseAsync() + { + try + { + Close(); + return Task.CompletedTask; + } + catch (Exception e) + { + return Task.FromException(e); + } + } + + public virtual ValueTask DisposeAsync() + { + Dispose(); + return default; + } } } diff --git a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderFactory.cs b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderFactory.cs index 0e568d7eb6..a57c2e894e 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderFactory.cs +++ b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderFactory.cs @@ -6,10 +6,45 @@ namespace System.Data.Common { public abstract partial class DbProviderFactory { + private bool? _canCreateDataAdapter; + private bool? _canCreateCommandBuilder; + protected DbProviderFactory() { } public virtual bool CanCreateDataSourceEnumerator => false; + public virtual bool CanCreateDataAdapter + { + get + { + if (!_canCreateDataAdapter.HasValue) + { + using (DbDataAdapter adapter = CreateDataAdapter()) + { + _canCreateDataAdapter = adapter != null; + } + } + + return _canCreateDataAdapter.Value; + } + } + + public virtual bool CanCreateCommandBuilder + { + get + { + if (!_canCreateCommandBuilder.HasValue) + { + using (DbCommandBuilder builder = CreateCommandBuilder()) + { + _canCreateCommandBuilder = builder != null; + } + } + + return _canCreateCommandBuilder.Value; + } + } + public virtual DbCommand CreateCommand() => null; public virtual DbCommandBuilder CreateCommandBuilder() => null; diff --git a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbTransaction.cs b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbTransaction.cs index 97edf2c603..7233d6d4a6 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/Common/DbTransaction.cs +++ b/external/corefx/src/System.Data.Common/src/System/Data/Common/DbTransaction.cs @@ -2,9 +2,12 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Threading; +using System.Threading.Tasks; + namespace System.Data.Common { - public abstract class DbTransaction : MarshalByRefObject, IDbTransaction + public abstract class DbTransaction : MarshalByRefObject, IDbTransaction, IAsyncDisposable { protected DbTransaction() : base() { } @@ -23,5 +26,47 @@ namespace System.Data.Common protected virtual void Dispose(bool disposing) { } public abstract void Rollback(); + + public virtual Task CommitAsync(CancellationToken cancellationToken = default) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + + try + { + Commit(); + return Task.CompletedTask; + } + catch (Exception e) + { + return Task.FromException(e); + } + } + + public virtual ValueTask DisposeAsync() + { + Dispose(); + return default; + } + + public virtual Task RollbackAsync(CancellationToken cancellationToken = default) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + + try + { + Rollback(); + return Task.CompletedTask; + } + catch (Exception e) + { + return Task.FromException(e); + } + } } } diff --git a/external/corefx/src/System.Data.Common/src/System/Data/DataSet.cs.REMOVED.git-id b/external/corefx/src/System.Data.Common/src/System/Data/DataSet.cs.REMOVED.git-id index 496a369a12..84c3aef19a 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/DataSet.cs.REMOVED.git-id +++ b/external/corefx/src/System.Data.Common/src/System/Data/DataSet.cs.REMOVED.git-id @@ -1 +1 @@ -29c7d82939cbf918f4b0c4f291551c1ed37cec38 \ No newline at end of file +9f96ee55a3c58b812b40181c3e87369834d8ca5a \ No newline at end of file diff --git a/external/corefx/src/System.Data.Common/src/System/Data/DataSysAttribute.cs b/external/corefx/src/System.Data.Common/src/System/Data/DataSysAttribute.cs index 3b4b768c23..67fb98e2d8 100644 --- a/external/corefx/src/System.Data.Common/src/System/Data/DataSysAttribute.cs +++ b/external/corefx/src/System.Data.Common/src/System/Data/DataSysAttribute.cs @@ -12,7 +12,7 @@ namespace System.Data /// the member. /// [AttributeUsage(AttributeTargets.All)] - [Obsolete("DataSysDescriptionAttribute has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202", false)] + [Obsolete("DataSysDescriptionAttribute has been deprecated. https://go.microsoft.com/fwlink/?linkid=14202", false)] public class DataSysDescriptionAttribute : DescriptionAttribute { private bool _replaced = false; @@ -20,7 +20,7 @@ namespace System.Data /// /// Constructs a new sys description. /// - [Obsolete("DataSysDescriptionAttribute has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202", false)] + [Obsolete("DataSysDescriptionAttribute has been deprecated. https://go.microsoft.com/fwlink/?linkid=14202", false)] public DataSysDescriptionAttribute(string description) : base(description) { } diff --git a/external/corefx/src/System.Data.Odbc/src/System/Data/Odbc/OdbcConnection.cs b/external/corefx/src/System.Data.Odbc/src/System/Data/Odbc/OdbcConnection.cs index 7c4102aef5..eeb62794bf 100644 --- a/external/corefx/src/System.Data.Odbc/src/System/Data/Odbc/OdbcConnection.cs +++ b/external/corefx/src/System.Data.Odbc/src/System/Data/Odbc/OdbcConnection.cs @@ -395,7 +395,7 @@ namespace System.Data.Odbc } if ((ODBC32.RetCode.SUCCESS == retcode) || (ODBC32.RetCode.SUCCESS_WITH_INFO == retcode)) { - value = Encoding.Unicode.GetString(buffer, 0, Math.Min(cbActual, buffer.Length)); + value = (BitConverter.IsLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode).GetString(buffer, 0, Math.Min(cbActual, buffer.Length)); } else if (retcode == ODBC32.RetCode.ERROR) { @@ -498,7 +498,7 @@ namespace System.Data.Odbc } if (retcode == ODBC32.RetCode.SUCCESS || retcode == ODBC32.RetCode.SUCCESS_WITH_INFO) { - value = Encoding.Unicode.GetString(buffer, 0, Math.Min(cbActual, buffer.Length)); + value = (BitConverter.IsLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode).GetString(buffer, 0, Math.Min(cbActual, buffer.Length)); } else if (handleError) { diff --git a/external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNITcpHandle.cs b/external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNITcpHandle.cs index 11ea8d0eaf..929c0531bc 100644 --- a/external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNITcpHandle.cs +++ b/external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNITcpHandle.cs @@ -142,7 +142,7 @@ namespace System.Data.SqlClient.SNI } else { - _socket = Connect(serverName, port, ts); + _socket = Connect(serverName, port, isInfiniteTimeOut ? TimeSpan.FromMilliseconds(Int32.MaxValue) : ts); } if (_socket == null || !_socket.Connected) diff --git a/external/corefx/src/System.Diagnostics.Tools/src/System/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs b/external/corefx/src/System.Diagnostics.Tools/src/System/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs index ebbda66b0c..39e9381af4 100644 --- a/external/corefx/src/System.Diagnostics.Tools/src/System/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs +++ b/external/corefx/src/System.Diagnostics.Tools/src/System/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs @@ -4,7 +4,7 @@ namespace System.Diagnostics.CodeAnalysis { - [AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event, Inherited = false, AllowMultiple = false)] + [AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Event | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Struct, Inherited=false, AllowMultiple=false)] public sealed class ExcludeFromCodeCoverageAttribute: Attribute { public ExcludeFromCodeCoverageAttribute() diff --git a/external/corefx/src/System.Diagnostics.Tracing/src/System.Diagnostics.Tracing.csproj b/external/corefx/src/System.Diagnostics.Tracing/src/System.Diagnostics.Tracing.csproj index 99023cde4b..8c9489d07f 100644 --- a/external/corefx/src/System.Diagnostics.Tracing/src/System.Diagnostics.Tracing.csproj +++ b/external/corefx/src/System.Diagnostics.Tracing/src/System.Diagnostics.Tracing.csproj @@ -19,7 +19,7 @@ - + diff --git a/external/corefx/src/System.IO.FileSystem.Watcher/src/System/IO/FileSystemWatcher.cs b/external/corefx/src/System.IO.FileSystem.Watcher/src/System/IO/FileSystemWatcher.cs index 930816c553..e7affc5201 100644 --- a/external/corefx/src/System.IO.FileSystem.Watcher/src/System/IO/FileSystemWatcher.cs +++ b/external/corefx/src/System.IO.FileSystem.Watcher/src/System/IO/FileSystemWatcher.cs @@ -396,7 +396,12 @@ namespace System.IO /// private bool MatchPattern(ReadOnlySpan relativePath) { +#if MONO + if (relativePath.IsWhiteSpace()) + return false; +#endif ReadOnlySpan name = IO.Path.GetFileName(relativePath); + if (name.Length == 0) return false; diff --git a/external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs b/external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs index 5035709528..003a54c9e4 100644 --- a/external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs +++ b/external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs @@ -637,5 +637,24 @@ namespace System.IO.Tests } } } + +#if MONO && (!MOBILE || MOBILE_DESKTOP_HOST) + [Fact] + [PlatformSpecific(TestPlatforms.AnyUnix)] + public void FileSystemWatcher_WatchFileWithSpaces() + { + using (var testDirectory = new TempDirectory(GetTestFilePath())) + using (var file = new TempFile(Path.Combine(testDirectory.Path, " "))) + using (var watcher = new FileSystemWatcher(testDirectory.Path, "*")) + { + NotifyFilters filter = NotifyFilters.LastWrite | NotifyFilters.FileName; + watcher.NotifyFilter = filter; + + Action action = () => File.AppendAllText(file.Path, "longText!"); + + ExpectNoEvent(watcher, WatcherChangeTypes.Changed, action, expectedPath: file.Path); + } + } +#endif } } diff --git a/external/corefx/src/System.Memory/ref/System.Memory.cs b/external/corefx/src/System.Memory/ref/System.Memory.cs index 8509ed5a10..cbf80bdbf2 100644 --- a/external/corefx/src/System.Memory/ref/System.Memory.cs +++ b/external/corefx/src/System.Memory/ref/System.Memory.cs @@ -12,21 +12,29 @@ namespace System public static System.ReadOnlyMemory AsMemory(this string text) { throw null; } public static System.ReadOnlyMemory AsMemory(this string text, int start) { throw null; } public static System.ReadOnlyMemory AsMemory(this string text, int start, int length) { throw null; } + public static System.ReadOnlyMemory AsMemory(this string text, Index startIndex) { throw null; } + public static System.ReadOnlyMemory AsMemory(this string text, Range range) { throw null; } public static System.Memory AsMemory(this System.ArraySegment segment) { throw null; } public static System.Memory AsMemory(this System.ArraySegment segment, int start) { throw null; } public static System.Memory AsMemory(this System.ArraySegment segment, int start, int length) { throw null; } public static System.Memory AsMemory(this T[] array) { throw null; } public static System.Memory AsMemory(this T[] array, int start) { throw null; } public static System.Memory AsMemory(this T[] array, int start, int length) { throw null; } + public static System.Memory AsMemory(this T[] array, Index startIndex) { throw null; } + public static System.Memory AsMemory(this T[] array, Range range) { throw null; } public static System.ReadOnlySpan AsSpan(this string text) { throw null; } public static System.ReadOnlySpan AsSpan(this string text, int start) { throw null; } public static System.ReadOnlySpan AsSpan(this string text, int start, int length) { throw null; } public static System.Span AsSpan(this System.ArraySegment segment) { throw null; } public static System.Span AsSpan(this System.ArraySegment segment, int start) { throw null; } public static System.Span AsSpan(this System.ArraySegment segment, int start, int length) { throw null; } + public static Span AsSpan(this System.ArraySegment segment, Index startIndex) { throw null; } + public static Span AsSpan(this System.ArraySegment segment, Range range) { throw null; } public static System.Span AsSpan(this T[] array) { throw null; } public static System.Span AsSpan(this T[] array, int start) { throw null; } public static System.Span AsSpan(this T[] array, int start, int length) { throw null; } + public static Span AsSpan(this T[] array, Index startIndex) { throw null; } + public static Span AsSpan(this T[] array, Range range) { throw null; } public static int BinarySearch(this System.ReadOnlySpan span, System.IComparable comparable) { throw null; } public static int BinarySearch(this System.Span span, System.IComparable comparable) { throw null; } public static int BinarySearch(this System.ReadOnlySpan span, T value, TComparer comparer) where TComparer : System.Collections.Generic.IComparer { throw null; } diff --git a/external/corefx/src/System.Memory/src/ApiCompatBaseline.netcoreappaot.txt b/external/corefx/src/System.Memory/src/ApiCompatBaseline.netcoreappaot.txt new file mode 100644 index 0000000000..0898018176 --- /dev/null +++ b/external/corefx/src/System.Memory/src/ApiCompatBaseline.netcoreappaot.txt @@ -0,0 +1,5 @@ +Compat issues with assembly System.Memory: +MembersMustExist : Member 'System.ReadOnlySpan.Item.get(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.ReadOnlySpan.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Span.Item.get(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Span.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract. diff --git a/external/corefx/src/System.Memory/tests/ParsersAndFormatters/Formatter/FormatterTests.Negative.cs b/external/corefx/src/System.Memory/tests/ParsersAndFormatters/Formatter/FormatterTests.Negative.cs index 3f3eb9aad7..89c2b1804f 100644 --- a/external/corefx/src/System.Memory/tests/ParsersAndFormatters/Formatter/FormatterTests.Negative.cs +++ b/external/corefx/src/System.Memory/tests/ParsersAndFormatters/Formatter/FormatterTests.Negative.cs @@ -12,6 +12,12 @@ namespace System.Buffers.Text.Tests [MemberData(nameof(TestData.TypesThatCanBeFormatted), MemberType = typeof(TestData))] public static void TestBadFormat(Type integerType) { + if ((integerType == typeof(double)) || (integerType == typeof(float))) + { + // double and float support all the same formats as the UTF16 formatter + return; + } + object value = Activator.CreateInstance(integerType); Assert.Throws(() => TryFormatUtf8(value, Array.Empty(), out int bytesWritten, new StandardFormat('$', 1))); } @@ -19,8 +25,6 @@ namespace System.Buffers.Text.Tests [Theory] [MemberData(nameof(TestData.IntegerTypesTheoryData), MemberType = typeof(TestData))] [InlineData(typeof(decimal))] - [InlineData(typeof(double))] - [InlineData(typeof(float))] public static void TestGFormatWithPrecisionNotSupported(Type type) { object value = Activator.CreateInstance(type); diff --git a/external/corefx/src/System.Memory/tests/System.Memory.Tests.csproj b/external/corefx/src/System.Memory/tests/System.Memory.Tests.csproj index 8eac2b8914..e00e8dbddb 100644 --- a/external/corefx/src/System.Memory/tests/System.Memory.Tests.csproj +++ b/external/corefx/src/System.Memory/tests/System.Memory.Tests.csproj @@ -236,6 +236,7 @@ + diff --git a/external/corefx/src/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs b/external/corefx/src/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs index 78c1201faf..861f2951e3 100644 --- a/external/corefx/src/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs +++ b/external/corefx/src/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs @@ -554,7 +554,7 @@ namespace System.Net.Http Task.Factory.StartNew( s => { var whrs = (WinHttpRequestState)s; - whrs.Handler.StartRequest(whrs); + _ = whrs.Handler.StartRequestAsync(whrs); }, state, CancellationToken.None, @@ -764,7 +764,7 @@ namespace System.Net.Http } } - private async void StartRequest(WinHttpRequestState state) + private async Task StartRequestAsync(WinHttpRequestState state) { if (state.CancellationToken.IsCancellationRequested) { diff --git a/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs b/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs index a2ae670a93..aa69194a9f 100644 --- a/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs +++ b/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; namespace System.Net.Http { - public class HttpClient : HttpMessageInvoker + public partial class HttpClient : HttpMessageInvoker { #region Fields @@ -99,8 +99,16 @@ namespace System.Net.Http #region Constructors +#if !MONO + // Allow Mono to provide a custom version in a partial class part. + static HttpClient CreateDefaultHandler() + { + return new HttpClientHandler(); + } +#endif + public HttpClient() - : this(new HttpClientHandler()) + : this(CreateDefaultHandler()) { } diff --git a/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpRequestMessage.cs b/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpRequestMessage.cs index 36bf667d7c..ae3ab2826d 100644 --- a/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpRequestMessage.cs +++ b/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpRequestMessage.cs @@ -10,7 +10,7 @@ using System.Collections.Generic; namespace System.Net.Http { - public class HttpRequestMessage : IDisposable + public partial class HttpRequestMessage : IDisposable { private const int MessageNotYetSent = 0; private const int MessageAlreadySent = 1; @@ -179,13 +179,20 @@ namespace System.Net.Http return sb.ToString(); } +#if !MONO + static bool IsAllowedAbsoluteUri(Uri requestUri) + { + return !requestUri.IsAbsoluteUri || HttpUtilities.IsHttpUri(requestUri); + } +#endif + private void InitializeValues(HttpMethod method, Uri requestUri) { if (method == null) { throw new ArgumentNullException(nameof(method)); } - if ((requestUri != null) && (requestUri.IsAbsoluteUri) && (!HttpUtilities.IsHttpUri(requestUri))) + if ((requestUri != null) && !IsAllowedAbsoluteUri(requestUri)) { throw new ArgumentException(SR.net_http_client_http_baseaddress_required, nameof(requestUri)); } diff --git a/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs b/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs index 9df1d1c989..48a29d5698 100644 --- a/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs +++ b/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs @@ -13,6 +13,7 @@ namespace System.Net.Http private HttpStatusCode _statusCode; private HttpResponseHeaders _headers; + private HttpResponseHeaders _trailingHeaders; private string _reasonPhrase; private HttpRequestMessage _requestMessage; private Version _version; @@ -204,6 +205,17 @@ namespace System.Net.Http return false; } + public HttpResponseHeaders TrailingHeaders + { + get + { + if (_trailingHeaders == null) + _trailingHeaders = new HttpResponseHeaders(); + + return _trailingHeaders; + } + } + #region IDisposable Members protected virtual void Dispose(bool disposing) diff --git a/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnection.cs b/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnection.cs index 730e4f9a22..9701716f1a 100644 --- a/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnection.cs +++ b/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnection.cs @@ -123,18 +123,31 @@ namespace System.Net.Http ValueTask? readAheadTask = ConsumeReadAheadTask(); if (readAheadTask != null) { - IgnoreExceptionsAsync(readAheadTask.GetValueOrDefault()); + _ = IgnoreExceptionsAsync(readAheadTask.GetValueOrDefault()); } } } } /// Awaits a task, ignoring any resulting exceptions. - private static async void IgnoreExceptionsAsync(ValueTask task) + private static async Task IgnoreExceptionsAsync(ValueTask task) { try { await task.ConfigureAwait(false); } catch { } } + /// Awaits a task, logging any resulting exceptions (which are otherwise ignored). + private async Task LogExceptionsAsync(Task task) + { + try + { + await task.ConfigureAwait(false); + } + catch (Exception e) + { + if (NetEventSource.IsEnabled) Trace($"Exception from asynchronous processing: {e}"); + } + } + /// Do a non-blocking poll to see whether the connection has data available or has been closed. /// If we don't have direct access to the underlying socket, we instead use a read-ahead task. public bool PollRead() @@ -356,6 +369,7 @@ namespace System.Net.Http public async Task SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken) { TaskCompletionSource allowExpect100ToContinue = null; + Task sendRequestContentTask = null; Debug.Assert(_currentRequest == null, $"Expected null {nameof(_currentRequest)}."); Debug.Assert(RemainingBuffer.Length == 0, "Unexpected data in read buffer"); @@ -462,7 +476,6 @@ namespace System.Net.Http // CRLF for end of headers. await WriteTwoBytesAsync((byte)'\r', (byte)'\n').ConfigureAwait(false); - Task sendRequestContentTask = null; if (request.Content == null) { // We have nothing more to send, so flush out any headers we haven't yet sent. @@ -574,8 +587,9 @@ namespace System.Net.Http // content has been received, so this task should generally already be complete. if (sendRequestContentTask != null) { - await sendRequestContentTask.ConfigureAwait(false); + Task sendTask = sendRequestContentTask; sendRequestContentTask = null; + await sendTask.ConfigureAwait(false); } // Parse the response headers. @@ -665,6 +679,20 @@ namespace System.Net.Http allowExpect100ToContinue?.TrySetResult(false); if (NetEventSource.IsEnabled) Trace($"Error sending request: {error}"); + + // In the rare case where Expect: 100-continue was used and then processing + // of the response headers encountered an error such that we weren't able to + // wait for the sending to complete, it's possible the sending also encountered + // an exception or potentially is still going and will encounter an exception + // (we're about to Dispose for the connection). In such cases, we don't want any + // exception in that sending task to become unobserved and raise alarm bells, so we + // hook up a continuation that will log it. + if (sendRequestContentTask != null && !sendRequestContentTask.IsCompletedSuccessfully) + { + _ = LogExceptionsAsync(sendRequestContentTask); + } + + // Now clean up the connection. Dispose(); // At this point, we're going to throw an exception; we just need to diff --git a/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpContentReadStream.cs b/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpContentReadStream.cs index d1c44340d8..cc50a457ac 100644 --- a/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpContentReadStream.cs +++ b/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpContentReadStream.cs @@ -74,14 +74,14 @@ namespace System.Net.Http // Start the asynchronous drain. // It may complete synchronously, in which case the connection will be put back in the pool synchronously. // Skip the call to base.Dispose -- it will be deferred until DrainOnDisposeAsync finishes. - DrainOnDisposeAsync(); + _ = DrainOnDisposeAsync(); return; } base.Dispose(disposing); } - private async void DrainOnDisposeAsync() + private async Task DrainOnDisposeAsync() { HttpConnection connection = _connection; // Will be null after drain succeeds diff --git a/external/corefx/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.SslProtocols.cs b/external/corefx/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.SslProtocols.cs index c523bf5229..45d47c3bd5 100644 --- a/external/corefx/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.SslProtocols.cs +++ b/external/corefx/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.SslProtocols.cs @@ -260,7 +260,7 @@ namespace System.Net.Http.Functional.Tests { // Mono does not allow Ssl2 or Ssl3; an attempt to set it via `SslOptions` will be // silently ignored and the default of Tls 1.0 min / Tls 1.2 max will be used. - if (!PlatformDetection.IsSsl2AndSsl3Supported) + if (PlatformDetection.IsMono) return; } using (HttpClientHandler handler = CreateHttpClientHandler()) diff --git a/external/corefx/src/System.Net.Primitives/ref/System.Net.Primitives.cs b/external/corefx/src/System.Net.Primitives/ref/System.Net.Primitives.cs index 775a21d3dc..4742f3eb46 100644 --- a/external/corefx/src/System.Net.Primitives/ref/System.Net.Primitives.cs +++ b/external/corefx/src/System.Net.Primitives/ref/System.Net.Primitives.cs @@ -498,6 +498,7 @@ namespace System.Security.Authentication Tls = 192, Tls11 = 768, Tls12 = 3072, + Tls13 = 12288, [Obsolete("This value has been deprecated. It is no longer supported. http://go.microsoft.com/fwlink/?linkid=14202")] Default = Ssl3 | Tls } diff --git a/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddress.cs b/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddress.cs index 4fc5fc4e91..df97c4bb00 100644 --- a/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddress.cs +++ b/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddress.cs @@ -15,12 +15,14 @@ namespace System.Net /// Provides an Internet Protocol (IP) address. /// /// +#if MONO [Serializable] +#endif public class IPAddress { - public static readonly IPAddress Any = new IPAddress(0x0000000000000000); - public static readonly IPAddress Loopback = new IPAddress(0x000000000100007F); - public static readonly IPAddress Broadcast = new IPAddress(0x00000000FFFFFFFF); + public static readonly IPAddress Any = new ReadOnlyIPAddress(0x0000000000000000); + public static readonly IPAddress Loopback = new ReadOnlyIPAddress(0x000000000100007F); + public static readonly IPAddress Broadcast = new ReadOnlyIPAddress(0x00000000FFFFFFFF); public static readonly IPAddress None = Broadcast; internal const long LoopbackMask = 0x00000000000000FF; @@ -51,19 +53,6 @@ namespace System.Net /// private int _hashCode; - // Maximum length of address literals (potentially including a port number) - // generated by any address-to-string conversion routine. This length can - // be used when declaring buffers used with getnameinfo, WSAAddressToString, - // inet_ntoa, etc. We just provide one define, rather than one per api, - // to avoid confusion. - // - // The totals are derived from the following data: - // 15: IPv4 address - // 45: IPv6 address including embedded IPv4 address - // 11: Scope Id - // 2: Brackets around IPv6 address when port is present - // 6: Port (including colon) - // 1: Terminating null byte internal const int NumberOfLabels = IPAddressParserStatics.IPv6AddressBytes / 2; private bool IsIPv4 @@ -76,7 +65,7 @@ namespace System.Net get { return _numbers != null; } } - internal uint PrivateAddress + private uint PrivateAddress { get { @@ -516,7 +505,7 @@ namespace System.Net } } - [Obsolete("This property has been deprecated. It is address family dependent. Please use IPAddress.Equals method to perform comparisons. http://go.microsoft.com/fwlink/?linkid=14202")] + [Obsolete("This property has been deprecated. It is address family dependent. Please use IPAddress.Equals method to perform comparisons. https://go.microsoft.com/fwlink/?linkid=14202")] public long Address { get @@ -546,6 +535,10 @@ namespace System.Net { if (PrivateAddress != value) { + if (this is ReadOnlyIPAddress) + { + throw new SocketException(SocketError.OperationNotSupported); + } PrivateAddress = unchecked((uint)value); } } @@ -609,8 +602,8 @@ namespace System.Net int hashCode; if (IsIPv6) { - const int addressAndScopeIdLength = IPAddressParserStatics.IPv6AddressBytes + sizeof(uint); - Span addressAndScopeIdSpan = stackalloc byte[addressAndScopeIdLength]; + const int AddressAndScopeIdLength = IPAddressParserStatics.IPv6AddressBytes + sizeof(uint); + Span addressAndScopeIdSpan = stackalloc byte[AddressAndScopeIdLength]; MemoryMarshal.AsBytes(new ReadOnlySpan(_numbers)).CopyTo(addressAndScopeIdSpan); Span scopeIdSpan = addressAndScopeIdSpan.Slice(IPAddressParserStatics.IPv6AddressBytes); @@ -623,12 +616,9 @@ namespace System.Net } else { - Span addressOrScopeIdSpan = stackalloc uint[1]; - addressOrScopeIdSpan[0] = _addressOrScopeId; - // For IPv4 addresses, we use Marvin on the integer representation of the Address. hashCode = Marvin.ComputeHash32( - MemoryMarshal.AsBytes(addressOrScopeIdSpan), + MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref _addressOrScopeId, 1)), Marvin.DefaultSeed); } @@ -671,7 +661,12 @@ namespace System.Net return new IPAddress(address); } - [MethodImpl(MethodImplOptions.NoInlining)] private static byte[] ThrowAddressNullException() => throw new ArgumentNullException("address"); + + private sealed class ReadOnlyIPAddress : IPAddress + { + public ReadOnlyIPAddress(long newAddress) : base(newAddress) + { } + } } } diff --git a/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddressParser.cs b/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddressParser.cs index 35998e6437..1291192487 100644 --- a/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddressParser.cs +++ b/external/corefx/src/System.Net.Primitives/src/System/Net/IPAddressParser.cs @@ -16,7 +16,7 @@ namespace System.Net internal static unsafe IPAddress Parse(ReadOnlySpan ipSpan, bool tryParse) { - if (ipSpan.IndexOf(':') >= 0) + if (ipSpan.Contains(':')) { // The address is parsed as IPv6 if and only if it contains a colon. This is valid because // we don't support/parse a port specification at the end of an IPv4 address. @@ -47,6 +47,13 @@ namespace System.Net return new string(addressString, 0, charsWritten); } + internal static unsafe void IPv4AddressToString(uint address, StringBuilder destination) + { + char* addressString = stackalloc char[MaxIPv4StringLength]; + int charsWritten = IPv4AddressToStringHelper(address, addressString); + destination.Append(addressString, charsWritten); + } + internal static unsafe bool IPv4AddressToString(uint address, Span formatted, out int charsWritten) { if (formatted.Length < MaxIPv4StringLength) @@ -124,7 +131,7 @@ namespace System.Net { buffer.Append(':'); } - buffer.Append(IPAddressParser.IPv4AddressToString(ExtractIPv4Address(address))); + IPv4AddressToString(ExtractIPv4Address(address), buffer); } else { @@ -218,7 +225,11 @@ namespace System.Net if (c < '0' || c > '9') { scope = 0; +#if MONO // zoneId can be a string, see https://github.com/dotnet/corefx/issues/27529 + return true; +#else return false; +#endif } result = (result * 10) + (c - '0'); if (result > uint.MaxValue) @@ -245,7 +256,8 @@ namespace System.Net private static void AppendSections(ushort[] address, int fromInclusive, int toExclusive, StringBuilder buffer) { // Find the longest sequence of zeros to be combined into a "::" - (int zeroStart, int zeroEnd) = IPv6AddressHelper.FindCompressionRange(address, fromInclusive, toExclusive); + ReadOnlySpan addressSpan = new ReadOnlySpan(address, fromInclusive, toExclusive - fromInclusive); + (int zeroStart, int zeroEnd) = IPv6AddressHelper.FindCompressionRange(addressSpan); bool needsColon = false; // Output all of the numbers before the zero sequence diff --git a/external/corefx/src/System.Net.Security/src/System/Net/Security/Pal.OSX/SafeDeleteSslContext.cs b/external/corefx/src/System.Net.Security/src/System/Net/Security/Pal.OSX/SafeDeleteSslContext.cs index d1d142b4de..cba6225670 100644 --- a/external/corefx/src/System.Net.Security/src/System/Net/Security/Pal.OSX/SafeDeleteSslContext.cs +++ b/external/corefx/src/System.Net.Security/src/System/Net/Security/Pal.OSX/SafeDeleteSslContext.cs @@ -46,6 +46,15 @@ namespace System.Net { throw Interop.AppleCrypto.CreateExceptionForOSStatus(osStatus); } + + if (sslAuthenticationOptions.ApplicationProtocols != null) + { + // On OSX coretls supports only client side. For server, we will silently ignore the option. + if (!sslAuthenticationOptions.IsServer) + { + Interop.AppleCrypto.SslCtxSetAlpnProtos(_sslContext, sslAuthenticationOptions.ApplicationProtocols); + } + } } catch (Exception ex) { diff --git a/external/corefx/src/System.Net.Security/src/System/Net/Security/SecureChannel.cs b/external/corefx/src/System.Net.Security/src/System/Net/Security/SecureChannel.cs index 8bbb35b97f..334527ca17 100644 --- a/external/corefx/src/System.Net.Security/src/System/Net/Security/SecureChannel.cs +++ b/external/corefx/src/System.Net.Security/src/System/Net/Security/SecureChannel.cs @@ -865,9 +865,12 @@ namespace System.Net.Security } output = outgoingSecurity.token; - - byte[] alpnResult = SslStreamPal.GetNegotiatedApplicationProtocol(_securityContext); - _negotiatedApplicationProtocol = alpnResult == null ? default : new SslApplicationProtocol(alpnResult, false); + if (_negotiatedApplicationProtocol == default) + { + // try to get ALPN info unless we already have it. (this function can be called multiple times) + byte[] alpnResult = SslStreamPal.GetNegotiatedApplicationProtocol(_securityContext); + _negotiatedApplicationProtocol = alpnResult == null ? default : new SslApplicationProtocol(alpnResult, false); + } return status; } diff --git a/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.OSX.cs b/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.OSX.cs index 02943cc70f..b06b4d46f0 100644 --- a/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.OSX.cs +++ b/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.OSX.cs @@ -103,8 +103,10 @@ namespace System.Net.Security internal static byte[] GetNegotiatedApplicationProtocol(SafeDeleteContext context) { - // OSX SecureTransport does not export APIs to support ALPN, no-op. - return null; + if (context == null) + return null; + + return Interop.AppleCrypto.SslGetAlpnSelected(((SafeDeleteSslContext)context).SslContext); } public static SecurityStatusPal EncryptMessage( diff --git a/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.Unix.cs b/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.Unix.cs index 37e197434b..5b5c322768 100644 --- a/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.Unix.cs +++ b/external/corefx/src/System.Net.Security/src/System/Net/Security/SslStreamPal.Unix.cs @@ -159,7 +159,7 @@ namespace System.Net.Security } // When the handshake is done, and the context is server, check if the alpnHandle target was set to null during ALPN. - // If it was, then that indiciates ALPN failed, send failure. + // If it was, then that indicates ALPN failed, send failure. // We have this workaround, as openssl supports terminating handshake only from version 1.1.0, // whereas ALPN is supported from version 1.0.2. SafeSslHandle sslContext = ((SafeDeleteSslContext)context).SslContext; diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientAsyncAuthenticateTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientAsyncAuthenticateTest.cs index c134274bee..50f37d2169 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientAsyncAuthenticateTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientAsyncAuthenticateTest.cs @@ -42,6 +42,7 @@ namespace System.Net.Security.Tests } [Fact] + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "Mono ignores EncryptionPolicy")] public async Task ClientAsyncAuthenticate_ServerNoEncryption_NoConnect() { await Assert.ThrowsAsync(() => ClientAsyncSslHelper(EncryptionPolicy.NoEncryption)); @@ -57,11 +58,12 @@ namespace System.Net.Security.Tests [Fact] [PlatformSpecific(TestPlatforms.Windows)] + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono)] public async Task ClientAsyncAuthenticate_Ssl2WithSelf_Success() { // Test Ssl2 against itself. This is a standalone test as even on versions where Windows supports Ssl2, // it appears to have rules around not using it when other protocols are mentioned. - if (!PlatformDetection.IsWindows10Version1607OrGreater) + if (!PlatformDetection.IsMono && !PlatformDetection.IsWindows10Version1607OrGreater) { #pragma warning disable 0618 await ClientAsyncSslHelper(SslProtocols.Ssl2, SslProtocols.Ssl2); @@ -114,9 +116,12 @@ namespace System.Net.Security.Tests private static IEnumerable ProtocolMismatchData() { #pragma warning disable 0618 - yield return new object[] { SslProtocols.Ssl2, SslProtocols.Ssl3, typeof(Exception) }; - yield return new object[] { SslProtocols.Ssl2, SslProtocols.Tls12, typeof(Exception) }; - yield return new object[] { SslProtocols.Ssl3, SslProtocols.Tls12, typeof(Exception) }; + if (!PlatformDetection.IsMono) + { + yield return new object[] { SslProtocols.Ssl2, SslProtocols.Ssl3, typeof(Exception) }; + yield return new object[] { SslProtocols.Ssl2, SslProtocols.Tls12, typeof(Exception) }; + yield return new object[] { SslProtocols.Ssl3, SslProtocols.Tls12, typeof(Exception) }; + } #pragma warning restore 0618 yield return new object[] { SslProtocols.Tls, SslProtocols.Tls11, typeof(IOException) }; yield return new object[] { SslProtocols.Tls, SslProtocols.Tls12, typeof(IOException) }; diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientDefaultEncryptionTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientDefaultEncryptionTest.cs index 5fcab91b03..66f7508dc1 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientDefaultEncryptionTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ClientDefaultEncryptionTest.cs @@ -75,6 +75,7 @@ namespace System.Net.Security.Tests } [Fact] + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "Mono ignores EncryptionPolicy")] public async Task ClientDefaultEncryption_ServerNoEncryption_NoConnect() { using (var serverNoEncryption = new DummyTcpServer( diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/LoggingTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/LoggingTest.cs index 7d5f970490..46c9356c4b 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/LoggingTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/LoggingTest.cs @@ -9,6 +9,7 @@ using Xunit; namespace System.Net.Security.Tests { + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono)] public class LoggingTest : RemoteExecutorTestBase { [Fact] diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ParameterValidationTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ParameterValidationTest.cs index 1f06f0a954..66902b0bb5 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ParameterValidationTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ParameterValidationTest.cs @@ -23,6 +23,7 @@ namespace System.Net.Security.Tests } [Fact] + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "Mono ignores EncryptionPolicy")] public async Task SslStreamConstructor_BadEncryptionPolicy_ThrowException() { using (var _remoteServer = new DummyTcpServer( diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerAsyncAuthenticateTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerAsyncAuthenticateTest.cs index c91a0775c5..68e845e56c 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerAsyncAuthenticateTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerAsyncAuthenticateTest.cs @@ -59,7 +59,12 @@ namespace System.Net.Security.Tests }); Assert.NotNull(e); - Assert.IsAssignableFrom(expectedException, e); + // FIXME: the exact exception type is an implementation detail and Mono sometimes throws + // IOException as well as AuthenticationException. + if (!PlatformDetection.IsMono) + { + Assert.IsAssignableFrom(expectedException, e); + } } [Theory] @@ -73,9 +78,12 @@ namespace System.Net.Security.Tests private static IEnumerable ProtocolMismatchData() { #pragma warning disable 0618 - yield return new object[] { SslProtocols.Ssl2, SslProtocols.Ssl3, typeof(Exception) }; - yield return new object[] { SslProtocols.Ssl2, SslProtocols.Tls12, typeof(Exception) }; - yield return new object[] { SslProtocols.Ssl3, SslProtocols.Tls12, typeof(Exception) }; + if (!PlatformDetection.IsMono) + { + yield return new object[] { SslProtocols.Ssl2, SslProtocols.Ssl3, typeof(Exception) }; + yield return new object[] { SslProtocols.Ssl2, SslProtocols.Tls12, typeof(Exception) }; + yield return new object[] { SslProtocols.Ssl3, SslProtocols.Tls12, typeof(Exception) }; + } #pragma warning restore 0618 yield return new object[] { SslProtocols.Tls, SslProtocols.Tls11, typeof(AuthenticationException) }; yield return new object[] { SslProtocols.Tls, SslProtocols.Tls12, typeof(AuthenticationException) }; @@ -115,11 +123,21 @@ namespace System.Net.Security.Tests TestConfiguration.PassingTestTimeoutMilliseconds); using (TcpClient serverConnection = await serverAccept) - using (SslStream sslClientStream = new SslStream(clientConnection.GetStream())) using (SslStream sslServerStream = new SslStream( + clientConnection.GetStream(), + false, + AllowEmptyClientCertificate)) + using (SslStream sslClientStream = new SslStream( serverConnection.GetStream(), false, - AllowAnyServerCertificate)) + delegate { + // Allow any certificate from the server. + // Note that simply ignoring exceptions from AuthenticateAsClientAsync() is not enough + // because in Mono, certificate validation is performed during the handshake and a failure + // would result in the connection being terminated before the handshake completed, thus + // making the server-side AuthenticateAsServerAsync() fail as well. + return true; + })) { string serverName = _serverCertificate.GetNameInfo(X509NameType.SimpleName, false); @@ -167,7 +185,7 @@ namespace System.Net.Security.Tests } // The following method is invoked by the RemoteCertificateValidationDelegate. - private bool AllowAnyServerCertificate( + private bool AllowEmptyClientCertificate( object sender, X509Certificate certificate, X509Chain chain, diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerNoEncryptionTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerNoEncryptionTest.cs index 9550cd2e27..61d9d7a010 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerNoEncryptionTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/ServerNoEncryptionTest.cs @@ -13,6 +13,7 @@ using Xunit.Abstractions; namespace System.Net.Security.Tests { + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "Mono ignores EncryptionPolicy")] public class ServerNoEncryptionTest { private readonly ITestOutputHelper _log; diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlertsTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlertsTest.cs index 21a05cee08..ac220af547 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlertsTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlertsTest.cs @@ -57,6 +57,7 @@ namespace System.Net.Security.Tests } [Fact] + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono)] public async Task SslStream_StreamToStream_ServerInitiatedCloseNotify_Ok() { VirtualNetwork network = new VirtualNetwork(); @@ -89,6 +90,7 @@ namespace System.Net.Security.Tests } [Fact] + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono)] public async Task SslStream_StreamToStream_ClientInitiatedCloseNotify_Ok() { VirtualNetwork network = new VirtualNetwork(); diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlpnTests.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlpnTests.cs index ae468b3d29..9e049cebe6 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlpnTests.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamAlpnTests.cs @@ -15,19 +15,25 @@ using System.Threading; using System.Threading.Tasks; using Xunit; +using Xunit.Abstractions; namespace System.Net.Security.Tests { using Configuration = System.Net.Test.Common.Configuration; + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono)] public class SslStreamAlpnTests { - // Windows - Schannel supports alpn from win8 and higher. - // Linux - OpenSsl supports alpn from openssl 1.0.2 and higher. - // OSX - SecureTransport doesn't expose alpn APIs. - private static bool BackendSupportsAlpn => (PlatformDetection.IsWindows && !PlatformDetection.IsWindows7) || - (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && - (PlatformDetection.OpenSslVersion.Major >= 1 && (PlatformDetection.OpenSslVersion.Minor >= 1 || PlatformDetection.OpenSslVersion.Build >= 2))); + private static bool BackendSupportsAlpn => PlatformDetection.SupportsAlpn; + private static bool ClientSupportsAlpn => PlatformDetection.SupportsClientAlpn; + readonly ITestOutputHelper _output; + public static readonly object[][] Http2Servers = Configuration.Http.Http2Servers; + + public SslStreamAlpnTests(ITestOutputHelper output) + { + _output = output; + } + private async Task DoHandshakeWithOptions(SslStream clientSslStream, SslStream serverSslStream, SslClientAuthenticationOptions clientOptions, SslServerAuthenticationOptions serverOptions) { @@ -185,6 +191,36 @@ namespace System.Net.Security.Tests } } + [OuterLoop("Uses external server")] + [ConditionalTheory(nameof(ClientSupportsAlpn))] + [MemberData(nameof(Http2Servers))] + public async Task SslStream_Http2_Alpn_Success(Uri server) + { + using (TcpClient client = new TcpClient()) + { + try + { + await client.ConnectAsync(server.Host, server.Port); + using (SslStream clientStream = new SslStream(client.GetStream(), leaveInnerStreamOpen: false)) + { + SslClientAuthenticationOptions clientOptions = new SslClientAuthenticationOptions + { + ApplicationProtocols = new List { SslApplicationProtocol.Http2 , SslApplicationProtocol.Http11 }, + TargetHost = server.Host + }; + + await clientStream.AuthenticateAsClientAsync(clientOptions, CancellationToken.None); + Assert.Equal("h2", clientStream.NegotiatedApplicationProtocol.ToString()); + } + } + catch (Exception e) + { + // Failures to connect do not cause test failure. + _output.WriteLine("Unable to connect: {0}", e); + } + } + } + internal static IEnumerable Alpn_TestData() { if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs index 160765c4b9..bfd12cf7ea 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs @@ -121,9 +121,12 @@ namespace System.Net.Security.Tests false)); Assert.NotNull(e.InnerException); - Assert.True(e.InnerException.Message.Contains("SSL_ERROR_SSL")); - Assert.NotNull(e.InnerException.InnerException); - Assert.True(e.InnerException.InnerException.Message.Contains("protocol")); + if (!PlatformDetection.IsMono) + { + Assert.True(e.InnerException.Message.Contains("SSL_ERROR_SSL")); + Assert.NotNull(e.InnerException.InnerException); + Assert.True(e.InnerException.InnerException.Message.Contains("protocol")); + } } } diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs index 3e0d6ed171..fc19153512 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs @@ -55,7 +55,11 @@ namespace System.Net.Security.Tests Task t2 = server.AuthenticateAsServerAsync(certificate); await Assert.ThrowsAsync(() => t1); - await t2; + // Mono closes the connection during the handshake. + if (PlatformDetection.IsMono) + await Assert.ThrowsAsync(() => t2); + else + await t2; } } @@ -75,9 +79,15 @@ namespace System.Net.Security.Tests using (var server = new SslStream(serverStream, false, null, selectionCallback)) using (X509Certificate2 certificate = Configuration.Certificates.GetServerCertificate()) { - await Assert.ThrowsAsync(async () => - await TestConfiguration.WhenAllOrAnyFailedWithTimeout(client.AuthenticateAsClientAsync(certificate.GetNameInfo(X509NameType.SimpleName, false)), server.AuthenticateAsServerAsync(certificate)) - ); + var clientJob = client.AuthenticateAsClientAsync(certificate.GetNameInfo(X509NameType.SimpleName, false)); + + await Assert.ThrowsAsync(() => server.AuthenticateAsServerAsync(certificate)); + + // Mono terminates the connection when the server handshake fails. + if (PlatformDetection.IsMono) + await Assert.ThrowsAsync(() => clientJob); + else + await TestConfiguration.WhenAllOrAnyFailedWithTimeout(clientJob); } } @@ -360,7 +370,7 @@ namespace System.Net.Security.Tests await clientSslStream.WriteAsync(new byte[] { 2 }, 0, 1); - if (PlatformDetection.IsFullFramework) + if (PlatformDetection.IsFullFramework || PlatformDetection.IsMono) { await Assert.ThrowsAsync(() => serverReadTask); } @@ -426,7 +436,7 @@ namespace System.Net.Security.Tests // Do normal reads as requested until the read mode is set // to 1. Then do a single read of only 10 bytes to read only // part of the message, and subsequently return EOF. - if (readMode == 0) + if (readMode == 0 || count < 15) { return serverNetworkStream.Read(buffer, offset, count); } diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamSystemDefaultsTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamSystemDefaultsTest.cs index 311ea12e21..2449c14956 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamSystemDefaultsTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/SslStreamSystemDefaultsTest.cs @@ -86,6 +86,14 @@ namespace System.Net.Security.Tests public async Task ClientAndServer_OneUsesDefault_OtherUsesLowerProtocol_Fails( SslProtocols? clientProtocols, SslProtocols? serverProtocols) { + if (PlatformDetection.IsMono) + { +#pragma warning disable 0618 + if (clientProtocols == SslProtocols.Ssl2 || serverProtocols == SslProtocols.Ssl2) + return; +#pragma warning restore 0618 + } + using (X509Certificate2 serverCertificate = Configuration.Certificates.GetServerCertificate()) using (X509Certificate2 clientCertificate = Configuration.Certificates.GetClientCertificate()) { diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj b/external/corefx/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj index bdf707b62d..0a135a472a 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj @@ -60,6 +60,9 @@ Common\System\Net\Configuration.Certificates.cs + + Common\System\Net\Configuration.Http.cs + Common\System\Net\HttpsTestClient.cs @@ -166,5 +169,4 @@ - diff --git a/external/corefx/src/System.Net.Security/tests/FunctionalTests/TransportContextTest.cs b/external/corefx/src/System.Net.Security/tests/FunctionalTests/TransportContextTest.cs index 865b4bac6a..1e263722aa 100644 --- a/external/corefx/src/System.Net.Security/tests/FunctionalTests/TransportContextTest.cs +++ b/external/corefx/src/System.Net.Security/tests/FunctionalTests/TransportContextTest.cs @@ -12,6 +12,7 @@ using Xunit; namespace System.Net.Security.Tests { + [SkipOnTargetFramework(TargetFrameworkMonikers.Mono)] public class TransportContextTest { // The following method is invoked by the RemoteCertificateValidationDelegate. diff --git a/external/corefx/src/System.Net.ServicePoint/src/System/Net/SecurityProtocolType.cs b/external/corefx/src/System.Net.ServicePoint/src/System/Net/SecurityProtocolType.cs index 0ec4786c30..b433fb2276 100644 --- a/external/corefx/src/System.Net.ServicePoint/src/System/Net/SecurityProtocolType.cs +++ b/external/corefx/src/System.Net.ServicePoint/src/System/Net/SecurityProtocolType.cs @@ -16,5 +16,6 @@ namespace System.Net Tls = SslProtocols.Tls, Tls11 = SslProtocols.Tls11, Tls12 = SslProtocols.Tls12, + Tls13 = SslProtocols.Tls13 } } diff --git a/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.cs.REMOVED.git-id b/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.cs.REMOVED.git-id index 238601dc1d..03eff76579 100644 --- a/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.cs.REMOVED.git-id +++ b/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.cs.REMOVED.git-id @@ -1 +1 @@ -eb0e588d6483a157c5e1cf53be92aacf1b5e9768 \ No newline at end of file +dde648a33e06cec07895307f7995404886e28da8 \ No newline at end of file diff --git a/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.tt b/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.tt index 5fbd230724..957e206e86 100644 --- a/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.tt +++ b/external/corefx/src/System.Numerics.Vectors/tests/GenericVectorTests.tt @@ -427,12 +427,12 @@ namespace System.Numerics.Tests #> private void TestAdditionOverflow() where T : struct { - T maxValue = (T)(dynamic)typeof(T).GetRuntimeField("MaxValue").GetValue(null); + T maxValue = GetMaxValueExact(); Vector maxValueVector = new Vector(maxValue); Vector secondVector = new Vector(GenerateRandomValuesForVector()); Vector sum = maxValueVector + secondVector; - T minValue = (T)(dynamic)typeof(T).GetRuntimeField("MinValue").GetValue(null); + T minValue = GetMinValueExact(); ValidateVector(sum, (index, val) => { @@ -474,12 +474,12 @@ namespace System.Numerics.Tests #> private void TestSubtractionOverflow() where T : struct { - T minValue = (T)(dynamic)typeof(T).GetRuntimeField("MinValue").GetValue(null); + T minValue = GetMinValueExact(); Vector minValueVector = new Vector(minValue); Vector secondVector = new Vector(GenerateRandomValuesForVector()); Vector difference = minValueVector - secondVector; - T maxValue = (T)(dynamic)typeof(T).GetRuntimeField("MaxValue").GetValue(null); + T maxValue = GetMaxValueExact(); ValidateVector(difference, (index, val) => { @@ -1801,26 +1801,142 @@ namespace System.Numerics.Tests internal static int GetMinValue() where T : struct { - if (typeof(T) == typeof(Int64) || typeof(T) == typeof(Single) || typeof(T) == typeof(Double) || typeof(T) == typeof(UInt32) || typeof(T) == typeof(UInt64)) + if (typeof(T) == typeof(int) || typeof(T) == typeof(long) || typeof(T) == typeof(float) || typeof(T) == typeof(double) || typeof(T) == typeof(uint) || typeof(T) == typeof(ulong)) { return int.MinValue; } - var typeInfo = typeof(T).GetTypeInfo(); - var field = typeInfo.GetDeclaredField("MinValue"); - var value = field.GetValue(null); - return (int)(dynamic)value; + else if (typeof(T) == typeof(byte)) + { + return byte.MinValue; + } + else if (typeof(T) == typeof(sbyte)) + { + return sbyte.MinValue; + } + else if (typeof(T) == typeof(short)) + { + return short.MinValue; + } + else if (typeof(T) == typeof(ushort)) + { + return ushort.MinValue; + } + throw new NotSupportedException(); + } + + internal static T GetMinValueExact() where T : struct + { + if (typeof(T) == typeof(byte)) + { + return (T)(object)byte.MinValue; + } + else if (typeof(T) == typeof(sbyte)) + { + return (T)(object)sbyte.MinValue; + } + else if (typeof(T) == typeof(ushort)) + { + return (T)(object)ushort.MinValue; + } + else if (typeof(T) == typeof(short)) + { + return (T)(object)short.MinValue; + } + else if (typeof(T) == typeof(int)) + { + return (T)(object)int.MinValue; + } + else if (typeof(T) == typeof(long)) + { + return (T)(object)long.MinValue; + } + else if (typeof(T) == typeof(float)) + { + return (T)(object)float.MinValue; + } + else if (typeof(T) == typeof(double)) + { + return (T)(object)double.MinValue; + } + else if (typeof(T) == typeof(uint)) + { + return (T)(object)uint.MinValue; + } + else if (typeof(T) == typeof(ulong)) + { + return (T)(object)ulong.MinValue; + } + throw new NotSupportedException(); } internal static int GetMaxValue() where T : struct { - if (typeof(T) == typeof(Int64) || typeof(T) == typeof(Single) || typeof(T) == typeof(Double) || typeof(T) == typeof(UInt32) || typeof(T) == typeof(UInt64)) + if (typeof(T) == typeof(int) || typeof(T) == typeof(long) || typeof(T) == typeof(float) || typeof(T) == typeof(double) || typeof(T) == typeof(uint) || typeof(T) == typeof(ulong)) { return int.MaxValue; } - var typeInfo = typeof(T).GetTypeInfo(); - var field = typeInfo.GetDeclaredField("MaxValue"); - var value = field.GetValue(null); - return (int)(dynamic)value; + else if (typeof(T) == typeof(byte)) + { + return byte.MaxValue; + } + else if (typeof(T) == typeof(sbyte)) + { + return sbyte.MaxValue; + } + else if (typeof(T) == typeof(short)) + { + return short.MaxValue; + } + else if (typeof(T) == typeof(ushort)) + { + return ushort.MaxValue; + } + throw new NotSupportedException(); + } + + internal static T GetMaxValueExact() where T : struct + { + if (typeof(T) == typeof(byte)) + { + return (T)(object)byte.MaxValue; + } + else if (typeof(T) == typeof(sbyte)) + { + return (T)(object)sbyte.MaxValue; + } + else if (typeof(T) == typeof(ushort)) + { + return (T)(object)ushort.MaxValue; + } + else if (typeof(T) == typeof(short)) + { + return (T)(object)short.MaxValue; + } + else if (typeof(T) == typeof(int)) + { + return (T)(object)int.MaxValue; + } + else if (typeof(T) == typeof(long)) + { + return (T)(object)long.MaxValue; + } + else if (typeof(T) == typeof(float)) + { + return (T)(object)float.MaxValue; + } + else if (typeof(T) == typeof(double)) + { + return (T)(object)double.MaxValue; + } + else if (typeof(T) == typeof(uint)) + { + return (T)(object)uint.MaxValue; + } + else if (typeof(T) == typeof(ulong)) + { + return (T)(object)ulong.MaxValue; + } + throw new NotSupportedException(); } internal static T GetValueWithAllOnesSet() where T : struct diff --git a/external/corefx/src/System.Private.Uri/src/System/IPv4AddressHelper.cs b/external/corefx/src/System.Private.Uri/src/System/IPv4AddressHelper.cs index 245264dd96..273fbaa5ef 100644 --- a/external/corefx/src/System.Private.Uri/src/System/IPv4AddressHelper.cs +++ b/external/corefx/src/System.Private.Uri/src/System/IPv4AddressHelper.cs @@ -10,15 +10,6 @@ namespace System // The idea is to stay with static helper methods and strings internal static partial class IPv4AddressHelper { - internal const long Invalid = -1; - // Note: the native parser cannot handle MaxIPv4Value, only MaxIPv4Value - 1 - private const long MaxIPv4Value = UInt32.MaxValue; - private const int Octal = 8; - private const int Decimal = 10; - private const int Hex = 16; - - private const int NumberOfLabels = 4; - // methods // Parse and canonicalize internal static string ParseCanonicalName(string str, int start, int end, ref bool isLoopback) @@ -42,298 +33,6 @@ namespace System } } - // Only called from the IPv6Helper, only parse the canonical format - internal static int ParseHostNumber(string str, int start, int end) - { - unsafe - { - byte* numbers = stackalloc byte[NumberOfLabels]; - ParseCanonical(str, numbers, start, end); - return (numbers[0] << 24) + (numbers[1] << 16) + (numbers[2] << 8) + numbers[3]; - } - } - - // - // IsValid - // - // Performs IsValid on a substring. Updates the index to where we - // believe the IPv4 address ends - // - // Inputs: - // name - // string containing possible IPv4 address - // - // start - // offset in to start checking for IPv4 address - // - // end - // offset in of the last character we can touch in the check - // - // Outputs: - // end - // index of last character in we checked - // - // allowIPv6 - // enables parsing IPv4 addresses embedded in IPv6 address literals - // - // notImplicitFile - // do not consider this URI holding an implicit filename - // - // unknownScheme - // the check is made on an unknown scheme (suppress IPv4 canonicalization) - // - // Assumes: - // The address string is terminated by either - // end of the string, characters ':' '/' '\' '?' - // - // - // Returns: - // bool - // - // Throws: - // Nothing - // - - //Remark: MUST NOT be used unless all input indexes are verified and trusted. - internal static unsafe bool IsValid(char* name, int start, ref int end, bool allowIPv6, bool notImplicitFile, bool unknownScheme) - { - // IPv6 can only have canonical IPv4 embedded. Unknown schemes will not attempt parsing of non-canonical IPv4 addresses. - if (allowIPv6 || unknownScheme) - { - return IsValidCanonical(name, start, ref end, allowIPv6, notImplicitFile); - } - else - { - return ParseNonCanonical(name, start, ref end, notImplicitFile) != Invalid; - } - } - - // - // IsValidCanonical - // - // Checks if the substring is a valid canonical IPv4 address or an IPv4 address embedded in an IPv6 literal - // This is an attempt to parse ABNF productions from RFC3986, Section 3.2.2: - // IP-literal = "[" ( IPv6address / IPvFuture ) "]" - // IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet - // dec-octet = DIGIT ; 0-9 - // / %x31-39 DIGIT ; 10-99 - // / "1" 2DIGIT ; 100-199 - // / "2" %x30-34 DIGIT ; 200-249 - // / "25" %x30-35 ; 250-255 - // - internal static unsafe bool IsValidCanonical(char* name, int start, ref int end, bool allowIPv6, bool notImplicitFile) - { - int dots = 0; - int number = 0; - bool haveNumber = false; - bool firstCharIsZero = false; - - while (start < end) - { - char ch = name[start]; - if (allowIPv6) - { - // for ipv4 inside ipv6 the terminator is either ScopeId, prefix or ipv6 terminator - if (ch == ']' || ch == '/' || ch == '%') break; - } - else if (ch == '/' || ch == '\\' || (notImplicitFile && (ch == ':' || ch == '?' || ch == '#'))) - { - break; - } - - if (ch <= '9' && ch >= '0') - { - if (!haveNumber && (ch == '0')) - { - if ((start + 1 < end) && name[start + 1] == '0') - { - // 00 is not allowed as a prefix. - return false; - } - - firstCharIsZero = true; - } - - haveNumber = true; - number = number * 10 + (name[start] - '0'); - if (number > 255) - { - return false; - } - } - else if (ch == '.') - { - if (!haveNumber || (number > 0 && firstCharIsZero)) - { - // 0 is not allowed to prefix a number. - return false; - } - ++dots; - haveNumber = false; - number = 0; - firstCharIsZero = false; - } - else - { - return false; - } - ++start; - } - bool res = (dots == 3) && haveNumber; - if (res) - { - end = start; - } - return res; - } - - // Parse any canonical or non-canonical IPv4 formats and return a long between 0 and MaxIPv4Value. - // Return Invalid (-1) for failures. - // If the address has less than three dots, only the rightmost section is assumed to contain the combined value for - // the missing sections: 0xFF00FFFF == 0xFF.0x00.0xFF.0xFF == 0xFF.0xFFFF - internal static unsafe long ParseNonCanonical(char* name, int start, ref int end, bool notImplicitFile) - { - int numberBase = Decimal; - char ch; - Span parts = stackalloc long[4]; - long currentValue = 0; - bool atLeastOneChar = false; - - // Parse one dotted section at a time - int dotCount = 0; // Limit 3 - int current = start; - for (; current < end; current++) - { - ch = name[current]; - currentValue = 0; - - // Figure out what base this section is in - numberBase = Decimal; - if (ch == '0') - { - numberBase = Octal; - current++; - atLeastOneChar = true; - if (current < end) - { - ch = name[current]; - if (ch == 'x' || ch == 'X') - { - numberBase = Hex; - current++; - atLeastOneChar = false; - } - } - } - - // Parse this section - for (; current < end; current++) - { - ch = name[current]; - int digitValue; - - if ((numberBase == Decimal || numberBase == Hex) && '0' <= ch && ch <= '9') - { - digitValue = ch - '0'; - } - else if (numberBase == Octal && '0' <= ch && ch <= '7') - { - digitValue = ch - '0'; - } - else if (numberBase == Hex && 'a' <= ch && ch <= 'f') - { - digitValue = ch + 10 - 'a'; - } - else if (numberBase == Hex && 'A' <= ch && ch <= 'F') - { - digitValue = ch + 10 - 'A'; - } - else - { - break; // Invalid/terminator - } - - currentValue = (currentValue * numberBase) + digitValue; - - if (currentValue > MaxIPv4Value) // Overflow - { - return Invalid; - } - - atLeastOneChar = true; - } - - if (current < end && name[current] == '.') - { - if (dotCount >= 3 // Max of 3 dots and 4 segments - || !atLeastOneChar // No empty segments: 1...1 - // Only the last segment can be more than 255 (if there are less than 3 dots) - || currentValue > 0xFF) - { - return Invalid; - } - parts[dotCount] = currentValue; - dotCount++; - atLeastOneChar = false; - continue; - } - // We don't get here unless We find an invalid character or a terminator - break; - } - - // Terminators - if (!atLeastOneChar) - { - return Invalid; // Empty trailing segment: 1.1.1. - } - else if (current >= end) - { - // end of string, allowed - } - else if ((ch = name[current]) == '/' || ch == '\\' || (notImplicitFile && (ch == ':' || ch == '?' || ch == '#'))) - { - end = current; - } - else - { - // not a valid terminating character - return Invalid; - } - - parts[dotCount] = currentValue; - - // Parsed, reassemble and check for overflows - switch (dotCount) - { - case 0: // 0xFFFFFFFF - if (parts[0] > MaxIPv4Value) - { - return Invalid; - } - return parts[0]; - case 1: // 0xFF.0xFFFFFF - if (parts[1] > 0xffffff) - { - return Invalid; - } - return (parts[0] << 24) | (parts[1] & 0xffffff); - case 2: // 0xFF.0xFF.0xFFFF - if (parts[2] > 0xffff) - { - return Invalid; - } - return (parts[0] << 24) | ((parts[1] & 0xff) << 16) | (parts[2] & 0xffff); - case 3: // 0xFF.0xFF.0xFF.0xFF - if (parts[3] > 0xff) - { - return Invalid; - } - return (parts[0] << 24) | ((parts[1] & 0xff) << 16) | ((parts[2] & 0xff) << 8) | (parts[3] & 0xff); - default: - return Invalid; - } - } - // // Parse // @@ -359,26 +58,5 @@ namespace System return numbers[0] == 127; } - - // Assumes: - // has been validated and contains only decimal digits in groups - // of 8-bit numbers and the characters '.' - // Address may terminate with ':' or with the end of the string - // - private static unsafe bool ParseCanonical(string name, byte* numbers, int start, int end) - { - for (int i = 0; i < NumberOfLabels; ++i) - { - byte b = 0; - char ch; - for (; (start < end) && (ch = name[start]) != '.' && ch != ':'; ++start) - { - b = (byte)(b * 10 + (byte)(ch - '0')); - } - numbers[i] = b; - ++start; - } - return numbers[0] == 127; - } } } diff --git a/external/corefx/src/System.Private.Uri/src/System/IPv6AddressHelper.cs b/external/corefx/src/System.Private.Uri/src/System/IPv6AddressHelper.cs index 162533619e..f0f2750978 100644 --- a/external/corefx/src/System.Private.Uri/src/System/IPv6AddressHelper.cs +++ b/external/corefx/src/System.Private.Uri/src/System/IPv6AddressHelper.cs @@ -3,8 +3,7 @@ // See the LICENSE file in the project root for more information. using System.Collections.Generic; -using System.Text; -using System.Globalization; +using System.Diagnostics; namespace System { @@ -12,108 +11,111 @@ namespace System // The idea is to stay with static helper methods and strings internal static partial class IPv6AddressHelper { - // fields -#if !MONO - private const int NumberOfLabels = 8; -#endif - // Lower case hex, no leading zeros - private const string CanonicalNumberFormat = "{0:x}"; - private const string EmbeddedIPv4Format = ":{0:d}.{1:d}.{2:d}.{3:d}"; - private const char Separator = ':'; - // methods - internal static string ParseCanonicalName(string str, int start, ref bool isLoopback, ref string scopeId) + internal static unsafe string ParseCanonicalName(string str, int start, ref bool isLoopback, ref string scopeId) { - unsafe - { - ushort* numbers = stackalloc ushort[NumberOfLabels]; - // optimized zeroing of 8 shorts = 2 longs - ((long*)numbers)[0] = 0L; - ((long*)numbers)[1] = 0L; - isLoopback = Parse(str, numbers, start, ref scopeId); - return '[' + CreateCanonicalName(numbers) + ']'; - } - } + ushort* numbersPtr = stackalloc ushort[NumberOfLabels]; + // optimized zeroing of 8 shorts = 2 longs + ((long*)numbersPtr)[0] = 0L; + ((long*)numbersPtr)[1] = 0L; + Span numbers = new Span(numbersPtr, NumberOfLabels); + Parse(str, numbersPtr, start, ref scopeId); + isLoopback = IsLoopback(numbers); - internal static unsafe string CreateCanonicalName(ushort* numbers) - { // RFC 5952 Sections 4 & 5 - Compressed, lower case, with possible embedded IPv4 addresses. // Start to finish, inclusive. <-1, -1> for no compression - KeyValuePair range = FindCompressionRange(numbers); + (int rangeStart, int rangeEnd) = FindCompressionRange(numbers); bool ipv4Embedded = ShouldHaveIpv4Embedded(numbers); - StringBuilder builder = new StringBuilder(); + Span stackSpace = stackalloc char[48]; // large enough for any IPv6 string, including brackets + stackSpace[0] = '['; + int pos = 1; + int charsWritten; + bool success; for (int i = 0; i < NumberOfLabels; i++) { if (ipv4Embedded && i == (NumberOfLabels - 2)) { + stackSpace[pos++] = ':'; + // Write the remaining digits as an IPv4 address - builder.AppendFormat(CultureInfo.InvariantCulture, EmbeddedIPv4Format, - numbers[i] >> 8, numbers[i] & 0xFF, numbers[i + 1] >> 8, numbers[i + 1] & 0xFF); + success = (numbers[i] >> 8).TryFormat(stackSpace.Slice(pos), out charsWritten); + Debug.Assert(success); + pos += charsWritten; + + stackSpace[pos++] = '.'; + success = (numbers[i] & 0xFF).TryFormat(stackSpace.Slice(pos), out charsWritten); + Debug.Assert(success); + pos += charsWritten; + + stackSpace[pos++] = '.'; + success = (numbers[i + 1] >> 8).TryFormat(stackSpace.Slice(pos), out charsWritten); + Debug.Assert(success); + pos += charsWritten; + + stackSpace[pos++] = '.'; + success = (numbers[i + 1] & 0xFF).TryFormat(stackSpace.Slice(pos), out charsWritten); + Debug.Assert(success); + pos += charsWritten; break; } // Compression; 1::1, ::1, 1:: - if (range.Key == i) - { // Start compression, add : - builder.Append(Separator); + if (rangeStart == i) + { + // Start compression, add : + stackSpace[pos++] = ':'; } - if (range.Key <= i && range.Value == (NumberOfLabels - 1)) - { // Remainder compressed; 1:: - builder.Append(Separator); + + if (rangeStart <= i && rangeEnd == NumberOfLabels) + { + // Remainder compressed; 1:: + stackSpace[pos++] = ':'; break; } - if (range.Key <= i && i <= range.Value) + + if (rangeStart <= i && i < rangeEnd) { continue; // Compressed } if (i != 0) { - builder.Append(Separator); + stackSpace[pos++] = ':'; } - builder.AppendFormat(CultureInfo.InvariantCulture, CanonicalNumberFormat, numbers[i]); + success = numbers[i].TryFormat(stackSpace.Slice(pos), out charsWritten, format: "x"); + Debug.Assert(success); + pos += charsWritten; } - return builder.ToString(); + stackSpace[pos++] = ']'; + return new string(stackSpace.Slice(0, pos)); } - // RFC 5952 Section 4.2.3 - // Longest consecutive sequence of zero segments, minimum 2. - // On equal, first sequence wins. - // <-1, -1> for no compression. - private static unsafe KeyValuePair FindCompressionRange(ushort* numbers) + private static unsafe bool IsLoopback(ReadOnlySpan numbers) { - int longestSequenceLength = 0; - int longestSequenceStart = -1; + // + // is the address loopback? Loopback is defined as one of: + // + // 0:0:0:0:0:0:0:1 + // 0:0:0:0:0:0:127.0.0.1 == 0:0:0:0:0:0:7F00:0001 + // 0:0:0:0:0:FFFF:127.0.0.1 == 0:0:0:0:0:FFFF:7F00:0001 + // - int currentSequenceLength = 0; - for (int i = 0; i < NumberOfLabels; i++) - { - if (numbers[i] == 0) - { // In a sequence - currentSequenceLength++; - if (currentSequenceLength > longestSequenceLength) - { - longestSequenceLength = currentSequenceLength; - longestSequenceStart = i - currentSequenceLength + 1; - } - } - else - { - currentSequenceLength = 0; - } - } - - if (longestSequenceLength >= 2) - { - return new KeyValuePair(longestSequenceStart, - longestSequenceStart + longestSequenceLength - 1); - } - - return new KeyValuePair(-1, -1); // No compression + return ((numbers[0] == 0) + && (numbers[1] == 0) + && (numbers[2] == 0) + && (numbers[3] == 0) + && (numbers[4] == 0)) + && (((numbers[5] == 0) + && (numbers[6] == 0) + && (numbers[7] == 1)) + || (((numbers[6] == 0x7F00) + && (numbers[7] == 0x0001)) + && ((numbers[5] == 0) + || (numbers[5] == 0xFFFF)))); } // Returns true if the IPv6 address should be formated with an embedded IPv4 address: @@ -351,210 +353,5 @@ namespace System { return InternalIsValid(name, start, ref end, false); } - - // - // Parse - // - // Convert this IPv6 address into a sequence of 8 16-bit numbers - // - // Inputs: - // Name - // The validated IPv6 address - // - // Outputs: - // numbers - // Array filled in with the numbers in the IPv6 groups - // - // PrefixLength - // Set to the number after the prefix separator (/) if found - // - // Assumes: - // has been validated and contains only hex digits in groups of - // 16-bit numbers, the characters ':' and '/', and a possible IPv4 - // address - // - // Returns: - // true if this is a loopback, false otherwise. There is no failure indication as the sting must be a valid one. - // - // Throws: - // Nothing - // - - internal static unsafe bool Parse(string address, ushort* numbers, int start, ref string scopeId) - { - int number = 0; - int index = 0; - int compressorIndex = -1; - bool numberIsValid = true; - - //This used to be a class instance member but have not been used so far - int PrefixLength = 0; - if (address[start] == '[') - { - ++start; - } - - for (int i = start; i < address.Length && address[i] != ']';) - { - switch (address[i]) - { - case '%': - if (numberIsValid) - { - numbers[index++] = (ushort)number; - numberIsValid = false; - } - - start = i; - for (++i; address[i] != ']' && address[i] != '/'; ++i) - { - ; - } - scopeId = address.Substring(start, i - start); - // ignore prefix if any - for (; address[i] != ']'; ++i) - { - ; - } - break; - - case ':': - numbers[index++] = (ushort)number; - number = 0; - ++i; - if (address[i] == ':') - { - compressorIndex = index; - ++i; - } - else if ((compressorIndex < 0) && (index < 6)) - { - // - // no point checking for IPv4 address if we don't - // have a compressor or we haven't seen 6 16-bit - // numbers yet - // - - break; - } - - // - // check to see if the upcoming number is really an IPv4 - // address. If it is, convert it to 2 ushort numbers - // - - for (int j = i; (address[j] != ']') && - (address[j] != ':') && - (address[j] != '%') && - (address[j] != '/') && - (j < i + 4); ++j) - { - if (address[j] == '.') - { - // - // we have an IPv4 address. Find the end of it: - // we know that since we have a valid IPv6 - // address, the only things that will terminate - // the IPv4 address are the prefix delimiter '/' - // or the end-of-string (which we conveniently - // delimited with ']') - // - - while ((address[j] != ']') && (address[j] != '/') && (address[j] != '%')) - { - ++j; - } - number = IPv4AddressHelper.ParseHostNumber(address, i, j); - unchecked - { - numbers[index++] = (ushort)(number >> 16); - numbers[index++] = (ushort)number; - } - i = j; - - // - // set this to avoid adding another number to - // the array if there's a prefix - // - - number = 0; - numberIsValid = false; - break; - } - } - break; - - case '/': - if (numberIsValid) - { - numbers[index++] = (ushort)number; - numberIsValid = false; - } - - // - // since we have a valid IPv6 address string, the prefix - // length is the last token in the string - // - - for (++i; address[i] != ']'; ++i) - { - PrefixLength = PrefixLength * 10 + (address[i] - '0'); - } - break; - - default: - number = number * 16 + Uri.FromHex(address[i++]); - break; - } - } - - // - // add number to the array if its not the prefix length or part of - // an IPv4 address that's already been handled - // - - if (numberIsValid) - { - numbers[index++] = (ushort)number; - } - - // - // if we had a compressor sequence ("::") then we need to expand the - // numbers array - // - - if (compressorIndex > 0) - { - int toIndex = NumberOfLabels - 1; - int fromIndex = index - 1; - - for (int i = index - compressorIndex; i > 0; --i) - { - numbers[toIndex--] = numbers[fromIndex]; - numbers[fromIndex--] = 0; - } - } - - // - // is the address loopback? Loopback is defined as one of: - // - // 0:0:0:0:0:0:0:1 - // 0:0:0:0:0:0:127.0.0.1 == 0:0:0:0:0:0:7F00:0001 - // 0:0:0:0:0:FFFF:127.0.0.1 == 0:0:0:0:0:FFFF:7F00:0001 - // - - return ((numbers[0] == 0) - && (numbers[1] == 0) - && (numbers[2] == 0) - && (numbers[3] == 0) - && (numbers[4] == 0)) - && (((numbers[5] == 0) - && (numbers[6] == 0) - && (numbers[7] == 1)) - || (((numbers[6] == 0x7F00) - && (numbers[7] == 0x0001)) - && ((numbers[5] == 0) - || (numbers[5] == 0xFFFF)))); - } } } diff --git a/external/corefx/src/System.Reflection/tests/MemberInfoTests.cs b/external/corefx/src/System.Reflection/tests/MemberInfoTests.cs index 42986f469f..e3dd636d3d 100644 --- a/external/corefx/src/System.Reflection/tests/MemberInfoTests.cs +++ b/external/corefx/src/System.Reflection/tests/MemberInfoTests.cs @@ -100,7 +100,7 @@ namespace System.Reflection.Tests Assert.Equal(t, setter.ReflectedType); } - [Fact(Skip="Mono issue #10277")] + [Fact] public void InheritedEventAccessors() { Type t = typeof(Derived); diff --git a/external/corefx/src/System.Runtime.Extensions/src/System/IO/BufferedStream.cs b/external/corefx/src/System.Runtime.Extensions/src/System/IO/BufferedStream.cs index 5398c47ca7..2c2b853c67 100644 --- a/external/corefx/src/System.Runtime.Extensions/src/System/IO/BufferedStream.cs +++ b/external/corefx/src/System.Runtime.Extensions/src/System/IO/BufferedStream.cs @@ -226,6 +226,62 @@ namespace System.IO } } +#if MONO +#if !__MonoCS__ + // Copied from CoreFX-master (NS2.1) + public override async ValueTask DisposeAsync() + { + try + { + if (_stream != null) + { + try + { + await FlushAsync().ConfigureAwait(false); + } + finally + { + await _stream.DisposeAsync().ConfigureAwait(false); + } + } + } + finally + { + _stream = null; + _buffer = null; + } + } +#else + public override ValueTask DisposeAsync() + { + return new ValueTask(DisposeAsyncInternal()); + } + + private async Task DisposeAsyncInternal() + { + try + { + if (_stream != null) + { + try + { + await FlushAsync().ConfigureAwait(false); + } + finally + { + await _stream.DisposeAsync().ConfigureAwait(false); + } + } + } + finally + { + _stream = null; + _buffer = null; + } + } +#endif +#endif + protected override void Dispose(bool disposing) { try diff --git a/external/corefx/src/System.Runtime/ref/System.Runtime.cs.REMOVED.git-id b/external/corefx/src/System.Runtime/ref/System.Runtime.cs.REMOVED.git-id index 06dd38cc11..ede6c20ed7 100644 --- a/external/corefx/src/System.Runtime/ref/System.Runtime.cs.REMOVED.git-id +++ b/external/corefx/src/System.Runtime/ref/System.Runtime.cs.REMOVED.git-id @@ -1 +1 @@ -d216dbad749019e8aadc8a96b7a75defbaf1bd05 \ No newline at end of file +ccb7b5843a7d562a546a75638245ca289f7c332f \ No newline at end of file diff --git a/external/corefx/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt b/external/corefx/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt index df3e40e4cc..0dccf588ef 100644 --- a/external/corefx/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt +++ b/external/corefx/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt @@ -1,14 +1,28 @@ -Compat issues with assembly System.Runtime: -MembersMustExist : Member 'System.Memory.Pin()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.ReadOnlyMemory.Pin()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.Memory..ctor(System.Buffers.MemoryManager, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.Memory.CreateFromPinnedArray(T[], System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.Buffers.MemoryHandle..ctor(System.Void*, System.Runtime.InteropServices.GCHandle, System.Buffers.IPinnable)' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'System.Buffers.IMemoryOwner' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'System.Buffers.IPinnable' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'System.Buffers.MemoryManager' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.Buffers.MemoryManager.CreateMemory(System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.Buffers.MemoryManager.CreateMemory(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.ReadOnlySpan.GetPinnableReference()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'System.Span.GetPinnableReference()' does not exist in the implementation but it does exist in the contract. -Total Issues: 12 +TypesMustExist : Type 'System.ArgIterator' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'System.Range.OffsetAndLength' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Index.GetOffset(System.Int32)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Index.IsFromEnd.get()' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Memory.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Memory.Slice(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Memory.Slice(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Range..ctor(System.Index, System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Range.All.get()' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Range.EndAt(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Range.GetOffsetAndLength(System.Int32)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Range.StartAt(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.ReadOnlyMemory.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.ReadOnlyMemory.Slice(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.ReadOnlyMemory.Slice(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.ReadOnlySpan.Slice(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.ReadOnlySpan.Slice(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Span.Slice(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Span.Slice(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.String.Chars.get(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.String.Chars.get(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.String.Substring(System.Index)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.String.Substring(System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray(T[], System.Range)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Index.End.get()' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Index.FromEnd(System.Int32)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Index.FromStart(System.Int32)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'System.Index.Start.get()' does not exist in the implementation but it does exist in the contract. diff --git a/external/corefx/src/System.Runtime/tests/System.Runtime.Tests.csproj b/external/corefx/src/System.Runtime/tests/System.Runtime.Tests.csproj index 92c0e19875..999500dc6b 100644 --- a/external/corefx/src/System.Runtime/tests/System.Runtime.Tests.csproj +++ b/external/corefx/src/System.Runtime/tests/System.Runtime.Tests.csproj @@ -211,12 +211,14 @@ + + diff --git a/external/corefx/src/System.Runtime/tests/System/DateTimeOffsetTests.cs b/external/corefx/src/System.Runtime/tests/System/DateTimeOffsetTests.cs index 6a20af508d..adf674710f 100644 --- a/external/corefx/src/System.Runtime/tests/System/DateTimeOffsetTests.cs +++ b/external/corefx/src/System.Runtime/tests/System/DateTimeOffsetTests.cs @@ -1152,7 +1152,10 @@ namespace System.Tests [MemberData(nameof(ToString_WithCulture_MatchesExpected_MemberData))] public static void ToString_WithCulture_MatchesExpected(DateTimeOffset dateTimeOffset, string format, CultureInfo culture, string expected) { - Assert.Equal(expected, dateTimeOffset.ToString(format, culture)); + if (!GlobalizationMode.Invariant) + { + Assert.Equal(expected, dateTimeOffset.ToString(format, culture)); + } } } } diff --git a/external/corefx/src/System.Runtime/tests/System/DateTimeTests.cs b/external/corefx/src/System.Runtime/tests/System/DateTimeTests.cs index 73b3d79655..c88d927218 100644 --- a/external/corefx/src/System.Runtime/tests/System/DateTimeTests.cs +++ b/external/corefx/src/System.Runtime/tests/System/DateTimeTests.cs @@ -989,13 +989,16 @@ namespace System.Tests yield return new object[] { "2 2 2Z", CultureInfo.InvariantCulture, TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2002, 2, 2, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.Local) }; yield return new object[] { "#10/10/2095#\0", CultureInfo.InvariantCulture, new DateTime(2095, 10, 10, 0, 0, 0) }; - DateTime today = DateTime.Today; - var hebrewCulture = new CultureInfo("he-IL"); - hebrewCulture.DateTimeFormat.Calendar = new HebrewCalendar(); - yield return new object[] { today.ToString(hebrewCulture), hebrewCulture, today }; + if (!GlobalizationMode.Invariant) + { + DateTime today = DateTime.Today; + var hebrewCulture = new CultureInfo("he-IL"); + hebrewCulture.DateTimeFormat.Calendar = new HebrewCalendar(); + yield return new object[] { today.ToString(hebrewCulture), hebrewCulture, today }; - var mongolianCulture = new CultureInfo("mn-MN"); - yield return new object[] { today.ToString(mongolianCulture), mongolianCulture, today }; + var mongolianCulture = new CultureInfo("mn-MN"); + yield return new object[] { today.ToString(mongolianCulture), mongolianCulture, today }; + } } [Theory] @@ -1100,6 +1103,11 @@ namespace System.Tests yield return new object[] { "1234-05-06T07:00:00Z", "yyyy-MM-dd'T'HH:mm:ssFFFZ\" \"", CultureInfo.InvariantCulture, DateTimeStyles.AllowTrailingWhite, TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1234, 5, 6, 7, 0, 0, DateTimeKind.Utc), TimeZoneInfo.Local) }; yield return new object[] { "1234-05-06T07:00:00GMT", "yyyy-MM-dd'T'HH:mm:ssFFFZ\" \"", CultureInfo.InvariantCulture, DateTimeStyles.AllowTrailingWhite, TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1234, 5, 6, 7, 0, 0, DateTimeKind.Utc), TimeZoneInfo.Local) }; + if (GlobalizationMode.Invariant) + { + yield break; + } + var hebrewCulture = new CultureInfo("he-IL"); hebrewCulture.DateTimeFormat.Calendar = new HebrewCalendar(); diff --git a/external/corefx/src/System.Runtime/tests/System/DecimalTests.cs b/external/corefx/src/System.Runtime/tests/System/DecimalTests.cs index 18a281d0f9..036065e4fc 100644 --- a/external/corefx/src/System.Runtime/tests/System/DecimalTests.cs +++ b/external/corefx/src/System.Runtime/tests/System/DecimalTests.cs @@ -769,7 +769,6 @@ namespace System.Tests public static IEnumerable Remainder_Invalid_TestData() { yield return new object[] { 5m, 0m, typeof(DivideByZeroException) }; - yield return new object[] { decimal.MaxValue, 0.1m, typeof(OverflowException) }; } [Theory] diff --git a/external/corefx/src/System.Runtime/tests/System/IndexTests.cs b/external/corefx/src/System.Runtime/tests/System/IndexTests.cs new file mode 100644 index 0000000000..8f8d88083a --- /dev/null +++ b/external/corefx/src/System.Runtime/tests/System/IndexTests.cs @@ -0,0 +1,115 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Xunit; + +namespace System.Tests +{ + public static class IndexTests + { + [Fact] + public static void CreationTest() + { + Index index = new Index(1, fromEnd: false); + Assert.Equal(1, index.Value); + Assert.False(index.IsFromEnd); + + index = new Index(11, fromEnd: true); + Assert.Equal(11, index.Value); + Assert.True(index.IsFromEnd); + + index = Index.Start; + Assert.Equal(0, index.Value); + Assert.False(index.IsFromEnd); + + index = Index.End; + Assert.Equal(0, index.Value); + Assert.True(index.IsFromEnd); + + index = Index.FromStart(3); + Assert.Equal(3, index.Value); + Assert.False(index.IsFromEnd); + + index = Index.FromEnd(10); + Assert.Equal(10, index.Value); + Assert.True(index.IsFromEnd); + + AssertExtensions.Throws("value", () => new Index(-1, fromEnd: false)); + AssertExtensions.Throws("value", () => Index.FromStart(-3)); + AssertExtensions.Throws("value", () => Index.FromEnd(-1)); + } + + [Fact] + public static void GetOffsetTest() + { + Index index = Index.FromStart(3); + Assert.Equal(3, index.GetOffset(3)); + Assert.Equal(3, index.GetOffset(10)); + Assert.Equal(3, index.GetOffset(20)); + + // we don't validate the length in the GetOffset so passing short length will just return the regular calculation according to the length value. + Assert.Equal(3, index.GetOffset(2)); + + index = Index.FromEnd(3); + Assert.Equal(0, index.GetOffset(3)); + Assert.Equal(7, index.GetOffset(10)); + Assert.Equal(17, index.GetOffset(20)); + + // we don't validate the length in the GetOffset so passing short length will just return the regular calculation according to the length value. + Assert.Equal(-1, index.GetOffset(2)); + } + + [Fact] + public static void ImplicitCastTest() + { + Index index = 10; + Assert.Equal(10, index.Value); + Assert.False(index.IsFromEnd); + + AssertExtensions.Throws("value", () => index = -10 ); + } + + [Fact] + public static void EqualityTest() + { + Index index1 = 10; + Index index2 = 10; + Assert.True(index1.Equals(index2)); + Assert.True(index1.Equals((object)index2)); + + index2 = new Index(10, fromEnd: true); + Assert.False(index1.Equals(index2)); + Assert.False(index1.Equals((object)index2)); + + index2 = new Index(9, fromEnd: false); + Assert.False(index1.Equals(index2)); + Assert.False(index1.Equals((object)index2)); + } + + [Fact] + public static void HashCodeTest() + { + Index index1 = 10; + Index index2 = 10; + Assert.Equal(index1.GetHashCode(), index2.GetHashCode()); + + index2 = new Index(10, fromEnd: true); + Assert.NotEqual(index1.GetHashCode(), index2.GetHashCode()); + + index2 = new Index(99999, fromEnd: false); + Assert.NotEqual(index1.GetHashCode(), index2.GetHashCode()); + } + + [Fact] + public static void ToStringTest() + { + Index index1 = 100; + Assert.Equal(100.ToString(), index1.ToString()); + + index1 = new Index(50, fromEnd: true); + Assert.Equal("^" + 50.ToString(), index1.ToString()); + } + } +} diff --git a/external/corefx/src/System.Runtime/tests/System/RangeTests.cs b/external/corefx/src/System.Runtime/tests/System/RangeTests.cs new file mode 100644 index 0000000000..16002b8ef9 --- /dev/null +++ b/external/corefx/src/System.Runtime/tests/System/RangeTests.cs @@ -0,0 +1,107 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Xunit; + +namespace System.Tests +{ + public static class RangeTests + { + [Fact] + public static void CreationTest() + { + Range range = new Range(new Index(10, fromEnd: false), new Index(2, fromEnd: true)); + Assert.Equal(10, range.Start.Value); + Assert.False(range.Start.IsFromEnd); + Assert.Equal(2, range.End.Value); + Assert.True(range.End.IsFromEnd); + + range = Range.StartAt(new Index(7, fromEnd: false)); + Assert.Equal(7, range.Start.Value); + Assert.False(range.Start.IsFromEnd); + Assert.Equal(0, range.End.Value); + Assert.True(range.End.IsFromEnd); + + range = Range.EndAt(new Index(3, fromEnd: true)); + Assert.Equal(0, range.Start.Value); + Assert.False(range.Start.IsFromEnd); + Assert.Equal(3, range.End.Value); + Assert.True(range.End.IsFromEnd); + + range = Range.All; + Assert.Equal(0, range.Start.Value); + Assert.False(range.Start.IsFromEnd); + Assert.Equal(0, range.End.Value); + Assert.True(range.End.IsFromEnd); + } + + [Fact] + public static void GetOffsetAndLengthTest() + { + Range range = Range.StartAt(new Index(5)); + (int offset, int length) = range.GetOffsetAndLength(20); + Assert.Equal(5, offset); + Assert.Equal(15, length); + + (offset, length) = range.GetOffsetAndLength(5); + Assert.Equal(5, offset); + Assert.Equal(0, length); + + // we don't validate the length in the GetOffsetAndLength so passing negative length will just return the regular calculation according to the length value. + (offset, length) = range.GetOffsetAndLength(-10); + Assert.Equal(5, offset); + Assert.Equal(-15, length); + + Assert.Throws(() => range.GetOffsetAndLength(4)); + + range = Range.EndAt(new Index(4)); + (offset, length) = range.GetOffsetAndLength(20); + Assert.Equal(0, offset); + Assert.Equal(4, length); + Assert.Throws(() => range.GetOffsetAndLength(1)); + } + + [Fact] + public static void EqualityTest() + { + Range range1 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: false)); + Range range2 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: false)); + Assert.True(range1.Equals(range2)); + Assert.True(range1.Equals((object)range2)); + + range2 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: true)); + Assert.False(range1.Equals(range2)); + Assert.False(range1.Equals((object)range2)); + + range2 = new Range(new Index(10, fromEnd: false), new Index(21, fromEnd: false)); + Assert.False(range1.Equals(range2)); + Assert.False(range1.Equals((object)range2)); + } + + [Fact] + public static void HashCodeTest() + { + Range range1 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: false)); + Range range2 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: false)); + Assert.Equal(range1.GetHashCode(), range2.GetHashCode()); + + range2 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: true)); + Assert.NotEqual(range1.GetHashCode(), range2.GetHashCode()); + + range2 = new Range(new Index(10, fromEnd: false), new Index(21, fromEnd: false)); + Assert.NotEqual(range1.GetHashCode(), range2.GetHashCode()); + } + + [Fact] + public static void ToStringTest() + { + Range range1 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: false)); + Assert.Equal(10.ToString() + ".." + 20.ToString(), range1.ToString()); + + range1 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: true)); + Assert.Equal(10.ToString() + "..^" + 20.ToString(), range1.ToString()); + } + } +} diff --git a/external/corefx/src/System.Runtime/tests/System/Runtime/CompilerServices/RuntimeHelpersTests.netcoreapp.cs b/external/corefx/src/System.Runtime/tests/System/Runtime/CompilerServices/RuntimeHelpersTests.netcoreapp.cs index 9899fc705e..3c71a58cf8 100644 --- a/external/corefx/src/System.Runtime/tests/System/Runtime/CompilerServices/RuntimeHelpersTests.netcoreapp.cs +++ b/external/corefx/src/System.Runtime/tests/System/Runtime/CompilerServices/RuntimeHelpersTests.netcoreapp.cs @@ -36,7 +36,7 @@ namespace System.Runtime.CompilerServices.Tests else if (depth < 2048) { FillStack(depth + 1); - } + } } [Fact] @@ -80,6 +80,20 @@ namespace System.Runtime.CompilerServices.Tests Assert.True(RuntimeHelpers.IsReferenceOrContainsReferences()); } + [Fact] + public static void ArrayRangeHelperTest() + { + int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + Range range = Range.All; + Assert.Equal(a, RuntimeHelpers.GetSubArray(a, range)); + + range = new Range(Index.FromStart(1), Index.FromEnd(5)); + Assert.Equal(new int [] { 2, 3, 4, 5}, RuntimeHelpers.GetSubArray(a, range)); + + range = new Range(Index.FromStart(0), Index.FromStart(a.Length + 1)); + Assert.Throws(() => { int [] array = RuntimeHelpers.GetSubArray(a, range); }); + } + [StructLayoutAttribute(LayoutKind.Sequential)] private struct StructWithoutReferences { diff --git a/external/corefx/src/System.Runtime/tests/System/StringTests.netcoreapp.cs b/external/corefx/src/System.Runtime/tests/System/StringTests.netcoreapp.cs index 52f088e546..c8c83869d3 100644 --- a/external/corefx/src/System.Runtime/tests/System/StringTests.netcoreapp.cs +++ b/external/corefx/src/System.Runtime/tests/System/StringTests.netcoreapp.cs @@ -781,5 +781,111 @@ namespace System.Tests AssertExtensions.Throws("comparisonType", () => "foo".IndexOf('o', StringComparison.CurrentCulture - 1)); AssertExtensions.Throws("comparisonType", () => "foo".IndexOf('o', StringComparison.OrdinalIgnoreCase + 1)); } + + [Theory] + [MemberData(nameof(Concat_Strings_2_3_4_TestData))] + public static void Concat_Spans(string[] values, string expected) + { + Assert.InRange(values.Length, 2, 4); + + string result = + values.Length == 2 ? string.Concat(values[0].AsSpan(), values[1].AsSpan()) : + values.Length == 3 ? string.Concat(values[0].AsSpan(), values[1].AsSpan(), values[2].AsSpan()) : + string.Concat(values[0].AsSpan(), values[1].AsSpan(), values[2].AsSpan(), values[3].AsSpan()); + + if (result.Length == 0) + { + Assert.Same(string.Empty, result); + } + + Assert.Equal(expected, result); + } + + // [Fact] + // public static void IndexerUsingIndexTest() + // { + // Index index; + // string s = "0123456789ABCDEF"; + + // for (int i = 0; i < s.Length; i++) + // { + // index = Index.FromStart(i); + // Assert.Equal(s[i], s[index]); + + // index = Index.FromEnd(i + 1); + // Assert.Equal(s[s.Length - i - 1], s[index]); + // } + + // index = Index.FromStart(s.Length + 1); + // char c; + // Assert.Throws(() => c = s[index]); + + // index = Index.FromEnd(s.Length + 1); + // Assert.Throws(() => c = s[index]); + // } + + // [Fact] + // public static void IndexerUsingRangeTest() + // { + // Range range; + // string s = "0123456789ABCDEF"; + + // for (int i = 0; i < s.Length; i++) + // { + // range = new Range(Index.FromStart(0), Index.FromStart(i)); + // Assert.Equal(s.Substring(0, i), s[range]); + + // range = new Range(Index.FromEnd(s.Length), Index.FromEnd(i)); + // Assert.Equal(s.Substring(0, s.Length - i), s[range]); + // } + + // range = new Range(Index.FromStart(s.Length - 2), Index.FromStart(s.Length + 1)); + // string s1; + // Assert.Throws(() => s1 = s[range]); + + // range = new Range(Index.FromEnd(s.Length + 1), Index.FromEnd(0)); + // Assert.Throws(() => s1 = s[range]); + // } + + [Fact] + public static void SubstringUsingIndexTest() + { + string s = "0123456789ABCDEF"; + + for (int i = 0; i < s.Length; i++) + { + Assert.Equal(s.Substring(i), s.Substring(Index.FromStart(i))); + Assert.Equal(s.Substring(s.Length - i - 1), s.Substring(Index.FromEnd(i + 1))); + } + + // String.Substring allows the string length as a valid input. + Assert.Equal(s.Substring(s.Length), s.Substring(Index.FromStart(s.Length))); + + Assert.Throws(() => s.Substring(Index.FromStart(s.Length + 1))); + Assert.Throws(() => s.Substring(Index.FromEnd(s.Length + 1))); + } + + [Fact] + public static void SubstringUsingRangeTest() + { + string s = "0123456789ABCDEF"; + Range range; + + for (int i = 0; i < s.Length; i++) + { + range = new Range(Index.FromStart(0), Index.FromStart(i)); + Assert.Equal(s.Substring(0, i), s.Substring(range)); + + range = new Range(Index.FromEnd(s.Length), Index.FromEnd(i)); + Assert.Equal(s.Substring(0, s.Length - i), s.Substring(range)); + } + + range = new Range(Index.FromStart(s.Length - 2), Index.FromStart(s.Length + 1)); + string s1; + Assert.Throws(() => s1 = s.Substring(range)); + + range = new Range(Index.FromEnd(s.Length + 1), Index.FromEnd(0)); + Assert.Throws(() => s1 = s.Substring(range)); + } } } diff --git a/external/corefx/src/System.Runtime/tests/System/TimeSpanTests.cs b/external/corefx/src/System.Runtime/tests/System/TimeSpanTests.cs index 9efe0b0aeb..42e4e17649 100644 --- a/external/corefx/src/System.Runtime/tests/System/TimeSpanTests.cs +++ b/external/corefx/src/System.Runtime/tests/System/TimeSpanTests.cs @@ -574,9 +574,12 @@ namespace System.Tests yield return new object[] { "23:00:00", null, new TimeSpan(23, 0, 0) }; yield return new object[] { "24:00:00", null, new TimeSpan(24, 0, 0, 0) }; - // Croatia uses ',' in place of '.' - CultureInfo croatianCulture = new CultureInfo("hr-HR"); - yield return new object[] { "6:12:14:45,348", croatianCulture, new TimeSpan(6, 12, 14, 45, 348) }; + if (!GlobalizationMode.Invariant) + { + // Croatia uses ',' in place of '.' + CultureInfo croatianCulture = new CultureInfo("hr-HR"); + yield return new object[] { "6:12:14:45,348", croatianCulture, new TimeSpan(6, 12, 14, 45, 348) }; + } } [Theory] @@ -621,7 +624,11 @@ namespace System.Tests yield return new object[] { "00:00::00", null, typeof(FormatException) }; // duplicated separator yield return new object[] { "00:00:00:", null, typeof(FormatException) }; // extra separator at end yield return new object[] { "00:00:00:00:00:00:00:00", null, typeof(FormatException) }; // too many components - yield return new object[] { "6:12:14:45.3448", new CultureInfo("hr-HR"), typeof(FormatException) }; // culture that uses ',' rather than '.' + + if (!GlobalizationMode.Invariant) + { + yield return new object[] { "6:12:14:45.3448", new CultureInfo("hr-HR"), typeof(FormatException) }; // culture that uses ',' rather than '.' + } // OverflowExceptions yield return new object[] { "1:1:1.99999999", null, typeof(OverflowException) }; // overflowing fraction diff --git a/external/corefx/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/IncrementalHash.net46.cs b/external/corefx/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/IncrementalHash.net46.cs index 9c7dc0f932..47ede1f216 100644 --- a/external/corefx/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/IncrementalHash.net46.cs +++ b/external/corefx/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/IncrementalHash.net46.cs @@ -9,7 +9,7 @@ namespace System.Security.Cryptography /// /// Provides support for computing a hash or HMAC value incrementally across several segments. /// - public sealed class IncrementalHash : IDisposable + public sealed partial class IncrementalHash : IDisposable { private const int NTE_BAD_ALGID = unchecked((int)0x80090008); @@ -225,5 +225,24 @@ namespace System.Security.Cryptography throw new CryptographicException(NTE_BAD_ALGID); } + +#if MONO + public void AppendData(ReadOnlySpan data) => AppendData(data.ToArray()); + + public bool TryGetHashAndReset(Span destination, out int bytesWritten) + { + if (_disposed) + throw new ObjectDisposedException(typeof(IncrementalHash).Name); + + byte[] hash = GetHashAndReset(); + if (hash.AsSpan().TryCopyTo(destination)) + { + bytesWritten = hash.Length; + return true; + } + bytesWritten = 0; + return false; + } +#endif } } diff --git a/external/corefx/src/System.Security.Cryptography.X509Certificates/tests/TestData.cs.REMOVED.git-id b/external/corefx/src/System.Security.Cryptography.X509Certificates/tests/TestData.cs.REMOVED.git-id index 8105130e32..3d35c5a88a 100644 --- a/external/corefx/src/System.Security.Cryptography.X509Certificates/tests/TestData.cs.REMOVED.git-id +++ b/external/corefx/src/System.Security.Cryptography.X509Certificates/tests/TestData.cs.REMOVED.git-id @@ -1 +1 @@ -7aaea151234267e947c57023721bda9806555112 \ No newline at end of file +dd6699a9ed83ff8eafd194103d24d8f1afe396f0 \ No newline at end of file diff --git a/external/corefx/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/ConfiguredCancelableAsyncEnumerableTests.netcoreapp.cs b/external/corefx/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/ConfiguredCancelableAsyncEnumerableTests.netcoreapp.cs index bc2661cd4c..e692c59bc4 100644 --- a/external/corefx/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/ConfiguredCancelableAsyncEnumerableTests.netcoreapp.cs +++ b/external/corefx/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/ConfiguredCancelableAsyncEnumerableTests.netcoreapp.cs @@ -35,7 +35,7 @@ namespace System.Runtime.CompilerServices.Tests [Fact] public void Default_WithCancellation_ConfigureAwait_NoThrow() { - ConfiguredCancelableAsyncEnumerable e = TaskExtensions.WithCancellation((IAsyncEnumerable)null, default); + ConfiguredCancelableAsyncEnumerable e = ((IAsyncEnumerable)null).WithCancellation(default); e = e.ConfigureAwait(false); e = e.WithCancellation(default); Assert.Throws(() => e.GetAsyncEnumerator()); @@ -44,7 +44,7 @@ namespace System.Runtime.CompilerServices.Tests [Fact] public void Default_ConfigureAwait_WithCancellation_NoThrow() { - ConfiguredCancelableAsyncEnumerable e = TaskExtensions.ConfigureAwait((IAsyncEnumerable)null, false); + ConfiguredCancelableAsyncEnumerable e = ((IAsyncEnumerable)null).ConfigureAwait(false); e = e.WithCancellation(default); e = e.ConfigureAwait(false); Assert.Throws(() => e.GetAsyncEnumerator()); diff --git a/external/corefx/src/System.Threading.ThreadPool/tests/ThreadPoolTests.cs b/external/corefx/src/System.Threading.ThreadPool/tests/ThreadPoolTests.cs index 988635fa91..34d01a3932 100644 --- a/external/corefx/src/System.Threading.ThreadPool/tests/ThreadPoolTests.cs +++ b/external/corefx/src/System.Threading.ThreadPool/tests/ThreadPoolTests.cs @@ -250,7 +250,7 @@ namespace System.Threading.ThreadPools.Tests Assert.True(toUnregister.Unregister(threadDone)); } test(); - backgroundAsyncLocalValue = asyncLocal.Value; + Volatile.Write(ref backgroundAsyncLocalValue, asyncLocal.Value); } catch (Exception ex) { @@ -288,7 +288,7 @@ namespace System.Threading.ThreadPools.Tests }, obj); waitForBackgroundWork(false); - Assert.Equal(1, backgroundAsyncLocalValue); + Assert.Equal(1, Volatile.Read(ref backgroundAsyncLocalValue)); ThreadPool.UnsafeQueueUserWorkItem( state => @@ -300,7 +300,7 @@ namespace System.Threading.ThreadPools.Tests }, obj); waitForBackgroundWork(false); - Assert.Equal(0, backgroundAsyncLocalValue); + Assert.Equal(0, Volatile.Read(ref backgroundAsyncLocalValue)); registeredWaitHandle = ThreadPool.RegisterWaitForSingleObject( @@ -317,7 +317,7 @@ namespace System.Threading.ThreadPools.Tests UnexpectedTimeoutMilliseconds, false); waitForBackgroundWork(true); - Assert.Equal(1, backgroundAsyncLocalValue); + Assert.Equal(1, Volatile.Read(ref backgroundAsyncLocalValue)); registeredWaitHandle = ThreadPool.UnsafeRegisterWaitForSingleObject( @@ -334,7 +334,7 @@ namespace System.Threading.ThreadPools.Tests UnexpectedTimeoutMilliseconds, false); waitForBackgroundWork(true); - Assert.Equal(0, backgroundAsyncLocalValue); + Assert.Equal(0, Volatile.Read(ref backgroundAsyncLocalValue)); } [Fact] diff --git a/external/corert/src/System.Private.CoreLib/shared/System/HResults.cs b/external/corert/src/System.Private.CoreLib/shared/System/HResults.cs index 4a5ec0d635..9c8db2143c 100644 --- a/external/corert/src/System.Private.CoreLib/shared/System/HResults.cs +++ b/external/corert/src/System.Private.CoreLib/shared/System/HResults.cs @@ -27,6 +27,7 @@ namespace System { internal const int S_OK = unchecked((int)0x00000000); internal const int COR_E_ABANDONEDMUTEX = unchecked((int)0x8013152D); + internal const int COR_E_AMBIGUOUSIMPLEMENTATION = unchecked((int)0x8013106A); internal const int COR_E_AMBIGUOUSMATCH = unchecked((int)0x8000211D); internal const int COR_E_APPDOMAINUNLOADED = unchecked((int)0x80131014); internal const int COR_E_APPLICATION = unchecked((int)0x80131600); diff --git a/external/corert/src/System.Private.CoreLib/shared/System/Runtime/AmbiguousImplementationException.cs b/external/corert/src/System.Private.CoreLib/shared/System/Runtime/AmbiguousImplementationException.cs new file mode 100644 index 0000000000..1a7ef0aef8 --- /dev/null +++ b/external/corert/src/System.Private.CoreLib/shared/System/Runtime/AmbiguousImplementationException.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Globalization; +using System.Runtime.Serialization; + +namespace System.Runtime +{ + [Serializable] + public sealed class AmbiguousImplementationException : Exception + { + public AmbiguousImplementationException() + : base(SR.AmbiguousImplementationException_NullMessage) + { + HResult = HResults.COR_E_AMBIGUOUSIMPLEMENTATION; + } + + public AmbiguousImplementationException(string message) + : base(message) + { + HResult = HResults.COR_E_AMBIGUOUSIMPLEMENTATION; + } + + public AmbiguousImplementationException(string message, Exception innerException) + : base(message, innerException) + { + HResult = HResults.COR_E_AMBIGUOUSIMPLEMENTATION; + } + + private AmbiguousImplementationException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} diff --git a/external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx.REMOVED.git-id b/external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx.REMOVED.git-id index ebce8f5d4e..798bdd5a20 100644 --- a/external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx.REMOVED.git-id +++ b/external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx.REMOVED.git-id @@ -1 +1 @@ -8c132237e4c63e874b0657983009aae57d87c15c \ No newline at end of file +f161741e3e3a34ba18609f8daeb2af46bf6eda60 \ No newline at end of file diff --git a/external/corert/src/System.Private.CoreLib/src/System/Threading/CancellationTokenRegistration.cs b/external/corert/src/System.Private.CoreLib/src/System/Threading/CancellationTokenRegistration.cs index 1125b26efa..3e37533a1c 100644 --- a/external/corert/src/System.Private.CoreLib/src/System/Threading/CancellationTokenRegistration.cs +++ b/external/corert/src/System.Private.CoreLib/src/System/Threading/CancellationTokenRegistration.cs @@ -16,7 +16,7 @@ namespace System.Threading /// /// To unregister a callback, dispose the corresponding Registration instance. /// - public readonly struct CancellationTokenRegistration : IEquatable, IDisposable + public readonly partial struct CancellationTokenRegistration : IEquatable, IDisposable { private readonly CancellationCallbackInfo m_callbackInfo; private readonly SparselyPopulatedArrayAddInfo m_registrationInfo; diff --git a/external/how-to-bump-roslyn-binaries.md b/external/how-to-bump-roslyn-binaries.md new file mode 100644 index 0000000000..16145c5664 --- /dev/null +++ b/external/how-to-bump-roslyn-binaries.md @@ -0,0 +1,51 @@ +How to bump roslyn + +1. Pick a revision of roslyn to use. Ideally, use a revision that Visual Studio is using, but any revision should do. +2. Make a new folder in roslyn-binaries for this revision. Copy over the contents of the *previous folder* into this folder. +3. Make a temporary commit. +4. Find that revision in the 'roslyn compilers' nuget feed: https://dotnet.myget.org/feed/roslyn/package/vsix/7922692f-f018-45e7-8f3f-d3b7c0262841 +5. Download the vsix file and unpack it (it's a ZIP file). +6. Inside the vsix you will find lots of metadata, along with executables for this build of roslyn. We want to copy most of these into a new folder in roslyn-binaries, so... +7. Copy all the dll, exe and rsp files from the vsix into our new folder, overwriting the ones from the previous version. It's time to look at the diff. +8. The vsix contains DLLs we don't need to ship. Ideally we will not need to add any new files, but roslyn sometimes picks up new dependencies. Figuring out what to keep will require looking at what facades we ship (note that this is profile-specific - check Facades/subdirs.make) and which of these DLLs are actually used by roslyn instead of Visual Studio. +9. Remove any DLLs from the new folder that we don't need. In practice your commit should be adding 1-2 DLLs at most or something very bad happened. +10. Examine the diffs for the .rsp files. We ship our own versions of the .rsps, so we don't want to carry over the vsix versions, but we *do* want to make note of anything new they have added to the rsp files and add it to ours if necessary. +11. Add and commit your new folder. Push it to a branch and make a PR against roslyn-binaries, then get it merged. + +---- + +11. Okay, we have a new roslyn-binaries. The next step is to prepare a mono bump. Do this by updating the roslyn-binaries submodule to point to the new revision of roslyn-binaries. You can temporarily point it to your own branch for testing and run CI builds against that, just don't merge that into master. +12. Once you commit the submodule bump to your local repository, you can do test builds. **If you do test builds without committing the bump, the build process will erase the bump.** +13. Now we need to change the roslyn paths used by the build process - we're still using the older roslyn folder. We do this by changing the CSC_LOCATION and VBCS_LOCATION variables in configure.ac. They should be something like ```Microsoft.Net.Compilers/3.1.0/csc.exe```, change the version number in those paths, save, and make a local commit. Then do the full autogen, make, make install routine and do some basic tests. This should work. +14. Next, make sure the bump didn't break csi. If you managed the .rsp files correctly in the last step, it should work. This has test coverage, so just pay attention to the automated tests for it. +15. Ensure the 'Linux x64 - prefix sanity checks' lane passed on CI, even if it's currently disabled or not required. This is required for a bump. If it isn't visible on the PR statuses, manually trigger the lane using Jenkins. +16. Ensure that 'make install' output has working csc. Install to a prefix is fine. +17. Verify that the compiler server works, even if it is currently off by default. You can do this by editing your ```mcs/build/config.make``` and changing ENABLE_COMPILER_SERVER to ?=1, doing make clean, and then make -j 1. Use 'top' with the O->COMMAND=mono filter to identify whether the compiler server is being used and working. Also, for safety's sake make sure that all three of the roslyn-binaries paths in there match the expected version. +18. Double-check that you have a clean (points to roslyn-binaries master) PR ready to commit. Now it's msbuild time. + +---- + +19. Prepare a PR against mono/msbuild's xplat-master branch: +20. Modify the CompilerToolsVersion and MicrosoftNetCompilersVersion properties in ```eng/Packages.props``` to point to the same new roslyn packages. The version strings have weird textual info in them so you'll have to figure out the new version string. +21. Verify that a build of this new msbuild succeeds. +22. Verify that you can manually run the MSBuild.dll from this new build using a new source build of mono (i.e. with new roslyn installed to a prefix) +23. Get your PR merged. + +---- + +24. Now that msbuild is updated, we make a final change to the mono PR: +25. Modify ```packaging/MacSDK/msbuild.py```, updating the ```revision =``` line's commit hash to be the commit hash of your post-merge xplat-master commit. +26. Get your PR merged. + +---- + +27. Now we need to update the linux packaging and deploy new packages (this involves changing the https://github.com/mono/linux-packaging-msbuild repository) +28. import upstream xplat-master changes by giving the CI package job a URL to a tarball containing the contents of the latest xplat-master revision. +29. trigger CI lane builds to generate a new package +30. identify necessary changes to the debian/rules file for the build to succeed, if step 29 failed +31. identify any new patches required to make latest xplat-master compatible with debian, including build script changes (see above) +32. eventually the lane succeeds. you should have updated linux packages for debian and ubuntu now. + +---- + +33. Follow up with the VSfM team to make sure they know that roslyn is being bumped, it may break them on the next integration. Ensure the rest of the team knows roslyn has been bumped. Keep an eye out for any new bug reports about issues with csc or msbuild. diff --git a/external/illinker-test-assets/wasm/HelloWorld/App.cshtml b/external/illinker-test-assets/wasm/HelloWorld/App.cshtml new file mode 100644 index 0000000000..17a7599c80 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/App.cshtml @@ -0,0 +1,5 @@ + + diff --git a/external/illinker-test-assets/wasm/HelloWorld/HelloWorld.csproj b/external/illinker-test-assets/wasm/HelloWorld/HelloWorld.csproj new file mode 100644 index 0000000000..87c3944b08 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/HelloWorld.csproj @@ -0,0 +1,22 @@ + + + + netstandard2.0 + dotnet + blazor serve + + https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json; + https://dotnet.myget.org/F/blazor-dev/api/v3/index.json; + + 7.3 + false + + + + + + + + + + diff --git a/external/illinker-test-assets/wasm/HelloWorld/Pages/Counter.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Pages/Counter.cshtml new file mode 100644 index 0000000000..d04028f9b1 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Pages/Counter.cshtml @@ -0,0 +1,16 @@ +@page "/counter" + +

Counter

+ +

Current count: @currentCount

+ + + +@functions { + int currentCount = 0; + + void IncrementCount() + { + currentCount++; + } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/Pages/FetchData.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Pages/FetchData.cshtml new file mode 100644 index 0000000000..b88acb59d3 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Pages/FetchData.cshtml @@ -0,0 +1,55 @@ +@page "/fetchdata" +@inject HttpClient Http + +

Weather forecast

+ +

This component demonstrates fetching data from the server.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@functions { + WeatherForecast[] forecasts; + + protected override async Task OnInitAsync() + { + forecasts = await Http.GetJsonAsync("sample-data/weather.json"); + } + + class WeatherForecast + { + public DateTime Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF { get; set; } + + public string Summary { get; set; } + } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/Pages/Index.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Pages/Index.cshtml new file mode 100644 index 0000000000..1df55d3efa --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Pages/Index.cshtml @@ -0,0 +1,7 @@ +@page "/" + +

Hello, world!

+ +Welcome to your new app. + + diff --git a/external/illinker-test-assets/wasm/HelloWorld/Pages/_ViewImports.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Pages/_ViewImports.cshtml new file mode 100644 index 0000000000..6fd38754a2 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Pages/_ViewImports.cshtml @@ -0,0 +1 @@ +@layout MainLayout diff --git a/external/illinker-test-assets/wasm/HelloWorld/Program.cs b/external/illinker-test-assets/wasm/HelloWorld/Program.cs new file mode 100644 index 0000000000..86aabb0189 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Program.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Blazor.Hosting; + +namespace HelloWorld +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IWebAssemblyHostBuilder CreateHostBuilder(string[] args) => + BlazorWebAssemblyHost.CreateDefaultBuilder() + .UseBlazorStartup(); + } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/Shared/MainLayout.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Shared/MainLayout.cshtml new file mode 100644 index 0000000000..f64b021347 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Shared/MainLayout.cshtml @@ -0,0 +1,15 @@ +@inherits LayoutComponentBase + + + +
+
+ About +
+ +
+ @Body +
+
diff --git a/external/illinker-test-assets/wasm/HelloWorld/Shared/NavMenu.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Shared/NavMenu.cshtml new file mode 100644 index 0000000000..1bfd34f255 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Shared/NavMenu.cshtml @@ -0,0 +1,37 @@ + + +
+ +
+ +@functions { + bool collapseNavMenu = true; + + string NavMenuCssClass => collapseNavMenu ? "collapse" : null; + + void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/Shared/SurveyPrompt.cshtml b/external/illinker-test-assets/wasm/HelloWorld/Shared/SurveyPrompt.cshtml new file mode 100644 index 0000000000..5c080484c8 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Shared/SurveyPrompt.cshtml @@ -0,0 +1,15 @@ + + +@functions { + // Demonstrates how a parent component can supply parameters + [Parameter] string Title { get; set; } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/Startup.cs b/external/illinker-test-assets/wasm/HelloWorld/Startup.cs new file mode 100644 index 0000000000..c20263bfe0 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/Startup.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Components.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace HelloWorld +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + } + + public void Configure(IComponentsApplicationBuilder app) + { + app.AddComponent("app"); + } + } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/_ViewImports.cshtml b/external/illinker-test-assets/wasm/HelloWorld/_ViewImports.cshtml new file mode 100644 index 0000000000..11fe3f30d2 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/_ViewImports.cshtml @@ -0,0 +1,6 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Components.Layouts +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.JSInterop +@using HelloWorld +@using HelloWorld.Shared diff --git a/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/HelloWorld.blazor.config b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/HelloWorld.blazor.config new file mode 100644 index 0000000000..6cdea152da --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/HelloWorld.blazor.config @@ -0,0 +1,2 @@ +. +HelloWorld/ diff --git a/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json new file mode 100644 index 0000000000..54b2c1e279 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json @@ -0,0 +1 @@ +{"main":"HelloWorld.dll","entryPoint":"HelloWorld.Program::Main","assemblyReferences":["Microsoft.AspNetCore.Components.dll","Microsoft.JSInterop.dll","netstandard.dll","System.Xml.Linq.dll","System.Core.dll","System.dll","System.Numerics.dll","mscorlib.dll","System.Xml.dll","Mono.Security.dll","System.Web.Services.dll","System.Transactions.dll","System.Runtime.Serialization.dll","System.ServiceModel.Internals.dll","System.Net.Http.dll","System.ComponentModel.Composition.dll","System.IO.Compression.FileSystem.dll","System.IO.Compression.dll","System.Drawing.dll","System.Data.dll","Microsoft.Extensions.DependencyInjection.Abstractions.dll","Microsoft.AspNetCore.Blazor.dll","Microsoft.Extensions.DependencyInjection.dll","Mono.WebAssembly.Interop.dll","Microsoft.AspNetCore.Components.Browser.dll"],"cssReferences":[],"jsReferences":[],"linkerEnabled":false} \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id new file mode 100644 index 0000000000..c27ac7d3e1 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id @@ -0,0 +1 @@ +bd78d5f5acc7dde15d43f23a73683befa0032c0d \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js new file mode 100755 index 0000000000..b38cdbc26e --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js @@ -0,0 +1 @@ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=56)}([,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(22),o={};t.attachRootComponentToElement=function(e,t,n){var a=document.querySelector(t);if(!a)throw new Error("Could not find any element matching selector '"+t+"'.");var i=o[e];i||(i=o[e]=new r.BrowserRenderer(e)),function(e){for(var t;t=e.firstChild;)e.removeChild(t)}(a),i.attachRootComponentToElement(n,a)},t.renderBatch=function(e,t){var n=o[e];if(!n)throw new Error("There is no browser renderer with ID "+e+".");for(var r=t.arrayRangeReader,a=t.updatedComponents(),i=r.values(a),u=r.count(a),l=t.referenceFrames(),s=r.values(l),c=t.diffReader,f=0;f0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0))throw new Error("Not implemented: inserting non-empty logical container");if(i(a))throw new Error("Not implemented: moving existing logical children");var l=u(t);if(n0)throw new Error("New logical elements must start empty");return e[r]=[],e},t.createAndInsertLogicalContainer=function(e,t){var n=document.createComment("!");return a(n,e,t),n},t.insertLogicalChild=a,t.removeLogicalChild=function e(t,n){var r=u(t).splice(n,1)[0];if(r instanceof Comment)for(var o=u(r);o.length>0;)e(r,0);var a=r;a.parentNode.removeChild(a)},t.getLogicalParent=i,t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===function(e){if(e instanceof Element)return e;if(e instanceof Comment)return e.parentNode;throw new Error("Not a valid logical element")}(e).namespaceURI}},function(e,t,n){"use strict";var r=this&&this.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]-1?a.substring(0,u):"",s=u>-1?a.substring(u+1):a,c=t.monoPlatform.findMethod(e,l,s,i);t.monoPlatform.callMethod(c,null,r)},callMethod:function(e,n,r){if(r.length>4)throw new Error("Currently, MonoPlatform supports passing a maximum of 4 arguments from JS to .NET. You tried to pass "+r.length+".");var o=Module.stackSave();try{for(var a=Module.stackAlloc(r.length),u=Module.stackAlloc(4),l=0;l0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1] +``` + +#### Using Open Iconic's SVG Sprite + +Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. + +Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* + +``` + + + +``` + +Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. + +``` +.icon { + width: 16px; + height: 16px; +} +``` + +Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. + +``` +.icon-account-login { + fill: #f00; +} +``` + +To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). + +#### Using Open Iconic's Icon Font... + + +##### …with Bootstrap + +You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` + + +``` + +``` + + +``` + +``` + +##### …with Foundation + +You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` + +``` + +``` + + +``` + +``` + +##### …on its own + +You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` + +``` + +``` + +``` + +``` + + +## License + +### Icons + +All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). + +### Fonts + +All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css new file mode 100644 index 0000000000..4664f2e8ca --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css @@ -0,0 +1 @@ +@font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.eot b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.eot new file mode 100644 index 0000000000000000000000000000000000000000..f98177dbf711863eff7c90f84d5d419d02d99ba8 GIT binary patch literal 28196 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 f%X4~$E_2;^J#ifP;CI~=<%5iE_!YyhznS + + + + +Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014 + By P.J. Onori +Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fab604866cd5e55ef4525ea22e420c411f510b01 GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.woff b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/open-iconic/font/fonts/open-iconic.woff new file mode 100644 index 0000000000000000000000000000000000000000..f9309988aeab3868040d3b322658902098eba27f GIT binary patch literal 14984 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/site.css b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/site.css new file mode 100644 index 0000000000..e4526312ac --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/css/site.css @@ -0,0 +1,123 @@ +@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); + +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +app { + position: relative; + display: flex; + flex-direction: column; +} + +.top-row { + height: 3.5rem; + display: flex; + align-items: center; +} + +.main { + flex: 1; +} + + .main .top-row { + background-color: #e6e6e6; + border-bottom: 1px solid #d6d5d5; + } + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + + .sidebar .top-row { + background-color: rgba(0,0,0,0.4); + } + + .sidebar .navbar-brand { + font-size: 1.1rem; + } + + .sidebar .oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; + top: -2px; + } + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + + .nav-item a.active { + background-color: rgba(255,255,255,0.25); + color: white; + } + + .nav-item a:hover { + background-color: rgba(255,255,255,0.1); + color: white; + } + +.content { + padding-top: 1.1rem; +} + +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +@media (max-width: 767.98px) { + .main .top-row { + display: none; + } +} + +@media (min-width: 768px) { + app { + flex-direction: row; + } + + .sidebar { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .main .top-row { + position: sticky; + top: 0; + } + + .main > div { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } + + .navbar-toggler { + display: none; + } + + .sidebar .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } +} diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/index.html b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/index.html new file mode 100644 index 0000000000..1d145495e7 --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/index.html @@ -0,0 +1,16 @@ + + + + + + HelloWorld + + + + + + Loading... + + + + diff --git a/external/illinker-test-assets/wasm/HelloWorld/wwwroot/sample-data/weather.json b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/sample-data/weather.json new file mode 100644 index 0000000000..df933ba96b --- /dev/null +++ b/external/illinker-test-assets/wasm/HelloWorld/wwwroot/sample-data/weather.json @@ -0,0 +1,32 @@ +[ + { + "date": "2018-05-06", + "temperatureC": 1, + "summary": "Freezing", + "temperatureF": 33 + }, + { + "date": "2018-05-07", + "temperatureC": 14, + "summary": "Bracing", + "temperatureF": 57 + }, + { + "date": "2018-05-08", + "temperatureC": -13, + "summary": "Freezing", + "temperatureF": 9 + }, + { + "date": "2018-05-09", + "temperatureC": -16, + "summary": "Balmy", + "temperatureF": 4 + }, + { + "date": "2018-05-10", + "temperatureC": -2, + "summary": "Chilly", + "temperatureF": 29 + } +] diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml new file mode 100644 index 0000000000..7f4cf93fbb --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml @@ -0,0 +1 @@ + diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs new file mode 100644 index 0000000000..bdf98fd388 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs @@ -0,0 +1,17 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.JSInterop; + +namespace Microsoft.AspNetCore.Blazor.E2EPerformance +{ + public static class BenchmarkEvent + { + public static void Send(IJSRuntime jsRuntime, string name) + { + ((IJSInProcessRuntime)jsRuntime).Invoke( + "receiveBenchmarkEvent", + name); + } + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj new file mode 100644 index 0000000000..a488d15a57 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj @@ -0,0 +1,11 @@ + + + + netstandard2.0 + true + + + + + + diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml new file mode 100644 index 0000000000..870c79b1a4 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml @@ -0,0 +1,11 @@ +@page "/" +@inject IJSRuntime JSRuntime + +Hello, world! + +@functions { + protected override void OnAfterRender() + { + BenchmarkEvent.Send(JSRuntime, "Rendered index.cshtml"); + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml new file mode 100644 index 0000000000..9deb601126 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml @@ -0,0 +1,98 @@ +@page "/json" +@inject IJSRuntime JSRuntime + +

JSON performance

+ +

+ + + + +

@serializedValue

+@if (serializedValue != null) +{ +

Serialized length: @serializedValue.Length chars

+} + + + + +@if (numPeopleDeserialized > 0) +{ +

Deserialized @numPeopleDeserialized people

+} + +@functions { + static string[] Clearances = new[] { "Alpha", "Beta", "Gamma", "Delta", "Epsilon" }; + Person smallOrgChart = GenerateOrgChart(1, 4); + Person largeOrgChart = GenerateOrgChart(5, 4); + string smallOrgChartJson; + string largeOrgChartJson; + int numPeopleDeserialized; + + protected override void OnInit() + { + smallOrgChartJson = Microsoft.JSInterop.Json.Serialize(smallOrgChart); + largeOrgChartJson = Microsoft.JSInterop.Json.Serialize(largeOrgChart); + } + + protected override void OnAfterRender() + { + BenchmarkEvent.Send(JSRuntime, "Finished JSON processing"); + } + + string serializedValue; + + void Reset() + { + serializedValue = null; + numPeopleDeserialized = 0; + } + + void SerializeSmall() + => serializedValue = Microsoft.JSInterop.Json.Serialize(smallOrgChart); + + void SerializeLarge() + => serializedValue = Microsoft.JSInterop.Json.Serialize(largeOrgChart); + + void DeserializeSmall() + => numPeopleDeserialized = Deserialize(smallOrgChartJson); + + void DeserializeLarge() + => numPeopleDeserialized = Deserialize(largeOrgChartJson); + + static Person GenerateOrgChart(int totalDepth, int numDescendantsPerNode, int thisDepth = 0, string namePrefix = null, int siblingIndex = 0) + { + var name = $"{namePrefix ?? "CEO"} - Subordinate {siblingIndex}"; + var rng = new Random(0); + return new Person + { + Name = name, + IsAdmin = siblingIndex % 2 == 0, + Salary = 10000000 / (thisDepth + 1), + SecurityClearances = Clearances + .ToDictionary(c => c, _ => (object)(rng.Next(0, 2) == 0)), + Subordinates = Enumerable.Range(0, thisDepth < totalDepth ? numDescendantsPerNode : 0) + .Select(index => GenerateOrgChart(totalDepth, numDescendantsPerNode, thisDepth + 1, name, index)) + .ToList() + }; + } + + static int Deserialize(string json) + { + var ceo = Microsoft.JSInterop.Json.Deserialize(json); + return CountPeople(ceo); + } + + static int CountPeople(Person root) + => 1 + (root.Subordinates?.Sum(CountPeople) ?? 0); + + class Person + { + public string Name { get; set; } + public int Salary { get; set; } + public bool IsAdmin { get; set; } + public List Subordinates { get; set; } + public Dictionary SecurityClearances { get; set; } + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml new file mode 100644 index 0000000000..0a9ad97997 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml @@ -0,0 +1,75 @@ +@page "/renderlist" +@inject IJSRuntime JSRuntime + +

Render List

+ +Number of items: + + + +@if (show) +{ + + + + + + + + + + + @foreach (var forecast in GenerateForecasts(numItems)) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.DateFormatted@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@functions { + int numItems = 10; + bool show = false; + + void Hide() + { + show = false; + } + + void Show() + { + show = true; + } + + protected override void OnAfterRender() + { + BenchmarkEvent.Send(JSRuntime, "Finished rendering list"); + } + + static IEnumerable GenerateForecasts(int count) + { + for (var i = 0; i < count; i++) + { + yield return new WeatherForecast + { + DateFormatted = DateTime.Now.AddDays(i).ToShortDateString(), + TemperatureC = i % 100, + TemperatureF = (int)((i % 100) * 1.8) + 32, + Summary = $"Item {i}", + }; + } + } + + class WeatherForecast + { + public string DateFormatted { get; set; } + public int TemperatureC { get; set; } + public int TemperatureF { get; set; } + public string Summary { get; set; } + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml new file mode 100644 index 0000000000..0f24edaf1d --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml @@ -0,0 +1 @@ +@layout MainLayout diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs new file mode 100644 index 0000000000..f498eb0222 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Blazor.Hosting; + +namespace Microsoft.AspNetCore.Blazor.E2EPerformance +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IWebAssemblyHostBuilder CreateHostBuilder(string[] args) => + BlazorWebAssemblyHost.CreateDefaultBuilder() + .UseBlazorStartup(); + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml new file mode 100644 index 0000000000..259daf45d6 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml @@ -0,0 +1,13 @@ +@inherits LayoutComponentBase + +

E2E Performance

+ +Home | +RenderList | +JSON + +
+ +
+ @Body +
diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs new file mode 100644 index 0000000000..7422cd806c --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs @@ -0,0 +1,20 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Components.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Blazor.E2EPerformance +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + } + + public void Configure(IComponentsApplicationBuilder app) + { + app.AddComponent("app"); + } + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml new file mode 100644 index 0000000000..aaba22f624 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml @@ -0,0 +1,6 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Components.Layouts +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.JSInterop +@using Microsoft.AspNetCore.Blazor.E2EPerformance +@using Microsoft.AspNetCore.Blazor.E2EPerformance.Shared diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build.REMOVED.git-id b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build.REMOVED.git-id new file mode 100644 index 0000000000..ce3561b962 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build.REMOVED.git-id @@ -0,0 +1 @@ +5c5aef125386836c2ebf47d34f070f750dde0809 \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config new file mode 100644 index 0000000000000000000000000000000000000000..92f028a5285c96baa08c0d92b6d5f1217bca3b66 GIT binary patch literal 518 zcmcJM%?biB420*r57UZAZ~h$>L3{w$t)lFYbaxSac=bya@!)kS4b3E(Ow#AWYo}I0 z5$jd*y6LQ1C%mm1^+XP!UQ;rzTJ!ESClV9drnpZ?MZBRlaJ$4egK@8W%JyIZv;%25 z#$!EK^gF=P;59mey1%`ge%YLs8gn=BM5;_r1#|sTI|QqP+jd}DFUpjsO?fTQkh3Y< tnN4qV*_5>kY{ZV4X*AHR4*rsp(W|HL`)5qg8MM#@EaC++im%dN^aXAQVW9v3 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c53d541c00c49d92689e91ef5133c394ae49ee57 GIT binary patch literal 13168 zcma)i2V4}(viIzgmzzA!ezS0nhkL*K?tAmwn(lvhS9NtyO-)w;LSGXB0U!YOA_3`|G6L=+DkO5! z0N?{bV8sI@&TICz*tT_$dhkFT0ssy8000Lur#{9DiE=`NRbU)!!^O54>H||?{e)M| zP(vAP(;@%>E&;F);p&bR7GEw`?%E!u5=UO8$j3X!cO8b9fdT-&FL<^Dt1PUlYaDXRZ*#eg4P$=L9#Q~;ppui3e4zPy{1t{@w00c1{G*G~R1_xlGhXOM6I6yZm6j)`&0U+E^fP)(cu)Y8V!Y|+e zM0`+yhYxHA?7^AlK-xah69-5JXUhfE{_htq@DaQ1e=a;Af(Q@rfZ+krAfgA zNRA-6frJ4m5Tpo@?tql|hX>RJ#5rehAvi}FNVOm}g7g}sE|B^`8U<~A|}0UMzJ@gGbLVw^J=yI?%fs{S62-CX=L7;7u!pcVYxkL9O6gFk>qLURUl zf&H{+Fm^oM8H}}G`ZJgc#0>w28UGD4{TpUJgZDxHb0CI-8e%W(d@LZwS`YSO2MK-# z^PIH((=QHUjx+r?!S(!&k3kVkAaR2IxPQqb0>^Xx8|FTPvGbolgRu{Y_Y9^7u^>o) z%fr5(LT4}`SQkEnvHjS0@$d22e$g`++b?zoWBV_j!PtK68qe}yI)kzO5@#@$U+Rp$ z*!N%h494!K+!>6u7kQBWmXDQp#VExpqVci4P6GDJ=2zExS6zr1)9WB_V0mXWMQjkuq z|5O@Q7S>v^PnZTITA&z51ANvOKn@6y3TjA)`wYB`;f;d#AmX3ky@`Sjf(vX?N`QB7 z8YA$2gWd!~o z@c}~eRtfe}=WF#I17= zquy-m{L)Bd))NRz3FNSMxAS&$Kw;1v(t#YphG+*bw6Lp#FZg{F)_3>zvU3ntM0@Bs zV3a^zh50z7Ih-*V545zfu$PUmkP{N)>}~4}GTFJKFrXA6J9jr>8?*TT$LJI-&zG~?8Ao;6G5Of zP(o$^g744y-?UJ7M`OU9$AN@)O`J9*i-3EBM*b7#YSoHm)?|FE`A<)cn(Nh~ue z?O@M7j`1$nM!^jixOIg7o*Ot1C8Pu(P=D~?0a2hJz3?AZ_-E^c5Z*{vdj~I`f5xf! zfln8WbVs3ulpQ=AQ1;;d_-mkUI@n>rMtn&49wY(|)5q9&VZ1&5CzT_v!BbyZtp-Ue z8PS@s7C(vYoOmkl(_~Ft*?%SL7j2-$J0k3-4njf%zOB%cV-$n}tg}D~Nlw()_eWzK z+?Y-aAtiTL*VFmYLTU~u2QQ=@@n2n9NR%htUv&d#F9#cYa94#4Y|t)fwtp6N#tQyf zJo#U2pveoVgQot!ZkCpfzq>aE{lAXW14n^ci2ld<|DzQO={wtaIoPv9BB~$}&mj>* zkcb&b#115q781z~iPQ$)2}syiNTfI3H5(@fG>HcISp2}vcgDE6GW;idjqHx>htC|S zLtk!mRI()pPq`XpTgqL%q%Mk(sV`ZsE6AN;uncR*x+4V-P$Zl~m;>ck|_@IV+Gyga z?H%Ag?nryME=ti6e6#hirsT!LdouQv1IzVqub)0Ris#Ry0&tE~Hc%+?%#t~HWlqEd z!-8Qarca0m0VMx2ePT_tJLAfgmZ`!XUEpq`d3g_`N+-tY2HQ2Yl-Puy=&QN zu<03wTRI!yXQ$lgy8FB;MaZ(TR=JTFAB3u27;?@_BS16d{B_Bl!l!(8!d2Y?W0MwM z-73F!`!;P~x||Dmx=PTRlkV==vhTQ6r>;HpR(aw)M6%U-EWPdHtNicMYyP90xoO0?^kNRcn{Ke+!oG7s9FblyJf6frBGS_a>d~+Qf8tNLZ)d3obXm=N)qkrn=<)ITb0m zDIs?DRJ~C>cVwd$zR{*wi{F;ITDwdcL(dg`r?NOtjF*8~r5j_caIE%jw2L140O$VT)sDNzq&w{Y6|j8hZ)`#qw^eAF-DZO1-4m0w4q5CulsbGqD#F@Og-+S4^A9b2pf7}0dw>v>B zd{VW|jMAl9)1{O!Q)pCn*uVo%D0`@+h%rRtU0Ucd9(`QF5Xo)m`uY942{Y`{PD_08 z0TjU;lOdrxv2DiAHwmX-G zqOiRqL-WmrWqy^cb_%X;O$xa1FEN>QGkcf4NVc!oiA!V3cWd0Wj;5{OD31R$_&mvfa5xuHB{=nYwh!H`P^Q-A zd2yX(jr!BXQ}w0qBgCJWE^f=tY#6Q|x~J&ZBd$HSC{*~uV=o6wHjalC2fnWpY)6d+ z8!^jtlt0WU`stt1D$<3bzID|vv-?JJ0e5exv&B`uCi>&s2EETlOEO9YwSH2{&A7e1 zFqN=nPWD}HFHo~$>v@xt%+EkO)MtI-?3$~3tA>>s#<%*e-QpdCaeh_S$YI{r=^` zbFtCBY@XEdP_8>s<8H77-hLHI@>hy!%9Y&DjXK}->806K$Qa)%DWqqp81c8fR?8Nl ze}sEMMAQJcua@THc64*6lJ9F^KBF=BQ^Q9>_=K6>5#2A*50}F$UmRGy;jRxAeR!cS zPQ8Zpms_))=w)~3X@>ok+55&UcDXu@&)%Ufy7iW8_(jF5dG|1W;f#8Mh$|~)4U`VA z^|{}Q99hbnWVA7%y4ee3pD=z@*-HL_eqapE0*xJa>)unD(kpx=Iw?+9$O7XWvR2Q| z>MccO8eQZd6Qm+Xt}Ca$(M3@)i@g+ar$rUm;kpTJTevmP`h*oyNSly#cB#4M{5(SC ze6pYn+_t!A(0-HGUcm5O?yZBoC8i~dSEUX9ez&;?Ij2hYs*%ze($52~tX!s#*eF`b zEBhWNZ1ng3=9%@xCPI$r$6uj3r1*Q9X$1d zzdw!KCud!-1w8SBKk$tEZ!M>dU^H{eNCuoEfr6)HFwlgCf^(d*{b6Q283)1>iQw_} z&yfFL^1rsQ!v2d`@YsE-;u*2{(A)Q*_nff#2?z)1lvS}#Srtq~V87}ou9^pImHEq6 zp9~WQ8|a~g1OO8hly`b|0hBJ0U~?x*k|%|P%xNJ{0_G?H06bkOf=r4~LUw=w3Xs6S zOh;G+0HO28WrNT`NGTu?NVo|k+!`8z3#A1^NQfRdTn;-2IGhMO2QGx14uYLQ$b1Rg^i3ZQP|LrRqD*`7NfAgN5H4*LW`Ld~#yss(7t97F) z_t)W+Mr!Ay+Q#^ZtaIQ7WgA@A{U|~a(qAd5lBteg*J@dGDgIp;N{c#~XDBCoPg9nv z$tx@W>ATQbDP(5jMwlSE#^z?z_x+}R*4}Z>h}kh7snr`P9lNTCk9v{`^xk>5!S zlH^z$Rei)3cwLY2v3;_U$5P1bl8Z+CIs6`o2NG(g%T@n2^lt5n}fpCxEK{S6 z*15A3exAH)7~fCUOn9gXRZ8E(u=qhR^lH*l=TAfA%Y%fhZF97A5_zjd{)WE$@XVlA zw4wg`2v-x5Tc0yUz&M2nY0deYJu8=#$v5AC%qV9uv*zWS@UgvRO^+%)GP7fu84Hh( zI%&4#J+pdo6;pBPM$tM~ysn`?WEi=`{z^&Hk8G4X2pnn7)4G_y_QmmDQUj+!)eCW* zRyJbZcX4;0(Z?qy3}g)tm^O*`#L%GJV`!M@x9N@$svM&(q#XnXNK-9Z!TOIh@im6^ zdGR@>|&DlT5hOgQBzPEblizMw*RHk}D&=>d5U1Nwqi<-;`RH z<6(-GkdPHkO@zx%@INc}e#$*3cV}^3W$K|vYLW<{(H4b#tN&Mh!p^O2+bh0>XwAT7 zbM7|156#4-1kANFImT!!*2Url2P19_<*;++qo#F%Pn1Z8!r+l6MxV02X4dgMvo>ul@&gC1)HF0UemUVFtv& zz#R|F=h|Rjb+C@FZ;e%+NGN@iS z8KQd1r*=An8qZ0i`YBRBMH=iUjT+}AuqhN)0CE}Bng~h-?gAdTG+zilE|f4V0=q2` zGJgnw<1Rq~`al8Kch;ULQ1#>-y72;>68L^&TZArT=(Fc^2U zb@f-ofLVB3Z!kUwohg|xkjS4XoOn4=I?*)I9FBQxE`&p|i4;(h)Mq-L{S@i*L)&<5 zPuy|&b72FSAWc{ss2d#<)9SqdyyLkRdEj3iC#TVHW%}jFb6SD5U4$_*cvb z_LyVy0$5d~;Z9(N-^Nv1`mf;cuRurWFU3!TM=vJ_j4BwBJAlEC%OCA|IR3|_atOfx zj8{gYJzQ=4bwGBw9GruL*8+y)ZhI3?*}>M^i407afLV%@%>uUwPY;{9AXoIjM$*_| zPRI$Yu>Plr?tbX~$oqHhKfIpL7-=l|$Y*_}wOZJEq`J0t_^#ov-So6* z6y9K;)j5ltz|9v^$)%sWQW-ge@P56fVGpc8D8sBnbLb|5v1X~I3tG%vbS~3ik#iiBi<_xKZ9?=T8Hdd$Ws9dOZWKYOWQ&m> z5*k~X&@;e=`rRv#^0h@O0|eydL4x zsRM4n6*lIJ1s_$i`f`PFP0a4ptX^OI$z>^X^nC7W-_GnnaLRF)V%o^t?Pr1it)e!2gM z@-{%TIt)$9WpLM&SvHsC4oVt!AWZ9i!s?}D{C_kJy2$B-=ufX zMhO3JMi|+h!Vb@-&Iug}8Sr~kEu6ZB#^VUK*(1qg>Dr%`-2PoPIY|MJ^t`+(0cm5^FqyKYbQ!FgUh~ed z>1os9CzWZY$6ev%ExW0u5OJQ)WUKq5xkd}8nRH2vrxF!}XZ;64H;F_`hbQm(``1^c zW**<3nxwt~&G70_5F(8-#bvz0Ks+%>Ow7v19%fci@H&^?)Tm4^f%ie)!iX#EzC+5&Ftefws>3 zHwHfSL5({hqE#4upU*WiR%=I=!W9ZHj7ICZL<$`9E;)rc-n}T!(_o!8H#A_(l=n>E z2ya?aC_7A5kc`bKhNL^A{Z?(*ZxRf%1r9qYs-gvr;pRp!qQm7m;-X>YeU5>2|2754P2 zdlr{GT8SzCY23iUkC^k;35ljbpGz^Hg`@qw{bOy8nJLaBhyE{So<;;$#8;@4>4?&c z$x=~=o|m}oYDTXY;s~U@4{er@hIfCsZSVmO0KKMe=t*h1;~c9;g}zQbt|AOLL>d`7 zh+&j8a){_l$d`>N%Ab&_u2kcs;UdQ4L)PvvH<3HYi<$2UNWS?GOZEF#|Kg*=Q0dKU zzixVu#8#b~&KeJi=NHv=V zR`zsCt6MJ5xcunI4(Xrvoz|(mq=ayO-LO!1=vKTGmp8JyFSH?jBv-r?VClQq+VJ(> zbdK>yq(nERHjTR$9I8mW*SnBy{5?Cgn4>M5>PjN!O_=0#b1n5Cg}s&>e8kr-b9!BN zo#NL^TSZ)ZragIONA~+>-CLG?gydsJ>kuarS=uf2$*=Vf!i^E$l*+#aO`FqUdGbQz zmknm#$*Pp>o9=1eV!wanUN|pUFi!s?=fX|qw?8k5!7ZfT-~QxZps-aO&lCTq(sQDn zmv*kW$BGZ-A0l^M6Zf%lc;TkqoZT8HY5otRSI6GP8R{EUU0fp>vm&B5yDDBR*uQ}$ z_>t7ct;Det=pOj(e^1dA(bMx_3PVMNwzRZx-NiGG(cB_x!C{B8b+M2Kd1c`Cv_y9i zcya<|7kr;_^&W{M6cVoolnd88s;>4Ex;;0h74jpCE%@>@c>a*Bq(OTgqQ;=|?&e0) zRQ7iiXPn?xH4A z?YQ%>%kHW+&Wo!R^{;n&JA{7Cs_2t$6vdM=sBNQvAK`23IFWlBk#5ZRP=2&hB{6qU zFx{eN5-VeRe*C`EtwAL4NqGf@f|}DnQml#N^PSl{j+PB}2t!_i=RJa*f<&~BZJ{IM zzwxD>{Wyq{Xwoced~1@vA#YyxOoQL4@@6*%qxm-9)&PUA;oYy$>HP*z?;OR2V?{2f z@oZI+=}>30(TCe#36%4f8D)Z$_iO{*-t1HH9Eb8;o%?NEJ!#5Xu<&>|`)+2cv3hfU+@-mVt zAgObM1ymFtU+t{UU)GB^)S5QO$qcr6m`kK9U9#1E54Nv0F}qpGQFk~`n0-WsKW(%$ zx*%Tvz}kVKj@gq7BVFk=k@H! zkt%&(5Uj#138X^WrF9*V4TBWHs*Yy;4<3?u5bE)KJNgCqRTq$ZOYcBqOM(-sF&9%m zZ06Iw`qVZZ(YlVJDETHUrIkQ@Is27`%JTKFDod$;^IC|uu++7BZQ0cC)rQvZ3*Ti7 zj=Z5A|2*%gyRmE^S2NW9s@^Rdv8b)YhthtmqP28Lj<`!+DoL1myon|%y@4v((}t~1_j^9|4ffC z&VQ!`^yl5YRF?j91XBIPH962LwEWT>D#@xQo$uRN;>*M(TYVE+YT$(I4=gjO!VZi8lEO@)3mb=gIx=)K1zcCMhUsUE&@S|K{&p?{!B= zfty3jS6|mvGP*^pcktOd9V+WR^%W9KFwgpGZh^L?i!n{iZJKt^ggPDmqr~&oVq-_K zk~_5cTU3-!4iR=;$2876oz0)zalW&X?wI7@-+6xZc*r<5q1guV)O>~fkSgTi7<8kt zx~BQ5#P@O|zvyr^OdP}b3PPFP%h8B!$pbNy5_#*KK>m#?AHsujHrrm{lOIczKQ2na z>UD4v@>a}!6X8L>c426V7gF4uH|0F9xH_>$Mw@9%B47Jcf?w5$q-0D=#QOL_s^dJ2 zgdm_xOMepas8l5gX`X}1X^lV|@{o}ov=5c~$Y;23SvfE5tx1=d#pWkATfKKcJR96+ zZg|13B`=#u^hBwwWbcwW_XnT8?PH$l81%EAd^KM0MLIG8#E+vMX>96P>WQ=PnSoGw*cpSJtn)41j3Z#KIB zF9Y{~`CRAJzz?o0zN-37wHc{fqA>&CiII_!r%A?W2~Vg+STeu8QWW*k5zL47nwqo6r%ca-vBDS6*~KfYj(rLltdt) zifdKo_OcB9%&(gQUwHE05VtlNdMe-jX^f{g!9I0SzUGi4m34gi<}XT&v3k{mAL|t{ z9T7NV@0tm}TtQ4Sr4(sGp53^p3*(NSG*dU_?P)Bt48fP85z9X}5>mu@?I-=5d>6SE z^1Xiey*3VBd6L^Y?~!4?T1b|AF3tK8D}2 zrH~cyk=KJMoJpTtJw(T-tz_#O-0u~Pk$_5MmLNy`%{$CcE)VJ87uDDiS{uR~#|Zwl z^6Dgi^J{DjzXPv+*M^55j9X7%^Da%LH1D;-^^6t6HT_!0dPOmICtOFlEO)4S2M>?p zxy54e@4GIEwk?$AoZGVnWg!aOdnH@Xvr=jgUyLS^+LCh1F-9_^R`4!-DfZe|W6#xG zpfYjhn-t?spm_f{Ml3V6&~tunjvg?9 z#WTX>DShGG-@~VfJ}1XMj0(B=E*_U>!$In{klcAqg(SrQ;r>7i24n?f5>@UinJi@y zRa8Fu;;WUuKXXD8RR8Xp-ck&WjN*>Kh(g?o+9R9Tl%u~jm+JGDH>;W+DvX0$$r6zp5P*B z2SXw^i-@;!$g!4W;%t9c59_zXvYnXq+G=JPUaiN*XVLeG_%(Zd-)}YFQRk|7tMlV- zpxO8FQiUnD;;3w;itI*O{@*{-EjQMwj|02~Z852XoHdKVJVwWv@B)s5?|@){^+Vd z{C@JoP}Zybc~gh$ZMlXQJ-7PSvHwYP=2{&jpM1O zTi`>Rn#mA4%I8UGF>3;pqTWta?5P8CB;?NzWLZ%t*7^(iJqk`6sY%#8kP)W@0qoWlkib+W%V8^>W|Ul1|AtX>s-rl$8-z6%IvbTh+3|k z*oW~$LX?6FhIcHMg>(1zuSIGh-JF|%se20|m`qppGWmSXuZLE)6{fdjmTeO}i=YM> zIhWGa1>JAeG!K5v@Lyb|%8pRFC}b`ZI)BU!NSR}@+)Sexgae>WW|v`{NkVoEROMOo z<;l?P?VUA?+gGUZA5~Ldz}JzSO1?xrIx20yVV1sJZS_4QQm0D(ZlHdI`wFhMkoje3 zJ4gNg)K~|5;kUu)nxz+X-lE_5&uc7Qzd`QV!M&u%8=2Pa{-)Z@;akR>Rug+>FB{L# ztAq9&{?^0ue69hFM*gNRhrYjdJ2u_pmeDjI>b&$-Hj&a=BxOIn;_Abyimgys%$ySYS>B^f;}mz$-hGy!EvP(W`UR zcit_`QnQC2ErXfzYy%50sYVmrUs*MW$6A$q9@nH;1JBUB*ykzi<9l)K;|56So$Lu6 z%F?~B7atKjYpck#j5kW{PN9P;hXqM3=xDZSw*t*+pC~n(iKH%8rQX!|+$eUgD@w2> zEE9?IhDpb;(fL#2&!6~mxG9=Ut!h4f6m=YEwHQLJwR7(io z^31cxs6L}Tiz@m0TSF@-4dIlTJapA3V1zXv+##K_xnv-oFQBPzeB8gB|lZD)fiwx22e z-}#qXSB5#vWVS<1{hIUf-^lMD@(W(spzmYs<|B}M&a3G3ikWZZSij{r=M&!dcbAel za}IYS?m4l&lJPh1_0$yn;Cd)psE@N5z1;XQw8t~jXZ#4H9+we?b3d^D0IZYrqpR^hzpC?6wV$8QZdsSLg4+VDZ9Aat_8x{Cn3l zdf6fz{J>;cc8WRHygFz1X^akrG~Q~!6-*fQ6h|7Lrj=A(wmf%Ou)R8-zH!Z)Wj2_M zH?87F+c&D^#n6ytJ~o<+sn58BBrDmx=*9gjB+d)O4a?s~bD!wxZ|Q1z;`x+`@2TpC zmVHBLB#!QJDu(cHn2V$`;PiQQml&xQ(z(C%5Nt0lAO4!BUx?;l@kyd2?P=kRaCoOavkbMH5BgnrY(;VOyAaKsve41A|zM5kr#*- z7|f7Ex_pMhF+)By*Pt5fmx9A0M2Ef#GS=1L&D%2$m=Y^M^H0hr8D6}tvm z5u9eAGq%n9dVD9oSAX~%)wK>roEPFLMR&#gMd-dQ(9_8pA%OZD8j&qVNUugE@7GI} zET54@;UZ40`nH=r&upEJGetMUq$uTUpN&UGtg&xWGt5d76o1_ClHWfs=)4m`C8M?- zYN?A;mK`fbnZ?03<@LBXC%^xRd>KC@CC=4^fX(+4EnpfdorP2Y(SsXV-LkPHdMYq1!dyiIUJT=J>R{mabt6DHjF=aVR>lst}a6p*Fl9q z$2)EH$@V!y|44yzjh6Z4j$}bjnce9>sD zJ^B^a5O_=VuG~xEb-|KK%1#8MNnvB5>C486$?0Ph+vUtx&H|QGWiHpfYmf2%>z@`t zFKGH~K0ntdKe+YiQjiOYpDfIFfkLTlxgk*lt_G( z<{qo*58!dy!u!gwsMi@T!iNh@5xoz_5Kbjkg{7qsMp-(Q6jgl+_GM~9YR33Bj8RV; z^1l7BWc-4?^kjgw#MLB@d#bV#3?2J^P{#gbu2iIKMtp&~U00Gu4*|q(QP4e`Xe7_dOP-W_{w~>Zf=U{^9M@frFs>^> uR=ySq=Y9EiXTHpm{`L@(Uimp;zw#S@reAbIVqD%I#p1j>6$1Y0@Baa9%?ca< literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d16331b3188789d785c3852410d056a028204575 GIT binary patch literal 9480 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 Y9cALAJr+z<9%=!1ak=Plls;qo59$--G5`Po literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml new file mode 100644 index 0000000000..a29c7c4824 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml @@ -0,0 +1,68 @@ + + + + Microsoft.AspNetCore.Components.Browser + + + + + Framework infrastructure, not intended to be used by application code. + + + + + Framework infrastructure, not intended to be used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Provides mechanisms for dispatching events to components in a . + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8b13f2f431837d51247787cfd97093a7c096ce87 GIT binary patch literal 71992 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..9d77703046d98a0d39ae579b1510cf5465b5f37e GIT binary patch literal 8960 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 KefjS-67)~JEYs}( literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb new file mode 100644 index 0000000000000000000000000000000000000000..89798bf746b883651b02a078d63d8a8d8ed373d8 GIT binary patch literal 1836 zcmZ8idrX^E6uk%J+SYkcAD1 zW=o98a1xV|2y;usXfPVHkSr>HC>r&T8UI<-#A#e&;<6YM6NAS1J1vj0FFp6%-#Pc( zbMJZF`T}h}&N!pb4(e?5xz3k*O5y@$Vlhl|1!D&;GIj+#7x+LxS0m9ujn*tdc9di- z-Nzfj?*sp40QQY2{lH(E84HuXGfXi4VTmm!x_b5(B3trI-U_itmthIE^L!2C8o!UxC|umYJ{3nXK1JDxgqbR%VW~=$ z$@4O*A5*Eq9CwSZtY&8UF26F7{_-2|IsfkOs$Wm}F7s-Dt##ZKHGa-hV+OM)jTaSD%D6RV^ei% zNR`1b)>`@WpM2&?K2t?qx&KfZ6%IcP=Xt_nC%?rg5?&2Krm*aR0L73+vwZ@kU=vg` zC=v9Uam;FT7#zHTIk^i}#hZ2+hhLt^MMDtbCP_sSM zZO@L-YzLNaE6y0j6UfA1%0Y*4AP*E7W7FXTD~+?Zq6G8AS;sR8Rx1DuNs{23`X>!@&0i%Sx7-sMRiX|8TAIW zSXAoCcBR2k}ud>~vBtO%9WRLYuuSzcLFQXQ-cmemBy2P!K{N(cJkU}}m*YQFuc zuc6SlRDSy%{?Cy|YVXRwxD)Hmd5hXF{(=<)(=F(QqW>D=1)%*PlG6)EuN%E;^d!-% Ix5a7g|DLl%asU7T literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb new file mode 100644 index 0000000000000000000000000000000000000000..853acc5542b3e0498ac1014f9c994bc69e04bd5b GIT binary patch literal 70964 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb new file mode 100644 index 0000000000000000000000000000000000000000..94e22a74d64e6dc500a23a4e589b597cbb680b72 GIT binary patch literal 12880 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..6a07762a2a9f021a8ba5cc906b44c2ea5ba83ad8 GIT binary patch literal 8044 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 p8bzK+S5S%S+m(2{v)f92 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb new file mode 100644 index 0000000000000000000000000000000000000000..df87a87ef05138991e2a550f34f407643df96a05 GIT binary patch literal 2068 zcmZ`)Ym5_B6uvX<_QiJDvJYjA>(F&!7nhkX`(RrZceg-!$-cS|6HuH^Z@aVG&Xk$y zmWn{T1vRTg9wI7HL@Ol{xKx-L)4J?hoFffh$ax?4^V=Ucy6cLR)Uk9Irlq{ zd(XM|yE9(@S}%ntM4nQR{uN$kvYB;d4akIEfx&l- z?l}Gzn9*p}hgPc%WvglcYyu&*&B^H}LDzy1J1mi1&kP!-&*sc%l0zPd(Hlgc=mxYi zn?vSv=>BXUWUk*K`X89-6h)(RlmUH5)95N~K-Ud4x??cFM77|#3UV9dZxAy?G=Ox0 zV2CtAR23-!X4wd10c0FxGsqT@9a$d*)z9qvhHMS9^0+FSTfmioji`W0UnNDjy9kqh z>Of53r*myL0X7%mZorlzO!mPFJ1`T!5U>p}>6ScZ*ch^A9>dsPge@>GE5hU~W*1@N zCp;<6Cw0zX;wPu1uSVFT9~e0gvRTAZlC`}-k-15{6$B^(Iq%b?Hc}6%fvmd#tQ2|+ z@~ZX8#2~_xSkihFoum*mQsVe#?*|?058tdm`EFay`0R^~uby>Ocwc!fQMT*g$JKWO z16}9M-#hmB(U*Nk=_8MgPM6IWCEw{&)1UerckZLqn_HbhS%^nrUe)Q@>g0x1tf*WB zC*Uq{emSlPnCnqvy;xf=E0|m8^f<>fEv9-nPT>=5Sk%VifjA@yvZTQ*tRP1@UX4ju zE6!`?h4xTOur(BP@ohqjyB)g&xV7Ew>fo2~EpEOw)ZXT54h3L=ZQDw+MVRy=OnMQv zLJ>lxpUoBIdnZo(HQE??@pH_}=IJM1HO7#mR~T1Q?z zxmV+QQBY)64ry$mF1An;JBXzqCf}19e^S+O6nv2g7Bo?oRCX1Xz$cXFTtj0D=7SJx zrP6LHEl}z06?#5a260$aH6{7*CerUPdycI7V{h7Oxo}9@@BQV@u`9ht?`=QPnLb_` zxj%ZQ;S!-N`-I(w8fl;!MJLJkX5RdkS)ghb+2KCYNd`FUaN8ZI!f2U;9;bnaHkuF? z_z5I5ZmtFrJA4pOYqS72XUz4$YsUbX7Z@#N#AipPB+qUsB%4ICV1KjKq<35WVAJdn zuTH2Hg$-Tn&mCMTH5H+zRI({k)6NHXWF@%^D?~NMYr+^-9=<_SCz%uRW6$3@bpAl! zwOaYnzLIB0>TUbR4sY`= + + + Microsoft.AspNetCore.Components.Browser + + + + + Framework infrastructure, not intended to be used by application code. + + + + + Framework infrastructure, not intended to be used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Provides mechanisms for dispatching events to components in a . + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Components.pdb new file mode 100644 index 0000000000000000000000000000000000000000..52012e9e80949177143ad05866cc4599315e0763 GIT binary patch literal 57276 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..354a9f42b1141c45e31aee19cf0cee3f03b970d7 GIT binary patch literal 7528 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 YLi-}$kXX_99e!WSG}XTBIXLzE3*f#e5C8xG literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5d587820e95eec7d855d19125f74205c07fce3b6 GIT binary patch literal 1656 zcmZ8hTWB0r7(O$5-(-_)bEyd!x0}W^wa(_UNwYE1W^-#(bKN9WEY;2I*<{)bzgA3aM_yO3>edtu9INNb( z-h*6&{7n$peL(~}3-$vr05%3Z4`hMMz$b!@Rfsm01l|Qc1lEAhfG>e{+QR$<=EPdL z_@9MFWCh#29NcE%W#D!Tr+hgq{Gf$X95sLwb~-J6`v8}P9|U(>IK}TlS^_-4CGF0hlQDAN*2|JG!9eOC6F(z z=K-jg0((ZJv(WyuC+$-QukXk?m0knH)KA z+x4yge2jfMbWL2DaQMHu@Mhb<)qAyXUumg2!5rf{*K}u^&!O#{F?Cjxxwli#405AO z)woU9WN()`lTj6HqPwD+ItPcUO*yWm4)Jt`YljtsYidT4^@0!+Tt(%9-J!t#zz47X zUi($YuZK=3Yrf^W15fpyy?1f6@;SbK^6s4j8x!FwM9}N;cp0~|GIoT1otwYXQLZGo z#CW=%$WI5`>t{qd(w`Z+D5;~ z_OD}m^aPFaG`wv%W)~@3d(Xa{Xf#ECeNITG7Eu}WVU%I z*XE&In}_mE5ZW7T4^A6KMsE*=wD_Dfl`^JhCuh;>vWnJL3`tgJLUBE#aKq}?7?)d< z&53X_(GYKunSGoTrS9E-vouLCF5teKB3zY3K)?k}y_lM1n!A;iwyC9A zS*BUpZmU^lmhHQ*J>Pqk^aLWq=QLOcZ5-VFZH^|cjMv+5Y<(Rv}K!%Zn1TQmr6 z^n4-O%mn9FR?h(U{6L5sX&+Hel>e+k1RK7eg!seKMZ~@!Mj+q;yAV~-Tx91va0C<$ z6(WD5g;kt~dlBw3i$$!pSjBL=MNG0=#XWEzhP%>X5gQ#=akbMT7CNosOStFZI-6NU zOf#$Sgjhsvh*b=6S;TmkRaiqUA}rJ@UV(cCZpUzo=ofAkRgo64B+@FTMO#E=v{l$+ zEFvPtDxQb?CfvQT7I7#R;c*C$vx<7Sjc`Xaw}`3Dtzu1rMQly5iu)5S;&7r>B(<=J z_ARX93AiuAZQ0TyGFoE0WNep=?b=|wHde7d)go?BwTcJQEaJ&DtC*i|5i8TJVnT*R z%*wEe_u!s`yS=?d>~3!r$(a_Bm1z~5vMl1xEUUN#H#FNSns>B_b{(zaB3xG|q|*uM z!2O}KMf|t3RV?pf5$n5H#Yf#O;`{Da(W8e&6!fr)l>Qdcxj(jp>l%Rl=2*m>9GtB@ zi-^jziYN0e;$*&6V$47V*+htN5cB+m%?wRV5ZN4{pi`i|9VW zD(-;$Fx>NS?IW$C*(i%h8f6u=a96<%A7c?IW31wqu@|j&G>cd>%_;^> zw}{Ept>R_4pTHeZY7wJKtzzyBi}23Cc4Zc^y38s*f%{LmMdcPTrQ9m+g?j|9@1I4~ zqXr&c)lb}*)w#6p)L*GC@L%%^6p#ZB*gg{YH0@Mm>4|RhEKtrIh z&~#`Hv;b;^ZiKc&cR>$8N1*4Sv(PUxb2brSV;*gywQ{>CcaU<&DR;JV7c2Kh<=&y( zhm`xAa!)JwYvo>0ZU9;-_ZMlmizUzs$pPY&JwTj=K7|$p1c=w5bI_mA07rl*go>fD z&=iM59E2W+o`GJ1-hkeLK7_u2zJ)pjIz$&}0CXO*I~^hsY6lH*G9Q8BW@n&yUHY9O zGRP@9LwV2;Xe2ZNng(r#ZiViG?uQOSN1;<#Tmcf zh~4ztOe}IW6U(9F&vV#hAu!Noau*(tHMJ?B~%A3fv$ztLYtu-(B05J z=n?1%=y~W(=u_xt=mL}w5h^mEx$N%czfe)H`Io@94%!0kfbN3sgN{PaLZ_g!(6`We z$Ql_cf+Cp^(pGMoa=S)`iQAwDpkvTU=u_xCWQ__F(NHSX6B+_dfvO-cvPS@(1%b^ ze2fT(;-KD84s;Ou2})@mE0#guL;r$e5@JOQC?z3IJO-VCK7uYl@riLF87hX#p*e~1 z;yvh-#Q#0#LNph{S~M3|L-U~PpqpDHh;JZ!%S160S^-@TZGg5zcR=?-`=LjmqtLU^ z%g{;a4D=E774!r23-l)xkd!D~Pz=-(Y71pT-JpI@J~SK}3r&SQ&|GLfv=mwet%J5g zw?p?r4?u^Yr=S<16VN-*N6=T$56~~rpHM(D_7BBCEupqhCe#h;2jxS(JZK`_O05KcJtWU!gxCySs&G21P>6Avcr;WkKDb zzEB=C1R4oVfTp>PeawWv3R(aygH}W9p>5C|&~E5}iu)M+$DrfT8!GG!{2xPKLq9^l zLKh)Ns}>@(75Bk^EkrCh2}*^spzctAr~oR4#z9v>GodPI0kjNS4Xu~yAW!h$0quqk zK#xJkpySXR&>84s=xgXl=vU|>ZhK87hLNLkpqx(7n);(A&_rkR`RHh=;PF z0%&R~)BfN7C5dCHN#Z2*0d!8rPZAg4zXUZ)OA>KV3X}(pfEGa4rZLTA@ljf`_!2sn zoQ$@TEWU&PpV046MZ08iJ9HoP0`w_lNlzAipuBWFPsw7EWVg6C-7P*={=1|JC&(N>nwiG?<{_UEG75RQUfR;`J3H!IPj_TG(>G-xu#nZeMZqZ{zh7gU0j|_d*w-c4PaAiDQ{Y zKQSHtS<-KC_1OO61ax8S05N{t05NCWK=CYe3VNsgKyeoCr_ed*N9Y&mzmRSGKoJZ@ zK=DvAR5+e#4iu}TnWDC3Fx2D?~s_7E1Xco#5}PBdI&l^k=y2pWALAr zeuF>o`^n~igGBYDL1F>46j}+bg*HLAK)awl&;jTW^d$5=^eXfg^d9sH^a~U_d5~xc zEuPGM3=%8gUkh!PoG)5U$rt0N(3UTzO(_ujpo7rk&^M5MYJnIG&4#XrHcTxPA44Tq z6^e1tRA>`)0D1%Z2@0Q9C^|!9pvlviw*GIhxNq8E@ep(vIw$ReMaSty;u>i8bjB@0 zUeK6JhbSHb9xCcehl<5eBeVv(3EB^R3#H5$Dzc$I(6AZ9#GTM_=mc~c`Vjg83N9Na z5}_VY|FYp?5A+~(xU5)2l^2WT@)EHWy1smbI17CWor5kwEj=T|6lgY753TYrub6Mb z{1oQJ@NY202^t>3z6nt!j4fpJRP6LN& zOnbPABTO7=;wTeGn;7@L{{1oiSdHVsaVCy8adQ(Vm^jhIElk|f#7QPjHnH2ptxVk7 z#3?3jqcLwH+iJ{66#w;r+M77j#Mv76Mf^@0vy<-vcBu4d z@1`;BJ-~sQy_d$c_W?UKdq0h79{}bV=0B#NqcQDy;9zCv`Oeq4CAd&yUg+3{LR5UV zjUtUX@yLt0ZXagi;lky&hrw2?ahc*Uq~8L54uWV82fN|#1(kp!)&4u1I1@Yq_9$iN z4cka?wBlKcW5Ara5*@H_C3=zX8cl(8GnYxJ5X)N2`CR- zKgAbN88}guPd2z*<5pmg#+-besc~2EERAWeKx^`)$Ma9d{V~Mrp%7PtaX$(l>#`7) zn8EWg_cvE#)~70sxmC5s?AvQJrhT5qwAX6fA6%y~`^S2Xx&3^Nx%~o-UEqZ#UZk-b z_6CjHf){Jd`o2WtKHzJ>ZdD#R;H4U~J}(2eQg-ftxyD7vaHGbDV80eKkG}Zrz$-N_ z1g`?OR_XEltp>MITnD}moT`}h=X#Bkz&B`ohsHejD-@?;d$yIu&^p9#r_$rKbUkW< zkE_8qfzy?pb!3Ca?9Vr9%=*4nW7hX=8b^R{)|ma@EgDCGZ_{`I%FoAXu;KBaK;BOpE#13wsBZKGVAoS1=#5 z{@<@L%Wt2?%-?>Enf?PBr-C2Sm`Cxj#!Ua9#!UYajhX(V8nb^sq%rsR7|xzAzwCn# zYs}+6V&cb5eAL8GXw3AU)YuJvN@LoOY0UjSZQ^H4{H%$e)0ktw=S}>A#;sw0(Znx_ zO#kt-4ZLjPS4{k>iC;7E>n1*7;x|lu(!_6?_$?EkGV$9Qb3Alf<5u8zz?rIkri0Ib zvJ~@p-_^LcV$8Fk)eF>YA>M<%ql(Y^bQau6F_t5U_cdmp@sY-f;7>JngFgdzR@<`; zeQx3}O#G$B>_5KJnCX2D?xND8{hY?M{{!4rvwx#8?cajCY4-0lru}fJ44ig8O*lFS*69=2PnTbOzo&4p`{@SH6ug{?xZ_&65{H$NJ_r&?; z*vA*Y7kC($^_lkG;L-3i{V;GJRX@0WxFx{PJ-`uYLq0pVXPeSF%F@lxIj~1-%=Q~& z;#d>MnK)i!UN4$!%=?c-jqe1v)R^m^e9UV#mi35qOE1hP!GnK1UMvOjGmodeW+!*h znEgMN3SAbTY5LM*{A?3<)V61T)7jF`AD_q5MPu5#YRvIqH;vg|yK7vaF|Q@ zV*4Q~J=U>);9-gz6c>XTHx23!dx^651P`#}_?i1BkAyuB{?&>{fqCD^{nI`Myd3@^ z&_M85l^)9|N8``Hx!`fi&hb@{(tiC38TS`)7{@hTIqHt}^PUSs0xO?-oi z*P8f76R$JzdK2Gd;teL=XyQ#K-fZG6Cf;h|Z6@As;+su;i-~VF@eUK;X5!mTe21z1 z@6?#r<2!M^^z|3)kMGj#><{kNnDKXOO#2>@nqZ-rxgvPW# zsWI(OX-xam8q@xa#NW7YFzLyc+w zNMqVR)|mEBG^YJijcNZ(W7nD$>Zru|oqY5z@Q+AnBK`|ldl z{)fi2|3_om|En?We`-woMU82{q%rMSXz%ZDX}4-jyG>)-?Hbb_pfT-uZN#4*?SUH8 zj@L*ovj=HRd$7jb9otC+y`9FiXJ|}2Ubpebr@e#5wBt3L z%j|d^$IrB9Ys~HOdd_8byq@D{+VPr>pSe9=*YPv$T{Wh?o5r-`wH|+b+VOgipK0%< zG3~uIroE5GwD;AR_I?`Ej@O1ROMigIv=7vn+vi$i{P8(IkZ0mSCeAl;fr$%EJlMoV zCLUtqp(Y+?;^8JPHgSoGN0@k|iAR}uw28-; zT#fqVv$KBHXw3BIX-s>q#<9!;>f}isZ*T7z?w&(oyQjIx>)CiuT>}lX@tyBEW`5kf@?3_y~f>wgd zRebg}t2O5R%Jmv^zVil+Ss&J#_(l`2)0o?@H}Or@Qvd$bVc&o}`0~T@-)Q1Z8uNT? z)|m0PXiWQ7Eq%@(Zqu0aL)*3Z-2P@0-=f9e06W=(@^ZsJUhzyY*H&;&`c~L0RCy+V zcOX3^>fa{E};79|+qnWv>Gl!hfCO`QU@_ zv%Niv_zP5eoD)5yG0W$O#@MxZ+*;|6&-!%~fxhi|d{3D8Ni9C>=Tqp2dwmuNqGT{|3HE*;Bz6H0JidgEuJqc<>(@w*&u2GS;BG+u^kN8SNDuZJTQ-wwVN z%>Ie?UEo*Y@1*!n@Co?Yhtqx+_)qw|D83ua|JmN`u-`+#zuy$^1#>L>CKLeser11I z@c}UV5{|cMe-O;H*miVE!8i1%e+}%=78gnD=_*r(kFQ zT%zp9z?JZ`ebW9k_-@Vq4EPDn{w(;P;NvR(b6^*;utV{2Fg}eS*PaF;y_dlJcMC** z72FyA5l}GrHD%}dAfEu|!N&3@zX7g?KVR`l@Z*~OE%3KsmQgdrKLzH$c5uk2!PkMi zLgaVAJRYVW0)AJ;=k?PCKC775kWldZikS!UhhUcdRK*{G**CHNg~9%@wtYDGbH(h> zBQ#D0M}ogl_5yGe_)Eo1UuX7DRj?4E~#4SynWa4CvnZ8@&KyWMD4gUPIKWnWq+iZ%7+i1+|Z(EIde5o39 z`!tQ&pS07M@zXVC{0tMf*O>7;Xw34-)R@PYr7`WBZC#OJwxK=Gg8(eSf8 zx&1|OHT=AOjR#*+>GOCdXnX`bQRCAZN5H>Tv9MS$<}}8;lM&wn=D(AWj~RahREqjw zRd&{=873|>ak+^-wp;w$^O`-=WS?bXewjw!UxkUUHt`%2SDJXPiK}dP_|q>&eyTO@ z46f058hD=VZh!oEa4p!T%7a`7wkziKuwG+cFXn5^bG|@hp7VtovkffLnDwVYW5!>s zG0*=s8utP()p#IyIXF<|kK-9HI7o4CaHGZ@!7DWOfUgBNQ}OdmoC{tFdx)~nR~!oF z*n#P-f;~*xdxBSk!xg81uLDOYZU+_6m*JUeXmO!Om-EqT*z5 zANVt&b=cmmw$A~t*LaM^9RIi#w?cfDWiWIT;1PG=5a$D)?!?)wWl(QSsS7?$DU^^)`)rfNux4Rq@GpfKxTz2~N{^7r32b)}K4U z>59jK?*g}1%>Cc3aUu8~a0g}Qc>Z2+refNC%&`T_kDLWNuU+Kb;A|D2=XejeqhgNV z_iD`k_&$x9=6;QNyguf&i*@pV4dY^!9?$=Si0@-w4}82%#XkspXBD6AMQ7G;au?Xy zR+#>yNWZI={vp_X{08hkW?SODfZtvRep9nE{#zO|{@WVU&M%$$(x?3$jcGrlG41c#9=R<3dm6L+&T8Br{64s^ z%6}^O1C3c8A8YK@n0-C#-zV6AKkfKG)tLGD4Cl*dcZ0vM9r1HJ@V6Sfz~5=x^Z35k z?9AT}8nZw6QDfHspTPZ9e)?(5z99zs8TJ9n&ihRt)6PEbJnRFNo%Q*j8nb@=OJml* ze}i*WeCF>Ljd?x00M1qRvl_GPs}<+LJ_ml5ht+-rYh;b_&s`d)z|Zk6?fI~CJjVDz z_NTBW)`&k791Jd0yi;)znEiE$;vwKd_*+5E5PztO&-BT|!0d~drx0+lvU7VExI}R? zaG1udFX0;VdK0BF&u6s#Isf)N-!U48gJbP4`R(L5joC-W+g}zV)c)B&Hn-!ttC;C0 zXw3STs4?v=G^V|!#^27ZP(wO_t*O>MKjcG5`nD)UM(_W-8?L#!CeW=E? z57U_T;TqFktTF8+8q+>PW7M=b9jEbQiYKG|*wgAmY1|!t9v|&jA^&-bJ>Y5Tcy2`4OmL}U_V=^EGc=wJE>q0@utH6f^(x zHD-PmBY!?S^SeZ2+ONU!`s^HkE!B8Gc)7-m@3r6JkG}}qs4?x=ns}wgjK4}_#=p+Q zYqb0^zt?Nb_%~=w`&x}@ztR4+KYzU5tkd{8@Oq7BY3zo-GjtQ|SF7@5`WsBVQDcrj zHfhZGo9*BEw{HjDqA~l=ttQ^4G1J=)o}>29`hBy;gEeN~$?NScuve=1-2PUL*+zDN z=PEnLlecNi^0^(?bDy2#`8!O!Q)BLL7p_;n_&nY_HD-IiOJmya)|mEtaK7~I@70*+ zZ#U|j&(8eq(U{}Ey&7Kwz7Jfbov-^%yia46&wh=WKmPmE%Ev`t;MXc@m1CqkGxAAKg$MI_uy>Rigi;n{Egh<>dQ>&D}jEP!_y;#NPu-fp% znjxoT9@3GrRqO%>i1%cC7vkV)27aw_EvZee$TY?|zTYr;dFD!4e5YJ)#Q;20llhqf zu;D#k{@a6GS;bMAw|GXvvnu{OCy&VZy*`L>jAJ)K{;nMK@Oqigo8%r@kMPZD>3^4NVPV1(?$9xdV;nYT>T2b=g7zjit14Ui*ehg^3aC|5r_F{jIPnj?LD z=Ug7|2GO2~t zB3Cw}|CRpds_j2)BxK#IcD-<-Rx`!At@|tl}5!*CqlH(~kKm z9v$CIm6=D*BjIt1D8vjBuOXda+!y2CM;ti&>t+{acPDt1&`$s{JJpe;;}5mFTM+nIJj>>I{2#r z__fN^Y;s#)INu5|LIPyCLp+MD0!2Th;8ZbeNi}(rUV3lpz zhPhcDJ9{mgJc7ukeOmT;l=%h^`^jR4v1cz%r@60@>0x4$BN{G|jL{$HeK^rHBi z3NrnxWVo@_Oqr(PH-25RoHrmQ{=R}dM*8u0C{X6Ua%N1s+E*--msZSK%VROhhs9}; zD<-UBC(6W%nGqhB(X+|IhMoWP-zBp2w#fV&{-rX9yvxPhIr4zNbRf^ZaRp?`HkrQB zV_Vd|*jLz9cpsT2f32by%HJ+7$P{+Uy>NXyu1Ycvdr^yA@n!rPtG|q2n+&(({a@~p zF%7>j|J{&Jv{0mJ6W8E3K%eYi>^Dw+3lW^55)C`%QnUtB8&L2 zIcFX?`#wj}AV^PoYJgIg59ErbS3p4wsv+@a7g$%|SR!!3bEKsb>|b9B4WaK}J= z3NTKFolc(scOoU^$(Rb4cfvg1(;v}Z8T>)JS zt(0Ni2CRmA9kd3zUWUDxvli}+&^lTLm$Yn{Hs2K`!Vzh z^eKdA1*M584jc4%r^H9k)GYyI?zSv)cb@YiCch_px`kr(ryBqvt*Rm6NoP zPs1=~4*oREE^ZEXhug$g!QLplXz!YyViR3scj0$=?0e|}V$fLk9Ge)OKOIvMx8c_& z*5%`|viSFqf%wfD`V4-r9s22f{1untT?;TiDSl>=U0f=`t+)7jJRYcu6XTKnywPp? z_U}1uT4i-vX=PnUF>`)ZnJBNQtEsN@{;$lI<=k!71i_W3Mv*Mu%d2UX=O#Zm|a>oyt>v?Qi(J@b#A?Xb0UX+xT91c^CEW$gL1}$O zbya?CZFTK%WBZNxkvsPR>S0?9kbL#PTuV&1z_s9UGe|f-M z&)gZFT4_TuV%vH}h?!sMnTyk57;CF*Jhk-=zGMp+m)Z88EF%P)8J?Lkg6~krG}Or0 zDB1ZQ35eJP^`*75JoPfXvb3RkzTvIsMs@W#2ckxup`v=v+`6Kwv2`9%>p}IYf(NJD zGpn>7>DN}ws;DZh9OIc=Q^|lueqV#%XR2bO>lqQ5@gIi~;y;51;yfc-sjnBDX*xn%bh;zUWi=jCS~o|`uijn$pUNw)l22nu>8=wpstGw{uqrke-X|`T^$NTl%e9I=c(6% z=2w;0HfUU0#&e69XbT?cMWQ3B>nfzb%Co5651vJ3o*Ee}tM!b!vf2uRYd!Pkd+O?k z)Txw8Yb)rjQJq0i)y!&iK=@$@4`z62?VR~FV$OmZ*0t*R-tIWy4(sUWRZiW#zU3fajOm7`y(fVWmu*U$FUYFvi;#;((&+Gnkh z4Z=@#Mzi(rPE;?fVlqa(u4AKEfzn2C9Olx6I!F>cmX8gF3i zRcc0u=!3HPwYAuV57~Nr{zX1dgU?fEWP=sRe^HU`P>yoon~#0g*Lq6pb8soc(4n4D z#~@AFMdwu`XYe-_g)anIKs!MP-B49FySBQjVzKPMedf9=2YVKI%I33m`{Jo_O|fU8 zsGD6qzp^~nlY`D;fv327q3oU5_5P*XmE9OZ)rduQtVS408)c&f_?w`zquGzHm{Eyy zX9UP=pW&@6t*al6pV4d2X)TA!C^$OuHy8lDPy zSf#bKr448StZmh`xz*(j##nBs2Oi&8vo5Eu4&$OqMD%%ZgtZMg{CV@yM9T9@Yf8&1 z>bb4zZTulT>prWmpTr1QguR)*=14?T?saPyhOXMaKlZ|mkpqqgz8$e)w0NfEZtI;d zX8bv(?KcSnZ_D_-Brd%6LelR0=Du{He(1Ii>f^rW z!p8+fyuNW)&*3}2Z@cf-ZVCAGG6qGpb&g8ULKL)PboKn&GEZ<$T}`nE1L|6jt**8# z*k2#(;&M?Qsww&Vi>$J`X4%3L7#ibl)5e|c-k!eb!nTCwU2><~_-l)g&-NMj{6&}T zl-S&_dhwcu+s_{FiQ}q>336cJhSP?p|ITJ2(a~VTb9eY!I2!Dt7k!bAhCqHRA&?(L za0-jH!7;j_4$aqQ@jl={8uqMK(&_4!POo;->7U+$nJlWRnO}c}oQ5>z)O*_9zv`2X zLw3BhFY@=TWv%v)jQF{Qr&HIQh4Cw|?wql(b!}}I>}C$Ln#io0G8n=PhBJeg=aN~= zNRpY!HnP^$$Xc)TP-bnor+#*Ic^!&P%S>anyIb2Ca}S?*cJKau8UMQD{o;{h>Q7hP zed?Jx%~xf%iUBoLuiA zJq}LS9PhKHIC4f0j)Z(%yM6x?buv5AYsywR=;$7;f1@ihu6H> zrp=mm--TbwKA-T`;5gYpnj7t;c}l`xla_;%%Uj9H>)i|fJm&g-+mSCHFMK^c_1OF` zUi|p64cn{pHq=i#a?gb4%Gb+eBa8+Y*()4}=8km*@}n$)JiPSb6=k*6b=5QLvzmIj ztfn3=%NRqVGi<4vR9 zvZ|M5)tE78H$7V551QiBAr3z4!Jo^u z8#|V!p&J_NK&2hwXowcgDzLUE8VhPfw0mS?Ghy-W%85w9q&?E==4f!@(=$tvv}0)u zPI2E6t}xNxjz1sUhUe7fXvlG4`g1Zq&r`~5gjzFDcI;{^08d?hL+-PJTbp+pYZq2937Vnl&bdc!t>awL%Z#eVYvSFq!jtJxjX=GyZ1Vs2x z^f=yfUVeU8*SfEr{>SV;RxD2)?)r4|%h~U(Zx$B#cEW_bbuYYnVnO?dCryz1i0@-K z1Ete4&2TzMC$+udbd*k(5t!A96wt9(#{cj9b2=qVp0Zx(JbC(7%g5G%o%=UKLM?ls zN})D+9|{HJpa}8Npg@5y1Ia4_{<kz(GZKE=H8tyCsy(W zV;jdp7jwa0!R@`zC81Rq`dIIQb_lfc5oVxBw=WD3)}`%G9HGMEEMoLF-p7pSk+|Eb zn&laUc_GDk`Le!aHCvIBd& zpy9R&K{t=O8q6oY=5Np55qK+P!pI%ctkP;u)6OVa5?zYuf~&6hqJ`THBpb zEDYm9`Z8*P>`{376bCc<%_0L%7>}FUs4yTApg2 zc_f*L@OIuuu+K=gWt?~H&W?(R2SJHA`;p$yac#$tD$r8w#M73@VC)%7Hu2|qMcYQZ zE67r8WiXDO!91`br1tOhu$2A(_`t1?+BJGbV=vy{ zB9PLszw9Q^vDC`3BhvQm135NUP8GrRHb(g?NC9s3s%slAubnsi+a3J)!Kdyo7-7Hq z-5>j3duGj+<}W<_OL5PH$87ew_oO`aa}qLbSr8S}Okml7!{YVYofucx8~z`Ci|>li zOkE>}RaDK3w5%Q8bahy}2p5P1)WV)gu1L!=yVEW5oG7#u)tMw?=c!q!e}nPYEs8t@E2~>`HyDBh_-rH^l^0yNN|Xjq4r3eebl9GVXT&R>i}2Bcs!dc>L9x$G-fPU zu`i5c?`5;{U`C7X!40@J*wNd!3lf(2qE^0plFMdw<;*MQ7&&*rTASUkWwgI+aVK6~ zxxiC$v&*Hz@v)kF`qnn2Iw(Xw$e6!{lfyKGP ztu?59stcBd!d(;%jG)sxUpiq4tx2hgE$NiBm(T7ycPkjfMv#V;$)bG<{$x1%&?sC5 z(GX(o=m7COu@HQu3Gde%VNO1`3B(_3?>daV8~SMceIWb7C_c-yE=^4kmS8UF4M&3V z?}7MSSJPDK9+9GQxwxEwR&NN+a}?5FS3>NMeeS#7rd7MK{vzE{?;p}F_g-?PU8z`kv+AkMUsR8IJURTm z?2dJV)7^L6bA75Cw+!4?clZ1?*F1E=z52-g6^Eia6zAn-|G8p!f1a~pWiF$RJVF{= zFLyc8yGptR-fhw?@$QlCVDAxSe?_`OyzfhQwD&vd4)gw3x?>w%(k*UGLi-j@dt)~K zg!uSK5tf9Vgy6n#D8loO@6>ZX>f&OyTkE z3)mTCXPLsAcOT60L&sjG@PwQp;mpk-EgZ!vvKxmt-65to&NS{2X-RC{WJdY^m1-jZW(TO^xDG#ja$ zBI;qZm+1E9fPTJ!ekw+ZIiS=RFi^#)(*oGSqEQ{yZu%H4EZV#MFCq8&Li+mRJn@&1 z6MqT$I*qo!gv9tleEVul`%6eqUr2vnIz#>vGQ}6--xoU|S)l$9uP?;E zuT6gmx#uq-k7*(CmsJ8jz~du;%P%fl3fxOijsJOF&4cq^7LvXe35GwCXCb9*MjSMm}IaoeeY4cxCi)wnlp z-!|$Bm-jGr)xl(I*5La38sDgpv-%;Htyf#NF0*W1k1|N4H4o2?tK?I)ziU)m_qe+| zN*W{crc9f?^P1qZ>F2MFd1FM>nasjd56+4k*)H(fgUnR_H1-Z6r;Bv@^^?xPBI)Fh z2~SRe5#5AM3`lTcG&xM9vyZ%dIL$koAy8vtpEgGHV39Gy6=K6}OfUY8#gtH_(aw%Z zG<2>m(I59C9QYeaHOFvy9+Jd3)L5}}Et6{bAN)pPc;DDE%y=X?T0RB8{2Xn&*&X$1 z{Lw{?BQpz@);{}7_PL^$e;hga-XrmY-G7vw4!Ys?6|6|15k^IlXCW?`PF#{a#F*CM zA^wL+rnG-^Z|WNs;^>hde`s?;=+~KJ(#PG}ui~i}HcngluS=`1^|ah2(+e}Et)gYJ z_JmfvX$(oi4)JZ{rm2ot|6ZErkS^cf_Nneo;!x^qo8FrG>#L*wc=+)rzJ51#@NYlf zHtW3QxrKiwy7Rx_u_PshVHj?oZ#0TtxC`YDBidkxxCIO37jKQh7(&B4bY&Kcx`cOV zi~83;1!od#paoW6XWAEr;cZ7uJYZ%5|1FFS5)qM;1Nnt!M=F-ejSi=icU5@nG+b3? z;ttPl?a;J+D^6TkmnH>?Q0HXsB)2-erX4;CAg|__aSap`teB4)!XMlQ+WBc{yTJE> z9mWr?wYU%E)viY{+9v8ksK|9-SzxXeKTTHLk;KaR36aJIg%22`eaT5HyR$DEV7T`X z@`j~HNM6sN%Z~NPGK1s8CkJuvSOuJumdRsTieM) z3>0&mVt{>NGE(3&dfXjhHD~a&X6zV1P1i+)R99W%89>bn~qX-9S=t$D0@EQxd$5kA8lBBC5D ze>rjF#EYK`gE;bt;J8}$bDe_`Th1e3!pUm&-fVXc7FG|Yge<8;!!En8Ts4MgY)o!= zt4s`}2V-hQ-n}ove7V*8somM#;(av~-$I@g!f}YDid`J)&y2ytvv7x1j`E&lcZTC* z(Yb)I{}lY6^A)#Lj^Sx;PFG(2-z&57gLMb$67+acq(=O!)fwXL4De{2k< zJ}@yIBIh!UOU7zrmKAs9!kW~wZ33dlngk-5Q`c;(y~yM3G`JNmVuoG}UExDabj zuSTj!#*|iddR9j)$*sqzPi~Bp9mG={%IgTS#AL=}t+~-Ok>{`xSd28Yx>i0tzr2KY z-0JT5k1@Hktha3XYG_q@<+_7g#_#(yZhC&){1$SWQF)Gv*%|l93 z7n@Odkc?$U#;s*_&1hp0TAj_Z0csvatxg(cEiJ{Ua* zy2|T@8SYI*hP!>Z;qFwtNAZIy-r*63{b^-?N!d>hHNxL5G2Bm7{BtV)Pb&UzD*h#d z8v_k)4C^bmYm6IcxXJwtH!a6-vlaJHJfOc3UYKjRC2G6z@@t>Q0K z@s|%U!mrCS+?y0{SG-fDw@0P-pi1wsO7Cfv&PxTx_9s>T-c|8FQTscm;{Bx3|4pTT z$>0@%d7;|<(B-Xar^kIqMArweUAOO>J3F=7IACktja_1oUETbv%{wQr`EuE^qdob` zkg!Lk(CMchv?LqDj^sAd*2x%)bdpi*J&flaJvvESUn6E;BW8|4IR+INRAA6hgN7P3 z#z=FFk>+&6Hr=p!4DuLswOj7!>bBCUHnyuawyQT{*0*5++Py1$Zo0v1(v-_f9PH~` zDL2({H)krhv*F&X>^Cd>y-7y+y(xx!zvBB9A5!rTsrW}*8}W{+{XX5&;HOpi3oQ(O zL2dVevVWlLpQ-deQ|W)L;(e{s|4!MzQ}&;ejr4w2$Nh`j;9uGr?jI`tA1eMO75|bE zzcJXbHwGK_#xTR)7^dveilY@bSKM52lHw%AX)3)mm0lNR@1pEI757x!&&Y3MKO?`5 zxoZ1dwSA$AU#Q}bGRmWIlu;gy<5m3eD*hA|e~OAfL&cw=;?Gv`XRG*CimMdYt9;aF z$ntA!P}?`C?N@RfC+v+Yje65~gWCQEwfzR;d^T<{&S&EeW#6IfyNr6-xGT#@=iY4P zb~W4wIx4rD;T}}Sb5I@6VO3s-RX(3o=|8E`e^$kRR>eQ5@^R9rkBz65{j{>5ReVf`lui8N;%$?Uelq;{fU>T0mgUFJhKevsVuO`HI1ffmaSr zx^i&0D+hBD**8NY3q&4HW7(C17hgGeGla2t6of}t@?jsxyDbupIZOImcft@-jW46Q!b#5dsxhCX7*Fs}QN|%0H^kCE z1Ag2#N`I9RpSKEmOL4!{*@?S|e7iMTM29bTh$)VS_WavBoDOZ~-QkjBN#1irV=^0W zxo|-d9`M__$S6d(o%6!^3{O7x1#9B?UG|k zdwb)O+}^k(cQM8VUAnXATJ}Vy5g@aX{C|vF+x;K*EZlCDJ684YgKR) z%sa6p-ZRN)C@DVd8|cBRG~VG^yc@Wp0Z;ajrlY|PTgiM(YsE7>MOD*2E4YvCbY|j=;{v(2WEA}qxmRQ5UlCwBnll3VR(><$yCD;e_-o}IV^c11j=}#*?Xltap*h#HI=Wrh;V7rGHA`1MGg`$vd0~$>hMKX)a5C1Q zc*7RopHVtC3v$UE39<-`($Ahk>@MXg8);)lk8YB;aPs}fC>HF5X zL)%v+y|bt1^wKsn+nl=N{@~3|FZtejL%`(k=Iq_H;=}5DWDXOIww=&jl3Pv#+TBJm zwKW3U8tbOgjL~{p2Jebnc0kp|dXNY<%?N?Nm?QgxwEwHU50kH4)uBOQVH;Pqp_N@P@u04;HD1@XyA{NqgC<2NOO^tV}1JixIo%32)>g~>Ad~yP- zpirlHl2hgx4b_Fu+M%~a_rcQ2jh1!2Yh|WUjmGfJIP-aUAj181aPi^D;?0kJwmhaN zfAy~E{RijV5O!fk;qBQghfEJWw~^I2m3L|3?4Ynq-x@NxfB_w&QI+I61$$Kc63mph ziNj?kz{)W#XW1(PMUH(T=0vTm*jULT#yW7(Ss2VtQmyH+HgxpOPg<9FeBPn4Q)TL@ z18RHY0bL=EQ%-5&h4DD7=W`~CASV|U24I>Fiwbe&!X=GGh=RbjL7f&`Em=?vlyGZ`wxFFRf1fT$x2e9I!H(t-#=U6V{!9--V#k=3`>?|faz^Ea3 zuh!uYjB_>wTfE0%^kaf zS-Y?xjv=@<28n6G_)f6*8JdV$_QiQoXCf>5jvy$No72>s2-(C-eC9VFZ^F zVMlma!ZQ$K$5}@1B8`_tWF3pO2Fn$qnDe&JbIFn)#kHvBazFTq`&@Cx??Dem76i=v zXng0B(Vu;P@A5IR?|qdL_S3AfN0QRzBE(RcXwAFN_!9^J3@0I7n+oNjsz-&AooQ3lw z#9-r|Ib6)bP9JR~o}mszE5x!@IC*2jnSKn{EX9PNc*EG4;)$lbOtS9B%!4VF7h84R z%w8(bR3^??+dMqZ^=`$*Y#<-4jj}tFnLa-I$`jJhxjcp&#mZO@Ar>;==8HbKA+pco z4N(v8i#W~L#DFt8oYUcg0WvAP^kGUWn|o;FyDc&wIZi(LV?I)>!9gO&xm;mxu<=OH zh(Gdg;tzK&mv2Q_gfIT6L3n`PSm$bK+^)5728W4I`*Iv2TN*kte1gXs?8Kohm-l-3 z`j5fcw8t=wo&EjP`o-2Xy&{Uo^HiWK?2g7-n*t78otlKWd z6Fbq77ik<;1kZBgi#W|VTDbvlM|w7%^quF?>O9AxSOzqHfNXm=vc}-@Bco^JGyQK- z$#H8Ogl~7Esdr)GQWVm+6a`1f@Y`@(};`PfnJYej%>UnA7Mq6)CuboGi5S8w6n z!$s;i!-0iZ{Iw!FJY+CBgTt3}KoH@6)K$O$}@i-dQ)d_s3pyZz-5FVr8Q1lL-$V zy?CsA^UBg&CcN>^Kkt3&-SEY&ZY*0I#VVeV=^1FOCo=JRT&WQzYIE}&V@-cu2#^o!LPs&^Ju|3WgdM)_CP5rrh-AU2(viE2wqgL4?O2Ze+EKq{+5L?HJtB_QHaHlqB@kH>?o2Fau}o@M zI85Mr^%2gr%u-A^N8DB{VqG3DY)dD}!CQcc2}ZL-a2jtLv05TRym_KT#DZ|bebGn^%{=-HU|6li(4qHoaF}H z`7;QkA~84~?HeT;#6Pf%cEb@1PIM9$F}N{qzqBd-|2R_{voJ#app*FKGg54bu`Qyh5W3DG3RHFGv3Y4BE&c@mY>K8 z#vaG=T$J$E{r{Jhl3-s{?99yqO&N&!xfQvXpu?;Pmbjv+IGkZ3a4DK#GFIaVS9qO! zG`ji~qcEN<=b_^T8g-Jo;KqsNIC=~QvMZ(`+o;}Q?6_p>O0qA<3ofi5NUEa)BNgP* zinn-;W4H3d+bRruLwhUhZ%195imoiR@P8V+67Z&~e1DT(LfR&2wkBPmz1{bPHneGh z(!DHgSxSYnccG<1DW#NJ5qeV?KnD>7Mj1fF1sD)fad|!w5L~`_BRVrO!{E-7=YWW! zqB5VN@Av=Tqz$w%!$*2^Z_YjE+;jf>b{*B!=UwQN;Wk1mHBM{L{jwC=mad}Nb1zkAia!&@AiMwmk8u>Cp z3V4nn0DKGomW5J@xCJ^Z{{~H?SGCX2<4C?c3ivRkSUD?G4oY^#xC%ZSF_90cRYr3k zGv}%U{T}U-T!3bz3Qu*`8#JYS{38)%T&+kitvL8W@vCs}?6A$|$s3dlONMV|GM z|AzZwdhg?o@te};NB#T6&D@~y{w2JE;!m|a+5ZCaVv-h_=>YX`? zXAUkE8szpiD5M6^FL(~Ti7p))*m@iAgX3nxS$oKK+4(re6~f1{uAzWggfO}! zK2LK+@iE60%g5oa1U}y5N~WlFL0;ub;|uk!3_dP!4d>$wmy?fETqF2c?#kn1nX7=0 zQ(eWz46r}5YaH+#gtu7()fI7aaYzQjA6Vcb1Q@C!gmLr-=CvWvfmuf#;cC+RDgXr^ zjj1>5$&<5e?(<|F7Yat=Q!3@=Z(Vot^iK!xtekS?FJI^XbaYeE=!V5@6&rH3*X#%D zkCBmcspPSr0Nj}u+DJgKkuAfGu2^0jy(5A{sF=ujq(`WJN|vfPjPs(z3?=y3!JZ(U zV`Rcq2)Mbhqp(e`LE9BZFS9__D7qX38kiuY>l6_rdKwJFl${e#;hBh;f@Pl60ED|~ z0qBa}VyuDIRtMV6QXInJ67U2`OVEEZ$&;l-EX7u5Okz4{1b z2Vq1=B>G>D!d|T&e%Q(Iv3u$@a3lhcm2Hck>$mk zbK@4qy;gAia7}${>}N#aBBTI_3k22xW{+8*xVg4zQEU6s=6difE>)503ARH`Dy3MG z$4&#o9GlIL3q>U={Fz49b7l8J;=wMUj+gTxeUdRb9}7~A^#I6Vl-SANvP6=sD2p6v z=!oA%BIq1+Ag@CY`Lrw810%7z#<_HPGcFrR_5dR5NUE@s?12z?nhdOc{-ihh5jSx+ z;l@_5RPt8APD4$wWayMw+)eH5N+Lrb(ulb?k_Nh#*23_BbW`^gUyT}!5T;eJTO`({ zCniRssuscl!5LU1{`-otKA7nOf1;<9%L-_LfKQTPBf1HDG?(}ep?qBKdW-L@iUT+`6Ae-{fATVA~W$0??i6T2@b1~0hp zyJL~HX>ai8<`OacmhIDjAW{<$4YQ!yz$H0hig;pxMJf9B3r?9Lu zY&IWC<~7pAF&%noKFqK35!j9(A8Sdi0zn|m$)P_sBy2Q8M3(;!dQ(W^Bdk6)!K49_ zhWJ5giX&AJBcTWgDdmBrVc}FIz#<)k5rUAE2gQk)0?2?y$RLuB@PGGdGzcZNa@o-e z_&-=_U?zPmK?_<%#;-&ezvRu7?99BPo{YW7=R#BfAveemS0RX6APD)c5x^omLFN#n zNzprok*76A3rtjLn-dq}SzOccu$ff%Ai{{C4W7JH?Pn6E>bk>)R2@3TwZs-`x&n_q zlCT;&70SD7wJH@XUUrz_aE&=1 z)r)Dx{s@}Sw|f{`iP&vX=9x{V3~YrjY)H_8V*UJ(oj^u(U!ru8IyentNFVkYJC1U2 z%6!$S`L(datK|D!-@^HdMq_kPAfRoVmGy;i2L+`Q^HdqS#zyR=9wiTe%EBLF5{Ir<{tsdi0e=1E|ZabExXIL^RM;HsRn=N)4Fn2&HZwwwB ziaK@9r|JdqY}!x_DIiO5a8D^#6u*pFiZiCgRq|Q{lEA_Y@xlfj2@)ypz|b%eaq)q2 zs9pe9u%tkOSo#TP@Bwqu5tCV<1eY^jwK1_n>35KjDjz~k0eC6ljVI!c%%|`ca?^uA z2N7rCJ7GxW;>@caL?bM=ugqu!r->d=BD^;KPE$*8V7 zU!IKh5lrC$AdX^(fyfcd9ZZWzoXL!W*css70?S>vq8A*Adj9~(2o}K}DOkFcYX#od z?&fR5r+Hsnu3T&Nx;FeCsyeX_c4Mr9nPOGK=sh87N)KU$m#xcK5nozANSI7*(pNxp zmUjXyE~T)2%#_@T60fIaVX;6aww$dy3Y2#cx~z3@7igd6-v1r+z> zc*px1pc}g^LuPcT0Ll2#2Lh|&L&3I)qQN&%6m7TE@^>G z9+(3Fxe1`K9&SO3(I?8yAMlg9t6W}%J^-v9fV7qd0{hB|a{Nbq+yI`t&=;aPsAz|< z>X1WT4azhN1%<$W|D(=$LThfEP}EYIP{nQgfEARG2DjgYFOPXo=mnF!7SRqytn6gB z`$4%vMV}n*DOwbqn$$6`1BGCf2%&z0OXcU%#Em^ieGk}+RmCZf*W^C=e)_Jh0WFK8QUE%hK`I$$1}CqlqKBn|Ya*itU~|(Vsw{akrcM}rT$nIU%H8k$ z;WJB2+P!JdbPZYToMX7KY{T!*)oy+J-PChu?sc7`F~Y<31{7b>j!*+d=t5E&lIZ7> zy%U6uxO!Tal@1}6=#la|x&s;lq+-==MRW)Z&()!VwG}2A z#2>-j1|J>XCyCEscQlV#IeO>W+^|p+wa0~tM(KegEf)LX?2GSR`Xs;j$;FeSckf<* z*z(kC6^qApJ8ip9(cDA}E1^0|90`_j!Jse`NU(q^Vy3v9Vg!T0>kpTQe9)#0+p9*q z<3almy;f>na%kpX?ish?$vri}iyu1HIIB|Kc_wB0D--+-zE#aWpDIHq&_QQOH7Xsu z>jvMvCHyp>BAIICi|0DKTYne0Z_J_7v)i63yf$5bhtIVi4#dpT@BKc5yBvxHV?5MQ zlvKeXN{Oe68bO40Xgojy(10*HuTUtCf~3uhPX+k^TV{DEO1=;N!z>sx?aX2ze39wj zxdNhHxSxViFy&%v&Buz0nrX1CX~qIXDaMyT?t!GBCF;RhQ!J3_p?;(@ZyhjXF<6Ie zAk1wLryYeB*DkFsShT1Wg{i5c14?jF;nY@&IlE!8CtW-)O!`{du;<&9M=u9F>*q6H z`{DYemaSXD9SQ3%uDt)Ps%6{%@a{@p3%w$y>x(JqAl!^-u5uzyC}zg=!9aFIcNNir zhM8P19oTp!a`MRopWm}G^w-O;zj{hK*%44yH|nPog;AeJ-u1DDI$jnCsaPU{pU<9K zPl|YsN(mZ?$ziEi%nPSAFDbP!0RO={nB)yeq?v}QfuNwwjU(g-04nuS zpt~fRAx}13BoE69s?I{Ct*VmbjcC#4)gqK67({wf$O&`^G}9YF6VSgF{j0U|9wU+Q zG4eAIwLr%0G-@T(+7L3H=tz-A0WM8fuDl7&q6D41CJG86kB?G6Vl42IgqnIiBv4N! zn#d4LssmniLlsarMc&M}j*=h7!weOje1HF2RDSe6$vCe~xCsVs$Y1RT1XUNL6F;tX zrtbUnn}YBCMz)(i{4dqpmv#pSJrwdp*!)*h4BC(wc`IfDgF`6bd^l}AYBiWB5Ld9P z1V`9Sl}`dQq4PLPp@#2y|O zs!!7!SH?sER$*D-atQ&Xv-#6f5N#TWG~D5mc5L|8arjT)+V)Ql&c57y?)<2xwGDSa zKmFQ_!%G8uET*ps*-bXAGlv0TXK4{cNvS~?r-TZ}F*gvC^ZB=A#qi)zObrg@Vy^q3 z{FYzHE%VFb zzeZdNQg)ro^)>WXZ5e1Yrm3V>)#>=R7OhK8xc^Vl^VY9umY%)y$Wna^0_L|9`HhRm>m?0x_7y3m2v zq-z95hq^5{@Xk}(3G8KBglq$C$51K?9xPDE)FKuliFS!&20${vxCCe_40%WfdYC*? z>SXy*V=;b+M+y;q*KDtbD@BcP>~vv>Ul%}qAAw;c1rz6zHVk%zs58=$;?#ZyRh^+* z5^|w5D7!a*Uj2f)*1Ldj1Mb+2e@N#xhpNhtoqzM*wUaMIWKJk}b<^ClgFXpLRcBxM zeBznsho)jSVIiPw66q5l-6qmM&1B*-3ne6AEujEjre}m*go|swp@)u*rx*k^CfH$5%2=f)?iCfrVG9n3PaWr>`W!&CQJ?CAf+QGVbA!gM4Qjwkln%M zRU~;2XyV*kH=w5rH!(1W4Vh-(?W^pdx9r?%$!0wy`7KX7Zw^d6p<5kcsaEBNpU-?N zaAd|?+Nv#IH&30r;=M+BFPh zu-6UOBIz0e+r8V>LVcl4N0o86^UIc|UrP*W9kf0V=q?_0}zzdN`G>EOu{Y z)jTQ%eXFgUQzvb``oAAvJ#+S}!`tVqe&hdi@|>y(+k28;&0W3NZ{aV?9{-i0-=L61 zgOj1(f|cbcjy{C+T2Bx(l(8f+1Hd~*ehO?(LPTWOGcGBePq4G?*Nm28qr({vfYgJ9yU zBxD2HK?W1sobo{|cM+C5S4?O7KXgSDD-%0)6e13(l}rl^FzU`om>_&fZ&Dd1KyMPv z6Ja*R_S5&cYUMl4HDWp_+C(NRN+Oj>DhcklP*wCYu7Osou1X5}vGMy+OB{dOanyYG z!t0&Cv|isjd&tp?vChkf9xQu))0ZUTbef?0XOZg9o+-@3!_eKT1uf#JNai+0iN?Y5 z(}FP9!Kbl###s3fgzJ(NwvkwbDk@XdNtInQSR*w1m9Zg}9w(*>%fo<(F+$~M5YS%( zg$1#J8gez86=w{`XQOz31COw<$(SCH><$%PWL}_ zrna>OpI$xxS54N|Svg0FS)X#)@Ms{8x#7w&CC(V$H}YiVrAv5cmgkK<1Fd-dG3jdC zmDf(a`0@!u*4xj#fW~>sUcRH@yi!V^`D zSAhza1r{@2g?Ql=sS4qd3NHBzX?_EuOrHEKP{sk6m_p7)00z7M+2I6aBUck+PDU@O zjTPZ0va?zza@vl$!V7UGdm+x$n-OP7iM(ZbWJ7B`-uHyp5=G`Nk4)otv!p5SW=T`t z&63tvR46SmGBZ?M!XL8*n=6I*{5{Pj3Sv6Lf1!T5bE{Me~+=-#4tb zKC3aa!O_@|UOT)#Gbd|aPTf35R!+LJHoG=6r`FM!H9UP-V;u%q0WZwr!>{RPo)QX= zzH@Y4^kVDT|M~C;bR?KVcD { + + benchmark('Time to first UI', async () => { + const app = new BlazorApp(); + try { + await app.start(); + } finally { + app.dispose(); + } + }); + +}); diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/index.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/index.js new file mode 100644 index 0000000000..4600066f38 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/index.js @@ -0,0 +1,6 @@ +import { HtmlUI } from './lib/minibench/minibench.js'; +import './appStartup.js'; +import './renderList.js'; +import './jsonHandling.js'; + +new HtmlUI('E2E Performance', '#display'); diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandling.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandling.js new file mode 100644 index 0000000000..4f6a311152 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandling.js @@ -0,0 +1,57 @@ +import { group, benchmark, setup, teardown } from './lib/minibench/minibench.js'; +import { BlazorApp } from './util/BlazorApp.js'; +import { receiveEvent } from './util/BenchmarkEvents.js'; +import { setInputValue } from './util/DOM.js'; +import { largeJsonToDeserialize, largeObjectToSerialize } from './jsonHandlingData.js'; + +group('JSON handling', () => { + let app; + + setup(async () => { + app = new BlazorApp(); + await app.start(); + app.navigateTo('json'); + }); + + teardown(() => app.dispose()); + + benchmark('Serialize 1kb', () => + benchmarkJson(app, '#serialize-small', '#serialized-length', 935)); + + benchmark('Serialize 340kb', () => + benchmarkJson(app, '#serialize-large', '#serialized-length', 339803)); + + benchmark('Deserialize 1kb', () => + benchmarkJson(app, '#deserialize-small', '#deserialized-count', 5)); + + benchmark('Deserialize 340kb', () => + benchmarkJson(app, '#deserialize-large', '#deserialized-count', 1365)); + + benchmark('Serialize 340kb (JavaScript)', () => { + const json = JSON.stringify(largeObjectToSerialize); + if (json.length !== 339803) { + throw new Error(`Incorrect length: ${json.length}`); + } + }); + + benchmark('Deserialize 340kb (JavaScript)', () => { + const parsed = JSON.parse(largeJsonToDeserialize); + if (parsed.name !== 'CEO - Subordinate 0') { + throw new Error('Incorrect result'); + } + }); +}); + +async function benchmarkJson(app, buttonSelector, resultSelector, expectedResult) { + const appDocument = app.window.document; + appDocument.querySelector('#reset-all').click(); + + let nextRenderCompletion = receiveEvent('Finished JSON processing'); + appDocument.querySelector(buttonSelector).click(); + await nextRenderCompletion; + + const resultElem = appDocument.querySelector(resultSelector); + if (resultElem.textContent != expectedResult.toString()) { + throw new Error(`Incorrect result: ${resultElem.textContent}`); + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandlingData.js.REMOVED.git-id b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandlingData.js.REMOVED.git-id new file mode 100644 index 0000000000..ca2c02e7a0 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandlingData.js.REMOVED.git-id @@ -0,0 +1 @@ +f3274a0b40a50312c5de7d557d2aa41bc43c6f9d \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/bootstrap.min.css.REMOVED.git-id b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/bootstrap.min.css.REMOVED.git-id new file mode 100644 index 0000000000..f197882f51 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/bootstrap.min.css.REMOVED.git-id @@ -0,0 +1 @@ +92e3fe871295c44f8fa58ddc7ac242463f13e6bd \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/README.md b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/README.md new file mode 100644 index 0000000000..4eae50b803 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/README.md @@ -0,0 +1,17 @@ +# Minibench + +A simple harness for benchmarking JavaScript code. + +Supports both synchronous and asynchronous code being benchmarked, plus both sync/async setup and teardown logic. + +## Sample + +See `sample-benchmarks.js`. To run it, serve `sample.html` from a local webserver. + +## Caveats + +Absolutely no support provided. + +## License + +MIT diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/minibench.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/minibench.js new file mode 100644 index 0000000000..8214419982 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/minibench.js @@ -0,0 +1,486 @@ +/** minibench - https://github.com/SteveSanderson/minibench */ +class EventEmitter { + constructor() { + this.eventListeners = {}; + } + + on(eventName, callback, options) { + const listeners = this.eventListeners[eventName] = this.eventListeners[eventName] || []; + const handler = argsArray => { + if (options && options.once) { + const thisIndex = listeners.indexOf(handler); + listeners.splice(thisIndex, 1); + } + + callback.apply(null, argsArray); + }; + + listeners.push(handler); + } + + once(eventName, callback) { + this.on(eventName, callback, { once: true }); + } + + _emit(eventName, ...args) { + const listeners = this.eventListeners[eventName]; + listeners && listeners.forEach(l => l.call(null, args)); + } +} + +let currentPromise = new Promise(resolve => resolve()); + +function addToWorkQueue(fn) { + const cancelHandle = new CancelHandle(); + currentPromise = currentPromise.then(() => cancelHandle.isCancelled || fn()); + return cancelHandle; +} + +class CancelHandle { + cancel() { + this.isCancelled = true; + } +} + +const queue = []; +const messageIdentifier = 'nextTick-' + Math.random(); + +function nextTick(callback) { + queue.push(callback); + window.postMessage(messageIdentifier, '*'); +} + +function nextTickPromise() { + return new Promise(resolve => nextTick(resolve)); +} + +window.addEventListener('message', evt => { + if (evt.data === messageIdentifier) { + evt.stopPropagation(); + const callback = queue.shift(); + callback && callback(); + } +}); + +/* + To work around browsers' current nonsupport for high-resolution timers + (since Spectre etc.), the approach used here is to group executions into + blocks of roughly fixed duration. + + - In each block, we execute the test code as many times as we can until + the end of the block duration, without even yielding the thread if + it's a synchronous call. We count how many executions completed. It + will always be at least 1, even if the single call duration is longer + than the intended block duration. + - Since each block is of a significant duration (e.g., 0.5 sec), the low + resolution of the timer doesn't matter. We can divide the measured block + duration by the measured number of executions to estimate the per-call + duration. + - Each block will give us a different estimate. We want to return the *best* + timing, not the mean or median. That's the most accurate predictor of the + true execution cost, as hopefully there will have been at least one block + during which there was no unrelated GC cycle or other background contention. + - We keep running blocks until some larger timeout occurs *and* we've done + at least some minimum number of executions. + + Note that this approach does *not* allow for per-execution setup/teardown + logic whose timing is separated from the code under test. Because of the + low timer precision, there would be no way to separate the setup duration + from the test code duration if they were interleaved too quickly (e.g., + if the test code was < 1ms). We do support per-benchmark setup/teardown, + but not per-execution. +*/ + +const totalDurationMs = 6000; +const blockDurationMs = 400; +const minExecutions = 10; + +class ExecutionTimer { + constructor(fn) { + this._fn = fn; + } + + async run(progressCallback, runOptions) { + this._isAborted = false; + this.numExecutions = 0; + this.bestExecutionsPerMs = null; + + // 'verify only' means just do a single execution to check it doesn't error + const targetBlockDuration = runOptions.verifyOnly ? 1 : blockDurationMs; + const targetMinExecutions = runOptions.verifyOnly ? 1 : minExecutions; + const targetTotalDuration = runOptions.verifyOnly ? 0 : totalDurationMs; + + const endTime = performance.now() + targetTotalDuration; + while (performance.now() < endTime || this.numExecutions < targetMinExecutions) { + if (this._isAborted) { + this.numExecutions = 0; + this.bestExecutionsPerMs = null; + break; + } + + const { blockDuration, blockExecutions } = await this._runBlock(targetBlockDuration); + this.numExecutions += blockExecutions; + + const blockExecutionsPerMs = blockExecutions / blockDuration; + if (blockExecutionsPerMs > this.bestExecutionsPerMs) { + this.bestExecutionsPerMs = blockExecutionsPerMs; + } + + progressCallback && progressCallback(); + } + } + + abort() { + this._isAborted = true; + } + + async _runBlock(targetBlockDuration) { + await nextTickPromise(); + + const blockStartTime = performance.now(); + const blockEndTime = blockStartTime + targetBlockDuration; + let executions = 0; + + while ((performance.now() < blockEndTime) && !this._isAborted) { + const syncResult = this._fn(); + + // Only yield the thread if we really have to + if (syncResult instanceof Promise) { + await syncResult; + } + + executions++; + } + + return { + blockDuration: performance.now() - blockStartTime, + blockExecutions: executions + }; + } +} + +class Benchmark extends EventEmitter { + constructor(group, name, fn, options) { + super(); + this._group = group; + this.name = name; + this._fn = fn; + this._options = options; + this._state = { status: BenchmarkStatus.idle }; + } + + get state() { + return this._state; + } + + run(runOptions) { + this._currentRunWasAborted = false; + if (this._state.status === BenchmarkStatus.idle) { + this._updateState({ status: BenchmarkStatus.queued }); + this.workQueueCancelHandle = addToWorkQueue(async () => { + try { + if (!(runOptions && runOptions.skipGroupSetup)) { + await this._group.runSetup(); + } + + this._updateState({ status: BenchmarkStatus.running }); + this._options && this._options.setup && await this._options.setup(); + await this._measureTimings(runOptions); + + this._options && this._options.teardown && await this._options.teardown(); + if (this._currentRunWasAborted || !(runOptions && runOptions.skipGroupTeardown)) { + await this._group.runTeardown(); + } + + this._updateState({ status: BenchmarkStatus.idle }); + } catch (ex) { + this._updateState({ status: BenchmarkStatus.error }); + console.error(ex); + } + }); + } + } + + stop() { + this._currentRunWasAborted = true; + this.timer && this.timer.abort(); + this.workQueueCancelHandle && this.workQueueCancelHandle.cancel(); + this._updateState({ status: BenchmarkStatus.idle }); + } + + async _measureTimings(runOptions) { + this._updateState({ numExecutions: 0, estimatedExecutionDurationMs: null }); + + this.timer = new ExecutionTimer(this._fn); + const updateTimingsDisplay = () => { + this._updateState({ + numExecutions: this.timer.numExecutions, + estimatedExecutionDurationMs: this.timer.bestExecutionsPerMs ? 1 / this.timer.bestExecutionsPerMs : null + }); + }; + + await this.timer.run(updateTimingsDisplay, { verifyOnly: runOptions.verifyOnly }); + updateTimingsDisplay(); + this.timer = null; + } + + _updateState(newState) { + Object.assign(this._state, newState); + this._emit('changed', this._state); + } +} + +const BenchmarkStatus = { + idle: 0, + queued: 1, + running: 2, + error: 3, +}; + +class Group extends EventEmitter { + constructor(name) { + super(); + this.name = name; + this.benchmarks = []; + } + + add(benchmark) { + this.benchmarks.push(benchmark); + benchmark.on('changed', () => this._emit('changed')); + } + + runAll(runOptions) { + this.benchmarks.forEach((benchmark, index) => { + benchmark.run(Object.assign({ + skipGroupSetup: index > 0, + skipGroupTeardown: index < this.benchmarks.length - 1, + }, runOptions)); + }); + } + + stopAll() { + this.benchmarks.forEach(b => b.stop()); + } + + async runSetup() { + this.setup && await this.setup(); + } + + async runTeardown() { + this.teardown && await this.teardown(); + } + + get status() { + return this.benchmarks.reduce( + (prev, next) => Math.max(prev, next.state.status), + BenchmarkStatus.idle + ); + } +} + +const groups = []; + +function group(name, configure) { + groups.push(new Group(name)); + configure && configure(); +} + +function benchmark(name, fn, options) { + const group = groups[groups.length - 1]; + group.add(new Benchmark(group, name, fn, options)); +} + +function setup(fn) { + groups[groups.length - 1].setup = fn; +} + +function teardown(fn) { + groups[groups.length - 1].teardown = fn; +} + +class BenchmarkDisplay { + constructor(htmlUi, benchmark) { + this.benchmark = benchmark; + this.elem = document.createElement('tr'); + + const headerCol = this.elem.appendChild(document.createElement('th')); + headerCol.className = 'pl-4'; + headerCol.textContent = benchmark.name; + headerCol.setAttribute('scope', 'row'); + + const progressCol = this.elem.appendChild(document.createElement('td')); + this.numExecutionsText = progressCol.appendChild(document.createTextNode('')); + + const timingCol = this.elem.appendChild(document.createElement('td')); + this.executionDurationText = timingCol.appendChild(document.createElement('span')); + + const runCol = this.elem.appendChild(document.createElement('td')); + runCol.className = 'pr-4'; + runCol.setAttribute('align', 'right'); + this.runButton = document.createElement('a'); + this.runButton.className = 'run-button'; + runCol.appendChild(this.runButton); + this.runButton.textContent = 'Run'; + this.runButton.onclick = evt => { + evt.preventDefault(); + this.benchmark.run(htmlUi.globalRunOptions); + }; + + benchmark.on('changed', state => this.updateDisplay(state)); + this.updateDisplay(this.benchmark.state); + } + + updateDisplay(state) { + const benchmark = this.benchmark; + this.elem.className = rowClass(state.status); + this.runButton.textContent = runButtonText(state.status); + this.numExecutionsText.textContent = state.numExecutions + ? `Executions: ${state.numExecutions}` : ''; + this.executionDurationText.innerHTML = state.estimatedExecutionDurationMs + ? `Duration: ${parseFloat(state.estimatedExecutionDurationMs.toPrecision(3))}ms` : ''; + if (state.status === BenchmarkStatus.idle) { + this.runButton.setAttribute('href', ''); + } else { + this.runButton.removeAttribute('href'); + if (state.status === BenchmarkStatus.error) { + this.numExecutionsText.textContent = 'Error - see console'; + } + } + } +} + +function runButtonText(status) { + switch (status) { + case BenchmarkStatus.idle: + case BenchmarkStatus.error: + return 'Run'; + case BenchmarkStatus.queued: + return 'Waiting...'; + case BenchmarkStatus.running: + return 'Running...'; + default: + throw new Error(`Unknown status: ${status}`); + } +} + +function rowClass(status) { + switch (status) { + case BenchmarkStatus.idle: + return 'benchmark-idle'; + case BenchmarkStatus.queued: + return 'benchmark-waiting'; + case BenchmarkStatus.running: + return 'benchmark-running'; + case BenchmarkStatus.error: + return 'benchmark-error'; + default: + throw new Error(`Unknown status: ${status}`); + } +} + +class GroupDisplay { + constructor(htmlUi, group) { + this.group = group; + + this.elem = document.createElement('div'); + this.elem.className = 'my-3 py-2 bg-white rounded shadow-sm'; + + const headerContainer = this.elem.appendChild(document.createElement('div')); + headerContainer.className = 'd-flex align-items-baseline px-4'; + const header = headerContainer.appendChild(document.createElement('h5')); + header.className = 'py-2'; + header.textContent = group.name; + + this.runButton = document.createElement('a'); + this.runButton.className = 'ml-auto run-button'; + this.runButton.setAttribute('href', ''); + headerContainer.appendChild(this.runButton); + this.runButton.textContent = 'Run all'; + this.runButton.onclick = evt => { + evt.preventDefault(); + group.runAll(htmlUi.globalRunOptions); + }; + + const table = this.elem.appendChild(document.createElement('table')); + table.className = 'table mb-0 benchmarks'; + const tbody = table.appendChild(document.createElement('tbody')); + + group.benchmarks.forEach(benchmark => { + const benchmarkDisplay = new BenchmarkDisplay(htmlUi, benchmark); + tbody.appendChild(benchmarkDisplay.elem); + }); + + group.on('changed', () => this.updateDisplay()); + this.updateDisplay(); + } + + updateDisplay() { + const canRun = this.group.status === BenchmarkStatus.idle; + this.runButton.style.display = canRun ? 'block' : 'none'; + } +} + +class HtmlUI { + constructor(title, selector) { + this.containerElement = document.querySelector(selector); + + const headerDiv = this.containerElement.appendChild(document.createElement('div')); + headerDiv.className = 'd-flex align-items-center'; + + const header = headerDiv.appendChild(document.createElement('h2')); + header.className = 'mx-3 flex-grow-1'; + header.textContent = title; + + const verifyCheckboxLabel = document.createElement('label'); + verifyCheckboxLabel.className = 'ml-auto mr-5'; + headerDiv.appendChild(verifyCheckboxLabel); + this.verifyCheckbox = verifyCheckboxLabel.appendChild(document.createElement('input')); + this.verifyCheckbox.type = 'checkbox'; + this.verifyCheckbox.className = 'mr-2'; + verifyCheckboxLabel.appendChild(document.createTextNode('Verify only')); + + this.runButton = document.createElement('button'); + this.runButton.className = 'btn btn-success ml-auto px-4 run-button'; + headerDiv.appendChild(this.runButton); + this.runButton.textContent = 'Run all'; + this.runButton.onclick = () => { + groups.forEach(g => g.runAll(this.globalRunOptions)); + }; + + this.stopButton = document.createElement('button'); + this.stopButton.className = 'btn btn-danger ml-auto px-4 stop-button'; + headerDiv.appendChild(this.stopButton); + this.stopButton.textContent = 'Stop'; + this.stopButton.onclick = () => { + groups.forEach(g => g.stopAll()); + }; + + groups.forEach(group$$1 => { + const groupDisplay = new GroupDisplay(this, group$$1); + this.containerElement.appendChild(groupDisplay.elem); + group$$1.on('changed', () => this.updateDisplay()); + }); + + this.updateDisplay(); + } + + updateDisplay() { + const areAllIdle = groups.reduce( + (prev, next) => prev && next.status === BenchmarkStatus.idle, + true + ); + this.runButton.style.display = areAllIdle ? 'block' : 'none'; + this.stopButton.style.display = areAllIdle ? 'none' : 'block'; + } + + get globalRunOptions() { + return { verifyOnly: this.verifyCheckbox.checked }; + } +} + +/** + * minibench + * https://github.com/SteveSanderson/minibench + */ + +export { group, benchmark, setup, teardown, HtmlUI }; diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/style.css b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/style.css new file mode 100644 index 0000000000..788330d1d5 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/style.css @@ -0,0 +1,19 @@ +body { padding: 2rem 0; background: #e8e8e8; } +.run-button::before { + content: '▶'; + font-family: 'Segoe UI Symbol', sans-serif; + font-size: 90%; + margin-right: 8px; +} +.run-button:hover { text-decoration: none; } +.benchmarks th { width: 40%; } +.benchmarks td:nth-child(1) { width: 20%; color: #888; } +.benchmarks td:nth-child(2) { width: 20%; color: #888; } +.benchmarks td:nth-child(3) { width: 20%; color: #888; } +.benchmarks b { color: black; font-weight: normal; } +.benchmark-running { background-color: #fff7a1; } +.benchmark-waiting { background-color: #f1f1f1; color: #bebebe; } +.benchmark-error { background-color: #ffa1a1; } +.benchmark-running .run-button::before, .benchmark-waiting .run-button::before { + display: none; +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/renderList.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/renderList.js new file mode 100644 index 0000000000..68bf32d747 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/renderList.js @@ -0,0 +1,45 @@ +import { group, benchmark, setup, teardown } from './lib/minibench/minibench.js'; +import { BlazorApp } from './util/BlazorApp.js'; +import { receiveEvent } from './util/BenchmarkEvents.js'; +import { setInputValue } from './util/DOM.js'; + +group('Rendering list', () => { + let app; + + setup(async () => { + app = new BlazorApp(); + await app.start(); + app.navigateTo('renderList'); + }); + + teardown(() => { + app.dispose(); + }); + + benchmark('Render 10 items', () => measureRenderList(app, 10)); + benchmark('Render 100 items', () => measureRenderList(app, 100)); + benchmark('Render 1000 items', () => measureRenderList(app, 1000)); + +}); + +async function measureRenderList(app, numItems) { + const appDocument = app.window.document; + const numItemsTextbox = appDocument.querySelector('#num-items'); + setInputValue(numItemsTextbox, numItems.toString()); + + let nextRenderCompletion = receiveEvent('Finished rendering list'); + appDocument.querySelector('#hide-list').click(); + await nextRenderCompletion; + + if (appDocument.querySelectorAll('tbody tr').length !== 0) { + throw new Error('Wrong number of items rendered'); + } + + nextRenderCompletion = receiveEvent('Finished rendering list'); + appDocument.querySelector('#show-list').click(); + await nextRenderCompletion; + + if (appDocument.querySelectorAll('tbody tr').length !== numItems) { + throw new Error('Wrong number of items rendered'); + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BenchmarkEvents.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BenchmarkEvents.js new file mode 100644 index 0000000000..ebfa7bda04 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BenchmarkEvents.js @@ -0,0 +1,21 @@ +const pendingCallbacksByEventName = {}; + +// Returns a promise that resolves the next time we receive the specified event +export function receiveEvent(name) { + let capturedResolver; + const resultPromise = new Promise(resolve => { + capturedResolver = resolve; + }); + + pendingCallbacksByEventName[name] = pendingCallbacksByEventName[name] || []; + pendingCallbacksByEventName[name].push(capturedResolver); + + return resultPromise; +} + +// Listen for messages forwarded from the child frame +window.receiveBenchmarkEvent = function (name) { + const callbacks = pendingCallbacksByEventName[name]; + delete pendingCallbacksByEventName[name]; + callbacks && callbacks.forEach(callback => callback()); +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BlazorApp.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BlazorApp.js new file mode 100644 index 0000000000..d3211c50db --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BlazorApp.js @@ -0,0 +1,25 @@ +import { receiveEvent } from './BenchmarkEvents.js'; + +export class BlazorApp { + constructor() { + this._frame = document.createElement('iframe'); + document.body.appendChild(this._frame); + } + + get window() { + return this._frame.contentWindow; + } + + async start() { + this._frame.src = 'blazor-frame.html'; + await receiveEvent('Rendered index.cshtml'); + } + + navigateTo(url) { + this.window.Blazor.navigateTo(url); + } + + dispose() { + document.body.removeChild(this._frame); + } +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/DOM.js b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/DOM.js new file mode 100644 index 0000000000..2a4f68cc8d --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/DOM.js @@ -0,0 +1,7 @@ +export function setInputValue(inputElement, value) { + inputElement.value = value; + + const event = document.createEvent('HTMLEvents'); + event.initEvent('change', false, true); + inputElement.dispatchEvent(event); +} diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/blazor-frame.html b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/blazor-frame.html new file mode 100644 index 0000000000..e93b5f8d82 --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/blazor-frame.html @@ -0,0 +1,24 @@ + + + + + E2EPerformance + + + + + + Loading... + + + diff --git a/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/index.html b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/index.html new file mode 100644 index 0000000000..13bbb314fe --- /dev/null +++ b/external/illinker-test-assets/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/index.html @@ -0,0 +1,17 @@ + + + + + E2EPerformance + + + + +
+

+ View benchmark app ⮕ +

+ + + + diff --git a/external/illinker-test-assets/wasm/Newtonsoft/App.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/App.cshtml new file mode 100644 index 0000000000..17a7599c80 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/App.cshtml @@ -0,0 +1,5 @@ + + diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Newtonsoft.csproj b/external/illinker-test-assets/wasm/Newtonsoft/Newtonsoft.csproj new file mode 100644 index 0000000000..5544f4c374 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Newtonsoft.csproj @@ -0,0 +1,24 @@ + + + + netstandard2.0 + dotnet + blazor serve + + https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json; + https://dotnet.myget.org/F/blazor-dev/api/v3/index.json; + + 7.3 + false + + + + + + + + + + + + diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Pages/Counter.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Pages/Counter.cshtml new file mode 100644 index 0000000000..d04028f9b1 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Pages/Counter.cshtml @@ -0,0 +1,16 @@ +@page "/counter" + +

Counter

+ +

Current count: @currentCount

+ + + +@functions { + int currentCount = 0; + + void IncrementCount() + { + currentCount++; + } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Pages/FetchData.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Pages/FetchData.cshtml new file mode 100644 index 0000000000..57095d4823 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Pages/FetchData.cshtml @@ -0,0 +1,66 @@ +@page "/fetchdata" +@inject HttpClient Http +@using Newtonsoft.Json + +

Weather forecast

+ +

This component demonstrates fetching data from the server.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@functions { + WeatherForecast[] forecasts; + String serialized; + + protected override async Task OnInitAsync() + { + var text = await Http.GetStringAsync ("sample-data/weather.json"); + forecasts = JsonConvert.DeserializeObject>(text).Append ( + new WeatherForecast { + Date = DateTime.Parse ("08/18/2018 07:22:16"), + TemperatureC = -28, + TemperatureF = -18, + Summary = "Why are temperatures ints??" + }).ToArray(); + + serialized = JsonConvert.SerializeObject (forecasts); + } + + class WeatherForecast + { + public DateTime Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF { get; set; } + + public string Summary { get; set; } + } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Pages/Index.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Pages/Index.cshtml new file mode 100644 index 0000000000..1df55d3efa --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Pages/Index.cshtml @@ -0,0 +1,7 @@ +@page "/" + +

Hello, world!

+ +Welcome to your new app. + + diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Pages/_ViewImports.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Pages/_ViewImports.cshtml new file mode 100644 index 0000000000..6fd38754a2 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Pages/_ViewImports.cshtml @@ -0,0 +1 @@ +@layout MainLayout diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Program.cs b/external/illinker-test-assets/wasm/Newtonsoft/Program.cs new file mode 100644 index 0000000000..f3eb18287e --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Program.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Blazor.Hosting; + +namespace Newtonsoft +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IWebAssemblyHostBuilder CreateHostBuilder(string[] args) => + BlazorWebAssemblyHost.CreateDefaultBuilder() + .UseBlazorStartup(); + } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Shared/MainLayout.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Shared/MainLayout.cshtml new file mode 100644 index 0000000000..f64b021347 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Shared/MainLayout.cshtml @@ -0,0 +1,15 @@ +@inherits LayoutComponentBase + + + +
+
+ About +
+ +
+ @Body +
+
diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Shared/NavMenu.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Shared/NavMenu.cshtml new file mode 100644 index 0000000000..cf29f2a420 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Shared/NavMenu.cshtml @@ -0,0 +1,37 @@ + + +
+ +
+ +@functions { + bool collapseNavMenu = true; + + string NavMenuCssClass => collapseNavMenu ? "collapse" : null; + + void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Shared/SurveyPrompt.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/Shared/SurveyPrompt.cshtml new file mode 100644 index 0000000000..5c080484c8 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Shared/SurveyPrompt.cshtml @@ -0,0 +1,15 @@ + + +@functions { + // Demonstrates how a parent component can supply parameters + [Parameter] string Title { get; set; } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/Startup.cs b/external/illinker-test-assets/wasm/Newtonsoft/Startup.cs new file mode 100644 index 0000000000..2d6a2a8ac3 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/Startup.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Components.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace Newtonsoft +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + } + + public void Configure(IComponentsApplicationBuilder app) + { + app.AddComponent("app"); + } + } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/_ViewImports.cshtml b/external/illinker-test-assets/wasm/Newtonsoft/_ViewImports.cshtml new file mode 100644 index 0000000000..996a103810 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/_ViewImports.cshtml @@ -0,0 +1,6 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Components.Layouts +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.JSInterop +@using Newtonsoft +@using Newtonsoft.Shared diff --git a/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/Newtonsoft.blazor.config b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/Newtonsoft.blazor.config new file mode 100644 index 0000000000..a75e2091dc --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/Newtonsoft.blazor.config @@ -0,0 +1,2 @@ +. +Newtonsoft/ diff --git a/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json new file mode 100644 index 0000000000..c7b4284b54 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/blazor.boot.json @@ -0,0 +1 @@ +{"main":"Newtonsoft.dll","entryPoint":"Newtonsoft.Program::Main","assemblyReferences":["Newtonsoft.Json.dll","netstandard.dll","System.Xml.Linq.dll","System.Core.dll","System.dll","System.Numerics.dll","mscorlib.dll","System.Xml.dll","Mono.Security.dll","System.Web.Services.dll","System.Transactions.dll","System.Runtime.Serialization.dll","System.ServiceModel.Internals.dll","System.Net.Http.dll","System.ComponentModel.Composition.dll","System.IO.Compression.FileSystem.dll","System.IO.Compression.dll","System.Drawing.dll","System.Data.dll","Microsoft.AspNetCore.Components.dll","Microsoft.JSInterop.dll","Microsoft.Extensions.DependencyInjection.Abstractions.dll","Microsoft.AspNetCore.Blazor.dll","Microsoft.Extensions.DependencyInjection.dll","Mono.WebAssembly.Interop.dll","Microsoft.AspNetCore.Components.Browser.dll"],"cssReferences":[],"jsReferences":[],"linkerEnabled":false} \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id new file mode 100644 index 0000000000..c27ac7d3e1 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.server.js.REMOVED.git-id @@ -0,0 +1 @@ +bd78d5f5acc7dde15d43f23a73683befa0032c0d \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js new file mode 100755 index 0000000000..b38cdbc26e --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/bin/Release/netstandard2.0/dist/_framework/components.webassembly.js @@ -0,0 +1 @@ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=56)}([,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(22),o={};t.attachRootComponentToElement=function(e,t,n){var a=document.querySelector(t);if(!a)throw new Error("Could not find any element matching selector '"+t+"'.");var i=o[e];i||(i=o[e]=new r.BrowserRenderer(e)),function(e){for(var t;t=e.firstChild;)e.removeChild(t)}(a),i.attachRootComponentToElement(n,a)},t.renderBatch=function(e,t){var n=o[e];if(!n)throw new Error("There is no browser renderer with ID "+e+".");for(var r=t.arrayRangeReader,a=t.updatedComponents(),i=r.values(a),u=r.count(a),l=t.referenceFrames(),s=r.values(l),c=t.diffReader,f=0;f0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0))throw new Error("Not implemented: inserting non-empty logical container");if(i(a))throw new Error("Not implemented: moving existing logical children");var l=u(t);if(n0)throw new Error("New logical elements must start empty");return e[r]=[],e},t.createAndInsertLogicalContainer=function(e,t){var n=document.createComment("!");return a(n,e,t),n},t.insertLogicalChild=a,t.removeLogicalChild=function e(t,n){var r=u(t).splice(n,1)[0];if(r instanceof Comment)for(var o=u(r);o.length>0;)e(r,0);var a=r;a.parentNode.removeChild(a)},t.getLogicalParent=i,t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===function(e){if(e instanceof Element)return e;if(e instanceof Comment)return e.parentNode;throw new Error("Not a valid logical element")}(e).namespaceURI}},function(e,t,n){"use strict";var r=this&&this.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]-1?a.substring(0,u):"",s=u>-1?a.substring(u+1):a,c=t.monoPlatform.findMethod(e,l,s,i);t.monoPlatform.callMethod(c,null,r)},callMethod:function(e,n,r){if(r.length>4)throw new Error("Currently, MonoPlatform supports passing a maximum of 4 arguments from JS to .NET. You tried to pass "+r.length+".");var o=Module.stackSave();try{for(var a=Module.stackAlloc(r.length),u=Module.stackAlloc(4),l=0;l0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1] +``` + +#### Using Open Iconic's SVG Sprite + +Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. + +Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* + +``` + + + +``` + +Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. + +``` +.icon { + width: 16px; + height: 16px; +} +``` + +Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. + +``` +.icon-account-login { + fill: #f00; +} +``` + +To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). + +#### Using Open Iconic's Icon Font... + + +##### …with Bootstrap + +You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` + + +``` + +``` + + +``` + +``` + +##### …with Foundation + +You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` + +``` + +``` + + +``` + +``` + +##### …on its own + +You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` + +``` + +``` + +``` + +``` + + +## License + +### Icons + +All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). + +### Fonts + +All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css new file mode 100644 index 0000000000..4664f2e8ca --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css @@ -0,0 +1 @@ +@font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} \ No newline at end of file diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.eot b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.eot new file mode 100644 index 0000000000000000000000000000000000000000..f98177dbf711863eff7c90f84d5d419d02d99ba8 GIT binary patch literal 28196 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 f%X4~$E_2;^J#ifP;CI~=<%5iE_!YyhznS + + + + +Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014 + By P.J. Onori +Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fab604866cd5e55ef4525ea22e420c411f510b01 GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.woff b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/open-iconic/font/fonts/open-iconic.woff new file mode 100644 index 0000000000000000000000000000000000000000..f9309988aeab3868040d3b322658902098eba27f GIT binary patch literal 14984 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 literal 0 HcmV?d00001 diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/site.css b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/site.css new file mode 100644 index 0000000000..e4526312ac --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/css/site.css @@ -0,0 +1,123 @@ +@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); + +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +app { + position: relative; + display: flex; + flex-direction: column; +} + +.top-row { + height: 3.5rem; + display: flex; + align-items: center; +} + +.main { + flex: 1; +} + + .main .top-row { + background-color: #e6e6e6; + border-bottom: 1px solid #d6d5d5; + } + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + + .sidebar .top-row { + background-color: rgba(0,0,0,0.4); + } + + .sidebar .navbar-brand { + font-size: 1.1rem; + } + + .sidebar .oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; + top: -2px; + } + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + + .nav-item a.active { + background-color: rgba(255,255,255,0.25); + color: white; + } + + .nav-item a:hover { + background-color: rgba(255,255,255,0.1); + color: white; + } + +.content { + padding-top: 1.1rem; +} + +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +@media (max-width: 767.98px) { + .main .top-row { + display: none; + } +} + +@media (min-width: 768px) { + app { + flex-direction: row; + } + + .sidebar { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .main .top-row { + position: sticky; + top: 0; + } + + .main > div { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } + + .navbar-toggler { + display: none; + } + + .sidebar .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } +} diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/index.html b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/index.html new file mode 100644 index 0000000000..3ddda29ca3 --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/index.html @@ -0,0 +1,16 @@ + + + + + + Newtonsoft + + + + + + Loading... + + + + diff --git a/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/sample-data/weather.json b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/sample-data/weather.json new file mode 100644 index 0000000000..df933ba96b --- /dev/null +++ b/external/illinker-test-assets/wasm/Newtonsoft/wwwroot/sample-data/weather.json @@ -0,0 +1,32 @@ +[ + { + "date": "2018-05-06", + "temperatureC": 1, + "summary": "Freezing", + "temperatureF": 33 + }, + { + "date": "2018-05-07", + "temperatureC": 14, + "summary": "Bracing", + "temperatureF": 57 + }, + { + "date": "2018-05-08", + "temperatureC": -13, + "summary": "Freezing", + "temperatureF": 9 + }, + { + "date": "2018-05-09", + "temperatureC": -16, + "summary": "Balmy", + "temperatureF": 4 + }, + { + "date": "2018-05-10", + "temperatureC": -2, + "summary": "Chilly", + "temperatureF": 29 + } +] diff --git a/external/illinker-test-assets/wasm/wasm.sln b/external/illinker-test-assets/wasm/wasm.sln new file mode 100644 index 0000000000..b80eb23f2e --- /dev/null +++ b/external/illinker-test-assets/wasm/wasm.sln @@ -0,0 +1,62 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld", "HelloWorld\HelloWorld.csproj", "{A81469C3-9744-4DA4-A192-29E440BEC5FF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newtonsoft", "Newtonsoft\Newtonsoft.csproj", "{968694DD-3195-4AEF-9EFC-C6E5921207B6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.E2EPerformance", "Microsoft.AspNetCore.Blazor.E2EPerformance\Microsoft.AspNetCore.Blazor.E2EPerformance.csproj", "{85FDC54F-74CA-4625-B02F-73ACBEC89230}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Debug|x64.ActiveCfg = Debug|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Debug|x64.Build.0 = Debug|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Debug|x86.ActiveCfg = Debug|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Debug|x86.Build.0 = Debug|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Release|Any CPU.Build.0 = Release|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Release|x64.ActiveCfg = Release|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Release|x64.Build.0 = Release|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Release|x86.ActiveCfg = Release|Any CPU + {A81469C3-9744-4DA4-A192-29E440BEC5FF}.Release|x86.Build.0 = Release|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Debug|x64.ActiveCfg = Debug|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Debug|x64.Build.0 = Debug|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Debug|x86.ActiveCfg = Debug|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Debug|x86.Build.0 = Debug|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Release|Any CPU.Build.0 = Release|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Release|x64.ActiveCfg = Release|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Release|x64.Build.0 = Release|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Release|x86.ActiveCfg = Release|Any CPU + {968694DD-3195-4AEF-9EFC-C6E5921207B6}.Release|x86.Build.0 = Release|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Debug|x64.ActiveCfg = Debug|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Debug|x64.Build.0 = Debug|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Debug|x86.ActiveCfg = Debug|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Debug|x86.Build.0 = Debug|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Release|Any CPU.Build.0 = Release|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Release|x64.ActiveCfg = Release|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Release|x64.Build.0 = Release|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Release|x86.ActiveCfg = Release|Any CPU + {85FDC54F-74CA-4625-B02F-73ACBEC89230}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/external/linker/.github/CODEOWNERS b/external/linker/.github/CODEOWNERS index 7e383fd756..b76a915136 100644 --- a/external/linker/.github/CODEOWNERS +++ b/external/linker/.github/CODEOWNERS @@ -6,8 +6,6 @@ * @marek-safar /src/analyzer @radekdoulik -/corebuild @sbomer +/src/ILLink.Tasks @sbomer /src/linker @marek-safar @mrvoorhe /test @marek-safar @mrvoorhe - -netci.groovy @sbomer diff --git a/external/linker/LICENSE b/external/linker/LICENSE index f8b0ee53c4..a616ed188d 100644 --- a/external/linker/LICENSE +++ b/external/linker/LICENSE @@ -1,19 +1,23 @@ +The MIT License (MIT) -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +Copyright (c) .NET Foundation and Contributors -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +All rights reserved. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/external/linker/README.md b/external/linker/README.md index 82b3bc4cee..119bed956d 100644 --- a/external/linker/README.md +++ b/external/linker/README.md @@ -20,8 +20,15 @@ TODO ## Build & Test Status +**Mono** + [![Build Status](https://jenkins.mono-project.com/buildStatus/icon?job=test-linker-mainline)](https://jenkins.mono-project.com/job/test-linker-mainline/) + +**.NET Core** + +[![Build Status](https://dev.azure.com/dnceng/public/_apis/build/status/mono/linker-ci?branchName=master)](https://dev.azure.com/dnceng/public/_build/latest?definitionId=364&branchName=master) + ## Link xml file examples A link xml file can be used to explicitly preserve assemblies, types, and members. Below is a sample file containing examples of various usages. diff --git a/external/linker/corebuild/build.cmd b/external/linker/corebuild/build.cmd deleted file mode 100644 index 42afd7a53b..0000000000 --- a/external/linker/corebuild/build.cmd +++ /dev/null @@ -1,6 +0,0 @@ -@if not defined _echo @echo off - -REM build.cmd will bootstrap the cli and ultimately call "dotnet pack" - -@call %~dp0dotnet.cmd pack %~dp0..\src\ILLink.Tasks\ILLink.Tasks.csproj %* -@exit /b %ERRORLEVEL% diff --git a/external/linker/corebuild/build.sh b/external/linker/corebuild/build.sh deleted file mode 100755 index 5eeec67142..0000000000 --- a/external/linker/corebuild/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -# build.sh will bootstrap the cli and ultimately call "dotnet build" - -working_tree_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -$working_tree_root/../eng/dotnet.sh build $working_tree_root/../illink.sln $@ -exit $? diff --git a/external/linker/corebuild/dotnet.cmd b/external/linker/corebuild/dotnet.cmd deleted file mode 100644 index 8a766516c8..0000000000 --- a/external/linker/corebuild/dotnet.cmd +++ /dev/null @@ -1,19 +0,0 @@ -@if not defined _echo @echo off -setlocal - -if not defined VisualStudioVersion ( - if defined VS150COMNTOOLS ( - call "%VS150COMNTOOLS%\VsDevCmd.bat" - goto :Run - ) - if defined VS140COMNTOOLS ( - call "%VS140COMNTOOLS%\VsDevCmd.bat" - goto :Run - ) - echo Error: Visual Studio 2015 or 2017 required. - exit /b 1 -) - -:Run -powershell -NoProfile -ExecutionPolicy unrestricted -Command "%~dp0..\eng\dotnet.ps1 -- %*" -exit /b %ERRORLEVEL% diff --git a/external/linker/corebuild/integration/build.ps1 b/external/linker/corebuild/integration/build.ps1 deleted file mode 100644 index c633e3b459..0000000000 --- a/external/linker/corebuild/integration/build.ps1 +++ /dev/null @@ -1,9 +0,0 @@ -$tasksFolder="~\.nuget\packages\illink.tasks" -If (Test-Path $tasksFolder) { - Remove-Item -r $tasksFolder -} - -$dotNetTool = Join-Path $PSScriptRoot "..\..\eng\dotnet.ps1" -# create integration packages -& $dotNetTool restore (Join-Path $PSScriptRoot ".." ".." "illink.sln") -& $dotNetTool pack (Join-Path $PSScriptRoot ".." ".." "illink.sln") diff --git a/external/linker/corebuild/integration/build.sh b/external/linker/corebuild/integration/build.sh deleted file mode 100755 index 6656cbf102..0000000000 --- a/external/linker/corebuild/integration/build.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -__scriptpath=$(cd "$(dirname "$0")"; pwd -P) - -tasksFolder=~/.nuget/packages/illink.tasks -if [ -d $tasksFolder ] -then - rm -r $tasksFolder -fi - -dotNetTool=$__scriptpath/../../eng/dotnet.sh -# create integration packages -$dotNetTool restore $__scriptpath/../../illink.sln -$dotNetTool pack $__scriptpath/../../illink.sln diff --git a/external/linker/corebuild/restore.cmd b/external/linker/corebuild/restore.cmd deleted file mode 100644 index c6a0fa143b..0000000000 --- a/external/linker/corebuild/restore.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@if not defined _echo @echo off - -REM restore.sh will bootstrap the cli and ultimately call "dotnet -REM restore". Dependencies of the linker will get restored as well. - -@call powershell %~dp0..\eng\common\msbuild.ps1 /t:Restore %~dp0..\illink.sln %* -@exit /b %ERRORLEVEL% diff --git a/external/linker/corebuild/restore.sh b/external/linker/corebuild/restore.sh deleted file mode 100755 index 9cd5482e89..0000000000 --- a/external/linker/corebuild/restore.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -# restore.sh will bootstrap the cli and ultimately call "dotnet -# restore". Dependencies of the linker will get restored as well. - -working_tree_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -$working_tree_root/../eng/dotnet.sh restore $working_tree_root/../illink.sln $@ diff --git a/external/linker/eng/Version.Details.xml b/external/linker/eng/Version.Details.xml index 8a5c7574fa..5136a30856 100644 --- a/external/linker/eng/Version.Details.xml +++ b/external/linker/eng/Version.Details.xml @@ -1,10 +1,11 @@ - + + - + https://github.com/dotnet/arcade - a0ed7c38c714b1f60f50a4a408171e2c3bcf8f7f + dc538a29793fd56618d0fa3186e2388d47d00c19 diff --git a/external/linker/eng/Versions.props b/external/linker/eng/Versions.props index d99dd1d65d..4593f389e7 100644 --- a/external/linker/eng/Versions.props +++ b/external/linker/eng/Versions.props @@ -4,16 +4,17 @@ 0.1.6 prerelease - 3.0.0-preview4-27520-71 + + 1.5.0 + 15.4.8 + 15.4.8 - $(RestoreSources); https://dotnetfeed.blob.core.windows.net/dotnet-coreclr/index.json - diff --git a/external/linker/eng/azure-pipelines.yml b/external/linker/eng/azure-pipelines.yml index 9c102c8487..7ea7b62cb2 100644 --- a/external/linker/eng/azure-pipelines.yml +++ b/external/linker/eng/azure-pipelines.yml @@ -29,7 +29,8 @@ jobs: ${{ if eq(variables.officialBuild, 'false') }}: name: Hosted VS2017 ${{ if eq(variables.officialBuild, 'true') }}: - name: dotnet-internal-temp + name: NetCoreInternal-Int-Pool + queue: BuildPool.Windows.10.Amd64.VS2017 variables: - ${{ if eq(variables.officialBuild, 'false') }}: - _SignType: test diff --git a/external/linker/eng/common/CheckSymbols.ps1 b/external/linker/eng/common/CheckSymbols.ps1 new file mode 100644 index 0000000000..b8d84607b8 --- /dev/null +++ b/external/linker/eng/common/CheckSymbols.ps1 @@ -0,0 +1,158 @@ +param( + [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored + [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation + [Parameter(Mandatory=$true)][string] $SymbolToolPath # Full path to directory where dotnet symbol-tool was installed +) + +Add-Type -AssemblyName System.IO.Compression.FileSystem + +function FirstMatchingSymbolDescriptionOrDefault { + param( + [string] $FullPath, # Full path to the module that has to be checked + [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols + [string] $SymbolsPath + ) + + $FileName = [System.IO.Path]::GetFileName($FullPath) + $Extension = [System.IO.Path]::GetExtension($FullPath) + + # Those below are potential symbol files that the `dotnet symbol` might + # return. Which one will be returned depend on the type of file we are + # checking and which type of file was uploaded. + + # The file itself is returned + $SymbolPath = $SymbolsPath + "\" + $FileName + + # PDB file for the module + $PdbPath = $SymbolPath.Replace($Extension, ".pdb") + + # PDB file for R2R module (created by crossgen) + $NGenPdb = $SymbolPath.Replace($Extension, ".ni.pdb") + + # DBG file for a .so library + $SODbg = $SymbolPath.Replace($Extension, ".so.dbg") + + # DWARF file for a .dylib + $DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf") + + .\dotnet-symbol.exe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null + + if (Test-Path $PdbPath) { + return "PDB" + } + elseif (Test-Path $NGenPdb) { + return "NGen PDB" + } + elseif (Test-Path $SODbg) { + return "DBG for SO" + } + elseif (Test-Path $DylibDwarf) { + return "Dwarf for Dylib" + } + elseif (Test-Path $SymbolPath) { + return "Module" + } + else { + return $null + } +} + +function CountMissingSymbols { + param( + [string] $PackagePath # Path to a NuGet package + ) + + # Ensure input file exist + if (!(Test-Path $PackagePath)) { + throw "Input file does not exist: $PackagePath" + } + + # Extensions for which we'll look for symbols + $RelevantExtensions = @(".dll", ".exe", ".so", ".dylib") + + # How many files are missing symbol information + $MissingSymbols = 0 + + $PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath) + $PackageGuid = New-Guid + $ExtractPath = Join-Path -Path $ExtractPath -ChildPath $PackageGuid + $SymbolsPath = Join-Path -Path $ExtractPath -ChildPath "Symbols" + + [System.IO.Compression.ZipFile]::ExtractToDirectory($PackagePath, $ExtractPath) + + # Makes easier to reference `symbol tool` + Push-Location $SymbolToolPath + + Get-ChildItem -Recurse $ExtractPath | + Where-Object {$RelevantExtensions -contains $_.Extension} | + ForEach-Object { + if ($_.FullName -Match "\\ref\\") { + Write-Host "`t Ignoring reference assembly file" $_.FullName + return + } + + $SymbolsOnMSDL = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--microsoft-symbol-server" $SymbolsPath + $SymbolsOnSymWeb = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--internal-server" $SymbolsPath + + Write-Host -NoNewLine "`t Checking file" $_.FullName "... " + + if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { + Write-Host "Symbols found on MSDL (" $SymbolsOnMSDL ") and SymWeb (" $SymbolsOnSymWeb ")" + } + else { + $MissingSymbols++ + + if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { + Write-Host "No symbols found on MSDL or SymWeb!" + } + else { + if ($SymbolsOnMSDL -eq $null) { + Write-Host "No symbols found on MSDL!" + } + else { + Write-Host "No symbols found on SymWeb!" + } + } + } + } + + Pop-Location + + return $MissingSymbols +} + +function CheckSymbolsAvailable { + if (Test-Path $ExtractPath) { + Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue + } + + Get-ChildItem "$InputPath\*.nupkg" | + ForEach-Object { + $FileName = $_.Name + + # These packages from Arcade-Services include some native libraries that + # our current symbol uploader can't handle. Below is a workaround until + # we get issue: https://github.com/dotnet/arcade/issues/2457 sorted. + if ($FileName -Match "Microsoft\.DotNet\.Darc\.") { + Write-Host "Ignoring Arcade-services file: $FileName" + Write-Host + return + } + elseif ($FileName -Match "Microsoft\.DotNet\.Maestro\.Tasks\.") { + Write-Host "Ignoring Arcade-services file: $FileName" + Write-Host + return + } + + Write-Host "Validating $FileName " + $Status = CountMissingSymbols "$InputPath\$FileName" + + if ($Status -ne 0) { + Write-Error "Missing symbols for $Status modules in the package $FileName" + } + + Write-Host + } +} + +CheckSymbolsAvailable diff --git a/external/linker/eng/common/PublishToPackageFeed.proj b/external/linker/eng/common/PublishToPackageFeed.proj index 8149e3fb6a..a1b1333723 100644 --- a/external/linker/eng/common/PublishToPackageFeed.proj +++ b/external/linker/eng/common/PublishToPackageFeed.proj @@ -1,22 +1,29 @@ - + + + netcoreapp2.1 - + + + - + @@ -27,7 +34,33 @@ - + + + + https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + https://dotnetfeed.blob.core.windows.net/arcade-validation/index.json + https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore/index.json + https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json + https://dotnetfeed.blob.core.windows.net/aspnet-entityframeworkcore/index.json + https://dotnetfeed.blob.core.windows.net/aspnet-extensions/index.json + https://dotnetfeed.blob.core.windows.net/dotnet-coreclr/index.json + https://dotnetfeed.blob.core.windows.net/dotnet-sdk/index.json + https://dotnetfeed.blob.core.windows.net/dotnet-tools-internal/index.json + https://dotnetfeed.blob.core.windows.net/dotnet-toolset/index.json + https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json + https://dotnetfeed.blob.core.windows.net/nuget-nugetclient/index.json + https://dotnetfeed.blob.core.windows.net/aspnet-entityframework6/index.json + https://dotnetfeed.blob.core.windows.net/aspnet-blazor/index.json + + + + + PackageAssetsBasePath="$(PackageBasePath)"/> diff --git a/external/linker/eng/common/PublishToSymbolServers.proj b/external/linker/eng/common/PublishToSymbolServers.proj new file mode 100644 index 0000000000..5d55e312b0 --- /dev/null +++ b/external/linker/eng/common/PublishToSymbolServers.proj @@ -0,0 +1,82 @@ + + + + + + netcoreapp2.1 + + + + + + + + + + + + + + + + 3650 + true + false + + + + + + + + + + + + + + + + + diff --git a/external/linker/eng/common/SigningValidation.proj b/external/linker/eng/common/SigningValidation.proj new file mode 100644 index 0000000000..7045fb6fb9 --- /dev/null +++ b/external/linker/eng/common/SigningValidation.proj @@ -0,0 +1,83 @@ + + + + + + netcoreapp2.1 + + + + + + + + $(NuGetPackageRoot)Microsoft.DotNet.SignCheck\$(SignCheckVersion)\tools\Microsoft.DotNet.SignCheck.exe + + $(PackageBasePath) + signcheck.log + signcheck.errors.log + signcheck.exclusions.txt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/linker/eng/common/SourceLinkValidation.ps1 b/external/linker/eng/common/SourceLinkValidation.ps1 new file mode 100644 index 0000000000..cb2d28cb99 --- /dev/null +++ b/external/linker/eng/common/SourceLinkValidation.ps1 @@ -0,0 +1,184 @@ +param( + [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where Symbols.NuGet packages to be checked are stored + [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation + [Parameter(Mandatory=$true)][string] $SourceLinkToolPath, # Full path to directory where dotnet SourceLink CLI was installed + [Parameter(Mandatory=$true)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade + [Parameter(Mandatory=$true)][string] $GHCommit # GitHub commit SHA used to build the packages +) + +# Cache/HashMap (File -> Exist flag) used to consult whether a file exist +# in the repository at a specific commit point. This is populated by inserting +# all files present in the repo at a specific commit point. +$global:RepoFiles = @{} + +$ValidatePackage = { + param( + [string] $PackagePath # Full path to a Symbols.NuGet package + ) + + # Ensure input file exist + if (!(Test-Path $PackagePath)) { + throw "Input file does not exist: $PackagePath" + } + + # Extensions for which we'll look for SourceLink information + # For now we'll only care about Portable & Embedded PDBs + $RelevantExtensions = @(".dll", ".exe", ".pdb") + + Write-Host -NoNewLine "Validating" ([System.IO.Path]::GetFileName($PackagePath)) "... " + + $PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath) + $ExtractPath = Join-Path -Path $using:ExtractPath -ChildPath $PackageId + $FailedFiles = 0 + + Add-Type -AssemblyName System.IO.Compression.FileSystem + + [System.IO.Directory]::CreateDirectory($ExtractPath); + + $zip = [System.IO.Compression.ZipFile]::OpenRead($PackagePath) + + $zip.Entries | + Where-Object {$RelevantExtensions -contains [System.IO.Path]::GetExtension($_.Name)} | + ForEach-Object { + $FileName = $_.FullName + $Extension = [System.IO.Path]::GetExtension($_.Name) + $FakeName = -Join((New-Guid), $Extension) + $TargetFile = Join-Path -Path $ExtractPath -ChildPath $FakeName + + # We ignore resource DLLs + if ($FileName.EndsWith(".resources.dll")) { + return + } + + [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $TargetFile, $true) + + $ValidateFile = { + param( + [string] $FullPath, # Full path to the module that has to be checked + [string] $RealPath, + [ref] $FailedFiles + ) + + # Makes easier to reference `sourcelink cli` + Push-Location $using:SourceLinkToolPath + + $SourceLinkInfos = .\sourcelink.exe print-urls $FullPath | Out-String + + if ($LASTEXITCODE -eq 0 -and -not ([string]::IsNullOrEmpty($SourceLinkInfos))) { + $NumFailedLinks = 0 + + # We only care about Http addresses + $Matches = (Select-String '(http[s]?)(:\/\/)([^\s,]+)' -Input $SourceLinkInfos -AllMatches).Matches + + if ($Matches.Count -ne 0) { + $Matches.Value | + ForEach-Object { + $Link = $_ + $CommitUrl = -Join("https://raw.githubusercontent.com/", $using:GHRepoName, "/", $using:GHCommit, "/") + $FilePath = $Link.Replace($CommitUrl, "") + $Status = 200 + $Cache = $using:RepoFiles + + if ( !($Cache.ContainsKey($FilePath)) ) { + try { + $Uri = $Link -as [System.URI] + + # Only GitHub links are valid + if ($Uri.AbsoluteURI -ne $null -and $Uri.Host -match "github") { + $Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode + } + else { + $Status = 0 + } + } + catch { + $Status = 0 + } + } + + if ($Status -ne 200) { + if ($NumFailedLinks -eq 0) { + if ($FailedFiles.Value -eq 0) { + Write-Host + } + + Write-Host "`tFile $RealPath has broken links:" + } + + Write-Host "`t`tFailed to retrieve $Link" + + $NumFailedLinks++ + } + } + } + + if ($NumFailedLinks -ne 0) { + $FailedFiles.value++ + $global:LASTEXITCODE = 1 + } + } + + Pop-Location + } + + &$ValidateFile $TargetFile $FileName ([ref]$FailedFiles) + } + + $zip.Dispose() + + if ($FailedFiles -eq 0) { + Write-Host "Passed." + } +} + +function ValidateSourceLinkLinks { + if (!($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) { + Write-Host "GHRepoName should be in the format /" + $global:LASTEXITCODE = 1 + return + } + + if (!($GHCommit -Match "^[0-9a-fA-F]{40}$")) { + Write-Host "GHCommit should be a 40 chars hexadecimal string" + $global:LASTEXITCODE = 1 + return + } + + $RepoTreeURL = -Join("https://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1") + $CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript") + + try { + # Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash + $Data = Invoke-WebRequest $RepoTreeURL | ConvertFrom-Json | Select-Object -ExpandProperty tree + + foreach ($file in $Data) { + $Extension = [System.IO.Path]::GetExtension($file.path) + + if ($CodeExtensions.Contains($Extension)) { + $RepoFiles[$file.path] = 1 + } + } + } + catch { + Write-Host "Problems downloading the list of files from the repo. Url used: $RepoTreeURL" + $global:LASTEXITCODE = 1 + return + } + + if (Test-Path $ExtractPath) { + Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue + } + + # Process each NuGet package in parallel + $Jobs = @() + Get-ChildItem "$InputPath\*.symbols.nupkg" | + ForEach-Object { + $Jobs += Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName + } + + foreach ($Job in $Jobs) { + Wait-Job -Id $Job.Id | Receive-Job + } +} + +Measure-Command { ValidateSourceLinkLinks } diff --git a/external/linker/eng/common/build.ps1 b/external/linker/eng/common/build.ps1 index 8279dc7133..feb58d1419 100644 --- a/external/linker/eng/common/build.ps1 +++ b/external/linker/eng/common/build.ps1 @@ -1,6 +1,7 @@ [CmdletBinding(PositionalBinding=$false)] Param( [string][Alias('c')]$configuration = "Debug", + [string]$platform = $null, [string] $projects, [string][Alias('v')]$verbosity = "minimal", [string] $msbuildEngine = $null, @@ -11,7 +12,7 @@ Param( [switch][Alias('b')]$build, [switch] $rebuild, [switch] $deploy, - [switch] $test, + [switch][Alias('t')]$test, [switch] $integrationTest, [switch] $performanceTest, [switch] $sign, @@ -29,6 +30,7 @@ Param( function Print-Usage() { Write-Host "Common settings:" Write-Host " -configuration Build configuration: 'Debug' or 'Release' (short: -c)" + Write-Host " -platform Platform configuration: 'x86', 'x64' or any valid Platform value to pass to msbuild" Write-Host " -verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)" Write-Host " -binaryLog Output binary log (short: -bl)" Write-Host " -help Print help and exit" @@ -40,10 +42,10 @@ function Print-Usage() { Write-Host " -rebuild Rebuild solution" Write-Host " -deploy Deploy built VSIXes" Write-Host " -deployDeps Deploy dependencies (e.g. VSIXes for integration tests)" - Write-Host " -test Run all unit tests in the solution" - Write-Host " -pack Package build outputs into NuGet packages and Willow components" + Write-Host " -test Run all unit tests in the solution (short: -t)" Write-Host " -integrationTest Run all integration tests in the solution" Write-Host " -performanceTest Run all performance tests in the solution" + Write-Host " -pack Package build outputs into NuGet packages and Willow components" Write-Host " -sign Sign build outputs" Write-Host " -publish Publish artifacts (e.g. symbols)" Write-Host "" @@ -51,9 +53,11 @@ function Print-Usage() { Write-Host "Advanced settings:" Write-Host " -projects Semi-colon delimited list of sln/proj's to build. Globbing is supported (*.sln)" Write-Host " -ci Set when running on CI server" - Write-Host " -prepareMachine Prepare machine for CI run" + Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build" + Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host "" + Write-Host "Command line arguments not listed above are passed thru to msbuild." Write-Host "The above arguments can be shortened as much as to be unambiguous (e.g. -co for configuration, -t for test, etc.)." } @@ -75,6 +79,7 @@ function Build { InitializeCustomToolset $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } + $platformArg = if ($platform) { "/p:Platform=$platform" } else { "" } if ($projects) { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. @@ -86,6 +91,7 @@ function Build { MSBuild $toolsetBuildProj ` $bl ` + $platformArg ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` @@ -99,12 +105,11 @@ function Build { /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` - /p:ContinuousIntegrationBuild=$ci ` @properties } try { - if ($help -or (($properties -ne $null) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { + if ($help -or (($null -ne $properties) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { Print-Usage exit 0 } @@ -121,12 +126,15 @@ try { . $configureToolsetScript } + if (($restore) -and ($null -eq $env:DisableNativeToolsetInstalls)) { + InitializeNativeTools + } + Build } catch { - Write-Host $_ - Write-Host $_.Exception Write-Host $_.ScriptStackTrace + Write-PipelineTelemetryError -Category "InitializeToolset" -Message $_ ExitWithExitCode 1 } diff --git a/external/linker/eng/common/build.sh b/external/linker/eng/common/build.sh index 4fe8b41ed7..6236fc4d38 100755 --- a/external/linker/eng/common/build.sh +++ b/external/linker/eng/common/build.sh @@ -10,20 +10,24 @@ set -e usage() { echo "Common settings:" - echo " --configuration Build configuration: 'Debug' or 'Release' (short: --c)" + echo " --configuration Build configuration: 'Debug' or 'Release' (short: -c)" echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)" echo " --binaryLog Create MSBuild binary log (short: -bl)" - echo "" - echo "Actions:" - echo " --restore Restore dependencies (short: -r)" - echo " --build Build all projects (short: -b)" - echo " --rebuild Rebuild all projects" - echo " --test Run all unit tests (short: -t)" - echo " --sign Sign build outputs" - echo " --publish Publish artifacts (e.g. symbols)" - echo " --pack Package build outputs into NuGet packages and Willow components" echo " --help Print help and exit (short: -h)" echo "" + + echo "Actions:" + echo " --restore Restore dependencies (short: -r)" + echo " --build Build solution (short: -b)" + echo " --rebuild Rebuild solution" + echo " --test Run all unit tests in the solution (short: -t)" + echo " --integrationTest Run all integration tests in the solution" + echo " --performanceTest Run all performance tests in the solution" + echo " --pack Package build outputs into NuGet packages and Willow components" + echo " --sign Sign build outputs" + echo " --publish Publish artifacts (e.g. symbols)" + echo "" + echo "Advanced settings:" echo " --projects Project or solution file(s) to build" echo " --ci Set when running on CI server" @@ -31,7 +35,8 @@ usage() echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" echo "" - echo "Command line arguments starting with '/p:' are passed through to MSBuild." + echo "Command line arguments not listed above are passed thru to msbuild." + echo "Arguments can also be passed in with a single hyphen." } source="${BASH_SOURCE[0]}" @@ -50,10 +55,10 @@ restore=false build=false rebuild=false test=false -pack=false -publish=false integration_test=false performance_test=false +pack=false +publish=false sign=false public=false ci=false @@ -61,89 +66,83 @@ ci=false warn_as_error=true node_reuse=true binary_log=false +pipelines_log=false projects='' configuration='Debug' prepare_machine=false verbosity='minimal' + properties='' while [[ $# > 0 ]]; do - opt="$(echo "$1" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in - --help|-h) + -help|-h) usage exit 0 ;; - --configuration|-c) + -configuration|-c) configuration=$2 shift ;; - --verbosity|-v) + -verbosity|-v) verbosity=$2 shift ;; - --binarylog|-bl) + -binarylog|-bl) binary_log=true ;; - --restore|-r) + -pipelineslog|-pl) + pipelines_log=true + ;; + -restore|-r) restore=true ;; - --build|-b) + -build|-b) build=true ;; - --rebuild) + -rebuild) rebuild=true ;; - --pack) + -pack) pack=true ;; - --test|-t) + -test|-t) test=true ;; - --integrationtest) + -integrationtest) integration_test=true ;; - --performancetest) + -performancetest) performance_test=true ;; - --sign) + -sign) sign=true ;; - --publish) + -publish) publish=true ;; - --preparemachine) + -preparemachine) prepare_machine=true ;; - --projects) + -projects) projects=$2 shift ;; - --ci) + -ci) ci=true ;; - --warnaserror) + -warnaserror) warn_as_error=$2 shift ;; - --nodereuse) + -nodereuse) node_reuse=$2 shift ;; - /p:*) - properties="$properties $1" - ;; - /m:*) - properties="$properties $1" - ;; - /bl:*) - properties="$properties $1" - ;; *) - echo "Invalid argument: $1" - usage - exit 1 + properties="$properties $1" ;; esac @@ -151,6 +150,7 @@ while [[ $# > 0 ]]; do done if [[ "$ci" == true ]]; then + pipelines_log=true binary_log=true node_reuse=false fi @@ -191,7 +191,6 @@ function Build { /p:PerformanceTest=$performance_test \ /p:Sign=$sign \ /p:Publish=$publish \ - /p:ContinuousIntegrationBuild=$ci \ $properties ExitWithExitCode 0 @@ -210,4 +209,8 @@ if [[ -n "${useInstalledDotNetCli:-}" ]]; then use_installed_dotnet_cli="$useInstalledDotNetCli" fi +if [[ "$restore" == true && -z ${DisableNativeToolsetInstalls:-} ]]; then + InitializeNativeTools +fi + Build diff --git a/external/linker/eng/common/cross/arm/sources.list.vivid b/external/linker/eng/common/cross/arm/sources.list.vivid deleted file mode 100644 index 0b1215e475..0000000000 --- a/external/linker/eng/common/cross/arm/sources.list.vivid +++ /dev/null @@ -1,11 +0,0 @@ -deb http://ports.ubuntu.com/ubuntu-ports/ vivid main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ vivid-updates main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid-updates main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ vivid-backports main restricted -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid-backports main restricted - -deb http://ports.ubuntu.com/ubuntu-ports/ vivid-security main restricted universe multiverse -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid-security main restricted universe multiverse \ No newline at end of file diff --git a/external/linker/eng/common/cross/arm/sources.list.wily b/external/linker/eng/common/cross/arm/sources.list.wily deleted file mode 100644 index e23d1e02a0..0000000000 --- a/external/linker/eng/common/cross/arm/sources.list.wily +++ /dev/null @@ -1,11 +0,0 @@ -deb http://ports.ubuntu.com/ubuntu-ports/ wily main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ wily-updates main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily-updates main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ wily-backports main restricted -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily-backports main restricted - -deb http://ports.ubuntu.com/ubuntu-ports/ wily-security main restricted universe multiverse -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily-security main restricted universe multiverse \ No newline at end of file diff --git a/external/linker/eng/common/cross/arm64/sources.list.buster b/external/linker/eng/common/cross/arm64/sources.list.buster new file mode 100644 index 0000000000..7194ac64a9 --- /dev/null +++ b/external/linker/eng/common/cross/arm64/sources.list.buster @@ -0,0 +1,11 @@ +deb http://deb.debian.org/debian buster main +deb-src http://deb.debian.org/debian buster main + +deb http://deb.debian.org/debian-security/ buster/updates main +deb-src http://deb.debian.org/debian-security/ buster/updates main + +deb http://deb.debian.org/debian buster-updates main +deb-src http://deb.debian.org/debian buster-updates main + +deb http://deb.debian.org/debian buster-backports main contrib non-free +deb-src http://deb.debian.org/debian buster-backports main contrib non-free diff --git a/external/linker/eng/common/cross/arm64/sources.list.stretch b/external/linker/eng/common/cross/arm64/sources.list.stretch new file mode 100644 index 0000000000..0e12157743 --- /dev/null +++ b/external/linker/eng/common/cross/arm64/sources.list.stretch @@ -0,0 +1,12 @@ +deb http://deb.debian.org/debian stretch main +deb-src http://deb.debian.org/debian stretch main + +deb http://deb.debian.org/debian-security/ stretch/updates main +deb-src http://deb.debian.org/debian-security/ stretch/updates main + +deb http://deb.debian.org/debian stretch-updates main +deb-src http://deb.debian.org/debian stretch-updates main + +deb http://deb.debian.org/debian stretch-backports main contrib non-free +deb-src http://deb.debian.org/debian stretch-backports main contrib non-free + diff --git a/external/linker/eng/common/cross/arm64/sources.list.vivid b/external/linker/eng/common/cross/arm64/sources.list.vivid deleted file mode 100644 index 0b1215e475..0000000000 --- a/external/linker/eng/common/cross/arm64/sources.list.vivid +++ /dev/null @@ -1,11 +0,0 @@ -deb http://ports.ubuntu.com/ubuntu-ports/ vivid main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ vivid-updates main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid-updates main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ vivid-backports main restricted -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid-backports main restricted - -deb http://ports.ubuntu.com/ubuntu-ports/ vivid-security main restricted universe multiverse -deb-src http://ports.ubuntu.com/ubuntu-ports/ vivid-security main restricted universe multiverse \ No newline at end of file diff --git a/external/linker/eng/common/cross/arm64/sources.list.wily b/external/linker/eng/common/cross/arm64/sources.list.wily deleted file mode 100644 index e23d1e02a0..0000000000 --- a/external/linker/eng/common/cross/arm64/sources.list.wily +++ /dev/null @@ -1,11 +0,0 @@ -deb http://ports.ubuntu.com/ubuntu-ports/ wily main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ wily-updates main restricted universe -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily-updates main restricted universe - -deb http://ports.ubuntu.com/ubuntu-ports/ wily-backports main restricted -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily-backports main restricted - -deb http://ports.ubuntu.com/ubuntu-ports/ wily-security main restricted universe multiverse -deb-src http://ports.ubuntu.com/ubuntu-ports/ wily-security main restricted universe multiverse \ No newline at end of file diff --git a/external/linker/eng/common/cross/armel/tizen-fetch.sh b/external/linker/eng/common/cross/armel/tizen-fetch.sh index ba16e991c7..ed70e0a86e 100644 --- a/external/linker/eng/common/cross/armel/tizen-fetch.sh +++ b/external/linker/eng/common/cross/armel/tizen-fetch.sh @@ -157,15 +157,15 @@ fetch_tizen_pkgs() Inform "Initialize arm base" fetch_tizen_pkgs_init standard base Inform "fetch common packages" -fetch_tizen_pkgs armv7l gcc glibc glibc-devel libicu libicu-devel +fetch_tizen_pkgs armv7l gcc glibc glibc-devel libicu libicu-devel libatomic fetch_tizen_pkgs noarch linux-glibc-devel Inform "fetch coreclr packages" -fetch_tizen_pkgs armv7l lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel tizen-release lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu +fetch_tizen_pkgs armv7l lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu Inform "fetch corefx packages" fetch_tizen_pkgs armv7l libcom_err libcom_err-devel zlib zlib-devel libopenssl libopenssl-devel krb5 krb5-devel libcurl libcurl-devel Inform "Initialize standard unified" fetch_tizen_pkgs_init standard unified Inform "fetch corefx packages" -fetch_tizen_pkgs armv7l gssdp gssdp-devel +fetch_tizen_pkgs armv7l gssdp gssdp-devel tizen-release diff --git a/external/linker/eng/common/cross/build-rootfs.sh b/external/linker/eng/common/cross/build-rootfs.sh index 805948ca83..7c4e122651 100644 --- a/external/linker/eng/common/cross/build-rootfs.sh +++ b/external/linker/eng/common/cross/build-rootfs.sh @@ -2,21 +2,21 @@ usage() { - echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount]" + echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfsdir ]" echo "BuildArch can be: arm(default), armel, arm64, x86" - echo "LinuxCodeName - optional, Code name for Linux, can be: trusty(default), vivid, wily, xenial, zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." - echo "lldbx.y - optional, LLDB version, can be: lldb3.6(default), lldb3.8, lldb3.9, lldb4.0, no-lldb. Ignored for alpine" + echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." + echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine" echo "--skipunmount - optional, will skip the unmount of rootfs folder." exit 1 } -__LinuxCodeName=trusty +__LinuxCodeName=xenial __CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) __InitialDir=$PWD __BuildArch=arm __UbuntuArch=armhf __UbuntuRepo="http://ports.ubuntu.com/" -__LLDB_Package="lldb-3.6-dev" +__LLDB_Package="liblldb-3.9-dev" __SkipUnmount=0 # base development support @@ -53,8 +53,12 @@ __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" __UnprocessedBuildArgs= -for i in "$@" ; do - lowerI="$(echo $i | awk '{print tolower($0)}')" +while :; do + if [ $# -le 0 ]; then + break + fi + + lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in -?|-h|--help) usage @@ -95,38 +99,49 @@ for i in "$@" ; do lldb4.0) __LLDB_Package="liblldb-4.0-dev" ;; + lldb5.0) + __LLDB_Package="liblldb-5.0-dev" + ;; + lldb6.0) + __LLDB_Package="liblldb-6.0-dev" + ;; no-lldb) unset __LLDB_Package ;; - vivid) + trusty) # Ubuntu 14.04 if [ "$__LinuxCodeName" != "jessie" ]; then - __LinuxCodeName=vivid + __LinuxCodeName=trusty fi ;; - wily) - if [ "$__LinuxCodeName" != "jessie" ]; then - __LinuxCodeName=wily - fi - ;; - xenial) + xenial) # Ubuntu 16.04 if [ "$__LinuxCodeName" != "jessie" ]; then __LinuxCodeName=xenial fi ;; - zesty) + zesty) # Ubuntu 17.04 if [ "$__LinuxCodeName" != "jessie" ]; then __LinuxCodeName=zesty fi ;; - bionic) + bionic) # Ubuntu 18.04 if [ "$__LinuxCodeName" != "jessie" ]; then __LinuxCodeName=bionic fi ;; - jessie) + jessie) # Debian 8 __LinuxCodeName=jessie __UbuntuRepo="http://ftp.debian.org/debian/" ;; + stretch) # Debian 9 + __LinuxCodeName=stretch + __UbuntuRepo="http://ftp.debian.org/debian/" + __LLDB_Package="liblldb-6.0-dev" + ;; + buster) # Debian 10 + __LinuxCodeName=buster + __UbuntuRepo="http://ftp.debian.org/debian/" + __LLDB_Package="liblldb-6.0-dev" + ;; tizen) if [ "$__BuildArch" != "armel" ]; then echo "Tizen is available only for armel." @@ -144,10 +159,16 @@ for i in "$@" ; do --skipunmount) __SkipUnmount=1 ;; + --rootfsdir|-rootfsdir) + shift + __RootfsDir=$1 + ;; *) - __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" + __UnprocessedBuildArgs="$__UnprocessedBuildArgs $1" ;; esac + + shift done if [ "$__BuildArch" == "armel" ]; then @@ -155,12 +176,14 @@ if [ "$__BuildArch" == "armel" ]; then fi __UbuntuPackages+=" ${__LLDB_Package:-}" -__RootfsDir="$__CrossDir/rootfs/$__BuildArch" - -if [[ -n "$ROOTFS_DIR" ]]; then +if [ -z "$__RootfsDir" ] && [ ! -z "$ROOTFS_DIR" ]; then __RootfsDir=$ROOTFS_DIR fi +if [ -z "$__RootfsDir" ]; then + __RootfsDir="$__CrossDir/../../../.tools/rootfs/$__BuildArch" +fi + if [ -d "$__RootfsDir" ]; then if [ $__SkipUnmount == 0 ]; then umount $__RootfsDir/* diff --git a/external/linker/eng/common/cross/x86/sources.list.vivid b/external/linker/eng/common/cross/x86/sources.list.vivid deleted file mode 100644 index 26d37b20fc..0000000000 --- a/external/linker/eng/common/cross/x86/sources.list.vivid +++ /dev/null @@ -1,11 +0,0 @@ -deb http://archive.ubuntu.com/ubuntu/ vivid main restricted universe -deb-src http://archive.ubuntu.com/ubuntu/ vivid main restricted universe - -deb http://archive.ubuntu.com/ubuntu/ vivid-updates main restricted universe -deb-src http://archive.ubuntu.com/ubuntu/ vivid-updates main restricted universe - -deb http://archive.ubuntu.com/ubuntu/ vivid-backports main restricted -deb-src http://archive.ubuntu.com/ubuntu/ vivid-backports main restricted - -deb http://archive.ubuntu.com/ubuntu/ vivid-security main restricted universe multiverse -deb-src http://archive.ubuntu.com/ubuntu/ vivid-security main restricted universe multiverse diff --git a/external/linker/eng/common/cross/x86/sources.list.wily b/external/linker/eng/common/cross/x86/sources.list.wily deleted file mode 100644 index c4b0b442ab..0000000000 --- a/external/linker/eng/common/cross/x86/sources.list.wily +++ /dev/null @@ -1,11 +0,0 @@ -deb http://archive.ubuntu.com/ubuntu/ wily main restricted universe -deb-src http://archive.ubuntu.com/ubuntu/ wily main restricted universe - -deb http://archive.ubuntu.com/ubuntu/ wily-updates main restricted universe -deb-src http://archive.ubuntu.com/ubuntu/ wily-updates main restricted universe - -deb http://archive.ubuntu.com/ubuntu/ wily-backports main restricted -deb-src http://archive.ubuntu.com/ubuntu/ wily-backports main restricted - -deb http://archive.ubuntu.com/ubuntu/ wily-security main restricted universe multiverse -deb-src http://archive.ubuntu.com/ubuntu/ wily-security main restricted universe multiverse diff --git a/external/linker/eng/common/darc-init.ps1 b/external/linker/eng/common/darc-init.ps1 index 06cbacac19..8854d979f3 100644 --- a/external/linker/eng/common/darc-init.ps1 +++ b/external/linker/eng/common/darc-init.ps1 @@ -1,5 +1,6 @@ param ( - $darcVersion = $null + $darcVersion = $null, + $versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" ) $verbosity = "m" @@ -10,23 +11,23 @@ function InstallDarcCli ($darcVersion) { $dotnetRoot = InitializeDotNetCli -install:$true $dotnet = "$dotnetRoot\dotnet.exe" - $toolList = Invoke-Expression "& `"$dotnet`" tool list -g" + $toolList = & "$dotnet" tool list -g if ($toolList -like "*$darcCliPackageName*") { - Invoke-Expression "& `"$dotnet`" tool uninstall $darcCliPackageName -g" + & "$dotnet" tool uninstall $darcCliPackageName -g } - # Until we can anonymously query the BAR API for the latest arcade-services - # build applied to the PROD channel, this is hardcoded. + # If the user didn't explicitly specify the darc version, + # query the Maestro API for the correct version of darc to install. if (-not $darcVersion) { - $darcVersion = '1.1.0-beta.19115.5' + $darcVersion = $(Invoke-WebRequest -Uri $versionEndpoint -UseBasicParsing).Content } - - $arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json' + + $arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json' Write-Host "Installing Darc CLI version $darcVersion..." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - Invoke-Expression "& `"$dotnet`" tool install $darcCliPackageName --version $darcVersion --add-source '$arcadeServicesSource' -v $verbosity -g" + & "$dotnet" tool install $darcCliPackageName --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g } InstallDarcCli $darcVersion diff --git a/external/linker/eng/common/darc-init.sh b/external/linker/eng/common/darc-init.sh index 01c24ab501..abdd0bc05a 100755 --- a/external/linker/eng/common/darc-init.sh +++ b/external/linker/eng/common/darc-init.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash source="${BASH_SOURCE[0]}" -darcVersion="1.1.0-beta.19115.5" +darcVersion='' +versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" while [[ $# > 0 ]]; do opt="$(echo "$1" | awk '{print tolower($0)}')" @@ -10,6 +11,10 @@ while [[ $# > 0 ]]; do darcVersion=$2 shift ;; + --versionendpoint) + versionEndpoint=$2 + shift + ;; *) echo "Invalid argument: $1" usage @@ -33,6 +38,10 @@ verbosity=m . "$scriptroot/tools.sh" +if [ -z "$darcVersion" ]; then + darcVersion=$(curl -X GET "$versionEndpoint" -H "accept: text/plain") +fi + function InstallDarcCli { local darc_cli_package_name="microsoft.dotnet.darc" @@ -45,9 +54,9 @@ function InstallDarcCli { echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g) fi - local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json" + local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" - echo "Installing Darc CLI version $toolset_version..." + echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." echo $($dotnet_root/dotnet tool install $darc_cli_package_name --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g) } diff --git a/external/linker/eng/common/dotnet-install.cmd b/external/linker/eng/common/dotnet-install.cmd new file mode 100644 index 0000000000..b1c2642e76 --- /dev/null +++ b/external/linker/eng/common/dotnet-install.cmd @@ -0,0 +1,2 @@ +@echo off +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet-install.ps1""" %*" \ No newline at end of file diff --git a/external/linker/eng/common/dotnet-install.ps1 b/external/linker/eng/common/dotnet-install.ps1 new file mode 100644 index 0000000000..0b629b8301 --- /dev/null +++ b/external/linker/eng/common/dotnet-install.ps1 @@ -0,0 +1,27 @@ +[CmdletBinding(PositionalBinding=$false)] +Param( + [string] $verbosity = "minimal", + [string] $architecture = "", + [string] $version = "Latest", + [string] $runtime = "dotnet" +) + +. $PSScriptRoot\tools.ps1 + +$dotnetRoot = Join-Path $RepoRoot ".dotnet" + +$installdir = $dotnetRoot +try { + if ($architecture -and $architecture.Trim() -eq "x86") { + $installdir = Join-Path $installdir "x86" + } + InstallDotNet $installdir $version $architecture $runtime $true +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + ExitWithExitCode 1 +} + +ExitWithExitCode 0 diff --git a/external/linker/eng/common/dotnet-install.sh b/external/linker/eng/common/dotnet-install.sh new file mode 100644 index 0000000000..c3072c958a --- /dev/null +++ b/external/linker/eng/common/dotnet-install.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +source="${BASH_SOURCE[0]}" +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +version='Latest' +architecture='' +runtime='dotnet' +while [[ $# > 0 ]]; do + opt="$(echo "$1" | awk '{print tolower($0)}')" + case "$opt" in + -version|-v) + shift + version="$1" + ;; + -architecture|-a) + shift + architecture="$1" + ;; + -runtime|-r) + shift + runtime="$1" + ;; + *) + echo "Invalid argument: $1" + usage + exit 1 + ;; + esac + shift +done + +. "$scriptroot/tools.sh" +dotnetRoot="$repo_root/.dotnet" +InstallDotNet $dotnetRoot $version "$architecture" $runtime true || { + local exit_code=$? + echo "dotnet-install.sh failed (exit code '$exit_code')." >&2 + ExitWithExitCode $exit_code +} + +ExitWithExitCode 0 diff --git a/external/linker/eng/common/generate-graph-files.ps1 b/external/linker/eng/common/generate-graph-files.ps1 new file mode 100644 index 0000000000..b056e4c1ac --- /dev/null +++ b/external/linker/eng/common/generate-graph-files.ps1 @@ -0,0 +1,87 @@ +Param( + [Parameter(Mandatory=$true)][string] $barToken, # Token generated at https://maestro-prod.westus2.cloudapp.azure.com/Account/Tokens + [Parameter(Mandatory=$true)][string] $gitHubPat, # GitHub personal access token from https://github.com/settings/tokens (no auth scopes needed) + [Parameter(Mandatory=$true)][string] $azdoPat, # Azure Dev Ops tokens from https://dev.azure.com/dnceng/_details/security/tokens (code read scope needed) + [Parameter(Mandatory=$true)][string] $outputFolder, # Where the graphviz.txt file will be created + [string] $darcVersion = '1.1.0-beta.19175.6', # darc's version + [string] $graphvizVersion = '2.38', # GraphViz version + [switch] $includeToolset # Whether the graph should include toolset dependencies or not. i.e. arcade, optimization. For more about + # toolset dependencies see https://github.com/dotnet/arcade/blob/master/Documentation/Darc.md#toolset-vs-product-dependencies +) + +$ErrorActionPreference = "Stop" +. $PSScriptRoot\tools.ps1 + +Import-Module -Name (Join-Path $PSScriptRoot "native\CommonLibrary.psm1") + +function CheckExitCode ([string]$stage) +{ + $exitCode = $LASTEXITCODE + if ($exitCode -ne 0) { + Write-Host "Something failed in stage: '$stage'. Check for errors above. Exiting now..." + ExitWithExitCode $exitCode + } +} + +try { + Push-Location $PSScriptRoot + + Write-Host "Installing darc..." + . .\darc-init.ps1 -darcVersion $darcVersion + CheckExitCode "Running darc-init" + + $engCommonBaseDir = Join-Path $PSScriptRoot "native\" + $graphvizInstallDir = CommonLibrary\Get-NativeInstallDirectory + $nativeToolBaseUri = "https://netcorenativeassets.blob.core.windows.net/resource-packages/external" + $installBin = Join-Path $graphvizInstallDir "bin" + + Write-Host "Installing dot..." + .\native\install-tool.ps1 -ToolName graphviz -InstallPath $installBin -BaseUri $nativeToolBaseUri -CommonLibraryDirectory $engCommonBaseDir -Version $graphvizVersion -Verbose + + $darcExe = "$env:USERPROFILE\.dotnet\tools" + $darcExe = Resolve-Path "$darcExe\darc.exe" + + Create-Directory $outputFolder + + # Generate 3 graph descriptions: + # 1. Flat with coherency information + # 2. Graphviz (dot) file + # 3. Standard dependency graph + $graphVizFilePath = "$outputFolder\graphviz.txt" + $graphVizImageFilePath = "$outputFolder\graph.png" + $normalGraphFilePath = "$outputFolder\graph-full.txt" + $flatGraphFilePath = "$outputFolder\graph-flat.txt" + $baseOptions = @( "--github-pat", "$gitHubPat", "--azdev-pat", "$azdoPat", "--password", "$barToken" ) + + if ($includeToolset) { + Write-Host "Toolsets will be included in the graph..." + $baseOptions += @( "--include-toolset" ) + } + + Write-Host "Generating standard dependency graph..." + & "$darcExe" get-dependency-graph @baseOptions --output-file $normalGraphFilePath + CheckExitCode "Generating normal dependency graph" + + Write-Host "Generating flat dependency graph and graphviz file..." + & "$darcExe" get-dependency-graph @baseOptions --flat --coherency --graphviz $graphVizFilePath --output-file $flatGraphFilePath + CheckExitCode "Generating flat and graphviz dependency graph" + + Write-Host "Generating graph image $graphVizFilePath" + $dotFilePath = Join-Path $installBin "graphviz\$graphvizVersion\release\bin\dot.exe" + & "$dotFilePath" -Tpng -o"$graphVizImageFilePath" "$graphVizFilePath" + CheckExitCode "Generating graphviz image" + + Write-Host "'$graphVizFilePath', '$flatGraphFilePath', '$normalGraphFilePath' and '$graphVizImageFilePath' created!" +} +catch { + if (!$includeToolset) { + Write-Host "This might be a toolset repo which includes only toolset dependencies. " -NoNewline -ForegroundColor Yellow + Write-Host "Since -includeToolset is not set there is no graph to create. Include -includeToolset and try again..." -ForegroundColor Yellow + } + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + ExitWithExitCode 1 +} finally { + Pop-Location +} \ No newline at end of file diff --git a/external/linker/eng/common/init-tools-native.ps1 b/external/linker/eng/common/init-tools-native.ps1 index e25c60fed4..9d18645f45 100644 --- a/external/linker/eng/common/init-tools-native.ps1 +++ b/external/linker/eng/common/init-tools-native.ps1 @@ -41,9 +41,13 @@ Param ( [switch] $Force = $False, [int] $DownloadRetries = 5, [int] $RetryWaitTimeInSeconds = 30, - [string] $GlobalJsonFile = "$PSScriptRoot\..\..\global.json" + [string] $GlobalJsonFile ) +if (!$GlobalJsonFile) { + $GlobalJsonFile = Join-Path (Get-Item $PSScriptRoot).Parent.Parent.FullName "global.json" +} + Set-StrictMode -version 2.0 $ErrorActionPreference="Stop" @@ -75,33 +79,42 @@ try { $NativeTools.PSObject.Properties | ForEach-Object { $ToolName = $_.Name $ToolVersion = $_.Value - $LocalInstallerCommand = $InstallerPath - $LocalInstallerCommand += " -ToolName $ToolName" - $LocalInstallerCommand += " -InstallPath $InstallBin" - $LocalInstallerCommand += " -BaseUri $BaseUri" - $LocalInstallerCommand += " -CommonLibraryDirectory $EngCommonBaseDir" - $LocalInstallerCommand += " -Version $ToolVersion" + $LocalInstallerArguments = @{ ToolName = "$ToolName" } + $LocalInstallerArguments += @{ InstallPath = "$InstallBin" } + $LocalInstallerArguments += @{ BaseUri = "$BaseUri" } + $LocalInstallerArguments += @{ CommonLibraryDirectory = "$EngCommonBaseDir" } + $LocalInstallerArguments += @{ Version = "$ToolVersion" } if ($Verbose) { - $LocalInstallerCommand += " -Verbose" + $LocalInstallerArguments += @{ Verbose = $True } } if (Get-Variable 'Force' -ErrorAction 'SilentlyContinue') { if($Force) { - $LocalInstallerCommand += " -Force" + $LocalInstallerArguments += @{ Force = $True } } } if ($Clean) { - $LocalInstallerCommand += " -Clean" + $LocalInstallerArguments += @{ Clean = $True } } Write-Verbose "Installing $ToolName version $ToolVersion" - Write-Verbose "Executing '$LocalInstallerCommand'" - Invoke-Expression "$LocalInstallerCommand" + Write-Verbose "Executing '$InstallerPath $LocalInstallerArguments'" + & $InstallerPath @LocalInstallerArguments if ($LASTEXITCODE -Ne "0") { - Write-Error "Execution failed" - exit 1 + $errMsg = "$ToolName installation failed" + if ((Get-Variable 'DoNotAbortNativeToolsInstallationOnFailure' -ErrorAction 'SilentlyContinue') -and $DoNotAbortNativeToolsInstallationOnFailure) { + Write-Warning $errMsg + $toolInstallationFailure = $true + } else { + Write-Error $errMsg + exit 1 + } } } + + if ((Get-Variable 'toolInstallationFailure' -ErrorAction 'SilentlyContinue') -and $toolInstallationFailure) { + exit 1 + } } else { Write-Host "No native tools defined in global.json" diff --git a/external/linker/eng/common/init-tools-native.sh b/external/linker/eng/common/init-tools-native.sh index bd799af2a4..fc72d13948 100644 --- a/external/linker/eng/common/init-tools-native.sh +++ b/external/linker/eng/common/init-tools-native.sh @@ -9,8 +9,8 @@ clean=false force=false download_retries=5 retry_wait_time_seconds=30 -global_json_file="${scriptroot}/../../global.json" -declare -a native_assets +global_json_file="$(dirname "$(dirname "${scriptroot}")")/global.json" +declare -A native_assets . $scriptroot/native/common-library.sh @@ -71,6 +71,7 @@ function ReadGlobalJsonNativeTools { local native_tools_list=$(echo $native_tools_section | awk -F"[{}]" '{print $2}') native_tools_list=${native_tools_list//[\" ]/} native_tools_list=${native_tools_list//,/$'\n'} + native_tools_list="$(echo -e "${native_tools_list}" | tr -d '[:space:]')" local old_IFS=$IFS while read -r line; do @@ -116,8 +117,6 @@ else installer_command+=" --clean" fi - echo "Installing $tool version $tool_version" - echo "Executing '$installer_command'" $installer_command if [[ $? != 0 ]]; then @@ -127,19 +126,16 @@ else done fi -if [[ ! -z $clean ]]; then +if [[ $clean = true ]]; then exit 0 fi if [[ -d $install_bin ]]; then echo "Native tools are available from $install_bin" - if [[ !-z BUILD_BUILDNUMBER ]]; then - echo "##vso[task.prependpath]$install_bin" - fi + echo "##vso[task.prependpath]$install_bin" else echo "Native tools install directory does not exist, installation failed" >&2 exit 1 fi exit 0 - diff --git a/external/linker/eng/common/internal/Tools.csproj b/external/linker/eng/common/internal/Tools.csproj index 1a81ff906f..1a39a7ef3f 100644 --- a/external/linker/eng/common/internal/Tools.csproj +++ b/external/linker/eng/common/internal/Tools.csproj @@ -12,8 +12,12 @@ - - https://devdiv.pkgs.visualstudio.com/_packaging/8f470c7e-ac49-4afe-a6ee-cf784e438b93/nuget/v3/index.json; + + + https://devdiv.pkgs.visualstudio.com/_packaging/dotnet-core-internal-tooling/nuget/v3/index.json; + + + $(RestoreSources); https://devdiv.pkgs.visualstudio.com/_packaging/VS/nuget/v3/index.json; diff --git a/external/linker/eng/common/native/CommonLibrary.psm1 b/external/linker/eng/common/native/CommonLibrary.psm1 index f286ae0cde..7a34c7e8a4 100644 --- a/external/linker/eng/common/native/CommonLibrary.psm1 +++ b/external/linker/eng/common/native/CommonLibrary.psm1 @@ -209,7 +209,7 @@ function New-ScriptShim { Remove-Item (Join-Path $ShimDirectory "$ShimName.exe") } - Invoke-Expression "$ShimDirectory\WinShimmer\winshimmer.exe $ShimName $ToolFilePath $ShimDirectory" + & "$ShimDirectory\WinShimmer\winshimmer.exe" $ShimName $ToolFilePath $ShimDirectory return $True } catch { diff --git a/external/linker/eng/common/pipeline-logging-functions.ps1 b/external/linker/eng/common/pipeline-logging-functions.ps1 new file mode 100644 index 0000000000..7b61376f8a --- /dev/null +++ b/external/linker/eng/common/pipeline-logging-functions.ps1 @@ -0,0 +1,233 @@ +# Source for this file was taken from https://github.com/microsoft/azure-pipelines-task-lib/blob/11c9439d4af17e6475d9fe058e6b2e03914d17e6/powershell/VstsTaskSdk/LoggingCommandFunctions.ps1 and modified. + +# NOTE: You should not be calling these method directly as they are likely to change. Instead you should be calling the Write-Pipeline* functions defined in tools.ps1 + +$script:loggingCommandPrefix = '##vso[' +$script:loggingCommandEscapeMappings = @( # TODO: WHAT ABOUT "="? WHAT ABOUT "%"? + New-Object psobject -Property @{ Token = ';' ; Replacement = '%3B' } + New-Object psobject -Property @{ Token = "`r" ; Replacement = '%0D' } + New-Object psobject -Property @{ Token = "`n" ; Replacement = '%0A' } + New-Object psobject -Property @{ Token = "]" ; Replacement = '%5D' } +) +# TODO: BUG: Escape % ??? +# TODO: Add test to verify don't need to escape "=". + +function Write-PipelineTelemetryError { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Category, + [Parameter(Mandatory = $true)] + [string]$Message, + [Parameter(Mandatory = $false)] + [string]$Type = 'error', + [string]$ErrCode, + [string]$SourcePath, + [string]$LineNumber, + [string]$ColumnNumber, + [switch]$AsOutput) + + $PSBoundParameters.Remove("Category") | Out-Null + + $Message = "(NETCORE_ENGINEERING_TELEMETRY=$Category) $Message" + $PSBoundParameters.Remove("Message") | Out-Null + $PSBoundParameters.Add("Message", $Message) + + Write-PipelineTaskError @PSBoundParameters +} + +function Write-PipelineTaskError { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Message, + [Parameter(Mandatory = $false)] + [string]$Type = 'error', + [string]$ErrCode, + [string]$SourcePath, + [string]$LineNumber, + [string]$ColumnNumber, + [switch]$AsOutput) + + if(!$ci) { + if($Type -eq 'error') { + Write-Host $Message -ForegroundColor Red + return + } + elseif ($Type -eq 'warning') { + Write-Host $Message -ForegroundColor Yellow + return + } + } + + if(($Type -ne 'error') -and ($Type -ne 'warning')) { + Write-Host $Message + return + } + if(-not $PSBoundParameters.ContainsKey('Type')) { + $PSBoundParameters.Add('Type', 'error') + } + Write-LogIssue @PSBoundParameters + } + + function Write-PipelineSetVariable { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Name, + [string]$Value, + [switch]$Secret, + [switch]$AsOutput) + + if($ci) { + Write-LoggingCommand -Area 'task' -Event 'setvariable' -Data $Value -Properties @{ + 'variable' = $Name + 'isSecret' = $Secret + 'isOutput' = 'true' + } -AsOutput:$AsOutput + } + } + + function Write-PipelinePrependPath { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [string]$Path, + [switch]$AsOutput) + if($ci) { + Write-LoggingCommand -Area 'task' -Event 'prependpath' -Data $Path -AsOutput:$AsOutput + } + } + +<######################################## +# Private functions. +########################################> +function Format-LoggingCommandData { + [CmdletBinding()] + param([string]$Value, [switch]$Reverse) + + if (!$Value) { + return '' + } + + if (!$Reverse) { + foreach ($mapping in $script:loggingCommandEscapeMappings) { + $Value = $Value.Replace($mapping.Token, $mapping.Replacement) + } + } else { + for ($i = $script:loggingCommandEscapeMappings.Length - 1 ; $i -ge 0 ; $i--) { + $mapping = $script:loggingCommandEscapeMappings[$i] + $Value = $Value.Replace($mapping.Replacement, $mapping.Token) + } + } + + return $Value +} + +function Format-LoggingCommand { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Area, + [Parameter(Mandatory = $true)] + [string]$Event, + [string]$Data, + [hashtable]$Properties) + + # Append the preamble. + [System.Text.StringBuilder]$sb = New-Object -TypeName System.Text.StringBuilder + $null = $sb.Append($script:loggingCommandPrefix).Append($Area).Append('.').Append($Event) + + # Append the properties. + if ($Properties) { + $first = $true + foreach ($key in $Properties.Keys) { + [string]$value = Format-LoggingCommandData $Properties[$key] + if ($value) { + if ($first) { + $null = $sb.Append(' ') + $first = $false + } else { + $null = $sb.Append(';') + } + + $null = $sb.Append("$key=$value") + } + } + } + + # Append the tail and output the value. + $Data = Format-LoggingCommandData $Data + $sb.Append(']').Append($Data).ToString() +} + +function Write-LoggingCommand { + [CmdletBinding(DefaultParameterSetName = 'Parameters')] + param( + [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] + [string]$Area, + [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] + [string]$Event, + [Parameter(ParameterSetName = 'Parameters')] + [string]$Data, + [Parameter(ParameterSetName = 'Parameters')] + [hashtable]$Properties, + [Parameter(Mandatory = $true, ParameterSetName = 'Object')] + $Command, + [switch]$AsOutput) + + if ($PSCmdlet.ParameterSetName -eq 'Object') { + Write-LoggingCommand -Area $Command.Area -Event $Command.Event -Data $Command.Data -Properties $Command.Properties -AsOutput:$AsOutput + return + } + + $command = Format-LoggingCommand -Area $Area -Event $Event -Data $Data -Properties $Properties + if ($AsOutput) { + $command + } else { + Write-Host $command + } +} + +function Write-LogIssue { + [CmdletBinding()] + param( + [ValidateSet('warning', 'error')] + [Parameter(Mandatory = $true)] + [string]$Type, + [string]$Message, + [string]$ErrCode, + [string]$SourcePath, + [string]$LineNumber, + [string]$ColumnNumber, + [switch]$AsOutput) + + $command = Format-LoggingCommand -Area 'task' -Event 'logissue' -Data $Message -Properties @{ + 'type' = $Type + 'code' = $ErrCode + 'sourcepath' = $SourcePath + 'linenumber' = $LineNumber + 'columnnumber' = $ColumnNumber + } + if ($AsOutput) { + return $command + } + + if ($Type -eq 'error') { + $foregroundColor = $host.PrivateData.ErrorForegroundColor + $backgroundColor = $host.PrivateData.ErrorBackgroundColor + if ($foregroundColor -isnot [System.ConsoleColor] -or $backgroundColor -isnot [System.ConsoleColor]) { + $foregroundColor = [System.ConsoleColor]::Red + $backgroundColor = [System.ConsoleColor]::Black + } + } else { + $foregroundColor = $host.PrivateData.WarningForegroundColor + $backgroundColor = $host.PrivateData.WarningBackgroundColor + if ($foregroundColor -isnot [System.ConsoleColor] -or $backgroundColor -isnot [System.ConsoleColor]) { + $foregroundColor = [System.ConsoleColor]::Yellow + $backgroundColor = [System.ConsoleColor]::Black + } + } + + Write-Host $command -ForegroundColor $foregroundColor -BackgroundColor $backgroundColor +} \ No newline at end of file diff --git a/external/linker/eng/common/pipeline-logging-functions.sh b/external/linker/eng/common/pipeline-logging-functions.sh new file mode 100644 index 0000000000..6098f9a543 --- /dev/null +++ b/external/linker/eng/common/pipeline-logging-functions.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +function Write-PipelineTelemetryError { + local telemetry_category='' + local function_args=() + local message='' + while [[ $# -gt 0 ]]; do + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + case "$opt" in + -category|-c) + telemetry_category=$2 + shift + ;; + -*) + function_args+=("$1 $2") + shift + ;; + *) + message=$* + ;; + esac + shift + done + + if [[ "$ci" != true ]]; then + echo "$message" >&2 + return + fi + + message="(NETCORE_ENGINEERING_TELEMETRY=$telemetry_category) $message" + function_args+=("$message") + + Write-PipelineTaskError $function_args +} + +function Write-PipelineTaskError { + if [[ "$ci" != true ]]; then + echo "$@" >&2 + return + fi + + message_type="error" + sourcepath='' + linenumber='' + columnnumber='' + error_code='' + + while [[ $# -gt 0 ]]; do + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + case "$opt" in + -type|-t) + message_type=$2 + shift + ;; + -sourcepath|-s) + sourcepath=$2 + shift + ;; + -linenumber|-ln) + linenumber=$2 + shift + ;; + -columnnumber|-cn) + columnnumber=$2 + shift + ;; + -errcode|-e) + error_code=$2 + shift + ;; + *) + break + ;; + esac + + shift + done + + message="##vso[task.logissue" + + message="$message type=$message_type" + + if [ -n "$sourcepath" ]; then + message="$message;sourcepath=$sourcepath" + fi + + if [ -n "$linenumber" ]; then + message="$message;linenumber=$linenumber" + fi + + if [ -n "$columnnumber" ]; then + message="$message;columnnumber=$columnnumber" + fi + + if [ -n "$error_code" ]; then + message="$message;code=$error_code" + fi + + message="$message]$*" + echo "$message" +} + diff --git a/external/linker/eng/common/post-build/dotnetsymbol-init.ps1 b/external/linker/eng/common/post-build/dotnetsymbol-init.ps1 new file mode 100644 index 0000000000..e7659b98c8 --- /dev/null +++ b/external/linker/eng/common/post-build/dotnetsymbol-init.ps1 @@ -0,0 +1,29 @@ +param ( + $dotnetsymbolVersion = $null +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 + +. $PSScriptRoot\..\tools.ps1 + +$verbosity = "minimal" + +function Installdotnetsymbol ($dotnetsymbolVersion) { + $dotnetsymbolPackageName = "dotnet-symbol" + + $dotnetRoot = InitializeDotNetCli -install:$true + $dotnet = "$dotnetRoot\dotnet.exe" + $toolList = & "$dotnet" tool list --global + + if (($toolList -like "*$dotnetsymbolPackageName*") -and ($toolList -like "*$dotnetsymbolVersion*")) { + Write-Host "dotnet-symbol version $dotnetsymbolVersion is already installed." + } + else { + Write-Host "Installing dotnet-symbol version $dotnetsymbolVersion..." + Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." + & "$dotnet" tool install $dotnetsymbolPackageName --version $dotnetsymbolVersion --verbosity $verbosity --global + } +} + +Installdotnetsymbol $dotnetsymbolVersion diff --git a/external/linker/eng/common/post-build/sourcelink-cli-init.ps1 b/external/linker/eng/common/post-build/sourcelink-cli-init.ps1 new file mode 100644 index 0000000000..9eaa25b3b5 --- /dev/null +++ b/external/linker/eng/common/post-build/sourcelink-cli-init.ps1 @@ -0,0 +1,29 @@ +param ( + $sourcelinkCliVersion = $null +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 + +. $PSScriptRoot\..\tools.ps1 + +$verbosity = "minimal" + +function InstallSourcelinkCli ($sourcelinkCliVersion) { + $sourcelinkCliPackageName = "sourcelink" + + $dotnetRoot = InitializeDotNetCli -install:$true + $dotnet = "$dotnetRoot\dotnet.exe" + $toolList = & "$dotnet" tool list --global + + if (($toolList -like "*$sourcelinkCliPackageName*") -and ($toolList -like "*$sourcelinkCliVersion*")) { + Write-Host "SourceLink CLI version $sourcelinkCliVersion is already installed." + } + else { + Write-Host "Installing SourceLink CLI version $sourcelinkCliVersion..." + Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." + & "$dotnet" tool install $sourcelinkCliPackageName --version $sourcelinkCliVersion --verbosity $verbosity --global + } +} + +InstallSourcelinkCli $sourcelinkCliVersion diff --git a/external/linker/eng/common/post-build/sourcelink-validation.ps1 b/external/linker/eng/common/post-build/sourcelink-validation.ps1 new file mode 100644 index 0000000000..8abd684e9e --- /dev/null +++ b/external/linker/eng/common/post-build/sourcelink-validation.ps1 @@ -0,0 +1,224 @@ +param( + [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where Symbols.NuGet packages to be checked are stored + [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation + [Parameter(Mandatory=$true)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade + [Parameter(Mandatory=$true)][string] $GHCommit, # GitHub commit SHA used to build the packages + [Parameter(Mandatory=$true)][string] $SourcelinkCliVersion # Version of SourceLink CLI to use +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 + +. $PSScriptRoot\..\tools.ps1 + +# Cache/HashMap (File -> Exist flag) used to consult whether a file exist +# in the repository at a specific commit point. This is populated by inserting +# all files present in the repo at a specific commit point. +$global:RepoFiles = @{} + +$ValidatePackage = { + param( + [string] $PackagePath # Full path to a Symbols.NuGet package + ) + + . $using:PSScriptRoot\..\tools.ps1 + + # Ensure input file exist + if (!(Test-Path $PackagePath)) { + Write-PipelineTaskError "Input file does not exist: $PackagePath" + ExitWithExitCode 1 + } + + # Extensions for which we'll look for SourceLink information + # For now we'll only care about Portable & Embedded PDBs + $RelevantExtensions = @(".dll", ".exe", ".pdb") + + Write-Host -NoNewLine "Validating" ([System.IO.Path]::GetFileName($PackagePath)) "... " + + $PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath) + $ExtractPath = Join-Path -Path $using:ExtractPath -ChildPath $PackageId + $FailedFiles = 0 + + Add-Type -AssemblyName System.IO.Compression.FileSystem + + [System.IO.Directory]::CreateDirectory($ExtractPath); + + try { + $zip = [System.IO.Compression.ZipFile]::OpenRead($PackagePath) + + $zip.Entries | + Where-Object {$RelevantExtensions -contains [System.IO.Path]::GetExtension($_.Name)} | + ForEach-Object { + $FileName = $_.FullName + $Extension = [System.IO.Path]::GetExtension($_.Name) + $FakeName = -Join((New-Guid), $Extension) + $TargetFile = Join-Path -Path $ExtractPath -ChildPath $FakeName + + # We ignore resource DLLs + if ($FileName.EndsWith(".resources.dll")) { + return + } + + [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $TargetFile, $true) + + $ValidateFile = { + param( + [string] $FullPath, # Full path to the module that has to be checked + [string] $RealPath, + [ref] $FailedFiles + ) + + $sourcelinkExe = "$env:USERPROFILE\.dotnet\tools" + $sourcelinkExe = Resolve-Path "$sourcelinkExe\sourcelink.exe" + $SourceLinkInfos = & $sourcelinkExe print-urls $FullPath | Out-String + + if ($LASTEXITCODE -eq 0 -and -not ([string]::IsNullOrEmpty($SourceLinkInfos))) { + $NumFailedLinks = 0 + + # We only care about Http addresses + $Matches = (Select-String '(http[s]?)(:\/\/)([^\s,]+)' -Input $SourceLinkInfos -AllMatches).Matches + + if ($Matches.Count -ne 0) { + $Matches.Value | + ForEach-Object { + $Link = $_ + $CommitUrl = "https://raw.githubusercontent.com/${using:GHRepoName}/${using:GHCommit}/" + + $FilePath = $Link.Replace($CommitUrl, "") + $Status = 200 + $Cache = $using:RepoFiles + + if ( !($Cache.ContainsKey($FilePath)) ) { + try { + $Uri = $Link -as [System.URI] + + # Only GitHub links are valid + if ($Uri.AbsoluteURI -ne $null -and ($Uri.Host -match "github" -or $Uri.Host -match "githubusercontent")) { + $Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode + } + else { + $Status = 0 + } + } + catch { + write-host $_ + $Status = 0 + } + } + + if ($Status -ne 200) { + if ($NumFailedLinks -eq 0) { + if ($FailedFiles.Value -eq 0) { + Write-Host + } + + Write-Host "`tFile $RealPath has broken links:" + } + + Write-Host "`t`tFailed to retrieve $Link" + + $NumFailedLinks++ + } + } + } + + if ($NumFailedLinks -ne 0) { + $FailedFiles.value++ + $global:LASTEXITCODE = 1 + } + } + } + + &$ValidateFile $TargetFile $FileName ([ref]$FailedFiles) + } + } + catch { + + } + finally { + $zip.Dispose() + } + + if ($FailedFiles -eq 0) { + Write-Host "Passed." + } + else { + Write-PipelineTaskError "$PackagePath has broken SourceLink links." + } +} + +function ValidateSourceLinkLinks { + if (!($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) { + if (!($GHRepoName -Match "^[^\s-]+-[^\s]+$")) { + Write-PipelineTaskError "GHRepoName should be in the format / or -" + ExitWithExitCode 1 + } + else { + $GHRepoName = $GHRepoName -replace '^([^\s-]+)-([^\s]+)$', '$1/$2'; + } + } + + if (!($GHCommit -Match "^[0-9a-fA-F]{40}$")) { + Write-PipelineTaskError "GHCommit should be a 40 chars hexadecimal string" + ExitWithExitCode 1 + } + + $RepoTreeURL = -Join("http://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1") + $CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript") + + try { + # Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash + $Data = Invoke-WebRequest $RepoTreeURL -UseBasicParsing | ConvertFrom-Json | Select-Object -ExpandProperty tree + + foreach ($file in $Data) { + $Extension = [System.IO.Path]::GetExtension($file.path) + + if ($CodeExtensions.Contains($Extension)) { + $RepoFiles[$file.path] = 1 + } + } + } + catch { + Write-PipelineTaskError "Problems downloading the list of files from the repo. Url used: $RepoTreeURL" + Write-Host $_ + ExitWithExitCode 1 + } + + if (Test-Path $ExtractPath) { + Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue + } + + # Process each NuGet package in parallel + $Jobs = @() + Get-ChildItem "$InputPath\*.symbols.nupkg" | + ForEach-Object { + $Jobs += Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName + } + + foreach ($Job in $Jobs) { + Wait-Job -Id $Job.Id | Receive-Job + } +} + +function CheckExitCode ([string]$stage) { + $exitCode = $LASTEXITCODE + if ($exitCode -ne 0) { + Write-PipelineTaskError "Something failed while '$stage'. Check for errors above. Exiting now..." + ExitWithExitCode $exitCode + } +} + +try { + Write-Host "Installing SourceLink CLI..." + Get-Location + . $PSScriptRoot\sourcelink-cli-init.ps1 -sourcelinkCliVersion $SourcelinkCliVersion + CheckExitCode "Running sourcelink-cli-init" + + Measure-Command { ValidateSourceLinkLinks } +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + ExitWithExitCode 1 +} diff --git a/external/linker/eng/common/post-build/symbols-validation.ps1 b/external/linker/eng/common/post-build/symbols-validation.ps1 new file mode 100644 index 0000000000..69456854e0 --- /dev/null +++ b/external/linker/eng/common/post-build/symbols-validation.ps1 @@ -0,0 +1,186 @@ +param( + [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored + [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation + [Parameter(Mandatory=$true)][string] $DotnetSymbolVersion # Version of dotnet symbol to use +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 + +. $PSScriptRoot\..\tools.ps1 + +Add-Type -AssemblyName System.IO.Compression.FileSystem + +function FirstMatchingSymbolDescriptionOrDefault { + param( + [string] $FullPath, # Full path to the module that has to be checked + [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols + [string] $SymbolsPath + ) + + $FileName = [System.IO.Path]::GetFileName($FullPath) + $Extension = [System.IO.Path]::GetExtension($FullPath) + + # Those below are potential symbol files that the `dotnet symbol` might + # return. Which one will be returned depend on the type of file we are + # checking and which type of file was uploaded. + + # The file itself is returned + $SymbolPath = $SymbolsPath + "\" + $FileName + + # PDB file for the module + $PdbPath = $SymbolPath.Replace($Extension, ".pdb") + + # PDB file for R2R module (created by crossgen) + $NGenPdb = $SymbolPath.Replace($Extension, ".ni.pdb") + + # DBG file for a .so library + $SODbg = $SymbolPath.Replace($Extension, ".so.dbg") + + # DWARF file for a .dylib + $DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf") + + $dotnetsymbolExe = "$env:USERPROFILE\.dotnet\tools" + $dotnetsymbolExe = Resolve-Path "$dotnetsymbolExe\dotnet-symbol.exe" + + & $dotnetsymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null + + if (Test-Path $PdbPath) { + return "PDB" + } + elseif (Test-Path $NGenPdb) { + return "NGen PDB" + } + elseif (Test-Path $SODbg) { + return "DBG for SO" + } + elseif (Test-Path $DylibDwarf) { + return "Dwarf for Dylib" + } + elseif (Test-Path $SymbolPath) { + return "Module" + } + else { + return $null + } +} + +function CountMissingSymbols { + param( + [string] $PackagePath # Path to a NuGet package + ) + + # Ensure input file exist + if (!(Test-Path $PackagePath)) { + Write-PipelineTaskError "Input file does not exist: $PackagePath" + ExitWithExitCode 1 + } + + # Extensions for which we'll look for symbols + $RelevantExtensions = @(".dll", ".exe", ".so", ".dylib") + + # How many files are missing symbol information + $MissingSymbols = 0 + + $PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath) + $PackageGuid = New-Guid + $ExtractPath = Join-Path -Path $ExtractPath -ChildPath $PackageGuid + $SymbolsPath = Join-Path -Path $ExtractPath -ChildPath "Symbols" + + [System.IO.Compression.ZipFile]::ExtractToDirectory($PackagePath, $ExtractPath) + + Get-ChildItem -Recurse $ExtractPath | + Where-Object {$RelevantExtensions -contains $_.Extension} | + ForEach-Object { + if ($_.FullName -Match "\\ref\\") { + Write-Host "`t Ignoring reference assembly file" $_.FullName + return + } + + $SymbolsOnMSDL = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--microsoft-symbol-server" $SymbolsPath + $SymbolsOnSymWeb = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--internal-server" $SymbolsPath + + Write-Host -NoNewLine "`t Checking file" $_.FullName "... " + + if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { + Write-Host "Symbols found on MSDL (" $SymbolsOnMSDL ") and SymWeb (" $SymbolsOnSymWeb ")" + } + else { + $MissingSymbols++ + + if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { + Write-Host "No symbols found on MSDL or SymWeb!" + } + else { + if ($SymbolsOnMSDL -eq $null) { + Write-Host "No symbols found on MSDL!" + } + else { + Write-Host "No symbols found on SymWeb!" + } + } + } + } + + Pop-Location + + return $MissingSymbols +} + +function CheckSymbolsAvailable { + if (Test-Path $ExtractPath) { + Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue + } + + Get-ChildItem "$InputPath\*.nupkg" | + ForEach-Object { + $FileName = $_.Name + + # These packages from Arcade-Services include some native libraries that + # our current symbol uploader can't handle. Below is a workaround until + # we get issue: https://github.com/dotnet/arcade/issues/2457 sorted. + if ($FileName -Match "Microsoft\.DotNet\.Darc\.") { + Write-Host "Ignoring Arcade-services file: $FileName" + Write-Host + return + } + elseif ($FileName -Match "Microsoft\.DotNet\.Maestro\.Tasks\.") { + Write-Host "Ignoring Arcade-services file: $FileName" + Write-Host + return + } + + Write-Host "Validating $FileName " + $Status = CountMissingSymbols "$InputPath\$FileName" + + if ($Status -ne 0) { + Write-PipelineTaskError "Missing symbols for $Status modules in the package $FileName" + ExitWithExitCode $exitCode + } + + Write-Host + } +} + +function CheckExitCode ([string]$stage) { + $exitCode = $LASTEXITCODE + if ($exitCode -ne 0) { + Write-PipelineTaskError "Something failed while '$stage'. Check for errors above. Exiting now..." + ExitWithExitCode $exitCode + } +} + +try { + Write-Host "Installing dotnet symbol ..." + Get-Location + . $PSScriptRoot\dotnetsymbol-init.ps1 -dotnetsymbolVersion $DotnetSymbolVersion + CheckExitCode "Running dotnetsymbol-init" + + CheckSymbolsAvailable +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + ExitWithExitCode 1 +} diff --git a/external/linker/eng/common/sdl/NuGet.config b/external/linker/eng/common/sdl/NuGet.config new file mode 100644 index 0000000000..0c5451c114 --- /dev/null +++ b/external/linker/eng/common/sdl/NuGet.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/external/linker/eng/common/sdl/execute-all-sdl-tools.ps1 b/external/linker/eng/common/sdl/execute-all-sdl-tools.ps1 new file mode 100644 index 0000000000..74080f22d1 --- /dev/null +++ b/external/linker/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -0,0 +1,97 @@ +Param( + [string] $GuardianPackageName, # Required: the name of guardian CLI pacakge (not needed if GuardianCliLocation is specified) + [string] $NugetPackageDirectory, # Required: directory where NuGet packages are installed (not needed if GuardianCliLocation is specified) + [string] $GuardianCliLocation, # Optional: Direct location of Guardian CLI executable if GuardianPackageName & NugetPackageDirectory are not specified + [string] $Repository, # Required: the name of the repository (e.g. dotnet/arcade) + [string] $BranchName="master", # Optional: name of branch or version of gdn settings; defaults to master + [string] $SourceDirectory, # Required: the directory where source files are located + [string] $ArtifactsDirectory, # Required: the directory where build artifacts are located + [string] $DncEngAccessToken, # Required: access token for dnceng; should be provided via KeyVault + [string[]] $SourceToolsList, # Optional: list of SDL tools to run on source code + [string[]] $ArtifactToolsList, # Optional: list of SDL tools to run on built artifacts + [bool] $TsaPublish=$False, # Optional: true will publish results to TSA; only set to true after onboarding to TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaBranchName=$env:BUILD_SOURCEBRANCHNAME, # Optional: required for TSA publish; defaults to $(Build.SourceBranchName); TSA is the automated framework used to upload test results as bugs. + [string] $TsaRepositoryName, # Optional: TSA repository name; will be generated automatically if not submitted; TSA is the automated framework used to upload test results as bugs. + [string] $BuildNumber=$env:BUILD_BUILDNUMBER, # Optional: required for TSA publish; defaults to $(Build.BuildNumber) + [bool] $UpdateBaseline=$False, # Optional: if true, will update the baseline in the repository; should only be run after fixing any issues which need to be fixed + [bool] $TsaOnboard=$False, # Optional: if true, will onboard the repository to TSA; should only be run once; TSA is the automated framework used to upload test results as bugs. + [string] $TsaInstanceUrl, # Optional: only needed if TsaOnboard or TsaPublish is true; the instance-url registered with TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaCodebaseName, # Optional: only needed if TsaOnboard or TsaPublish is true; the name of the codebase registered with TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaProjectName, # Optional: only needed if TsaOnboard or TsaPublish is true; the name of the project registered with TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaNotificationEmail, # Optional: only needed if TsaOnboard is true; the email(s) which will receive notifications of TSA bug filings (e.g. alias@microsoft.com); TSA is the automated framework used to upload test results as bugs. + [string] $TsaCodebaseAdmin, # Optional: only needed if TsaOnboard is true; the aliases which are admins of the TSA codebase (e.g. DOMAIN\alias); TSA is the automated framework used to upload test results as bugs. + [string] $TsaBugAreaPath, # Optional: only needed if TsaOnboard is true; the area path where TSA will file bugs in AzDO; TSA is the automated framework used to upload test results as bugs. + [string] $TsaIterationPath, # Optional: only needed if TsaOnboard is true; the iteration path where TSA will file bugs in AzDO; TSA is the automated framework used to upload test results as bugs. + [string] $GuardianLoggerLevel="Standard" # Optional: the logger level for the Guardian CLI; options are Trace, Verbose, Standard, Warning, and Error +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 +$LASTEXITCODE = 0 + +#Replace repo names to the format of org/repo +if (!($Repository.contains('/'))) { + $RepoName = $Repository -replace '(.*?)-(.*)', '$1/$2'; +} +else{ + $RepoName = $Repository; +} + +if ($GuardianPackageName) { + $guardianCliLocation = Join-Path $NugetPackageDirectory (Join-Path $GuardianPackageName (Join-Path "tools" "guardian.cmd")) +} else { + $guardianCliLocation = $GuardianCliLocation +} + +$ValidPath = Test-Path $guardianCliLocation + +if ($ValidPath -eq $False) +{ + Write-Host "Invalid Guardian CLI Location." + exit 1 +} + +& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $ArtifactsDirectory -DncEngAccessToken $DncEngAccessToken -GuardianLoggerLevel $GuardianLoggerLevel +$gdnFolder = Join-Path $ArtifactsDirectory ".gdn" + +if ($TsaOnboard) { + if ($TsaCodebaseName -and $TsaNotificationEmail -and $TsaCodebaseAdmin -and $TsaBugAreaPath) { + Write-Host "$guardianCliLocation tsa-onboard --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel" + & $guardianCliLocation tsa-onboard --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian tsa-onboard failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE + } + } else { + Write-Host "Could not onboard to TSA -- not all required values ($$TsaCodebaseName, $$TsaNotificationEmail, $$TsaCodebaseAdmin, $$TsaBugAreaPath) were specified." + exit 1 + } +} + +if ($ArtifactToolsList -and $ArtifactToolsList.Count -gt 0) { + & $(Join-Path $PSScriptRoot "run-sdl.ps1") -GuardianCliLocation $guardianCliLocation -WorkingDirectory $ArtifactsDirectory -TargetDirectory $ArtifactsDirectory -GdnFolder $gdnFolder -ToolsList $ArtifactToolsList -DncEngAccessToken $DncEngAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel +} +if ($SourceToolsList -and $SourceToolsList.Count -gt 0) { + & $(Join-Path $PSScriptRoot "run-sdl.ps1") -GuardianCliLocation $guardianCliLocation -WorkingDirectory $ArtifactsDirectory -TargetDirectory $SourceDirectory -GdnFolder $gdnFolder -ToolsList $SourceToolsList -DncEngAccessToken $DncEngAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel +} + +if ($UpdateBaseline) { + & (Join-Path $PSScriptRoot "push-gdn.ps1") -Repository $RepoName -BranchName $BranchName -GdnFolder $GdnFolder -DncEngAccessToken $DncEngAccessToken -PushReason "Update baseline" +} + +if ($TsaPublish) { + if ($TsaBranchName -and $BuildNumber) { + if (-not $TsaRepositoryName) { + $TsaRepositoryName = "$($Repository)-$($BranchName)" + } + Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $SourceDirectory --logger-level $GuardianLoggerLevel" + & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian tsa-publish failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE + } + } else { + Write-Host "Could not publish to TSA -- not all required values ($$TsaBranchName, $$BuildNumber) were specified." + exit 1 + } +} diff --git a/external/linker/eng/common/sdl/init-sdl.ps1 b/external/linker/eng/common/sdl/init-sdl.ps1 new file mode 100644 index 0000000000..cbf5c36a8f --- /dev/null +++ b/external/linker/eng/common/sdl/init-sdl.ps1 @@ -0,0 +1,48 @@ +Param( + [string] $GuardianCliLocation, + [string] $Repository, + [string] $BranchName="master", + [string] $WorkingDirectory, + [string] $DncEngAccessToken, + [string] $GuardianLoggerLevel="Standard" +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 +$LASTEXITCODE = 0 + +# Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file +$encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$DncEngAccessToken")) +$escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn") +$uri = "https://dev.azure.com/dnceng/internal/_apis/git/repositories/sdl-tool-cfg/Items?path=$escapedRepository&versionDescriptor[versionOptions]=0&`$format=zip&api-version=5.0-preview.1" +$zipFile = "$WorkingDirectory/gdn.zip" + +Add-Type -AssemblyName System.IO.Compression.FileSystem +$gdnFolder = (Join-Path $WorkingDirectory ".gdn") +Try +{ + # We try to download the zip; if the request fails (e.g. the file doesn't exist), we catch it and init guardian instead + Write-Host "Downloading gdn folder from internal config repostiory..." + Invoke-WebRequest -Headers @{ "Accept"="application/zip"; "Authorization"="Basic $encodedPat" } -Uri $uri -OutFile $zipFile + if (Test-Path $gdnFolder) { + # Remove the gdn folder if it exists (it shouldn't unless there's too much caching; this is just in case) + Remove-Item -Force -Recurse $gdnFolder + } + [System.IO.Compression.ZipFile]::ExtractToDirectory($zipFile, $WorkingDirectory) + Write-Host $gdnFolder +} Catch [System.Net.WebException] { + # if the folder does not exist, we'll do a guardian init and push it to the remote repository + Write-Host "Initializing Guardian..." + Write-Host "$GuardianCliLocation init --working-directory $WorkingDirectory --logger-level $GuardianLoggerLevel" + & $GuardianCliLocation init --working-directory $WorkingDirectory --logger-level $GuardianLoggerLevel + if ($LASTEXITCODE -ne 0) { + Write-Error "Guardian init failed with exit code $LASTEXITCODE." + } + # We create the mainbaseline so it can be edited later + Write-Host "$GuardianCliLocation baseline --working-directory $WorkingDirectory --name mainbaseline" + & $GuardianCliLocation baseline --working-directory $WorkingDirectory --name mainbaseline + if ($LASTEXITCODE -ne 0) { + Write-Error "Guardian baseline failed with exit code $LASTEXITCODE." + } + & $(Join-Path $PSScriptRoot "push-gdn.ps1") -Repository $Repository -BranchName $BranchName -GdnFolder $gdnFolder -DncEngAccessToken $DncEngAccessToken -PushReason "Initialize gdn folder" +} \ No newline at end of file diff --git a/external/linker/eng/common/sdl/packages.config b/external/linker/eng/common/sdl/packages.config new file mode 100644 index 0000000000..b054737df1 --- /dev/null +++ b/external/linker/eng/common/sdl/packages.config @@ -0,0 +1,4 @@ + + + + diff --git a/external/linker/eng/common/sdl/push-gdn.ps1 b/external/linker/eng/common/sdl/push-gdn.ps1 new file mode 100644 index 0000000000..cacaf8e912 --- /dev/null +++ b/external/linker/eng/common/sdl/push-gdn.ps1 @@ -0,0 +1,51 @@ +Param( + [string] $Repository, + [string] $BranchName="master", + [string] $GdnFolder, + [string] $DncEngAccessToken, + [string] $PushReason +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 +$LASTEXITCODE = 0 + +# We create the temp directory where we'll store the sdl-config repository +$sdlDir = Join-Path $env:TEMP "sdl" +if (Test-Path $sdlDir) { + Remove-Item -Force -Recurse $sdlDir +} + +Write-Host "git clone https://dnceng:`$DncEngAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir" +git clone https://dnceng:$DncEngAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir +if ($LASTEXITCODE -ne 0) { + Write-Error "Git clone failed with exit code $LASTEXITCODE." +} +# We copy the .gdn folder from our local run into the git repository so it can be committed +$sdlRepositoryFolder = Join-Path (Join-Path (Join-Path $sdlDir $Repository) $BranchName) ".gdn" +if (Get-Command Robocopy) { + Robocopy /S $GdnFolder $sdlRepositoryFolder +} else { + rsync -r $GdnFolder $sdlRepositoryFolder +} +# cd to the sdl-config directory so we can run git there +Push-Location $sdlDir +# git add . --> git commit --> git push +Write-Host "git add ." +git add . +if ($LASTEXITCODE -ne 0) { + Write-Error "Git add failed with exit code $LASTEXITCODE." +} +Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" +git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" +if ($LASTEXITCODE -ne 0) { + Write-Error "Git commit failed with exit code $LASTEXITCODE." +} +Write-Host "git push" +git push +if ($LASTEXITCODE -ne 0) { + Write-Error "Git push failed with exit code $LASTEXITCODE." +} + +# Return to the original directory +Pop-Location \ No newline at end of file diff --git a/external/linker/eng/common/sdl/run-sdl.ps1 b/external/linker/eng/common/sdl/run-sdl.ps1 new file mode 100644 index 0000000000..e6a86d03a2 --- /dev/null +++ b/external/linker/eng/common/sdl/run-sdl.ps1 @@ -0,0 +1,65 @@ +Param( + [string] $GuardianCliLocation, + [string] $WorkingDirectory, + [string] $TargetDirectory, + [string] $GdnFolder, + [string[]] $ToolsList, + [string] $UpdateBaseline, + [string] $GuardianLoggerLevel="Standard" +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 +$LASTEXITCODE = 0 + +# We store config files in the r directory of .gdn +Write-Host $ToolsList +$gdnConfigPath = Join-Path $GdnFolder "r" +$ValidPath = Test-Path $GuardianCliLocation + +if ($ValidPath -eq $False) +{ + Write-Host "Invalid Guardian CLI Location." + exit 1 +} + +foreach ($tool in $ToolsList) { + $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" + $config = $False + Write-Host $tool + # We have to manually configure tools that run on source to look at the source directory only + if ($tool -eq "credscan") { + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory : $TargetDirectory `"" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory : $TargetDirectory " + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE + } + $config = $True + } + if ($tool -eq "policheck") { + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target : $TargetDirectory `"" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target : $TargetDirectory " + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE + } + $config = $True + } + + Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel --config $gdnConfigFile $config" + if ($config) { + & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel --config $gdnConfigFile + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian run for $tool using $gdnConfigFile failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE + } + } else { + & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian run for $tool failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE + } + } +} + diff --git a/external/linker/eng/common/templates/job/generate-graph-files.yml b/external/linker/eng/common/templates/job/generate-graph-files.yml new file mode 100644 index 0000000000..e54ce956f9 --- /dev/null +++ b/external/linker/eng/common/templates/job/generate-graph-files.yml @@ -0,0 +1,48 @@ +parameters: + # Optional: dependencies of the job + dependsOn: '' + + # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool + pool: {} + + # Optional: Include toolset dependencies in the generated graph files + includeToolset: false + +jobs: +- job: Generate_Graph_Files + + dependsOn: ${{ parameters.dependsOn }} + + displayName: Generate Graph Files + + pool: ${{ parameters.pool }} + + variables: + # Publish-Build-Assets provides: MaestroAccessToken, BotAccount-dotnet-maestro-bot-PAT + # DotNet-AllOrgs-Darc-Pats provides: dn-bot-devdiv-dnceng-rw-code-pat + - group: Publish-Build-Assets + - group: DotNet-AllOrgs-Darc-Pats + - name: _GraphArguments + value: -gitHubPat $(BotAccount-dotnet-maestro-bot-PAT) + -azdoPat $(dn-bot-devdiv-dnceng-rw-code-pat) + -barToken $(MaestroAccessToken) + -outputFolder '$(Build.StagingDirectory)/GraphFiles/' + - ${{ if ne(parameters.includeToolset, 'false') }}: + - name: _GraphArguments + value: ${{ variables._GraphArguments }} -includeToolset + + steps: + - task: PowerShell@2 + displayName: Generate Graph Files + inputs: + filePath: eng\common\generate-graph-files.ps1 + arguments: $(_GraphArguments) + continueOnError: true + - task: PublishBuildArtifacts@1 + displayName: Publish Graph to Artifacts + inputs: + PathtoPublish: '$(Build.StagingDirectory)/GraphFiles' + PublishLocation: Container + ArtifactName: GraphFiles + continueOnError: true + condition: always() diff --git a/external/linker/eng/common/templates/job/job.yml b/external/linker/eng/common/templates/job/job.yml index 98ca94c326..1814e0ab61 100644 --- a/external/linker/eng/common/templates/job/job.yml +++ b/external/linker/eng/common/templates/job/job.yml @@ -43,9 +43,12 @@ parameters: # Optional: enable sending telemetry enableTelemetry: false - # Optional: define the helix repo for telemeetry (example: 'dotnet/arcade') + # Optional: define the helix repo for telemetry (example: 'dotnet/arcade') helixRepo: '' + # Optional: define the helix type for telemetry (example: 'build/product/') + helixType: '' + # Required: name of the job name: '' @@ -87,6 +90,9 @@ jobs: timeoutInMinutes: ${{ parameters.timeoutInMinutes }} variables: + - ${{ if eq(parameters.enableTelemetry, 'true') }}: + - name: DOTNET_CLI_TELEMETRY_PROFILE + value: '$(Build.Repository.Uri)' - ${{ each variable in parameters.variables }}: # handle name-value variable syntax # example: @@ -108,6 +114,10 @@ jobs: - name: ${{ pair.key }} value: ${{ pair.value }} + # DotNet-HelixApi-Access provides 'HelixApiAccessToken' for internal builds + - ${{ if and(eq(parameters.enableTelemetry, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - group: DotNet-HelixApi-Access + ${{ if ne(parameters.workspace, '') }}: workspace: ${{ parameters.workspace }} @@ -118,6 +128,8 @@ jobs: displayName: 'Send Helix Start Telemetry' inputs: helixRepo: ${{ parameters.helixRepo }} + ${{ if ne(parameters.helixType, '') }}: + helixType: ${{ parameters.helixType }} buildConfig: $(_BuildConfig) runAsPublic: ${{ parameters.runAsPublic }} continueOnError: ${{ parameters.continueOnError }} @@ -175,7 +187,7 @@ jobs: continueOnError: true condition: always() - - ${{ if and(eq(parameters.enablePublishBuildAssets, true), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if and(eq(parameters.enablePublishBuildAssets, true), ne(variables['_PublishUsingPipelines'], 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: CopyFiles@2 displayName: Gather Asset Manifests inputs: @@ -190,4 +202,4 @@ jobs: PublishLocation: Container ArtifactName: AssetManifests continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) \ No newline at end of file + condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) diff --git a/external/linker/eng/common/templates/job/publish-build-assets.yml b/external/linker/eng/common/templates/job/publish-build-assets.yml index d6d8697cbd..0144221681 100644 --- a/external/linker/eng/common/templates/job/publish-build-assets.yml +++ b/external/linker/eng/common/templates/job/publish-build-assets.yml @@ -20,6 +20,9 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false + # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing + publishUsingPipelines: false + jobs: - job: Asset_Registry_Publish @@ -52,9 +55,34 @@ jobs: /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' /p:BuildAssetRegistryToken=$(MaestroAccessToken) /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com + /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} /p:Configuration=$(_BuildConfig) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} + - task: powershell@2 + displayName: Create BARBuildId Artifact + inputs: + targetType: inline + script: | + Add-Content -Path "$(Build.StagingDirectory)/BARBuildId.txt" -Value $(BARBuildId) + - task: powershell@2 + displayName: Create Channels Artifact + inputs: + targetType: inline + script: | + Add-Content -Path "$(Build.StagingDirectory)/Channels.txt" -Value "$(DefaultChannels)" + - task: PublishBuildArtifacts@1 + displayName: Publish BAR BuildId to VSTS + inputs: + PathtoPublish: '$(Build.StagingDirectory)/BARBuildId.txt' + PublishLocation: Container + ArtifactName: ReleaseConfigs + - task: PublishBuildArtifacts@1 + displayName: Publish Channels to VSTS + inputs: + PathtoPublish: '$(Build.StagingDirectory)/Channels.txt' + PublishLocation: Container + ArtifactName: ReleaseConfigs - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - task: PublishBuildArtifacts@1 displayName: Publish Logs to VSTS diff --git a/external/linker/eng/common/templates/jobs/jobs.yml b/external/linker/eng/common/templates/jobs/jobs.yml index c1a5b4849a..6a2f98c036 100644 --- a/external/linker/eng/common/templates/jobs/jobs.yml +++ b/external/linker/eng/common/templates/jobs/jobs.yml @@ -14,6 +14,15 @@ parameters: # Optional: Enable publishing to the build asset registry enablePublishBuildAssets: false + # Optional: Enable publishing using release pipelines + enablePublishUsingPipelines: false + + graphFileGeneration: + # Optional: Enable generating the graph files at the end of the build + enabled: false + # Optional: Include toolset dependencies in the generated graph files + includeToolset: false + # Optional: Include PublishTestResults task enablePublishTestResults: false @@ -67,5 +76,15 @@ jobs: pool: vmImage: vs2017-win2016 runAsPublic: ${{ parameters.runAsPublic }} + publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} - + +- ${{ if and(eq(parameters.graphFileGeneration.enabled, true), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: ../job/generate-graph-files.yml + parameters: + continueOnError: ${{ parameters.continueOnError }} + includeToolset: ${{ parameters.graphFileGeneration.includeToolset }} + dependsOn: + - Asset_Registry_Publish + pool: + vmImage: vs2017-win2016 diff --git a/external/linker/eng/common/templates/phases/publish-build-assets.yml b/external/linker/eng/common/templates/phases/publish-build-assets.yml index 211967deba..a0a8074282 100644 --- a/external/linker/eng/common/templates/phases/publish-build-assets.yml +++ b/external/linker/eng/common/templates/phases/publish-build-assets.yml @@ -5,6 +5,7 @@ parameters: condition: succeeded() continueOnError: false runAsPublic: false + publishUsingPipelines: false phases: - phase: Asset_Registry_Publish displayName: Publish to Build Asset Registry @@ -36,6 +37,7 @@ phases: /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' /p:BuildAssetRegistryToken=$(MaestroAccessToken) /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com + /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} /p:Configuration=$(_BuildConfig) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} diff --git a/external/linker/eng/common/templates/post-build/channels/public-dev-release.yml b/external/linker/eng/common/templates/post-build/channels/public-dev-release.yml new file mode 100644 index 0000000000..c61eaa927d --- /dev/null +++ b/external/linker/eng/common/templates/post-build/channels/public-dev-release.yml @@ -0,0 +1,145 @@ +parameters: + enableSymbolValidation: true + +stages: +- stage: Publish + dependsOn: validate + variables: + - template: ../common-variables.yml + displayName: Developer Channel + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + buildType: current + artifactName: PDBArtifacts + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:Configuration=Release + + - job: + displayName: Publish to Static Feed + dependsOn: setupMaestroVars + variables: + - group: DotNet-Blob-Feed + - group: Publish-Build-Assets + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToPackageFeed -restore -msbuildEngine dotnet + /p:AccountKeyToStaticFeed='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='https://maestro-prod.westus2.cloudapp.azure.com' + /p:BuildAssetRegistryToken='$(MaestroAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:ArtifactsCategory='$(_DotNetArtifactsCategory)' + /p:OverrideAssetsWithSameName=true + /p:PassIfExistingItemIdentical=true + /p:Configuration=Release + + +- stage: PublishValidation + displayName: Publish Validation + variables: + - template: ../common-variables.yml + jobs: + - template: ../setup-maestro-vars.yml + + - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: + - job: + displayName: Symbol Availability + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: PowerShell@2 + displayName: Check Symbol Availability + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) + + - job: + displayName: Gather Drop + dependsOn: setupMaestroVars + variables: + BARBuildId: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + pool: + vmImage: 'windows-2019' + steps: + - task: PowerShell@2 + displayName: Setup Darc CLI + inputs: + targetType: filePath + filePath: '$(Build.SourcesDirectory)/eng/common/darc-init.ps1' + + - task: PowerShell@2 + displayName: Run Darc gather-drop + inputs: + targetType: inline + script: | + darc gather-drop --non-shipping --continue-on-error --id $(BARBuildId) --output-dir $(Agent.BuildDirectory)/Temp/Drop/ --bar-uri https://maestro-prod.westus2.cloudapp.azure.com/ --password $(MaestroAccessToken) --latest-location + + - template: ../promote-build.yml + parameters: + ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} diff --git a/external/linker/eng/common/templates/post-build/channels/public-validation-release.yml b/external/linker/eng/common/templates/post-build/channels/public-validation-release.yml new file mode 100644 index 0000000000..23725c6d62 --- /dev/null +++ b/external/linker/eng/common/templates/post-build/channels/public-validation-release.yml @@ -0,0 +1,91 @@ +stages: +- stage: PVR_Publish + dependsOn: validate + variables: + - template: ../common-variables.yml + displayName: Validation Channel + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Publish to Static Feed + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicValidationRelease_30_Channel_Id) + variables: + - group: DotNet-Blob-Feed + - group: Publish-Build-Assets + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToPackageFeed -restore -msbuildEngine dotnet + /p:AccountKeyToStaticFeed='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='https://maestro-prod.westus2.cloudapp.azure.com' + /p:BuildAssetRegistryToken='$(MaestroAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:ArtifactsCategory='$(_DotNetArtifactsCategory)' + /p:OverrideAssetsWithSameName=true + /p:PassIfExistingItemIdentical=true + /p:Configuration=Release + + +- stage: PVR_PublishValidation + displayName: Publish Validation + variables: + - template: ../common-variables.yml + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Gather Drop + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicValidationRelease_30_Channel_Id) + variables: + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - group: Publish-Build-Assets + pool: + vmImage: 'windows-2019' + steps: + - task: PowerShell@2 + displayName: Setup Darc CLI + inputs: + targetType: filePath + filePath: '$(Build.SourcesDirectory)/eng/common/darc-init.ps1' + + - task: PowerShell@2 + displayName: Run Darc gather-drop + inputs: + targetType: inline + script: | + darc gather-drop --non-shipping --continue-on-error --id $(BARBuildId) --output-dir $(Agent.BuildDirectory)/Temp/Drop/ --bar-uri https://maestro-prod.westus2.cloudapp.azure.com --password $(MaestroAccessToken) --latest-location + + - template: ../promote-build.yml + parameters: + ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} diff --git a/external/linker/eng/common/templates/post-build/common-variables.yml b/external/linker/eng/common/templates/post-build/common-variables.yml new file mode 100644 index 0000000000..97b48d97fe --- /dev/null +++ b/external/linker/eng/common/templates/post-build/common-variables.yml @@ -0,0 +1,9 @@ +variables: + # .NET Core 3 Dev + PublicDevRelease_30_Channel_Id: 3 + + # .NET Tools - Validation + PublicValidationRelease_30_Channel_Id: 9 + + SourceLinkCLIVersion: 3.0.0 + SymbolToolVersion: 1.0.1 diff --git a/external/linker/eng/common/templates/post-build/post-build.yml b/external/linker/eng/common/templates/post-build/post-build.yml new file mode 100644 index 0000000000..6b74475a6f --- /dev/null +++ b/external/linker/eng/common/templates/post-build/post-build.yml @@ -0,0 +1,59 @@ +parameters: + enableSourceLinkValidation: true + enableSigningValidation: true + enableSymbolValidation: true + +stages: +- stage: validate + dependsOn: build + displayName: Validate + jobs: + - ${{ if eq(parameters.enableSigningValidation, 'true') }}: + - job: + displayName: Signing Validation + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task SigningValidation -restore -msbuildEngine dotnet + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' + /p:Configuration=Release + + - ${{ if eq(parameters.enableSourceLinkValidation, 'true') }}: + - job: + displayName: SourceLink Validation + variables: + - template: common-variables.yml + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -ExtractPath $(Agent.BuildDirectory)/Extract/ + -GHRepoName $(Build.Repository.Name) + -GHCommit $(Build.SourceVersion) + -SourcelinkCliVersion $(SourceLinkCLIVersion) + +- template: \eng\common\templates\post-build\channels\public-dev-release.yml + parameters: + enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + +- template: \eng\common\templates\post-build\channels\public-validation-release.yml diff --git a/external/linker/eng/common/templates/post-build/promote-build.yml b/external/linker/eng/common/templates/post-build/promote-build.yml new file mode 100644 index 0000000000..d00317003b --- /dev/null +++ b/external/linker/eng/common/templates/post-build/promote-build.yml @@ -0,0 +1,28 @@ +parameters: + ChannelId: 0 + +jobs: +- job: + displayName: Promote Build + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], ${{ parameters.ChannelId }}) + variables: + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: ChannelId + value: ${{ parameters.ChannelId }} + - group: Publish-Build-Assets + pool: + vmImage: 'windows-2019' + steps: + - task: PowerShell@2 + displayName: Add Build to Channel + inputs: + targetType: inline + script: | + $headers = @{ + "Accept" = "application/json" + "Authorization" = "Bearer $(MaestroAccessToken)" + } + Invoke-RestMethod -Method Post -Headers $headers -Uri https://maestro-prod.westus2.cloudapp.azure.com/api/channels/$(ChannelId)/builds/$(BARBuildId)?api-version=2019-01-16 + enabled: false diff --git a/external/linker/eng/common/templates/post-build/setup-maestro-vars.yml b/external/linker/eng/common/templates/post-build/setup-maestro-vars.yml new file mode 100644 index 0000000000..b40e0260a3 --- /dev/null +++ b/external/linker/eng/common/templates/post-build/setup-maestro-vars.yml @@ -0,0 +1,26 @@ +jobs: +- job: setupMaestroVars + displayName: Setup Maestro Vars + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Release Configs + inputs: + buildType: current + artifactName: ReleaseConfigs + + - task: PowerShell@2 + name: setReleaseVars + displayName: Set Release Configs Vars + inputs: + targetType: inline + script: | + . "$(Build.SourcesDirectory)/eng/common/tools.ps1" + + $BarId = Get-Content "$(Build.StagingDirectory)/ReleaseConfigs/BARBuildId.txt" + Write-PipelineSetVariable -Name 'BARBuildId' -Value $BarId + + $Channels = "" + Get-Content "$(Build.StagingDirectory)/ReleaseConfigs/Channels.txt" | ForEach-Object { $Channels += "$_ ," } + Write-PipelineSetVariable -Name 'InitialChannels' -Value "$Channels" diff --git a/external/linker/eng/common/templates/steps/helix-publish.yml b/external/linker/eng/common/templates/steps/helix-publish.yml deleted file mode 100644 index 470ab65da0..0000000000 --- a/external/linker/eng/common/templates/steps/helix-publish.yml +++ /dev/null @@ -1,51 +0,0 @@ -parameters: - HelixSource: 'pr/dotnet-github-anon-kaonashi-bot' - HelixType: ̓'tests/default' - HelixBuild: $(Build.BuildNumber) - HelixTargetQueues: '' - HelixAccessToken: '' - HelixPreCommands: '' - HelixPostCommands: '' - WorkItemDirectory: '' - WorkItemCommand: '' - CorrelationPayloadDirectory: '' - XUnitProjects: '' - XUnitTargetFramework: '' - XUnitRunnerVersion: '' - IncludeDotNetCli: false - DotNetCliPackageType: '' - DotNetCliVersion: '' - EnableXUnitReporter: false - WaitForWorkItemCompletion: true - condition: succeeded() - continueOnError: false - -steps: - - task: DotNetCoreCLI@2 - inputs: - command: custom - projects: eng/common/helixpublish.proj - custom: msbuild - arguments: '/bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog' - displayName: Send job to Helix - env: - HelixSource: ${{ parameters.HelixSource }} - HelixType: ${{ parameters.HelixType }} - HelixBuild: ${{ parameters.HelixBuild }} - HelixTargetQueues: ${{ parameters.HelixTargetQueues }} - HelixAccessToken: ${{ parameters.HelixAccessToken }} - HelixPreCommands: ${{ parameters.HelixPreCommands }} - HelixPostCommands: ${{ parameters.HelixPostCommands }} - WorkItemDirectory: ${{ parameters.WorkItemDirectory }} - WorkItemCommand: ${{ parameters.WorkItemCommand }} - CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} - XUnitProjects: ${{ parameters.XUnitProjects }} - XUnitRuntimeTargetFramework: ${{ parameters.XUnitTargetFramework }} - XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} - IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} - DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} - DotNetCliVersion: ${{ parameters.DotNetCliVersion }} - EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} - WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} diff --git a/external/linker/eng/common/templates/steps/send-to-helix.yml b/external/linker/eng/common/templates/steps/send-to-helix.yml index 1fbf8b8897..05df886f55 100644 --- a/external/linker/eng/common/templates/steps/send-to-helix.yml +++ b/external/linker/eng/common/templates/steps/send-to-helix.yml @@ -1,37 +1,42 @@ +# Please remember to update the documentation if you make changes to these parameters! parameters: - HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/ - HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' - HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number - HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/api/2018-03-14/info/queues for a list of queues - HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group - HelixPreCommands: '' # optional -- commands to run before Helix work item execution - HelixPostCommands: '' # optional -- commands to run after Helix work item execution - WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects - WorkItemCommand: '' # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects - WorkItemTimeout: '' # optional -- a timeout in seconds for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects - CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload - XUnitProjects: '' # optional -- semicolon delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true - XUnitPublishTargetFramework: '' # optional -- framework to use to publish your xUnit projects - XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner - XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects - IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion - DotNetCliPackageType: '' # optional -- either 'sdk' or 'runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json - DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json - EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control - WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." - IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set - Creator: '' # optional -- if the build is external, use this to specify who is sending the job - condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() - continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false + HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/ + HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' + HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number + HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues + HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group + HelixConfiguration: '' # optional -- additional property attached to a job + HelixPreCommands: '' # optional -- commands to run before Helix work item execution + HelixPostCommands: '' # optional -- commands to run after Helix work item execution + WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects + WorkItemCommand: '' # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects + WorkItemTimeout: '' # optional -- a timeout in seconds for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects + CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload + XUnitProjects: '' # optional -- semicolon delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true + XUnitWorkItemTimeout: '' # optional -- the workitem timeout in seconds for all workitems created from the xUnit projects specified by XUnitProjects + XUnitPublishTargetFramework: '' # optional -- framework to use to publish your xUnit projects + XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner + XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects + IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion + DotNetCliPackageType: '' # optional -- either 'sdk' or 'runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json + DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json + EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control + WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." + IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set + Creator: '' # optional -- if the build is external, use this to specify who is sending the job + DisplayNamePrefix: 'Run Tests' # optional -- rename the beginning of the displayName of the steps in AzDO + condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() + continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false steps: - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj /restore /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"' - displayName: Send job to Helix (Windows) + displayName: ${{ parameters.DisplayNamePrefix }} (Windows) env: BuildConfig: $(_BuildConfig) HelixSource: ${{ parameters.HelixSource }} HelixType: ${{ parameters.HelixType }} HelixBuild: ${{ parameters.HelixBuild }} + HelixConfiguration: ${{ parameters.HelixConfiguration }} HelixTargetQueues: ${{ parameters.HelixTargetQueues }} HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixPreCommands: ${{ parameters.HelixPreCommands }} @@ -41,6 +46,7 @@ steps: WorkItemTimeout: ${{ parameters.WorkItemTimeout }} CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} XUnitProjects: ${{ parameters.XUnitProjects }} + XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }} XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }} XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }} XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} @@ -50,15 +56,17 @@ steps: EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} Creator: ${{ parameters.Creator }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT')) continueOnError: ${{ parameters.continueOnError }} - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /restore /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog - displayName: Send job to Helix (Unix) + displayName: ${{ parameters.DisplayNamePrefix }} (Unix) env: BuildConfig: $(_BuildConfig) HelixSource: ${{ parameters.HelixSource }} HelixType: ${{ parameters.HelixType }} HelixBuild: ${{ parameters.HelixBuild }} + HelixConfiguration: ${{ parameters.HelixConfiguration }} HelixTargetQueues: ${{ parameters.HelixTargetQueues }} HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixPreCommands: ${{ parameters.HelixPreCommands }} @@ -68,6 +76,7 @@ steps: WorkItemTimeout: ${{ parameters.WorkItemTimeout }} CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} XUnitProjects: ${{ parameters.XUnitProjects }} + XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }} XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }} XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }} XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} @@ -77,5 +86,6 @@ steps: EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} Creator: ${{ parameters.Creator }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT')) continueOnError: ${{ parameters.continueOnError }} diff --git a/external/linker/eng/common/tools.ps1 b/external/linker/eng/common/tools.ps1 index fbcc4e3ba0..60741f0390 100644 --- a/external/linker/eng/common/tools.ps1 +++ b/external/linker/eng/common/tools.ps1 @@ -11,6 +11,12 @@ # Binary log must be enabled on CI. [bool]$binaryLog = if (Test-Path variable:binaryLog) { $binaryLog } else { $ci } +# Set to true to use the pipelines logger which will enable Azure logging output. +# https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md +# This flag is meant as a temporary opt-opt for the feature while validate it across +# our consumers. It will be deleted in the future. +[bool]$pipelinesLog = if (Test-Path variable:pipelinesLog) { $pipelinesLog } else { $ci } + # Turns on machine preparation/clean up code that changes the machine state (e.g. kills build processes). [bool]$prepareMachine = if (Test-Path variable:prepareMachine) { $prepareMachine } else { $false } @@ -29,7 +35,7 @@ # Specifies which msbuild engine to use for build: 'vs', 'dotnet' or unspecified (determined based on presence of tools.vs in global.json). [string]$msbuildEngine = if (Test-Path variable:msbuildEngine) { $msbuildEngine } else { $null } -# True to attempt using .NET Core already that meets requirements specified in global.json +# True to attempt using .NET Core already that meets requirements specified in global.json # installed on the machine instead of downloading one. [bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true } @@ -70,7 +76,7 @@ function Exec-Process([string]$command, [string]$commandArgs) { $finished = $false try { - while (-not $process.WaitForExit(100)) { + while (-not $process.WaitForExit(100)) { # Non-blocking loop done to allow ctr-c interrupts } @@ -108,7 +114,7 @@ function InitializeDotNetCli([bool]$install) { } # Find the first path on %PATH% that contains the dotnet.exe - if ($useInstalledDotNetCli -and ($env:DOTNET_INSTALL_DIR -eq $null)) { + if ($useInstalledDotNetCli -and (-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -eq $null)) { $dotnetCmd = Get-Command "dotnet.exe" -ErrorAction SilentlyContinue if ($dotnetCmd -ne $null) { $env:DOTNET_INSTALL_DIR = Split-Path $dotnetCmd.Path -Parent @@ -119,7 +125,7 @@ function InitializeDotNetCli([bool]$install) { # Use dotnet installation specified in DOTNET_INSTALL_DIR if it contains the required SDK version, # otherwise install the dotnet CLI and SDK to repo local .dotnet directory to avoid potential permission issues. - if (($env:DOTNET_INSTALL_DIR -ne $null) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { + if ((-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -ne $null) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { $dotnetRoot = Join-Path $RepoRoot ".dotnet" @@ -128,7 +134,7 @@ function InitializeDotNetCli([bool]$install) { if ($install) { InstallDotNetSdk $dotnetRoot $dotnetSdkVersion } else { - Write-Host "Unable to find dotnet with SDK version '$dotnetSdkVersion'" -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unable to find dotnet with SDK version '$dotnetSdkVersion'" ExitWithExitCode 1 } } @@ -141,18 +147,16 @@ function InitializeDotNetCli([bool]$install) { # It also ensures that VS msbuild will use the downloaded sdk targets. $env:PATH = "$dotnetRoot;$env:PATH" - if ($ci) { - # Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build - Write-Host "##vso[task.prependpath]$dotnetRoot" - Write-Host "##vso[task.setvariable variable=DOTNET_MULTILEVEL_LOOKUP]0" - Write-Host "##vso[task.setvariable variable=DOTNET_SKIP_FIRST_TIME_EXPERIENCE]1" - } + # Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build + Write-PipelinePrependPath -Path $dotnetRoot + Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0' + Write-PipelineSetVariable -Name 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE' -Value '1' return $global:_DotNetInstallDir = $dotnetRoot } function GetDotNetInstallScript([string] $dotnetRoot) { - $installScript = "$dotnetRoot\dotnet-install.ps1" + $installScript = Join-Path $dotnetRoot "dotnet-install.ps1" if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot Invoke-WebRequest "https://dot.net/v1/dotnet-install.ps1" -OutFile $installScript @@ -162,17 +166,29 @@ function GetDotNetInstallScript([string] $dotnetRoot) { } function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = "") { + InstallDotNet $dotnetRoot $version $architecture +} + +function InstallDotNet([string] $dotnetRoot, [string] $version, [string] $architecture = "", [string] $runtime = "", [bool] $skipNonVersionedFiles = $false) { $installScript = GetDotNetInstallScript $dotnetRoot $installScript = GetDotNetInstallScript $dotnetRoot - $archArg = if ($architecture) { $architecture } else { "" } - & $installScript -Version $version -InstallDir $dotnetRoot -Architecture $archArg + $installParameters = @{ + Version = $version + InstallDir = $dotnetRoot + } + + if ($architecture) { $installParameters.Architecture = $architecture } + if ($runtime) { $installParameters.Runtime = $runtime } + if ($skipNonVersionedFiles) { $installParameters.SkipNonVersionedFiles = $skipNonVersionedFiles } + + & $installScript @installParameters if ($lastExitCode -ne 0) { - Write-Host "Failed to install dotnet cli (exit code '$lastExitCode')." -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet cli (exit code '$lastExitCode')." ExitWithExitCode $lastExitCode } } # -# Locates Visual Studio MSBuild installation. +# Locates Visual Studio MSBuild installation. # The preference order for MSBuild to use is as follows: # # 1. MSBuild from an active VS command prompt @@ -189,13 +205,17 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { "15.9" } - $vsMinVersion = [Version]::new($vsMinVersionStr) + $vsMinVersion = [Version]::new($vsMinVersionStr) # Try msbuild command available in the environment. if ($env:VSINSTALLDIR -ne $null) { $msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue if ($msbuildCmd -ne $null) { - if ($msbuildCmd.Version -ge $vsMinVersion) { + # Workaround for https://github.com/dotnet/roslyn/issues/35793 + # Due to this issue $msbuildCmd.Version returns 0.0.0.0 for msbuild.exe 16.2+ + $msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split(@('-', '+'))[0]) + + if ($msbuildVersion -ge $vsMinVersion) { return $global:_MSBuildExe = $msbuildCmd.Path } @@ -234,7 +254,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = function InitializeVisualStudioEnvironmentVariables([string] $vsInstallDir, [string] $vsMajorVersion) { $env:VSINSTALLDIR = $vsInstallDir Set-Item "env:VS$($vsMajorVersion)0COMNTOOLS" (Join-Path $vsInstallDir "Common7\Tools\") - + $vsSdkInstallDir = Join-Path $vsInstallDir "VSSDK\" if (Test-Path $vsSdkInstallDir) { Set-Item "env:VSSDK$($vsMajorVersion)0Install" $vsSdkInstallDir @@ -269,13 +289,13 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { # Locates Visual Studio instance that meets the minimal requirements specified by tools.vs object in global.json. # # The following properties of tools.vs are recognized: -# "version": "{major}.{minor}" +# "version": "{major}.{minor}" # Two part minimal VS version, e.g. "15.9", "16.0", etc. -# "components": ["componentId1", "componentId2", ...] +# "components": ["componentId1", "componentId2", ...] # Array of ids of workload components that must be available in the VS instance. # See e.g. https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-enterprise?view=vs-2017 # -# Returns JSON describing the located VS instance (same format as returned by vswhere), +# Returns JSON describing the located VS instance (same format as returned by vswhere), # or $null if no instance meeting the requirements is found on the machine. # function LocateVisualStudio([object]$vsRequirements = $null){ @@ -295,8 +315,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $args = @("-latest", "-prerelease", "-format", "json", "-requires", "Microsoft.Component.MSBuild") - + $args = @("-latest", "-prerelease", "-format", "json", "-requires", "Microsoft.Component.MSBuild", "-products", "*") + if (Get-Member -InputObject $vsRequirements -Name "version") { $args += "-version" $args += $vsRequirements.version @@ -306,7 +326,7 @@ function LocateVisualStudio([object]$vsRequirements = $null){ foreach ($component in $vsRequirements.components) { $args += "-requires" $args += $component - } + } } $vsInfo =& $vsWhereExe $args | ConvertFrom-Json @@ -336,22 +356,22 @@ function InitializeBuildTool() { if ($msbuildEngine -eq "dotnet") { if (!$dotnetRoot) { - Write-Host "/global.json must specify 'tools.dotnet'." -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "/global.json must specify 'tools.dotnet'." ExitWithExitCode 1 } - $buildTool = @{ Path = Join-Path $dotnetRoot "dotnet.exe"; Command = "msbuild" } + $buildTool = @{ Path = Join-Path $dotnetRoot "dotnet.exe"; Command = "msbuild"; Tool = "dotnet"; Framework = "netcoreapp2.1" } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore } catch { - Write-Host $_ -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message $_ ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = "" } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" } } else { - Write-Host "Unexpected value of -msbuildEngine: '$msbuildEngine'." -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 } @@ -363,12 +383,12 @@ function GetDefaultMSBuildEngine() { if (Get-Member -InputObject $GlobalJson.tools -Name "vs") { return "vs" } - + if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { return "dotnet" } - Write-Host "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." ExitWithExitCode 1 } @@ -391,6 +411,18 @@ function GetSdkTaskProject([string]$taskName) { return Join-Path (Split-Path (InitializeToolset) -Parent) "SdkTasks\$taskName.proj" } +function InitializeNativeTools() { + if (Get-Member -InputObject $GlobalJson -Name "native-tools") { + $nativeArgs= @{} + if ($ci) { + $nativeArgs = @{ + InstallDirectory = "$ToolsDir" + } + } + & "$PSScriptRoot/init-tools-native.ps1" @nativeArgs + } +} + function InitializeToolset() { if (Test-Path variable:global:_ToolsetBuildProj) { return $global:_ToolsetBuildProj @@ -409,7 +441,7 @@ function InitializeToolset() { } if (-not $restore) { - Write-Host "Toolset version $toolsetVersion has not been restored." -ForegroundColor Red + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Toolset version $toolsetVersion has not been restored." ExitWithExitCode 1 } @@ -419,7 +451,8 @@ function InitializeToolset() { $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "ToolsetRestore.binlog") } else { "" } '' | Set-Content $proj - MSBuild $proj $bl /t:__WriteToolsetLocation /clp:ErrorsOnly`;NoSummary /p:__ToolsetLocationOutputFile=$toolsetLocationFile + + MSBuild-Core $proj $bl /t:__WriteToolsetLocation /clp:ErrorsOnly`;NoSummary /p:__ToolsetLocationOutputFile=$toolsetLocationFile $path = Get-Content $toolsetLocationFile -TotalCount 1 if (!(Test-Path $path)) { @@ -449,22 +482,41 @@ function Stop-Processes() { # Terminates the script if the build fails. # function MSBuild() { + if ($pipelinesLog) { + $buildTool = InitializeBuildTool + $toolsetBuildProject = InitializeToolset + $path = Split-Path -parent $toolsetBuildProject + $path = Join-Path $path (Join-Path $buildTool.Framework "Microsoft.DotNet.Arcade.Sdk.dll") + $args += "/logger:$path" + } + + MSBuild-Core @args +} + +# +# Executes msbuild (or 'dotnet msbuild') with arguments passed to the function. +# The arguments are automatically quoted. +# Terminates the script if the build fails. +# +function MSBuild-Core() { if ($ci) { if (!$binaryLog) { - throw "Binary log must be enabled in CI build." + Write-PipelineTaskError -Message "Binary log must be enabled in CI build." + ExitWithExitCode 1 } if ($nodeReuse) { - throw "Node reuse must be disabled in CI build." + Write-PipelineTaskError -Message "Node reuse must be disabled in CI build." + ExitWithExitCode 1 } } $buildTool = InitializeBuildTool - $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse" + $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" - if ($warnAsError) { - $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true" + if ($warnAsError) { + $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true" } foreach ($arg in $args) { @@ -472,29 +524,29 @@ function MSBuild() { $cmdArgs += " `"$arg`"" } } - + $exitCode = Exec-Process $buildTool.Path $cmdArgs if ($exitCode -ne 0) { - Write-Host "Build failed." -ForegroundColor Red + Write-PipelineTaskError -Message "Build failed." $buildLog = GetMSBuildBinaryLogCommandLineArgument $args - if ($buildLog -ne $null) { - Write-Host "See log: $buildLog" -ForegroundColor DarkGray + if ($buildLog -ne $null) { + Write-Host "See log: $buildLog" -ForegroundColor DarkGray } ExitWithExitCode $exitCode } } -function GetMSBuildBinaryLogCommandLineArgument($arguments) { +function GetMSBuildBinaryLogCommandLineArgument($arguments) { foreach ($argument in $arguments) { if ($argument -ne $null) { $arg = $argument.Trim() if ($arg.StartsWith("/bl:", "OrdinalIgnoreCase")) { return $arg.Substring("/bl:".Length) - } - + } + if ($arg.StartsWith("/binaryLogger:", "OrdinalIgnoreCase")) { return $arg.Substring("/binaryLogger:".Length) } @@ -504,6 +556,8 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) { return $null } +. $PSScriptRoot\pipeline-logging-functions.ps1 + $RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..\..") $EngRoot = Resolve-Path (Join-Path $PSScriptRoot "..") $ArtifactsDir = Join-Path $RepoRoot "artifacts" @@ -512,12 +566,15 @@ $ToolsDir = Join-Path $RepoRoot ".tools" $LogDir = Join-Path (Join-Path $ArtifactsDir "log") $configuration $TempDir = Join-Path (Join-Path $ArtifactsDir "tmp") $configuration $GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot "global.json") | ConvertFrom-Json +# true if global.json contains a "runtimes" section +$globalJsonHasRuntimes = if ($GlobalJson.tools.PSObject.Properties.Name -Match 'runtimes') { $true } else { $false } Create-Directory $ToolsetDir Create-Directory $TempDir Create-Directory $LogDir -if ($ci) { - $env:TEMP = $TempDir - $env:TMP = $TempDir -} +Write-PipelineSetVariable -Name 'Artifacts' -Value $ArtifactsDir +Write-PipelineSetVariable -Name 'Artifacts.Toolset' -Value $ToolsetDir +Write-PipelineSetVariable -Name 'Artifacts.Log' -Value $LogDir +Write-PipelineSetVariable -Name 'TEMP' -Value $TempDir +Write-PipelineSetVariable -Name 'TMP' -Value $TempDir diff --git a/external/linker/eng/common/tools.sh b/external/linker/eng/common/tools.sh index 633a8167b0..f39aab57b9 100644 --- a/external/linker/eng/common/tools.sh +++ b/external/linker/eng/common/tools.sh @@ -1,8 +1,20 @@ +#!/usr/bin/env bash + # Initialize variables if they aren't already defined. # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} +# Set to true to use the pipelines logger which will enable Azure logging output. +# https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md +# This flag is meant as a temporary opt-opt for the feature while validate it across +# our consumers. It will be deleted in the future. +if [[ "$ci" == true ]]; then + pipelines_log=${pipelines_log:-true} +else + pipelines_log=${pipelines_log:-false} +fi + # Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names. configuration=${configuration:-'Debug'} @@ -65,7 +77,7 @@ function ReadGlobalVersion { local pattern="\"$key\" *: *\"(.*)\"" if [[ ! $line =~ $pattern ]]; then - echo "Error: Cannot find \"$key\" in $global_json_file" >&2 + Write-PipelineTelemetryError -category 'InitializeTools' "Error: Cannot find \"$key\" in $global_json_file" ExitWithExitCode 1 fi @@ -101,7 +113,7 @@ function InitializeDotNetCli { fi # Find the first path on $PATH that contains the dotnet.exe - if [[ "$use_installed_dotnet_cli" == true && -z "${DOTNET_INSTALL_DIR:-}" ]]; then + if [[ "$use_installed_dotnet_cli" == true && $global_json_has_runtimes == false && -z "${DOTNET_INSTALL_DIR:-}" ]]; then local dotnet_path=`command -v dotnet` if [[ -n "$dotnet_path" ]]; then ResolvePath "$dotnet_path" @@ -115,17 +127,18 @@ function InitializeDotNetCli { # Use dotnet installation specified in DOTNET_INSTALL_DIR if it contains the required SDK version, # otherwise install the dotnet CLI and SDK to repo local .dotnet directory to avoid potential permission issues. - if [[ -n "${DOTNET_INSTALL_DIR:-}" && -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then + if [[ $global_json_has_runtimes == false && -n "${DOTNET_INSTALL_DIR:-}" && -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then dotnet_root="$DOTNET_INSTALL_DIR" else dotnet_root="$repo_root/.dotnet" + export DOTNET_INSTALL_DIR="$dotnet_root" if [[ ! -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then if [[ "$install" == true ]]; then InstallDotNetSdk "$dotnet_root" "$dotnet_sdk_version" else - echo "Unable to find dotnet with SDK version '$dotnet_sdk_version'" >&2 + Write-PipelineTelemetryError -category 'InitializeToolset' "Unable to find dotnet with SDK version '$dotnet_sdk_version'" ExitWithExitCode 1 fi fi @@ -136,7 +149,7 @@ function InitializeDotNetCli { export PATH="$dotnet_root:$PATH" if [[ $ci == true ]]; then - # Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build + # Make Sure that our bootstrapped dotnet cli is available in future steps of the Azure Pipelines build echo "##vso[task.prependpath]$dotnet_root" echo "##vso[task.setvariable variable=DOTNET_MULTILEVEL_LOOKUP]0" echo "##vso[task.setvariable variable=DOTNET_SKIP_FIRST_TIME_EXPERIENCE]1" @@ -149,18 +162,36 @@ function InitializeDotNetCli { function InstallDotNetSdk { local root=$1 local version=$2 + local architecture="" + if [[ $# == 3 ]]; then + architecture=$3 + fi + InstallDotNet "$root" "$version" $architecture +} +function InstallDotNet { + local root=$1 + local version=$2 + GetDotNetInstallScript "$root" local install_script=$_GetDotNetInstallScript - local arch_arg="" - if [[ $# == 3 ]]; then - arch_arg="--architecture $3" + local archArg='' + if [[ -n "${3:-}" ]]; then + archArg="--architecture $3" + fi + local runtimeArg='' + if [[ -n "${4:-}" ]]; then + runtimeArg="--runtime $4" fi - bash "$install_script" --version $version --install-dir "$root" $arch_arg || { + local skipNonVersionedFilesArg="" + if [[ "$#" -ge "5" ]]; then + skipNonVersionedFilesArg="--skip-non-versioned-files" + fi + bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg || { local exit_code=$? - echo "Failed to install dotnet SDK (exit code '$exit_code')." >&2 + Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK (exit code '$exit_code')." ExitWithExitCode $exit_code } } @@ -197,6 +228,7 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" + _InitializeBuildToolFramework="netcoreapp2.1" } function GetNuGetPackageCachePath { @@ -212,6 +244,17 @@ function GetNuGetPackageCachePath { _GetNuGetPackageCachePath=$NUGET_PACKAGES } +function InitializeNativeTools() { + if grep -Fq "native-tools" $global_json_file + then + local nativeArgs="" + if [[ "$ci" == true ]]; then + nativeArgs="-InstallDirectory $tools_dir" + fi + "$_script_dir/init-tools-native.sh" $nativeArgs + fi +} + function InitializeToolset { if [[ -n "${_InitializeToolset:-}" ]]; then return @@ -234,7 +277,7 @@ function InitializeToolset { fi if [[ "$restore" != true ]]; then - echo "Toolset version $toolsetVersion has not been restored." >&2 + Write-PipelineTelemetryError -category 'InitializeToolset' "Toolset version $toolset_version has not been restored." ExitWithExitCode 2 fi @@ -246,12 +289,12 @@ function InitializeToolset { fi echo '' > "$proj" - MSBuild "$proj" $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\;NoSummary /p:__ToolsetLocationOutputFile="$toolset_location_file" + MSBuild-Core "$proj" $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\;NoSummary /p:__ToolsetLocationOutputFile="$toolset_location_file" local toolset_build_proj=`cat "$toolset_location_file"` if [[ ! -a "$toolset_build_proj" ]]; then - echo "Invalid toolset path: $toolset_build_proj" >&2 + Write-PipelineTelemetryError -category 'InitializeToolset' "Invalid toolset path: $toolset_build_proj" ExitWithExitCode 3 fi @@ -274,14 +317,27 @@ function StopProcesses { } function MSBuild { + local args=$@ + if [[ "$pipelines_log" == true ]]; then + InitializeBuildTool + InitializeToolset + local toolset_dir="${_InitializeToolset%/*}" + local logger_path="$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" + args=( "${args[@]}" "-logger:$logger_path" ) + fi + + MSBuild-Core ${args[@]} +} + +function MSBuild-Core { if [[ "$ci" == true ]]; then if [[ "$binary_log" != true ]]; then - echo "Binary log must be enabled in CI build." >&2 + Write-PipelineTaskError "Binary log must be enabled in CI build." ExitWithExitCode 1 fi if [[ "$node_reuse" == true ]]; then - echo "Node reuse must be disabled in CI build." >&2 + Write-PipelineTaskError "Node reuse must be disabled in CI build." ExitWithExitCode 1 fi fi @@ -293,13 +349,15 @@ function MSBuild { warnaserror_switch="/warnaserror" fi - "$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error "$@" || { + "$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || { local exit_code=$? - echo "Build failed (exit code '$exit_code')." >&2 + Write-PipelineTaskError "Build failed (exit code '$exit_code')." ExitWithExitCode $exit_code } } +. "$scriptroot/pipeline-logging-functions.sh" + ResolvePath "${BASH_SOURCE[0]}" _script_dir=`dirname "$_ResolvePath"` @@ -307,10 +365,17 @@ eng_root=`cd -P "$_script_dir/.." && pwd` repo_root=`cd -P "$_script_dir/../.." && pwd` artifacts_dir="$repo_root/artifacts" toolset_dir="$artifacts_dir/toolset" +tools_dir="$repo_root/.tools" log_dir="$artifacts_dir/log/$configuration" temp_dir="$artifacts_dir/tmp/$configuration" global_json_file="$repo_root/global.json" +# determine if global.json contains a "runtimes" entry +global_json_has_runtimes=false +dotnetlocal_key=`grep -m 1 "runtimes" "$global_json_file"` || true +if [[ -n "$dotnetlocal_key" ]]; then + global_json_has_runtimes=true +fi # HOME may not be defined in some scenarios, but it is required by NuGet if [[ -z $HOME ]]; then diff --git a/external/linker/external/Mono.Cecil.overrides b/external/linker/external/Mono.Cecil.overrides index 73e5fa4b4f..d49a1bef83 100644 --- a/external/linker/external/Mono.Cecil.overrides +++ b/external/linker/external/Mono.Cecil.overrides @@ -1,13 +1,27 @@ - - $(NoWarn);0618 - - true + + + + + true - $(MSBuildThisFileDirectory)cecil/cecil.snk - \ No newline at end of file + + + CecilStrongNameKey + + 00240000048000009400000006020000002400005253413100040000010001002b5c9f7f04346c324a3176f8d3ee823bbf2d60efdbc35f86fd9e65ea3e6cd11bcdcba3a353e55133c8ac5c4caaba581b2c6dfff2cc2d0edc43959ddb86b973300a479a82419ef489c3225f1fe429a708507bd515835160e10bc743d20ca33ab9570cfd68d479fcf0bc797a763bec5d1000f0159ef619e709d915975e87beebaf + 50cebf1cceb9d05e + $(NoWarn);0618 + + + diff --git a/external/linker/external/cecil/.azure-pipelines.yml b/external/linker/external/cecil/.azure-pipelines.yml new file mode 100644 index 0000000000..f463b22cf1 --- /dev/null +++ b/external/linker/external/cecil/.azure-pipelines.yml @@ -0,0 +1,38 @@ +trigger: +- master + +pr: +- master + +jobs: +- job: Linux + pool: + vmImage: 'ubuntu-16.04' + steps: + - script: | + dotnet build -c Debug Mono.Cecil.sln + displayName: 'Build' + - script: | + dotnet test --no-build -c Debug -f netcoreapp2.1 Mono.Cecil.sln + displayName: 'Test .NET Core' + - task: NuGetToolInstaller@0 + displayName: 'Install nuget' + - task: NuGetCommand@2 + inputs: + command: 'custom' + arguments: 'install NUnit.Console -Version 3.9.0 -OutputDirectory ./packages' + displayName: 'Get NUnit.Console' + - script: | + mono ./packages/NUnit.ConsoleRunner.3.9.0/tools/nunit3-console.exe ./Mono.Cecil.nunit + displayName: 'Test .NET 4.0 using Mono' + +- job: Windows + pool: + vmImage: 'vs2017-win2016' + steps: + - script: | + dotnet build -c Debug Mono.Cecil.sln + displayName: 'Build' + - script: | + dotnet test --no-build -c Debug Mono.Cecil.sln + displayName: 'Test' diff --git a/external/linker/external/cecil/.gitignore b/external/linker/external/cecil/.gitignore index 08c8509f51..b369ea1f92 100644 --- a/external/linker/external/cecil/.gitignore +++ b/external/linker/external/cecil/.gitignore @@ -13,3 +13,4 @@ Mono.Cecil.sln.ide* TestResults project.lock.json .vs/ +.idea/ diff --git a/external/linker/external/cecil/.travis.yml b/external/linker/external/cecil/.travis.yml deleted file mode 100644 index 0f102833a3..0000000000 --- a/external/linker/external/cecil/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: csharp -solution: Mono.Cecil.sln -install: - - nuget restore Mono.Cecil.sln - - nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner -script: - - xbuild /p:Configuration=net_4_0_Debug Mono.Cecil.sln - - mono ./testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe Mono.Cecil.nunit diff --git a/external/linker/external/cecil/Directory.Build.props b/external/linker/external/cecil/Directory.Build.props new file mode 100644 index 0000000000..fd9bb8ab08 --- /dev/null +++ b/external/linker/external/cecil/Directory.Build.props @@ -0,0 +1,27 @@ + + + false + false + false + Debug;Release + true + true + $(MSBuildThisFileDirectory)\cecil.snk + $(DefineConstants);NET_CORE + + + + true + $(net40FrameworkPathOverride) + /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.0-api/ + /usr/lib/mono/4.0-api/ + + + + + + + $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Mono.Cecil.overrides))\Mono.Cecil.overrides + + + diff --git a/external/linker/external/cecil/Mono.Cecil.Cil/CodeReader.cs b/external/linker/external/cecil/Mono.Cecil.Cil/CodeReader.cs index f7f11d5d9e..ac5b31be05 100644 --- a/external/linker/external/cecil/Mono.Cecil.Cil/CodeReader.cs +++ b/external/linker/external/cecil/Mono.Cecil.Cil/CodeReader.cs @@ -471,8 +471,6 @@ namespace Mono.Cecil.Cil { ReadScopes (scope.scopes); } -#if !READ_ONLY - public ByteBuffer PatchRawMethodBody (MethodDefinition method, CodeWriter writer, out int code_size, out MetadataToken local_var_token) { var position = MoveTo (method); @@ -664,8 +662,5 @@ namespace Mono.Cecil.Cil { } } } - -#endif - } } diff --git a/external/linker/external/cecil/Mono.Cecil.Cil/CodeWriter.cs b/external/linker/external/cecil/Mono.Cecil.Cil/CodeWriter.cs index 2003f104f6..88942e1258 100644 --- a/external/linker/external/cecil/Mono.Cecil.Cil/CodeWriter.cs +++ b/external/linker/external/cecil/Mono.Cecil.Cil/CodeWriter.cs @@ -18,8 +18,6 @@ using Mono.Cecil.PE; using RVA = System.UInt32; -#if !READ_ONLY - namespace Mono.Cecil.Cil { sealed class CodeWriter : ByteBuffer { @@ -655,5 +653,3 @@ namespace Mono.Cecil.Cil { } } } - -#endif diff --git a/external/linker/external/cecil/Mono.Cecil.Cil/Document.cs b/external/linker/external/cecil/Mono.Cecil.Cil/Document.cs index 2c2d21e1c2..03d3ec301d 100644 --- a/external/linker/external/cecil/Mono.Cecil.Cil/Document.cs +++ b/external/linker/external/cecil/Mono.Cecil.Cil/Document.cs @@ -49,12 +49,13 @@ namespace Mono.Cecil.Cil { string url; - byte type; - byte hash_algorithm; - byte language; - byte language_vendor; + Guid type; + Guid hash_algorithm; + Guid language; + Guid language_vendor; byte [] hash; + byte [] embedded_source; public string Url { get { return url; } @@ -62,23 +63,43 @@ namespace Mono.Cecil.Cil { } public DocumentType Type { - get { return (DocumentType) type; } - set { type = (byte) value; } + get { return type.ToType (); } + set { type = value.ToGuid (); } + } + + public Guid TypeGuid { + get { return type; } + set { type = value; } } public DocumentHashAlgorithm HashAlgorithm { - get { return (DocumentHashAlgorithm) hash_algorithm; } - set { hash_algorithm = (byte) value; } + get { return hash_algorithm.ToHashAlgorithm (); } + set { hash_algorithm = value.ToGuid (); } + } + + public Guid HashAlgorithmGuid { + get { return hash_algorithm; } + set { hash_algorithm = value; } } public DocumentLanguage Language { - get { return (DocumentLanguage) language; } - set { language = (byte) value; } + get { return language.ToLanguage (); } + set { language = value.ToGuid (); } + } + + public Guid LanguageGuid { + get { return language; } + set { language = value; } } public DocumentLanguageVendor LanguageVendor { - get { return (DocumentLanguageVendor) language_vendor; } - set { language_vendor = (byte) value; } + get { return language_vendor.ToVendor (); } + set { language_vendor = value.ToGuid (); } + } + + public Guid LanguageVendorGuid { + get { return language_vendor; } + set { language_vendor = value; } } public byte [] Hash { @@ -86,10 +107,16 @@ namespace Mono.Cecil.Cil { set { hash = value; } } + public byte[] EmbeddedSource { + get { return embedded_source; } + set { embedded_source = value; } + } + public Document (string url) { this.url = url; this.hash = Empty.Array; + this.embedded_source = Empty.Array; this.token = new MetadataToken (TokenType.Document); } } diff --git a/external/linker/external/cecil/Mono.Cecil.Cil/PortablePdb.cs b/external/linker/external/cecil/Mono.Cecil.Cil/PortablePdb.cs index a7883e71d1..b5515ba913 100644 --- a/external/linker/external/cecil/Mono.Cecil.Cil/PortablePdb.cs +++ b/external/linker/external/cecil/Mono.Cecil.Cil/PortablePdb.cs @@ -60,12 +60,10 @@ namespace Mono.Cecil.Cil { this.debug_reader = new MetadataReader (image, module, this.reader); } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new PortablePdbWriterProvider (); } -#endif public bool ProcessDebugHeader (ImageDebugHeader header) { @@ -158,7 +156,6 @@ namespace Mono.Cecil.Cil { public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName) { Mixin.CheckModule (module); - Mixin.CheckFileName (fileName); var header = module.GetDebugHeader (); var entry = header.GetEmbeddedPortablePdbEntry (); @@ -201,12 +198,11 @@ namespace Mono.Cecil.Cil { this.reader = reader; } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new EmbeddedPortablePdbWriterProvider (); } -#endif + public bool ProcessDebugHeader (ImageDebugHeader header) { return reader.ProcessDebugHeader (header); @@ -223,9 +219,6 @@ namespace Mono.Cecil.Cil { } } - -#if !READ_ONLY - public sealed class PortablePdbWriterProvider : ISymbolWriterProvider { public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) @@ -254,12 +247,7 @@ namespace Mono.Cecil.Cil { } } - interface IMetadataSymbolWriter : ISymbolWriter { - void SetMetadata (MetadataBuilder metadata); - void WriteModule (); - } - - public sealed class PortablePdbWriter : ISymbolWriter, IMetadataSymbolWriter { + public sealed class PortablePdbWriter : ISymbolWriter { readonly MetadataBuilder pdb_metadata; readonly ModuleDefinition module; @@ -273,6 +261,13 @@ namespace Mono.Cecil.Cil { { this.pdb_metadata = pdb_metadata; this.module = module; + + this.module_metadata = module.metadata_builder; + + if (module_metadata != pdb_metadata) + this.pdb_metadata.metadata_builder = this.module_metadata; + + pdb_metadata.AddCustomDebugInformations (module); } internal PortablePdbWriter (MetadataBuilder pdb_metadata, ModuleDefinition module, ImageWriter writer) @@ -281,19 +276,6 @@ namespace Mono.Cecil.Cil { this.writer = writer; } - void IMetadataSymbolWriter.SetMetadata (MetadataBuilder metadata) - { - this.module_metadata = metadata; - - if (module_metadata != pdb_metadata) - this.pdb_metadata.metadata_builder = metadata; - } - - void IMetadataSymbolWriter.WriteModule () - { - pdb_metadata.AddCustomDebugInformations (module); - } - public ISymbolReaderProvider GetReaderProvider () { return new PortablePdbReaderProvider (); @@ -319,11 +301,7 @@ namespace Mono.Cecil.Cil { // PDB Age buffer.WriteUInt32 (1); // PDB Path - var filename = writer.BaseStream.GetFileName (); - if (!string.IsNullOrEmpty (filename)) - filename = Path.GetFileName (filename); - - buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (filename)); + buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (writer.BaseStream.GetFileName ())); buffer.WriteByte (0); var data = new byte [buffer.length]; @@ -429,7 +407,7 @@ namespace Mono.Cecil.Cil { } } - public sealed class EmbeddedPortablePdbWriter : ISymbolWriter, IMetadataSymbolWriter { + public sealed class EmbeddedPortablePdbWriter : ISymbolWriter { readonly Stream stream; readonly PortablePdbWriter writer; @@ -451,6 +429,8 @@ namespace Mono.Cecil.Cil { var directory = new ImageDebugDirectory { Type = ImageDebugType.EmbeddedPortablePdb, + MajorVersion = 0x0100, + MinorVersion = 0x0100, }; var data = new MemoryStream (); @@ -484,20 +464,8 @@ namespace Mono.Cecil.Cil { public void Dispose () { } - - void IMetadataSymbolWriter.SetMetadata (MetadataBuilder metadata) - { - ((IMetadataSymbolWriter) writer).SetMetadata (metadata); - } - - void IMetadataSymbolWriter.WriteModule () - { - ((IMetadataSymbolWriter) writer).WriteModule (); - } } -#endif - static class PdbGuidMapping { static readonly Dictionary guid_language = new Dictionary (); diff --git a/external/linker/external/cecil/Mono.Cecil.Cil/Symbols.cs b/external/linker/external/cecil/Mono.Cecil.Cil/Symbols.cs index c47761dd90..f1f85a0a60 100644 --- a/external/linker/external/cecil/Mono.Cecil.Cil/Symbols.cs +++ b/external/linker/external/cecil/Mono.Cecil.Cil/Symbols.cs @@ -16,6 +16,7 @@ using SR = System.Reflection; using Mono.Collections.Generic; using Mono.Cecil.Cil; +using Mono.Cecil.PE; namespace Mono.Cecil.Cil { @@ -749,9 +750,8 @@ namespace Mono.Cecil.Cil { } public interface ISymbolReader : IDisposable { -#if !READ_ONLY + ISymbolWriterProvider GetWriterProvider (); -#endif bool ProcessDebugHeader (ImageDebugHeader header); MethodDebugInformation Read (MethodDefinition method); } @@ -761,6 +761,44 @@ namespace Mono.Cecil.Cil { ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream); } +#if !NET_CORE + [Serializable] +#endif + public sealed class SymbolsNotFoundException : FileNotFoundException { + + public SymbolsNotFoundException (string message) : base (message) + { + } + +#if !NET_CORE + SymbolsNotFoundException ( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base (info, context) + { + } +#endif + } + +#if !NET_CORE + [Serializable] +#endif + public sealed class SymbolsNotMatchingException : InvalidOperationException { + + public SymbolsNotMatchingException (string message) : base (message) + { + } + +#if !NET_CORE + SymbolsNotMatchingException ( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base (info, context) + { + } +#endif + } + public class DefaultSymbolReaderProvider : ISymbolReaderProvider { readonly bool throw_if_no_symbol; @@ -810,14 +848,76 @@ namespace Mono.Cecil.Cil { } if (throw_if_no_symbol) - throw new FileNotFoundException (string.Format ("No symbol found for file: {0}", fileName)); + throw new SymbolsNotFoundException (string.Format ("No symbol found for file: {0}", fileName)); return null; } public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) { - throw new NotSupportedException (); + if (module.Image.HasDebugTables ()) + return null; + + if (module.HasDebugHeader) { + var header = module.GetDebugHeader (); + var entry = header.GetEmbeddedPortablePdbEntry (); + if (entry != null) + return new EmbeddedPortablePdbReaderProvider ().GetSymbolReader (module, ""); + } + + Mixin.CheckStream (symbolStream); + Mixin.CheckReadSeek (symbolStream); + + var position = symbolStream.Position; + + const int portablePdbHeader = 0x424a5342; + + var reader = new BinaryStreamReader (symbolStream); + var intHeader = reader.ReadInt32 (); + symbolStream.Position = position; + + if (intHeader == portablePdbHeader) { + return new PortablePdbReaderProvider ().GetSymbolReader (module, symbolStream); + } + + const string nativePdbHeader = "Microsoft C/C++ MSF 7.00"; + + var bytesHeader = reader.ReadBytes (nativePdbHeader.Length); + symbolStream.Position = position; + var isNativePdb = true; + + for (var i = 0; i < bytesHeader.Length; i++) { + if (bytesHeader [i] != (byte) nativePdbHeader [i]) { + isNativePdb = false; + break; + } + } + + if (isNativePdb) { + try { + return SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, symbolStream); + } catch (Exception) { + // We might not include support for native pdbs. + } + } + + const long mdbHeader = 0x45e82623fd7fa614; + + var longHeader = reader.ReadInt64 (); + symbolStream.Position = position; + + if (longHeader == mdbHeader) { + try { + return SymbolProvider.GetReaderProvider (SymbolKind.Mdb).GetSymbolReader (module, symbolStream); + } catch (Exception) { + // We might not include support for mdbs. + } + } + + if (throw_if_no_symbol) + throw new SymbolsNotFoundException (string.Format ("No symbols found in stream")); + + return null; } } @@ -837,11 +937,16 @@ namespace Mono.Cecil.Cil { var suffix = GetSymbolNamespace (kind); - var cecil_name = typeof (SymbolProvider).Assembly ().GetName (); + var cecil_name = typeof (SymbolProvider).Assembly.GetName (); var name = new SR.AssemblyName { Name = cecil_name.Name + "." + suffix, Version = cecil_name.Version, +#if NET_CORE + CultureName = cecil_name.CultureName, +#else + CultureInfo = cecil_name.CultureInfo, +#endif }; name.SetPublicKeyToken (cecil_name.GetPublicKeyToken ()); @@ -905,8 +1010,6 @@ namespace Mono.Cecil.Cil { } } -#if !READ_ONLY - public interface ISymbolWriter : IDisposable { ISymbolReaderProvider GetReaderProvider (); @@ -939,8 +1042,6 @@ namespace Mono.Cecil.Cil { throw new NotSupportedException (); } } - -#endif } namespace Mono.Cecil { diff --git a/external/linker/external/cecil/Mono.Cecil.Metadata/Buffers.cs b/external/linker/external/cecil/Mono.Cecil.Metadata/Buffers.cs index d87cb2a225..0dbf56852b 100644 --- a/external/linker/external/cecil/Mono.Cecil.Metadata/Buffers.cs +++ b/external/linker/external/cecil/Mono.Cecil.Metadata/Buffers.cs @@ -16,8 +16,6 @@ using Mono.Cecil.PE; using RVA = System.UInt32; -#if !READ_ONLY - namespace Mono.Cecil.Metadata { sealed class TableHeapBuffer : HeapBuffer { @@ -501,5 +499,3 @@ namespace Mono.Cecil.Metadata { } } } - -#endif diff --git a/external/linker/external/cecil/Mono.Cecil.Metadata/Utilities.cs b/external/linker/external/cecil/Mono.Cecil.Metadata/Utilities.cs index 3a4330da50..e299872517 100644 --- a/external/linker/external/cecil/Mono.Cecil.Metadata/Utilities.cs +++ b/external/linker/external/cecil/Mono.Cecil.Metadata/Utilities.cs @@ -300,7 +300,6 @@ namespace Mono.Cecil { return MetadataToken.Zero; } -#if !READ_ONLY public static uint CompressMetadataToken (this CodedIndex self, MetadataToken token) { uint ret = 0; @@ -561,7 +560,6 @@ namespace Mono.Cecil { exit: throw new ArgumentException (); } -#endif public static int GetSize (this CodedIndex self, Func counter) { diff --git a/external/linker/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs b/external/linker/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs index b741f684a6..9c85a425b3 100644 --- a/external/linker/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs +++ b/external/linker/external/cecil/Mono.Cecil.PE/BinaryStreamWriter.cs @@ -11,8 +11,6 @@ using System; using System.IO; -#if !READ_ONLY - namespace Mono.Cecil.PE { class BinaryStreamWriter : BinaryWriter { @@ -89,5 +87,3 @@ namespace Mono.Cecil.PE { } } } - -#endif diff --git a/external/linker/external/cecil/Mono.Cecil.PE/ByteBuffer.cs b/external/linker/external/cecil/Mono.Cecil.PE/ByteBuffer.cs index 8aee04bafd..9a6567ce15 100644 --- a/external/linker/external/cecil/Mono.Cecil.PE/ByteBuffer.cs +++ b/external/linker/external/cecil/Mono.Cecil.PE/ByteBuffer.cs @@ -160,8 +160,6 @@ namespace Mono.Cecil.PE { return value; } -#if !READ_ONLY - public void WriteByte (byte value) { if (position == buffer.Length) @@ -334,8 +332,5 @@ namespace Mono.Cecil.PE { Buffer.BlockCopy (current, 0, buffer, 0, current_length); this.buffer = buffer; } - -#endif - } } diff --git a/external/linker/external/cecil/Mono.Cecil.PE/Image.cs b/external/linker/external/cecil/Mono.Cecil.PE/Image.cs index 25ea1869ed..109206187c 100644 --- a/external/linker/external/cecil/Mono.Cecil.PE/Image.cs +++ b/external/linker/external/cecil/Mono.Cecil.PE/Image.cs @@ -29,6 +29,8 @@ namespace Mono.Cecil.PE { public TargetArchitecture Architecture; public ModuleCharacteristics Characteristics; public ushort LinkerVersion; + public ushort SubSystemMajor; + public ushort SubSystemMinor; public ImageDebugHeader DebugHeader; diff --git a/external/linker/external/cecil/Mono.Cecil.PE/ImageReader.cs b/external/linker/external/cecil/Mono.Cecil.PE/ImageReader.cs index f3f3d2641a..e1bcd4c71d 100644 --- a/external/linker/external/cecil/Mono.Cecil.PE/ImageReader.cs +++ b/external/linker/external/cecil/Mono.Cecil.PE/ImageReader.cs @@ -81,8 +81,8 @@ namespace Mono.Cecil.PE { // Characteristics 2 ushort characteristics = ReadUInt16 (); - ushort subsystem, dll_characteristics, linker_version; - ReadOptionalHeaders (out subsystem, out dll_characteristics, out linker_version); + ushort subsystem, dll_characteristics; + ReadOptionalHeaders (out subsystem, out dll_characteristics); ReadSections (sections); ReadCLIHeader (); ReadMetadata (); @@ -90,7 +90,6 @@ namespace Mono.Cecil.PE { image.Kind = GetModuleKind (characteristics, subsystem); image.Characteristics = (ModuleCharacteristics) dll_characteristics; - image.LinkerVersion = linker_version; } TargetArchitecture ReadArchitecture () @@ -109,7 +108,7 @@ namespace Mono.Cecil.PE { return ModuleKind.Console; } - void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics, out ushort linker) + void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics) { // - PEOptionalHeader // - StandardFieldsHeader @@ -119,7 +118,7 @@ namespace Mono.Cecil.PE { // pe32 || pe64 - linker = ReadUInt16 (); + image.LinkerVersion = ReadUInt16 (); // CodeSize 4 // InitializedDataSize 4 // UninitializedDataSize4 @@ -138,11 +137,16 @@ namespace Mono.Cecil.PE { // UserMinor 2 // SubSysMajor 2 // SubSysMinor 2 + Advance(44); + + image.SubSystemMajor = ReadUInt16 (); + image.SubSystemMinor = ReadUInt16 (); + // Reserved 4 // ImageSize 4 // HeaderSize 4 // FileChecksum 4 - Advance (64); + Advance (16); // SubSystem 2 subsystem = ReadUInt16 (); diff --git a/external/linker/external/cecil/Mono.Cecil.PE/ImageWriter.cs b/external/linker/external/cecil/Mono.Cecil.PE/ImageWriter.cs index 366f4f4205..bf7ed91368 100644 --- a/external/linker/external/cecil/Mono.Cecil.PE/ImageWriter.cs +++ b/external/linker/external/cecil/Mono.Cecil.PE/ImageWriter.cs @@ -11,8 +11,6 @@ using System; using System.IO; -#if !READ_ONLY - using Mono.Cecil.Cil; using Mono.Cecil.Metadata; @@ -243,8 +241,8 @@ namespace Mono.Cecil.PE { WriteUInt16 (0); // OSMinor WriteUInt16 (0); // UserMajor WriteUInt16 (0); // UserMinor - WriteUInt16 (4); // SubSysMajor - WriteUInt16 (0); // SubSysMinor + WriteUInt16 (module.subsystem_major); // SubSysMajor + WriteUInt16 (module.subsystem_minor); // SubSysMinor WriteUInt32 (0); // Reserved var last_section = LastSection(); @@ -255,17 +253,22 @@ namespace Mono.Cecil.PE { WriteUInt16 (GetSubSystem ()); // SubSystem WriteUInt16 ((ushort) module.Characteristics); // DLLFlags - const ulong stack_reserve = 0x100000; - const ulong stack_commit = 0x1000; - const ulong heap_reserve = 0x100000; - const ulong heap_commit = 0x1000; - if (!pe64) { - WriteUInt32 ((uint) stack_reserve); - WriteUInt32 ((uint) stack_commit); - WriteUInt32 ((uint) heap_reserve); - WriteUInt32 ((uint) heap_commit); + const uint stack_reserve = 0x100000; + const uint stack_commit = 0x1000; + const uint heap_reserve = 0x100000; + const uint heap_commit = 0x1000; + + WriteUInt32 (stack_reserve); + WriteUInt32 (stack_commit); + WriteUInt32 (heap_reserve); + WriteUInt32 (heap_commit); } else { + const ulong stack_reserve = 0x400000; + const ulong stack_commit = 0x4000; + const ulong heap_reserve = 0x100000; + const ulong heap_commit = 0x2000; + WriteUInt64 (stack_reserve); WriteUInt64 (stack_commit); WriteUInt64 (heap_reserve); @@ -355,6 +358,11 @@ namespace Mono.Cecil.PE { WriteUInt32 (characteristics); } + uint GetRVAFileOffset (Section section, RVA rva) + { + return section.PointerToRawData + rva - section.VirtualAddress; + } + void MoveTo (uint pointer) { BaseStream.Seek (pointer, SeekOrigin.Begin); @@ -362,7 +370,7 @@ namespace Mono.Cecil.PE { void MoveToRVA (Section section, RVA rva) { - BaseStream.Seek (section.PointerToRawData + rva - section.VirtualAddress, SeekOrigin.Begin); + BaseStream.Seek (GetRVAFileOffset (section, rva), SeekOrigin.Begin); } void MoveToRVA (TextSegment segment) @@ -806,6 +814,14 @@ namespace Mono.Cecil.PE { return pe_header_size + SizeOfOptionalHeader () + (sections * section_header_size); } + public void PatchMvid (Guid guid) + { + uint offset = GetRVAFileOffset (text, text_map.GetRVA (TextSegment.GuidHeap)); + BaseStream.Seek (offset, SeekOrigin.Begin); + var arr = guid.ToByteArray (); + BaseStream.Write (arr, 0, arr.Length); + } + void PatchWin32Resources (ByteBuffer resources) { PatchResourceDirectoryTable (resources); @@ -846,5 +862,3 @@ namespace Mono.Cecil.PE { } } } - -#endif diff --git a/external/linker/external/cecil/Mono.Cecil.PE/TextMap.cs b/external/linker/external/cecil/Mono.Cecil.PE/TextMap.cs index 614691b6ad..c0061c5927 100644 --- a/external/linker/external/cecil/Mono.Cecil.PE/TextMap.cs +++ b/external/linker/external/cecil/Mono.Cecil.PE/TextMap.cs @@ -10,8 +10,6 @@ using System; -#if !READ_ONLY - using RVA = System.UInt32; namespace Mono.Cecil.PE { @@ -108,5 +106,3 @@ namespace Mono.Cecil.PE { } } } - -#endif diff --git a/external/linker/external/cecil/Mono.Cecil.Tests.props b/external/linker/external/cecil/Mono.Cecil.Tests.props index 49c1a386f1..bd6df1f5e4 100644 --- a/external/linker/external/cecil/Mono.Cecil.Tests.props +++ b/external/linker/external/cecil/Mono.Cecil.Tests.props @@ -1,49 +1,16 @@ - - + - $(MSBuildProjectDirectory) true - - - true - - - false - - + - 3.7.1 + 3.11.0 - 15.3.0 + 15.9.0 - 3.8.0 + 3.12.0 - - - False - $(MSBuildThisFileDirectory)\Test\libs\nunit-2.6.2\nunit.core.dll - - - False - $(MSBuildThisFileDirectory)\Test\libs\nunit-2.6.2\nunit.core.interfaces.dll - - - False - $(MSBuildThisFileDirectory)\Test\libs\nunit-2.6.2\nunit.framework.dll - - - - - - - true - - diff --git a/external/linker/external/cecil/Mono.Cecil.csproj b/external/linker/external/cecil/Mono.Cecil.csproj index 8bb3b26031..3129b8feec 100644 --- a/external/linker/external/cecil/Mono.Cecil.csproj +++ b/external/linker/external/cecil/Mono.Cecil.csproj @@ -1,9 +1,7 @@ - - + - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - Mono.Cecil + netstandard2.0;net40 + true @@ -15,6 +13,4 @@ - - diff --git a/external/linker/external/cecil/Mono.Cecil.nunit b/external/linker/external/cecil/Mono.Cecil.nunit index 6bab390eee..4ea9a9646e 100644 --- a/external/linker/external/cecil/Mono.Cecil.nunit +++ b/external/linker/external/cecil/Mono.Cecil.nunit @@ -1,9 +1,9 @@ - - - - - - + + + + + + diff --git a/external/linker/external/cecil/Mono.Cecil.nuspec b/external/linker/external/cecil/Mono.Cecil.nuspec index 4fc12bc83d..bd37488c37 100644 --- a/external/linker/external/cecil/Mono.Cecil.nuspec +++ b/external/linker/external/cecil/Mono.Cecil.nuspec @@ -2,7 +2,7 @@ Mono.Cecil - 0.10.0.0-beta7 + 0.11.0.0 Mono.Cecil Jb Evain Jb Evain @@ -14,23 +14,29 @@ en-US assembly assemblies module modules il cil msil bytecode reflection injection cecil mono aop - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + + + diff --git a/external/linker/external/cecil/Mono.Cecil.props b/external/linker/external/cecil/Mono.Cecil.props deleted file mode 100644 index aef3a98a3f..0000000000 --- a/external/linker/external/cecil/Mono.Cecil.props +++ /dev/null @@ -1,103 +0,0 @@ - - - - net_4_0_Debug - AnyCPU - $(MSBuildThisFileDirectory) - 512 - 2.0 - Library - true - $(MSBuildThisFileDirectory)\cecil.snk - Library - $(BuildDirectory)\bin\$(Configuration)\ - $(MSBuildToolsPath)\Microsoft.CSharp.targets - true - false - false - - - true - full - false - $(DefineConstants);DEBUG;TRACE; - prompt - 4 - - - pdbonly - true - $(DefineConstants);TRACE; - prompt - 4 - false - - - $(DefineConstants);READ_ONLY; - - - v3.5 - $(DefineConstants);NET_3_5; - - - v4.0 - $(DefineConstants);NET_4_0; - - - netcoreapp2.0 - netstandard1.3 - - - - - - - - - - - - - - - - - - - - - - - $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Mono.Cecil.overrides))\Mono.Cecil.overrides - - - - - - diff --git a/external/linker/external/cecil/Mono.Cecil.sln b/external/linker/external/cecil/Mono.Cecil.sln index a8c436f342..7b3ff986c1 100644 --- a/external/linker/external/cecil/Mono.Cecil.sln +++ b/external/linker/external/cecil/Mono.Cecil.sln @@ -1,241 +1,67 @@ + Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26927.1 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28516.95 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{74E5ECE0-06B4-401C-AEBA-E8DD53E17943}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil", "Mono.Cecil.csproj", "{16C3FA32-4775-497F-8794-DD5AF13CFE22}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Symbols", "Symbols", "{929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Pdb", "symbols\pdb\Mono.Cecil.Pdb.csproj", "{4D22D51C-4230-46AF-8657-4FD757D9C8BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Mdb", "symbols\mdb\Mono.Cecil.Mdb.csproj", "{5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Tests", "Test\Mono.Cecil.Tests.csproj", "{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Tests", "Test\Mono.Cecil.Tests.csproj", "{EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Mdb", "symbols\mdb\Mono.Cecil.Mdb.csproj", "{8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Mdb.Tests", "symbols\mdb\Test\Mono.Cecil.Mdb.Tests.csproj", "{901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Mdb.Tests", "symbols\mdb\Test\Mono.Cecil.Mdb.Tests.csproj", "{AC71DF9C-99FA-4A63-990A-66C8010355A6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Pdb.Tests", "symbols\pdb\Test\Mono.Cecil.Pdb.Tests.csproj", "{50FC1815-A653-48D0-95E2-DB48CB01F4E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Pdb", "symbols\pdb\Mono.Cecil.Pdb.csproj", "{63E6915C-7EA4-4D76-AB28-0D7191EEA626}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{70E05599-64EE-4C11-A2F8-EE4113309039}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Pdb.Tests", "symbols\pdb\Test\Mono.Cecil.Pdb.Tests.csproj", "{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks.Tests", "rocks\Test\Mono.Cecil.Rocks.Tests.csproj", "{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E0893F44-CB9F-49C5-B38C-70082EFC5072}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Cecil.Rocks.Tests", "rocks\Test\Mono.Cecil.Rocks.Tests.csproj", "{EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - net_3_5_Debug_ReadOnly|Any CPU = net_3_5_Debug_ReadOnly|Any CPU - net_3_5_Debug|Any CPU = net_3_5_Debug|Any CPU - net_3_5_Release_ReadOnly|Any CPU = net_3_5_Release_ReadOnly|Any CPU - net_3_5_Release|Any CPU = net_3_5_Release|Any CPU - net_4_0_Debug_ReadOnly|Any CPU = net_4_0_Debug_ReadOnly|Any CPU - net_4_0_Debug|Any CPU = net_4_0_Debug|Any CPU - net_4_0_Release_ReadOnly|Any CPU = net_4_0_Release_ReadOnly|Any CPU - net_4_0_Release|Any CPU = net_4_0_Release|Any CPU - netstandard_Debug_ReadOnly|Any CPU = netstandard_Debug_ReadOnly|Any CPU - netstandard_Debug|Any CPU = netstandard_Debug|Any CPU - netstandard_Release_ReadOnly|Any CPU = netstandard_Release_ReadOnly|Any CPU - netstandard_Release|Any CPU = netstandard_Release|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.Build.0 = net_3_5_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release_ReadOnly|Any CPU.Build.0 = net_3_5_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug_ReadOnly|Any CPU.Build.0 = net_4_0_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release_ReadOnly|Any CPU.Build.0 = net_4_0_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16C3FA32-4775-497F-8794-DD5AF13CFE22}.Release|Any CPU.Build.0 = Release|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D22D51C-4230-46AF-8657-4FD757D9C8BC}.Release|Any CPU.Build.0 = Release|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A5F84B1-DD1A-4134-932C-C3AF5BDAD391}.Release|Any CPU.Build.0 = Release|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA7ADB7D-9FC1-4B4C-BBE9-359DD5B2E345}.Release|Any CPU.Build.0 = Release|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {901E005D-CD64-4DC5-8CD0-4A49A7B0AF71}.Release|Any CPU.Build.0 = Release|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50FC1815-A653-48D0-95E2-DB48CB01F4E1}.Release|Any CPU.Build.0 = Release|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70E05599-64EE-4C11-A2F8-EE4113309039}.Release|Any CPU.Build.0 = Release|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF768F7A-3C08-45EE-8A7E-BB5A81BADB7B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1} - {AC71DF9C-99FA-4A63-990A-66C8010355A6} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1} - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D75C0801-AFCB-4B1F-90AD-2B7852A74E6A} + SolutionGuid = {97A7013A-E1DE-4D11-93C5-212D0A7E85C9} EndGlobalSection EndGlobal diff --git a/external/linker/external/cecil/Mono.Cecil.sln.DotSettings b/external/linker/external/cecil/Mono.Cecil.sln.DotSettings deleted file mode 100644 index b1aed5eade..0000000000 --- a/external/linker/external/cecil/Mono.Cecil.sln.DotSettings +++ /dev/null @@ -1,39 +0,0 @@ - - DO_NOT_SHOW - True - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - END_OF_LINE - END_OF_LINE - END_OF_LINE - END_OF_LINE - END_OF_LINE - 1 - 1 - False - False - False - False - True - True - True - True - True - True - False - True - True - False - False - False - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> - True - C:\sources\cecil\Mono.Cecil.sln.DotSettings - True - 1 - True - True - True - True - None \ No newline at end of file diff --git a/external/linker/external/cecil/Mono.Cecil/AssemblyDefinition.cs b/external/linker/external/cecil/Mono.Cecil/AssemblyDefinition.cs index f02b93f299..264e9d8625 100644 --- a/external/linker/external/cecil/Mono.Cecil/AssemblyDefinition.cs +++ b/external/linker/external/cecil/Mono.Cecil/AssemblyDefinition.cs @@ -100,8 +100,6 @@ namespace Mono.Cecil { for (int i = 0; i < modules.Count; i++) modules [i].Dispose (); } - -#if !READ_ONLY public static AssemblyDefinition CreateAssembly (AssemblyNameDefinition assemblyName, string moduleName, ModuleKind kind) { return CreateAssembly (assemblyName, moduleName, new ModuleParameters { Kind = kind }); @@ -122,7 +120,6 @@ namespace Mono.Cecil { return assembly; } -#endif public static AssemblyDefinition ReadAssembly (string fileName) { @@ -153,8 +150,6 @@ namespace Mono.Cecil { return assembly; } -#if !READ_ONLY - public void Write (string fileName) { Write (fileName, new WriterParameters ()); @@ -184,7 +179,6 @@ namespace Mono.Cecil { { main_module.Write (stream, parameters); } -#endif public override string ToString () { diff --git a/external/linker/external/cecil/Mono.Cecil/AssemblyInfo.cs b/external/linker/external/cecil/Mono.Cecil/AssemblyInfo.cs index 5571093b64..b5455d1b86 100644 --- a/external/linker/external/cecil/Mono.Cecil/AssemblyInfo.cs +++ b/external/linker/external/cecil/Mono.Cecil/AssemblyInfo.cs @@ -14,11 +14,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle (Consts.AssemblyName)] -#if !NET_CORE [assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")] -#endif +[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)] [assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)] [assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)] [assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)] -[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)] diff --git a/external/linker/external/cecil/Mono.Cecil/AssemblyReader.cs b/external/linker/external/cecil/Mono.Cecil/AssemblyReader.cs index 0be4404289..2ec791c898 100644 --- a/external/linker/external/cecil/Mono.Cecil/AssemblyReader.cs +++ b/external/linker/external/cecil/Mono.Cecil/AssemblyReader.cs @@ -69,12 +69,11 @@ namespace Mono.Cecil { if (parameters.metadata_resolver != null) module.metadata_resolver = parameters.metadata_resolver; -#if !READ_ONLY if (parameters.metadata_importer_provider != null) module.metadata_importer = parameters.metadata_importer_provider.GetMetadataImporter (module); + if (parameters.reflection_importer_provider != null) module.reflection_importer = parameters.reflection_importer_provider.GetReflectionImporter (module); -#endif GetMetadataKind (module, parameters); @@ -105,7 +104,7 @@ namespace Mono.Cecil { : symbol_reader_provider.GetSymbolReader (module, module.FileName); if (reader != null) - module.ReadSymbols (reader); + module.ReadSymbols (reader, parameters.ThrowIfSymbolsAreNotMatching); } if (module.Image.HasDebugTables ()) @@ -834,6 +833,12 @@ namespace Mono.Cecil { types [i] = ReadType (i + 1); } + + if (module.IsWindowsMetadata ()) { + for (uint i = 0; i < length; i++) { + WindowsRuntimeProjections.Project (types [i]); + } + } } static bool IsNested (TypeAttributes attributes) @@ -945,9 +950,6 @@ namespace Mono.Cecil { if (IsNested (attributes)) type.DeclaringType = GetNestedTypeDeclaringType (type); - if (module.IsWindowsMetadata ()) - WindowsRuntimeProjections.Project (type); - return type; } @@ -1035,7 +1037,12 @@ namespace Mono.Cecil { if (type != null) return type; - return ReadTypeDefinition (rid); + type = ReadTypeDefinition (rid); + + if (module.IsWindowsMetadata ()) + WindowsRuntimeProjections.Project (type); + + return type; } TypeDefinition ReadTypeDefinition (uint rid) @@ -1111,11 +1118,14 @@ namespace Mono.Cecil { metadata.AddTypeReference (type); if (scope_token.TokenType == TokenType.TypeRef) { - declaring_type = GetTypeDefOrRef (scope_token); + if (scope_token.RID != rid) { + declaring_type = GetTypeDefOrRef (scope_token); - scope = declaring_type != null - ? declaring_type.Scope - : module; + scope = declaring_type != null + ? declaring_type.Scope + : module; + } else // obfuscated typeref row pointing to self + scope = module; } else scope = GetTypeReferenceScope (scope_token); @@ -2398,6 +2408,9 @@ namespace Mono.Cecil { if (token.TokenType != TokenType.Signature) throw new NotSupportedException (); + if (token.RID == 0) + return null; + if (!MoveTo (Table.StandAloneSig, token.RID)) return null; @@ -2812,9 +2825,9 @@ namespace Mono.Cecil { var name = signature.ReadDocumentName (); documents [i - 1] = new Document (name) { - HashAlgorithm = hash_algorithm.ToHashAlgorithm (), + HashAlgorithmGuid = hash_algorithm, Hash = hash, - Language = language.ToLanguage (), + LanguageGuid = language, token = new MetadataToken (TokenType.Document, i), }; } @@ -3755,8 +3768,10 @@ namespace Mono.Cecil { if (length == 0) return string.Empty; - var @string = Encoding.UTF8.GetString (buffer, position, - buffer [position + length - 1] == 0 ? length - 1 : length); + if (position + length > buffer.Length) + return string.Empty; + + var @string = Encoding.UTF8.GetString (buffer, position, length); position += length; return @string; diff --git a/external/linker/external/cecil/Mono.Cecil/AssemblyWriter.cs b/external/linker/external/cecil/Mono.Cecil/AssemblyWriter.cs index 7b3710e2fd..1e39197ee8 100644 --- a/external/linker/external/cecil/Mono.Cecil/AssemblyWriter.cs +++ b/external/linker/external/cecil/Mono.Cecil/AssemblyWriter.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Text; +using System.Security.Cryptography; using Mono; using Mono.Collections.Generic; @@ -29,8 +30,6 @@ using GuidIndex = System.UInt32; namespace Mono.Cecil { -#if !READ_ONLY - using ModuleRow = Row; using TypeRefRow = Row; using TypeDefRow = Row; @@ -103,28 +102,77 @@ namespace Mono.Cecil { if (symbol_writer_provider == null && parameters.WriteSymbols) symbol_writer_provider = new DefaultSymbolWriterProvider (); -#if !NET_CORE if (parameters.StrongNameKeyPair != null && name != null) { name.PublicKey = parameters.StrongNameKeyPair.PublicKey; module.Attributes |= ModuleAttributes.StrongNameSigned; } -#endif - using (var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters)) { - var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider, symbol_writer); - BuildMetadata (module, metadata); + if (parameters.DeterministicMvid) + module.Mvid = Guid.Empty; + var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider); + try { + module.metadata_builder = metadata; - var writer = ImageWriter.CreateWriter (module, metadata, stream); - stream.value.SetLength (0); - writer.WriteImage (); + using (var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters)) { + metadata.SetSymbolWriter (symbol_writer); + BuildMetadata (module, metadata); -#if !NET_CORE - if (parameters.StrongNameKeyPair != null) - CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair); -#endif + var writer = ImageWriter.CreateWriter (module, metadata, stream); + stream.value.SetLength (0); + writer.WriteImage (); + + if (parameters.StrongNameKeyPair != null) + CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair); + if (parameters.DeterministicMvid) { + module.Mvid = ComputeGuid (stream.value); + writer.PatchMvid (module.Mvid); + } + } + } finally { + module.metadata_builder = null; } } + static void CopyStreamChunk (Stream stream, Stream dest_stream, byte [] buffer, int length) + { + while (length > 0) { + int read = stream.Read (buffer, 0, System.Math.Min (buffer.Length, length)); + dest_stream.Write (buffer, 0, read); + length -= read; + } + } + + static byte [] ComputeHash (Stream stream) + { + const int buffer_size = 8192; + + var sha1 = new SHA1Managed (); + + stream.Seek (0, SeekOrigin.Begin); + var buffer = new byte [buffer_size]; + + using (var crypto_stream = new CryptoStream (Stream.Null, sha1, CryptoStreamMode.Write)) + CopyStreamChunk (stream, crypto_stream, buffer, (int) stream.Length); + return sha1.Hash; + } + + static unsafe Guid ComputeGuid (Stream stream) + { + byte[] hashCode = ComputeHash (stream); + + // From corefx/src/System.Reflection.Metadata/src/System/Reflection/Metadata/BlobContentId.cs + Guid guid = default(Guid); + byte* guidPtr = (byte*)&guid; + for (var i = 0; i < 16; i++) { + guidPtr[i] = hashCode[i]; + } + // modify the guid data so it decodes to the form of a "random" guid ala rfc4122 + guidPtr[7] = (byte)((guidPtr[7] & 0x0f) | (4 << 4)); + guidPtr[8] = (byte)((guidPtr[8] & 0x3f) | (2 << 6)); + + return guid; + } + static void BuildMetadata (ModuleDefinition module, MetadataBuilder metadata) { if (!module.HasImage) { @@ -209,10 +257,10 @@ namespace Mono.Cecil { public sealed override void Sort () { - Array.Sort (rows, 0, length, this); + MergeSort.Sort (rows, 0, this.length, this); } - protected int Compare (uint x, uint y) + protected static int Compare (uint x, uint y) { return x == y ? 0 : x > y ? 1 : -1; } @@ -796,7 +844,7 @@ namespace Mono.Cecil { readonly internal ModuleDefinition module; readonly internal ISymbolWriterProvider symbol_writer_provider; - readonly internal ISymbolWriter symbol_writer; + internal ISymbolWriter symbol_writer; readonly internal TextMap text_map; readonly internal string fq_name; readonly internal uint timestamp; @@ -846,8 +894,6 @@ namespace Mono.Cecil { readonly TypeSpecTable typespec_table; readonly MethodSpecTable method_spec_table; - readonly bool portable_pdb; - internal MetadataBuilder metadata_builder; readonly DocumentTable document_table; @@ -862,7 +908,7 @@ namespace Mono.Cecil { readonly Dictionary import_scope_map; readonly Dictionary document_map; - public MetadataBuilder (ModuleDefinition module, string fq_name, uint timestamp, ISymbolWriterProvider symbol_writer_provider, ISymbolWriter symbol_writer) + public MetadataBuilder (ModuleDefinition module, string fq_name, uint timestamp, ISymbolWriterProvider symbol_writer_provider) { this.module = module; this.text_map = CreateTextMap (); @@ -870,18 +916,6 @@ namespace Mono.Cecil { this.timestamp = timestamp; this.symbol_writer_provider = symbol_writer_provider; - if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ()) { - symbol_writer = new PortablePdbWriter (this, module); - } - - this.symbol_writer = symbol_writer; - - var pdb_writer = symbol_writer as IMetadataSymbolWriter; - if (pdb_writer != null) { - portable_pdb = true; - pdb_writer.SetMetadata (this); - } - this.code = new CodeWriter (this); this.data = new DataBuffer (); this.resources = new ResourceBuffer (); @@ -916,9 +950,6 @@ namespace Mono.Cecil { method_spec_map = new Dictionary (row_equality_comparer); generic_parameters = new Collection (); - if (!portable_pdb) - return; - this.document_table = GetTable (Table.Document); this.method_debug_information_table = GetTable (Table.MethodDebugInformation); this.local_scope_table = GetTable (Table.LocalScope); @@ -937,7 +968,6 @@ namespace Mono.Cecil { this.module = module; this.text_map = new TextMap (); this.symbol_writer_provider = writer_provider; - this.portable_pdb = true; this.string_heap = new StringHeapBuffer (); this.guid_heap = new GuidHeapBuffer (); @@ -961,6 +991,14 @@ namespace Mono.Cecil { this.import_scope_map = new Dictionary (row_equality_comparer); } + public void SetSymbolWriter (ISymbolWriter writer) + { + symbol_writer = writer; + + if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ()) + symbol_writer = new PortablePdbWriter (this, module); + } + TextMap CreateTextMap () { var map = new TextMap (); @@ -1050,10 +1088,6 @@ namespace Mono.Cecil { if (module.EntryPoint != null) entry_point = LookupToken (module.EntryPoint); - - var pdb_writer = symbol_writer as IMetadataSymbolWriter; - if (pdb_writer != null) - pdb_writer.WriteModule (); } void BuildAssembly () @@ -1209,10 +1243,8 @@ namespace Mono.Cecil { var table = GetTable (Table.File); var hash = resource.Hash; -#if !NET_CORE if (hash.IsNullOrEmpty ()) hash = CryptoService.ComputeHash (resource.File); -#endif return (uint) table.AddRow (new FileRow ( FileAttributes.ContainsNoMetaData, @@ -1445,8 +1477,7 @@ namespace Mono.Cecil { if (type.HasInterfaces) AddInterfaces (type); - if (type.HasLayoutInfo) - AddLayoutInfo (type); + AddLayoutInfo (type); if (type.HasFields) AddFields (type); @@ -1557,12 +1588,36 @@ namespace Mono.Cecil { void AddLayoutInfo (TypeDefinition type) { - var table = GetTable (Table.ClassLayout); + if (type.HasLayoutInfo) { + var table = GetTable (Table.ClassLayout); - table.AddRow (new ClassLayoutRow ( - (ushort) type.PackingSize, - (uint) type.ClassSize, - type.token.RID)); + table.AddRow (new ClassLayoutRow ( + (ushort) type.PackingSize, + (uint) type.ClassSize, + type.token.RID)); + + return; + } + + if (type.IsValueType && HasNoInstanceField (type)) { + var table = GetTable (Table.ClassLayout); + + table.AddRow (new ClassLayoutRow (0, 1, type.token.RID)); + } + } + + static bool HasNoInstanceField (TypeDefinition type) + { + if (!type.HasFields) + return true; + + var fields = type.Fields; + + for (int i = 0; i < fields.Count; i++) + if (!fields [i].IsStatic) + return false; + + return true; } void AddNestedTypes (TypeDefinition type) @@ -1907,7 +1962,7 @@ namespace Mono.Cecil { static ElementType GetConstantType (Type type) { - switch (type.GetTypeCode ()) { + switch (Type.GetTypeCode (type)) { case TypeCode.Boolean: return ElementType.Boolean; case TypeCode.Byte: @@ -2967,7 +3022,7 @@ namespace Mono.Cecil { if (value == null) throw new ArgumentNullException (); - switch (value.GetType ().GetTypeCode ()) { + switch (Type.GetTypeCode (value.GetType ())) { case TypeCode.Boolean: WriteByte ((byte) (((bool) value) ? 1 : 0)); break; @@ -3162,7 +3217,7 @@ namespace Mono.Cecil { void WriteTypeReference (TypeReference type) { - WriteUTF8String (TypeParser.ToParseable (type)); + WriteUTF8String (TypeParser.ToParseable (type, top_level: false)); } public void WriteMarshalInfo (MarshalInfo marshal_info) @@ -3280,8 +3335,6 @@ namespace Mono.Cecil { } } -#endif - static partial class Mixin { public static bool TryGetUniqueDocument (this MethodDebugInformation info, out Document document) diff --git a/external/linker/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs b/external/linker/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs index cf6a3a3451..b64ba4c8b6 100644 --- a/external/linker/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs +++ b/external/linker/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs @@ -191,10 +191,7 @@ namespace Mono.Cecil { string paths; try { - // AppContext is only available on platforms that implement .NET Standard 1.6 - var appContextType = Type.GetType ("System.AppContext, System.AppContext, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", throwOnError: false); - var getData = appContextType?.GetTypeInfo ().GetDeclaredMethod ("GetData"); - paths = (string) getData?.Invoke (null, new [] { "TRUSTED_PLATFORM_ASSEMBLIES" }); + paths = (string) AppDomain.CurrentDomain.GetData ("TRUSTED_PLATFORM_ASSEMBLIES"); } catch { paths = null; } @@ -265,7 +262,7 @@ namespace Mono.Cecil { if (version.MajorRevision == 3300) path = Path.Combine (path, "v1.0.3705"); else - path = Path.Combine (path, "v1.0.5000.0"); + path = Path.Combine (path, "v1.1.4322"); break; case 2: path = Path.Combine (path, "v2.0.50727"); @@ -282,6 +279,12 @@ namespace Mono.Cecil { if (File.Exists (file)) return GetAssembly (file, parameters); + if (on_mono && Directory.Exists (path + "-api")) { + file = Path.Combine (path + "-api", "mscorlib.dll"); + if (File.Exists (file)) + return GetAssembly (file, parameters); + } + return null; } @@ -374,7 +377,7 @@ namespace Mono.Cecil { return null; } -#endif + static string GetAssemblyFile (AssemblyNameReference reference, string prefix, string gac) { var gac_folder = new StringBuilder () @@ -390,7 +393,7 @@ namespace Mono.Cecil { Path.Combine (gac, reference.Name), gac_folder.ToString ()), reference.Name + ".dll"); } - +#endif public void Dispose () { Dispose (true); diff --git a/external/linker/external/cecil/Mono.Cecil/Import.cs b/external/linker/external/cecil/Mono.Cecil/Import.cs index 3d4d5bb126..4a6c3e0623 100644 --- a/external/linker/external/cecil/Mono.Cecil/Import.cs +++ b/external/linker/external/cecil/Mono.Cecil/Import.cs @@ -17,8 +17,6 @@ using Mono.Cecil.Metadata; namespace Mono.Cecil { -#if !READ_ONLY - public interface IMetadataImporterProvider { IMetadataImporter GetMetadataImporter (ModuleDefinition module); } @@ -155,9 +153,7 @@ namespace Mono.Cecil { { typeof (float), ElementType.R4 }, { typeof (double), ElementType.R8 }, { typeof (string), ElementType.String }, -#if !NET_CORE { typeof (TypedReference), ElementType.TypedByRef }, -#endif { typeof (IntPtr), ElementType.I }, { typeof (UIntPtr), ElementType.U }, { typeof (object), ElementType.Object }, @@ -177,8 +173,8 @@ namespace Mono.Cecil { string.Empty, type.Name, module, - ImportScope (type.Assembly ()), - type.IsValueType ()); + ImportScope (type), + type.IsValueType); reference.etype = ImportElementType (type); @@ -187,15 +183,20 @@ namespace Mono.Cecil { else reference.Namespace = type.Namespace ?? string.Empty; - if (type.IsGenericType ()) + if (type.IsGenericType) ImportGenericParameters (reference, type.GetGenericArguments ()); return reference; } + protected virtual IMetadataScope ImportScope (Type type) + { + return ImportScope (type.Assembly); + } + static bool ImportOpenGenericType (Type type, ImportGenericKind import_kind) { - return type.IsGenericType () && type.IsGenericTypeDefinition () && import_kind == ImportGenericKind.Open; + return type.IsGenericType && type.IsGenericTypeDefinition && import_kind == ImportGenericKind.Open; } static bool ImportOpenGenericMethod (SR.MethodBase method, ImportGenericKind import_kind) @@ -219,7 +220,7 @@ namespace Mono.Cecil { if (type.IsArray) return new ArrayType (ImportType (type.GetElementType (), context), type.GetArrayRank ()); - if (type.IsGenericType ()) + if (type.IsGenericType) return ImportGenericInstance (type, context); if (type.IsGenericParameter) @@ -233,8 +234,8 @@ namespace Mono.Cecil { if (context.IsEmpty) throw new InvalidOperationException (); - if (type.DeclaringMethod () != null) - return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod ()), type.GenericParameterPosition); + if (type.DeclaringMethod != null) + return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod), type.GenericParameterPosition); if (type.DeclaringType != null) return context.TypeParameter (NormalizeTypeFullName (type.DeclaringType), type.GenericParameterPosition); @@ -282,7 +283,7 @@ namespace Mono.Cecil { static bool IsGenericInstance (Type type) { - return type.IsGenericType () && !type.IsGenericTypeDefinition (); + return type.IsGenericType && !type.IsGenericTypeDefinition; } static ElementType ImportElementType (Type type) @@ -294,7 +295,7 @@ namespace Mono.Cecil { return etype; } - AssemblyNameReference ImportScope (SR.Assembly assembly) + protected AssemblyNameReference ImportScope (SR.Assembly assembly) { return ImportReference (assembly.GetName ()); } @@ -310,10 +311,8 @@ namespace Mono.Cecil { reference = new AssemblyNameReference (name.Name, name.Version) { PublicKeyToken = name.GetPublicKeyToken (), -#if !NET_CORE Culture = name.CultureInfo.Name, HashAlgorithm = (AssemblyHashAlgorithm) name.HashAlgorithm, -#endif }; module.AssemblyReferences.Add (reference); @@ -359,20 +358,12 @@ namespace Mono.Cecil { static SR.FieldInfo ResolveFieldDefinition (SR.FieldInfo field) { -#if NET_CORE - throw new NotImplementedException (); -#else return field.Module.ResolveField (field.MetadataToken); -#endif } static SR.MethodBase ResolveMethodDefinition (SR.MethodBase method) { -#if NET_CORE - throw new NotImplementedException (); -#else return method.Module.ResolveMethod (method.MetadataToken); -#endif } MethodReference ImportMethod (SR.MethodBase method, ImportGenericContext context, ImportGenericKind import_kind) @@ -504,7 +495,7 @@ namespace Mono.Cecil { type.Namespace, type.Name, module, - ImportScope (type.Scope), + ImportScope (type), type.IsValueType); MetadataSystem.TryProcessPrimitiveTypeReference (reference); @@ -518,7 +509,12 @@ namespace Mono.Cecil { return reference; } - IMetadataScope ImportScope (IMetadataScope scope) + protected virtual IMetadataScope ImportScope (TypeReference type) + { + return ImportScope (type.Scope); + } + + protected IMetadataScope ImportScope (IMetadataScope scope) { switch (scope.MetadataScopeType) { case MetadataScopeType.AssemblyNameReference: @@ -751,8 +747,6 @@ namespace Mono.Cecil { } } -#endif - static partial class Mixin { public static void CheckModule (ModuleDefinition module) diff --git a/external/linker/external/cecil/Mono.Cecil/MetadataResolver.cs b/external/linker/external/cecil/Mono.Cecil/MetadataResolver.cs index 26c4e16d79..630ec8a7cd 100644 --- a/external/linker/external/cecil/Mono.Cecil/MetadataResolver.cs +++ b/external/linker/external/cecil/Mono.Cecil/MetadataResolver.cs @@ -59,6 +59,15 @@ namespace Mono.Cecil { this.member = member; } + public ResolutionException (MemberReference member, Exception innerException) + : base ("Failed to resolve " + member.FullName, innerException) + { + if (member == null) + throw new ArgumentNullException ("member"); + + this.member = member; + } + #if !NET_CORE ResolutionException ( System.Runtime.Serialization.SerializationInfo info, diff --git a/external/linker/external/cecil/Mono.Cecil/MethodDefinition.cs b/external/linker/external/cecil/Mono.Cecil/MethodDefinition.cs index 5dda999ce0..76ce612d96 100644 --- a/external/linker/external/cecil/Mono.Cecil/MethodDefinition.cs +++ b/external/linker/external/cecil/Mono.Cecil/MethodDefinition.cs @@ -165,6 +165,8 @@ namespace Mono.Cecil { // we reset Body to null in ILSpy to save memory; so we need that operation to be thread-safe lock (module.SyncRoot) { body = value; + if (value == null) + this.debug_info = null; } } } @@ -178,6 +180,9 @@ namespace Mono.Cecil { return debug_info ?? (debug_info = new MethodDebugInformation (this)); } + set { + debug_info = value; + } } public bool HasPInvokeInfo { diff --git a/external/linker/external/cecil/Mono.Cecil/MethodReference.cs b/external/linker/external/cecil/Mono.Cecil/MethodReference.cs index 89ee6a7719..bd5fb77ba0 100644 --- a/external/linker/external/cecil/Mono.Cecil/MethodReference.cs +++ b/external/linker/external/cecil/Mono.Cecil/MethodReference.cs @@ -183,7 +183,7 @@ namespace Mono.Cecil { public static bool IsVarArg (this IMethodSignature self) { - return (self.CallingConvention & MethodCallingConvention.VarArg) != 0; + return self.CallingConvention == MethodCallingConvention.VarArg; } public static int GetSentinelPosition (this IMethodSignature self) diff --git a/external/linker/external/cecil/Mono.Cecil/ModuleDefinition.cs b/external/linker/external/cecil/Mono.Cecil/ModuleDefinition.cs index 85381c0bbd..977462b6c7 100644 --- a/external/linker/external/cecil/Mono.Cecil/ModuleDefinition.cs +++ b/external/linker/external/cecil/Mono.Cecil/ModuleDefinition.cs @@ -31,13 +31,12 @@ namespace Mono.Cecil { ReadingMode reading_mode; internal IAssemblyResolver assembly_resolver; internal IMetadataResolver metadata_resolver; -#if !READ_ONLY internal IMetadataImporterProvider metadata_importer_provider; internal IReflectionImporterProvider reflection_importer_provider; -#endif Stream symbol_stream; ISymbolReaderProvider symbol_reader_provider; bool read_symbols; + bool throw_symbols_mismatch; bool projections; bool in_memory; bool read_write; @@ -62,7 +61,6 @@ namespace Mono.Cecil { set { metadata_resolver = value; } } -#if !READ_ONLY public IMetadataImporterProvider MetadataImporterProvider { get { return metadata_importer_provider; } set { metadata_importer_provider = value; } @@ -72,7 +70,6 @@ namespace Mono.Cecil { get { return reflection_importer_provider; } set { reflection_importer_provider = value; } } -#endif public Stream SymbolStream { get { return symbol_stream; } @@ -89,6 +86,11 @@ namespace Mono.Cecil { set { read_symbols = value; } } + public bool ThrowIfSymbolsAreNotMatching { + get { return throw_symbols_mismatch; } + set { throw_symbols_mismatch = value; } + } + public bool ReadWrite { get { return read_write; } set { read_write = value; } @@ -107,11 +109,10 @@ namespace Mono.Cecil { public ReaderParameters (ReadingMode readingMode) { this.reading_mode = readingMode; + this.throw_symbols_mismatch = true; } } -#if !READ_ONLY - public sealed class ModuleParameters { ModuleKind kind; @@ -120,10 +121,8 @@ namespace Mono.Cecil { TargetArchitecture architecture; IAssemblyResolver assembly_resolver; IMetadataResolver metadata_resolver; -#if !READ_ONLY IMetadataImporterProvider metadata_importer_provider; IReflectionImporterProvider reflection_importer_provider; -#endif public ModuleKind Kind { get { return kind; } @@ -155,7 +154,6 @@ namespace Mono.Cecil { set { metadata_resolver = value; } } -#if !READ_ONLY public IMetadataImporterProvider MetadataImporterProvider { get { return metadata_importer_provider; } set { metadata_importer_provider = value; } @@ -165,7 +163,6 @@ namespace Mono.Cecil { get { return reflection_importer_provider; } set { reflection_importer_provider = value; } } -#endif public ModuleParameters () { @@ -176,25 +173,7 @@ namespace Mono.Cecil { static TargetRuntime GetCurrentRuntime () { -#if !NET_CORE return typeof (object).Assembly.ImageRuntimeVersion.ParseRuntime (); -#else - var corlib_name = AssemblyNameReference.Parse (typeof (object).Assembly ().FullName); - var corlib_version = corlib_name.Version; - - switch (corlib_version.Major) { - case 1: - return corlib_version.Minor == 0 - ? TargetRuntime.Net_1_0 - : TargetRuntime.Net_1_1; - case 2: - return TargetRuntime.Net_2_0; - case 4: - return TargetRuntime.Net_4_0; - default: - throw new NotSupportedException (); - } -#endif } } @@ -220,9 +199,7 @@ namespace Mono.Cecil { Stream symbol_stream; ISymbolWriterProvider symbol_writer_provider; bool write_symbols; -#if !NET_CORE SR.StrongNameKeyPair key_pair; -#endif public uint? Timestamp { get { return timestamp; } @@ -244,15 +221,13 @@ namespace Mono.Cecil { set { write_symbols = value; } } -#if !NET_CORE public SR.StrongNameKeyPair StrongNameKeyPair { get { return key_pair; } set { key_pair = value; } } -#endif - } -#endif + public bool DeterministicMvid { get; set; } + } public sealed class ModuleDefinition : ModuleReference, ICustomAttributeProvider, ICustomDebugInformationProvider, IDisposable { @@ -276,18 +251,20 @@ namespace Mono.Cecil { TargetArchitecture architecture; ModuleAttributes attributes; ModuleCharacteristics characteristics; - internal ushort linker_version = 8; Guid mvid; + + internal ushort linker_version = 8; + internal ushort subsystem_major = 4; + internal ushort subsystem_minor = 0; internal uint timestamp; internal AssemblyDefinition assembly; MethodDefinition entry_point; -#if !READ_ONLY internal IReflectionImporter reflection_importer; internal IMetadataImporter metadata_importer; ICustomMetadataWriter custom_writer; -#endif + Collection custom_attributes; Collection references; Collection modules; @@ -297,6 +274,8 @@ namespace Mono.Cecil { internal Collection custom_infos; + internal MetadataBuilder metadata_builder; + public bool IsMain { get { return kind != ModuleKind.NetModule; } } @@ -385,7 +364,6 @@ namespace Mono.Cecil { get { return assembly; } } -#if !READ_ONLY internal IReflectionImporter ReflectionImporter { get { if (reflection_importer == null) @@ -415,7 +393,6 @@ namespace Mono.Cecil { get { return custom_writer; } set { custom_writer = value; } } -#endif public IAssemblyResolver AssemblyResolver { get { @@ -609,6 +586,8 @@ namespace Mono.Cecil { this.attributes = image.Attributes; this.characteristics = image.Characteristics; this.linker_version = image.LinkerVersion; + this.subsystem_major = image.SubSystemMajor; + this.subsystem_minor = image.SubSystemMinor; this.file_name = image.FileName; this.timestamp = image.Timestamp; @@ -691,7 +670,7 @@ namespace Mono.Cecil { public TypeReference GetType (string fullName, bool runtimeName) { return runtimeName - ? TypeParser.ParseType (this, fullName) + ? TypeParser.ParseType (this, fullName, typeDefinitionOnly: true) : GetType (fullName); } @@ -767,8 +746,6 @@ namespace Mono.Cecil { return MetadataResolver.Resolve (type); } -#if !READ_ONLY - static void CheckContext (IGenericParameterProvider context, ModuleDefinition module) { if (context == null) @@ -940,8 +917,6 @@ namespace Mono.Cecil { return MetadataImporter.ImportReference (method, context); } -#endif - public IMetadataTokenProvider LookupToken (int token) { return LookupToken (new MetadataToken ((uint) token)); @@ -1013,8 +988,6 @@ namespace Mono.Cecil { return Image.DebugHeader ?? new ImageDebugHeader (); } -#if !READ_ONLY - public static ModuleDefinition CreateModule (string name, ModuleKind kind) { return CreateModule (name, new ModuleParameters { Kind = kind }); @@ -1042,12 +1015,11 @@ namespace Mono.Cecil { if (parameters.MetadataResolver != null) module.metadata_resolver = parameters.MetadataResolver; -#if !READ_ONLY if (parameters.MetadataImporterProvider != null) module.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter (module); + if (parameters.ReflectionImporterProvider != null) module.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter (module); -#endif if (parameters.Kind != ModuleKind.NetModule) { var assembly = new AssemblyDefinition (); @@ -1069,18 +1041,21 @@ namespace Mono.Cecil { return new AssemblyNameDefinition (name, Mixin.ZeroVersion); } -#endif - public void ReadSymbols () { if (string.IsNullOrEmpty (file_name)) throw new InvalidOperationException (); var provider = new DefaultSymbolReaderProvider (throwIfNoSymbol: true); - ReadSymbols (provider.GetSymbolReader (this, file_name)); + ReadSymbols (provider.GetSymbolReader (this, file_name), throwIfSymbolsAreNotMaching: true); } public void ReadSymbols (ISymbolReader reader) + { + ReadSymbols(reader, throwIfSymbolsAreNotMaching: true); + } + + public void ReadSymbols (ISymbolReader reader, bool throwIfSymbolsAreNotMaching) { if (reader == null) throw new ArgumentNullException ("reader"); @@ -1089,7 +1064,11 @@ namespace Mono.Cecil { if (!symbol_reader.ProcessDebugHeader (GetDebugHeader ())) { symbol_reader = null; - throw new InvalidOperationException (); + + if (throwIfSymbolsAreNotMaching) + throw new SymbolsNotMatchingException ("Symbols were found but are not matching the assembly"); + + return; } if (HasImage && ReadingMode == ReadingMode.Immediate) { @@ -1153,8 +1132,6 @@ namespace Mono.Cecil { parameters); } -#if !READ_ONLY - public void Write (string fileName) { Write (fileName, new WriterParameters ()); @@ -1193,9 +1170,6 @@ namespace Mono.Cecil { ModuleWriter.WriteModule (this, Disposable.NotOwned (stream), parameters); } - -#endif - } static partial class Mixin { @@ -1310,16 +1284,6 @@ namespace Mono.Cecil { return Path.GetFullPath (file_stream.Name); } -#if !NET_4_0 - public static void CopyTo (this Stream self, Stream target) - { - var buffer = new byte [1024 * 8]; - int read; - while ((read = self.Read (buffer, 0, buffer.Length)) > 0) - target.Write (buffer, 0, read); - } -#endif - public static TargetRuntime ParseRuntime (this string self) { if (string.IsNullOrEmpty (self)) diff --git a/external/linker/external/cecil/Mono.Cecil/TypeParser.cs b/external/linker/external/cecil/Mono.Cecil/TypeParser.cs index 02f3036f37..07854cd6ed 100644 --- a/external/linker/external/cecil/Mono.Cecil/TypeParser.cs +++ b/external/linker/external/cecil/Mono.Cecil/TypeParser.cs @@ -234,20 +234,24 @@ namespace Mono.Cecil { return fullname.Substring (start, position - start); } - public static TypeReference ParseType (ModuleDefinition module, string fullname) + public static TypeReference ParseType (ModuleDefinition module, string fullname, bool typeDefinitionOnly = false) { if (string.IsNullOrEmpty (fullname)) return null; var parser = new TypeParser (fullname); - return GetTypeReference (module, parser.ParseType (true)); + return GetTypeReference (module, parser.ParseType (true), typeDefinitionOnly); } - static TypeReference GetTypeReference (ModuleDefinition module, Type type_info) + static TypeReference GetTypeReference (ModuleDefinition module, Type type_info, bool type_def_only) { TypeReference type; - if (!TryGetDefinition (module, type_info, out type)) + if (!TryGetDefinition (module, type_info, out type)) { + if (type_def_only) + return null; + type = CreateReference (type_info, module, GetMetadataScope (module, type_info)); + } return CreateSpecs (type, type_info); } @@ -296,7 +300,7 @@ namespace Mono.Cecil { var instance_arguments = instance.GenericArguments; for (int i = 0; i < generic_arguments.Length; i++) - instance_arguments.Add (GetTypeReference (type.Module, generic_arguments [i])); + instance_arguments.Add (GetTypeReference (type.Module, generic_arguments [i], false)); return instance; } @@ -398,13 +402,13 @@ namespace Mono.Cecil { return false; } - public static string ToParseable (TypeReference type) + public static string ToParseable (TypeReference type, bool top_level = true) { if (type == null) return null; var name = new StringBuilder (); - AppendType (type, name, true, true); + AppendType (type, name, true, top_level); return name.ToString (); } diff --git a/external/linker/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs b/external/linker/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs index 51f4ca1359..a37d3b90c1 100644 --- a/external/linker/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs +++ b/external/linker/external/cecil/Mono.Security.Cryptography/CryptoConvert.cs @@ -27,10 +27,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if !READ_ONLY - -#if !NET_CORE - using System; using System.Security.Cryptography; @@ -246,8 +242,3 @@ namespace Mono.Security.Cryptography { } } } - -#endif - -#endif - diff --git a/external/linker/external/cecil/Mono.Security.Cryptography/CryptoService.cs b/external/linker/external/cecil/Mono.Security.Cryptography/CryptoService.cs index 840276d290..284d9bb809 100644 --- a/external/linker/external/cecil/Mono.Security.Cryptography/CryptoService.cs +++ b/external/linker/external/cecil/Mono.Security.Cryptography/CryptoService.cs @@ -8,10 +8,6 @@ // Licensed under the MIT/X11 license. // -#if !READ_ONLY - -#if !NET_CORE - using System; using System.IO; using System.Reflection; @@ -152,7 +148,3 @@ namespace Mono.Cecil { } } } - -#endif - -#endif diff --git a/external/linker/external/cecil/Mono/MergeSort.cs b/external/linker/external/cecil/Mono/MergeSort.cs new file mode 100644 index 0000000000..5d856eaf09 --- /dev/null +++ b/external/linker/external/cecil/Mono/MergeSort.cs @@ -0,0 +1,66 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +namespace Mono { + + class MergeSort { + private readonly T [] elements; + private readonly T [] buffer; + private readonly IComparer comparer; + + private MergeSort (T [] elements, IComparer comparer) + { + this.elements = elements; + this.buffer = new T [elements.Length]; + Array.Copy (this.elements, this.buffer, elements.Length); + this.comparer = comparer; + } + + public static void Sort (T [] source, IComparer comparer) + { + Sort (source, 0, source.Length, comparer); + } + + public static void Sort (T [] source, int start, int length, IComparer comparer) + { + new MergeSort (source, comparer).Sort (start, length); + } + + private void Sort (int start, int length) + { + TopDownSplitMerge (this.buffer, this.elements, start, length); + } + + private void TopDownSplitMerge (T [] a, T [] b, int start, int end) + { + if (end - start < 2) + return; + + int middle = (end + start) / 2; + TopDownSplitMerge (b, a, start, middle); + TopDownSplitMerge (b, a, middle, end); + TopDownMerge (a, b, start, middle, end); + } + + private void TopDownMerge (T [] a, T [] b, int start, int middle, int end) + { + for (int i = start, j = middle, k = start; k < end; k++) { + if (i < middle && (j >= end || comparer.Compare (a [i], a [j]) <= 0)) { + b [k] = a [i++]; + } else { + b [k] = a [j++]; + } + } + } + } +} diff --git a/external/linker/external/cecil/Mono/Type.cs b/external/linker/external/cecil/Mono/Type.cs deleted file mode 100644 index fd53f81b4a..0000000000 --- a/external/linker/external/cecil/Mono/Type.cs +++ /dev/null @@ -1,137 +0,0 @@ -// -// Author: -// Jb Evain (jbevain@gmail.com) -// -// Copyright (c) 2008 - 2015 Jb Evain -// Copyright (c) 2008 - 2011 Novell, Inc. -// -// Licensed under the MIT/X11 license. -// - -using System; -using System.Reflection; - -#if NET_CORE -using System.Collections.Generic; -#endif - -namespace Mono { - -#if NET_CORE - enum TypeCode { - Empty = 0, - Object = 1, - DBNull = 2, - Boolean = 3, - Char = 4, - SByte = 5, - Byte = 6, - Int16 = 7, - UInt16 = 8, - Int32 = 9, - UInt32 = 10, - Int64 = 11, - UInt64 = 12, - Single = 13, - Double = 14, - Decimal = 15, - DateTime = 16, - String = 18 - } -#endif - - static class TypeExtensions { - -#if NET_CORE - private static readonly Dictionary TypeCodeMap = new Dictionary - { - { typeof (bool), TypeCode.Boolean }, - { typeof (char), TypeCode.Char }, - { typeof (sbyte), TypeCode.SByte }, - { typeof (byte), TypeCode.Byte }, - { typeof (short), TypeCode.Int16 }, - { typeof (ushort), TypeCode.UInt16 }, - { typeof (int), TypeCode.Int32 }, - { typeof (uint), TypeCode.UInt32 }, - { typeof (long), TypeCode.Int64 }, - { typeof (ulong), TypeCode.UInt64 }, - { typeof (float), TypeCode.Single }, - { typeof (double), TypeCode.Double }, - { typeof (decimal), TypeCode.Decimal }, - { typeof (DateTime), TypeCode.DateTime }, - { typeof (string), TypeCode.String }, - }; -#endif - - public static TypeCode GetTypeCode (this Type type) - { -#if NET_CORE - if (type == null) - return TypeCode.Empty; - - TypeCode code; - if (!TypeCodeMap.TryGetValue (type, out code)) - return TypeCode.Object; - - return code; -#else - return Type.GetTypeCode (type); -#endif - } - - public static Assembly Assembly (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().Assembly; -#else - return type.Assembly; -#endif - } - - public static MethodBase DeclaringMethod (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().DeclaringMethod; -#else - return type.DeclaringMethod; -#endif - } - - public static Type [] GetGenericArguments (this Type type) - { -#if NET_CORE - var info = type.GetTypeInfo (); - return info.IsGenericTypeDefinition ? info.GenericTypeParameters : info.GenericTypeArguments; -#else - return type.GetGenericArguments (); -#endif - } - - public static bool IsGenericType (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().IsGenericType; -#else - return type.IsGenericType; -#endif - } - - public static bool IsGenericTypeDefinition (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().IsGenericTypeDefinition; -#else - return type.IsGenericTypeDefinition; -#endif - } - - public static bool IsValueType (this Type type) - { -#if NET_CORE - return type.GetTypeInfo ().IsValueType; -#else - return type.IsValueType; -#endif - } - } -} diff --git a/external/linker/external/cecil/NetStandard.props b/external/linker/external/cecil/NetStandard.props deleted file mode 100644 index bc0bacc6ef..0000000000 --- a/external/linker/external/cecil/NetStandard.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - $(DefineConstants);NET_CORE; - false - false - true - - diff --git a/external/linker/external/cecil/ProjectInfo.cs b/external/linker/external/cecil/ProjectInfo.cs index 0b94141540..0e24c67a68 100644 --- a/external/linker/external/cecil/ProjectInfo.cs +++ b/external/linker/external/cecil/ProjectInfo.cs @@ -11,10 +11,10 @@ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyProduct (Consts.AssemblyName)] -[assembly: AssemblyCopyright ("Copyright © 2008 - 2015 Jb Evain")] +[assembly: AssemblyCopyright ("Copyright © 2008 - 2018 Jb Evain")] [assembly: ComVisible (false)] -[assembly: AssemblyVersion ("0.10.0.0")] -[assembly: AssemblyFileVersion ("0.10.0.0")] -[assembly: AssemblyInformationalVersion ("0.10.0.0-beta7")] +[assembly: AssemblyVersion ("0.11.0.0")] +[assembly: AssemblyFileVersion ("0.11.0.0")] +[assembly: AssemblyInformationalVersion ("0.11.0.0")] diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests.csproj b/external/linker/external/cecil/Test/Mono.Cecil.Tests.csproj index 45856234a3..2d3d8e4467 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests.csproj +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests.csproj @@ -1,45 +1,21 @@ - - + - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} - Mono.Cecil.Tests - Mono.Cecil.Tests + netcoreapp2.1;net40 - - - 4.3.0 - - - 4.3.0 - - - 4.3.0 - - - 4.3.0 - - - 4.3.0 - + - 2.3.2 - - - 2.3.2 + 2.10.0 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {8559dd7f-a16f-46d0-a05a-9139faeba8fd} Mono.Cecil.Mdb - {63e6915c-7ea4-4d76-ab28-0d7191eea626} Mono.Cecil.Pdb @@ -50,5 +26,4 @@ - - \ No newline at end of file + diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/AssemblyTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/AssemblyTests.cs index 0b7c7c1f3b..649dca185b 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/AssemblyTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/AssemblyTests.cs @@ -1,6 +1,7 @@ using System; using Mono.Cecil; +using Mono.Cecil.Cil; using NUnit.Framework; @@ -91,15 +92,16 @@ namespace Mono.Cecil.Tests { } [Test] - public void MismatchedLibraryAndSymbols_DoNotThrow () + public void MismatchedLibraryAndSymbols () { // SQLite-net.dll (from nuget) shiped with mismatched symbol files, but throwIfNoSymbol did not prevent it from throwing - var readerParms = new ReaderParameters { + var parameters = new ReaderParameters { ReadSymbols = true, - SymbolReaderProvider = new Cil.DefaultSymbolReaderProvider (throwIfNoSymbol: false) + SymbolReaderProvider = new DefaultSymbolReaderProvider (throwIfNoSymbol: false), + ThrowIfSymbolsAreNotMatching = false, }; - using (var module = GetResourceModule ("SQLite-net.dll", readerParms)) { + using (var module = GetResourceModule ("SQLite-net.dll", parameters)) { Assert.Null (module.SymbolReader); } } diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs index c49880edae..046791bfab 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/BaseTestFixture.cs @@ -1,11 +1,24 @@ using System; using System.IO; -using System.Reflection; +using System.Runtime.CompilerServices; using Mono.Cecil.Cil; using NUnit.Framework; using Mono.Cecil.PE; +#if !NET_CORE +namespace System.Runtime.CompilerServices { + + [AttributeUsage (AttributeTargets.Parameter, Inherited = false)] + public sealed class CallerFilePathAttribute : Attribute { + } + + [AttributeUsage (AttributeTargets.Parameter, Inherited = false)] + public sealed class CallerMemberNameAttribute : Attribute { + } +} +#endif + namespace Mono.Cecil.Tests { public abstract class BaseTestFixture { @@ -16,44 +29,61 @@ namespace Mono.Cecil.Tests { Assert.Ignore (); } - public static string GetResourcePath (string name, Assembly assembly) + protected static void IgnoreOnCoreClr () { - return Path.Combine (FindResourcesDirectory (assembly), name); + if (Platform.OnCoreClr) + Assert.Ignore (); } - public static string GetAssemblyResourcePath (string name, Assembly assembly) + protected static void OnlyOnWindows () { - return GetResourcePath (Path.Combine ("assemblies", name), assembly); + if (!Platform.OnWindows) + Assert.Ignore (); } - public static string GetCSharpResourcePath (string name, Assembly assembly) + public static string GetResourcePath (string name, string sourceFilePath) { - return GetResourcePath (Path.Combine ("cs", name), assembly); + return Path.Combine (FindResourcesDirectory (sourceFilePath), name); } - public static string GetILResourcePath (string name, Assembly assembly) + public static string GetAssemblyResourcePath (string name, [CallerFilePath] string sourceFilePath = "") { - return GetResourcePath (Path.Combine ("il", name), assembly); + return GetResourcePath (Path.Combine ("assemblies", name), sourceFilePath); } - public ModuleDefinition GetResourceModule (string name) + public static string GetCSharpResourcePath (string name, [CallerFilePath] string sourceFilePath = "") { - return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, GetType ().Assembly)); + return GetResourcePath (Path.Combine ("cs", name), sourceFilePath); } - public ModuleDefinition GetResourceModule (string name, ReaderParameters parameters) + public static string GetILResourcePath (string name, [CallerFilePath] string sourceFilePath = "") { - return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, GetType ().Assembly), parameters); + return GetResourcePath (Path.Combine ("il", name), sourceFilePath); } - public ModuleDefinition GetResourceModule (string name, ReadingMode mode) + public ModuleDefinition GetResourceModule (string name, [CallerFilePath] string sourceFilePath = "") { - return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, GetType ().Assembly), new ReaderParameters (mode)); + return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, sourceFilePath)); } - internal Image GetResourceImage (string name) + public ModuleDefinition GetResourceModule (string name, ReaderParameters parameters, [CallerFilePath] string sourceFilePath = "") { - var file = new FileStream (GetAssemblyResourcePath (name, GetType ().Assembly), FileMode.Open, FileAccess.Read); + return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, sourceFilePath), parameters); + } + + public ModuleDefinition GetResourceModule (string name, ReadingMode mode, [CallerFilePath] string sourceFilePath = "") + { + return ModuleDefinition.ReadModule (GetAssemblyResourcePath (name, sourceFilePath), new ReaderParameters (mode)); + } + + public Stream GetResourceStream (string name, [CallerFilePath] string sourceFilePath = "") + { + return new FileStream (GetAssemblyResourcePath (name, sourceFilePath), FileMode.Open, FileAccess.Read); + } + + internal Image GetResourceImage (string name, [CallerFilePath] string sourceFilePath = "") + { + var file = new FileStream (GetAssemblyResourcePath (name, sourceFilePath), FileMode.Open, FileAccess.Read); return ImageReader.ReadImage (Disposable.Owned (file as Stream), file.Name); } @@ -67,9 +97,9 @@ namespace Mono.Cecil.Tests { return ModuleDefinition.ReadModule (GetType ().Module.FullyQualifiedName, parameters); } - public static string FindResourcesDirectory (Assembly assembly) + public static string FindResourcesDirectory (string sourceFilePath) { - var path = Path.GetDirectoryName (new Uri (assembly.CodeBase).LocalPath); + var path = Path.GetDirectoryName (sourceFilePath); while (!Directory.Exists (Path.Combine (path, "Resources"))) { var old = path; path = Path.GetDirectoryName (path); @@ -92,19 +122,19 @@ namespace Mono.Cecil.Tests { return str.Trim ().Replace ("\r\n", "\n"); } - public static void TestModule (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false) + public static void TestModule (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false, [CallerFilePath] string sourceFilePath = "") { - Run (new ModuleTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections)); + Run (new ModuleTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath)); } - public static void TestCSharp (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false) + public static void TestCSharp (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false, [CallerFilePath] string sourceFilePath = "") { - Run (new CSharpTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections)); + Run (new CSharpTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath)); } - public static void TestIL (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false) + public static void TestIL (string file, Action test, bool verify = true, bool readOnly = false, Type symbolReaderProvider = null, Type symbolWriterProvider = null, IAssemblyResolver assemblyResolver = null, bool applyWindowsRuntimeProjections = false, [CallerFilePath] string sourceFilePath = "") { - Run (new ILTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections)); + Run (new ILTestCase (file, test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath)); } static void Run (TestCase testCase) @@ -118,13 +148,11 @@ namespace Mono.Cecil.Tests { if (testCase.ReadOnly) return; -#if !READ_ONLY using (var runner = new TestRunner (testCase, TestCaseType.WriteFromDeferred)) runner.RunTest (); using (var runner = new TestRunner (testCase, TestCaseType.WriteFromImmediate)) runner.RunTest (); -#endif } } @@ -137,12 +165,11 @@ namespace Mono.Cecil.Tests { public readonly IAssemblyResolver AssemblyResolver; public readonly Action Test; public readonly bool ApplyWindowsRuntimeProjections; + public readonly string SourceFilePath; public abstract string ModuleLocation { get; } - protected Assembly Assembly { get { return Test.Method.Module.Assembly; } } - - protected TestCase (Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) + protected TestCase (Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") { Test = test; Verify = verify; @@ -151,6 +178,7 @@ namespace Mono.Cecil.Tests { SymbolWriterProvider = symbolWriterProvider; AssemblyResolver = assemblyResolver; ApplyWindowsRuntimeProjections = applyWindowsRuntimeProjections; + SourceFilePath = sourceFilePath; } } @@ -158,15 +186,15 @@ namespace Mono.Cecil.Tests { public readonly string Module; - public ModuleTestCase (string module, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) - : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections) + public ModuleTestCase (string module, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") + : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath) { Module = module; } public override string ModuleLocation { - get { return BaseTestFixture.GetAssemblyResourcePath (Module, Assembly); } + get { return BaseTestFixture.GetAssemblyResourcePath (Module, SourceFilePath); } } } @@ -174,8 +202,8 @@ namespace Mono.Cecil.Tests { public readonly string File; - public CSharpTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) - : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections) + public CSharpTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") + : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath) { File = file; } @@ -184,7 +212,7 @@ namespace Mono.Cecil.Tests { { get { - return CompilationService.CompileResource (BaseTestFixture.GetCSharpResourcePath (File, Assembly)); + return CompilationService.CompileResource (BaseTestFixture.GetCSharpResourcePath (File, SourceFilePath)); } } } @@ -193,8 +221,8 @@ namespace Mono.Cecil.Tests { public readonly string File; - public ILTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections) - : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections) + public ILTestCase (string file, Action test, bool verify, bool readOnly, Type symbolReaderProvider, Type symbolWriterProvider, IAssemblyResolver assemblyResolver, bool applyWindowsRuntimeProjections, string sourceFilePath = "") + : base (test, verify, readOnly, symbolReaderProvider, symbolWriterProvider, assemblyResolver, applyWindowsRuntimeProjections, sourceFilePath) { File = file; } @@ -203,7 +231,7 @@ namespace Mono.Cecil.Tests { { get { - return CompilationService.CompileResource (BaseTestFixture.GetILResourcePath (File, Assembly)); ; + return CompilationService.CompileResource (BaseTestFixture.GetILResourcePath (File, SourceFilePath)); ; } } } @@ -239,14 +267,12 @@ namespace Mono.Cecil.Tests { case TestCaseType.ReadDeferred: parameters.ReadingMode = ReadingMode.Deferred; return ModuleDefinition.ReadModule (location, parameters); -#if !READ_ONLY case TestCaseType.WriteFromImmediate: parameters.ReadingMode = ReadingMode.Immediate; return RoundTrip (location, parameters, "cecil-irt"); case TestCaseType.WriteFromDeferred: parameters.ReadingMode = ReadingMode.Deferred; return RoundTrip (location, parameters, "cecil-drt"); -#endif default: return null; } @@ -260,7 +286,6 @@ namespace Mono.Cecil.Tests { return (ISymbolReaderProvider) Activator.CreateInstance (test_case.SymbolReaderProvider); } -#if !READ_ONLY ISymbolWriterProvider GetSymbolWriterProvider () { if (test_case.SymbolReaderProvider == null) @@ -268,7 +293,6 @@ namespace Mono.Cecil.Tests { return (ISymbolWriterProvider) Activator.CreateInstance (test_case.SymbolWriterProvider); } -#endif IAssemblyResolver GetAssemblyResolver () { @@ -281,7 +305,6 @@ namespace Mono.Cecil.Tests { return test_resolver; } -#if !READ_ONLY ModuleDefinition RoundTrip (string location, ReaderParameters reader_parameters, string folder) { var rt_folder = Path.Combine (Path.GetTempPath (), folder); @@ -304,7 +327,7 @@ namespace Mono.Cecil.Tests { return ModuleDefinition.ReadModule (rt_module, reader_parameters); } -#endif + public void RunTest () { var module = GetModule (); @@ -328,9 +351,7 @@ namespace Mono.Cecil.Tests { enum TestCaseType { ReadImmediate, ReadDeferred, -#if !READ_ONLY WriteFromImmediate, WriteFromDeferred, -#endif } } diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs deleted file mode 100644 index 63bd9b8acb..0000000000 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/CallerMemberNameAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -#if NET_3_5 || NET_4_0 -namespace System.Runtime.CompilerServices { - [AttributeUsage (AttributeTargets.Parameter, Inherited = false)] - public sealed class CallerMemberNameAttribute : Attribute { - public CallerMemberNameAttribute () - { - } - } -} -#endif \ No newline at end of file diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs index 5501d571d0..681db51b35 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/CompilationService.cs @@ -11,7 +11,6 @@ using NUnit.Framework; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Emit; using CS = Microsoft.CodeAnalysis.CSharp; -using VB = Microsoft.CodeAnalysis.VisualBasic; #endif namespace Mono.Cecil.Tests { @@ -37,6 +36,14 @@ namespace Mono.Cecil.Tests { get { return TryGetType ("System.Runtime.Loader.AssemblyLoadContext, System.Runtime.Loader, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") != null; } } + public static bool OnWindows { + get { return Environment.OSVersion.Platform == PlatformID.Win32NT; } + } + + public static bool HasNativePdbSupport { + get { return OnWindows && !OnMono; } + } + static Type TryGetType (string assemblyQualifiedName) { try { @@ -90,7 +97,7 @@ namespace Mono.Cecil.Tests { if (extension == ".il") return IlasmCompilationService.Instance.Compile (name); - if (extension == ".cs" || extension == ".vb") + if (extension == ".cs") #if NET_CORE return RoslynCompilationService.Instance.Compile (name); #else @@ -182,14 +189,6 @@ namespace Mono.Cecil.Tests { new [] { CS.SyntaxFactory.ParseSyntaxTree (source) }, references, new CS.CSharpCompilationOptions (OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Release)); - - case ".vb": - return VB.VisualBasicCompilation.Create ( - assemblyName, - new [] { VB.SyntaxFactory.ParseSyntaxTree (source) }, - references, - new VB.VisualBasicCompilationOptions (OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Release)); - default: throw new NotSupportedException (); } @@ -320,7 +319,7 @@ namespace Mono.Cecil.Tests { public static ProcessOutput ILAsm (string source, string output) { var ilasm = "ilasm"; - if (!Platform.OnMono) + if (Platform.OnWindows) ilasm = NetFrameworkTool ("ilasm"); return RunProcess (ilasm, "/nologo", "/dll", "/out:" + Quote (output), Quote (source)); diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs index 8ec02705a3..74ae750d1c 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/CustomAttributesTests.cs @@ -437,7 +437,7 @@ namespace Mono.Cecil.Tests { [Test] public void InterfaceImplementation () { - IgnoreOnMono(); + OnlyOnWindows (); // Mono's ilasm doesn't support .interfaceimpl TestIL ("ca-iface-impl.il", module => { var type = module.GetType ("FooType"); @@ -449,7 +449,50 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY + [Test] + public void NullCharInString () + { + TestCSharp ("CustomAttributes.cs", module => { + var type = module.GetType ("NullCharInString"); + var attributes = type.CustomAttributes; + Assert.AreEqual (1, attributes.Count); + var attribute = attributes [0]; + Assert.AreEqual (1, attribute.ConstructorArguments.Count); + var value = (string) attribute.ConstructorArguments [0].Value; + Assert.AreEqual (8, value.Length); + Assert.AreEqual ('\0', value [7]); + }); + } + + [Test] + public void OrderedAttributes () + { + TestModule ("ordered-attrs.exe", module => { + var type = module.GetType ("Program"); + var method = type.GetMethod ("Main"); + var attributes = method.CustomAttributes; + Assert.AreEqual (6, attributes.Count); + + Assert.AreEqual ("AAttribute", attributes [0].AttributeType.Name); + Assert.AreEqual ("Main.A1", attributes [0].Fields [0].Argument.Value as string); + + Assert.AreEqual ("AAttribute", attributes [1].AttributeType.Name); + Assert.AreEqual ("Main.A2", attributes [1].Fields [0].Argument.Value as string); + + Assert.AreEqual ("BAttribute", attributes [2].AttributeType.Name); + Assert.AreEqual ("Main.B1", attributes [2].Fields [0].Argument.Value as string); + + Assert.AreEqual ("AAttribute", attributes [3].AttributeType.Name); + Assert.AreEqual ("Main.A3", attributes [3].Fields [0].Argument.Value as string); + + Assert.AreEqual ("BAttribute", attributes [4].AttributeType.Name); + Assert.AreEqual ("Main.B2", attributes [4].Fields [0].Argument.Value as string); + + Assert.AreEqual ("BAttribute", attributes [5].AttributeType.Name); + Assert.AreEqual ("Main.B3", attributes [5].Fields [0].Argument.Value as string); + }); + } + [Test] public void DefineCustomAttributeFromBlob () { @@ -487,7 +530,7 @@ namespace Mono.Cecil.Tests { module.Dispose (); } -#endif + static void AssertCustomAttribute (string expected, CustomAttribute attribute) { Assert.AreEqual (expected, PrettyPrint (attribute)); diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs index 16b8a7b3f1..fa5562e90c 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs @@ -180,6 +180,8 @@ namespace Mono.Cecil.Tests { TestModule("winrtcomp.winmd", module => { Assert.IsTrue (module.Assembly.Name.IsWindowsRuntime); + Assert.AreEqual (6, module.Image.SubSystemMajor); + Assert.AreEqual (2, module.Image.SubSystemMinor); }, verify: false, assemblyResolver: resolver); } #endif @@ -196,7 +198,15 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY + [Test] + public void Net471TargetingAssembly () + { + TestModule ("net471.exe", module => { + Assert.AreEqual (6, module.Image.SubSystemMajor); + Assert.AreEqual (0, module.Image.SubSystemMinor); + }); + } + [Test] public void ExternalPdbDeterministicAssembly () { @@ -225,6 +235,5 @@ namespace Mono.Cecil.Tests { Assert.IsTrue (header.Entries.Any (e => e.Directory.Type == ImageDebugType.EmbeddedPortablePdb)); }, symbolReaderProvider: typeof (EmbeddedPortablePdbReaderProvider), symbolWriterProvider: typeof (EmbeddedPortablePdbWriterProvider)); } -#endif } } diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs index bc12f5e0db..70100eac14 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.Collections.Generic; using System.IO; @@ -361,8 +360,9 @@ namespace Mono.Cecil.Tests { static ModuleDefinition CreateModule (string name) { - return ModuleDefinition.CreateModule (name, ModuleKind.Dll); + var resolver = new DefaultAssemblyResolver (); + resolver.AddSearchDirectory (Path.GetDirectoryName (typeof (ImportCecilTests).Assembly.Location)); + return ModuleDefinition.CreateModule (name, new ModuleParameters { Kind = ModuleKind.Dll, AssemblyResolver = resolver }); } } } -#endif diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs index c99ca4fc44..33b51eedff 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.Collections.Generic; using System.IO; @@ -427,4 +426,3 @@ namespace Mono.Cecil.Tests { } } } -#endif diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs index 15fd5fb42a..5af097bc96 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/MethodBodyTests.cs @@ -284,7 +284,7 @@ namespace Mono.Cecil.Tests { [Test] public void BranchOutsideMethod () { - IgnoreOnMono (); + OnlyOnWindows (); // Mono's ilasm doesn't support branching outside of method TestIL ("branch-out.il", module => { var type = module.GetType ("Foo"); diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs index 2b8eda19cd..8e73750bf8 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ModuleTests.cs @@ -12,7 +12,6 @@ namespace Mono.Cecil.Tests { [TestFixture] public class ModuleTests : BaseTestFixture { -#if !READ_ONLY [Test] public void CreateModuleEscapesAssemblyName () { @@ -22,7 +21,6 @@ namespace Mono.Cecil.Tests { module = ModuleDefinition.CreateModule ("Test.exe", ModuleKind.Console); Assert.AreEqual ("Test", module.Assembly.Name.Name); } -#endif [Test] public void SingleModule () @@ -49,8 +47,7 @@ namespace Mono.Cecil.Tests { [Test] public void MultiModules () { - if (Platform.OnCoreClr) - return; + IgnoreOnCoreClr (); TestModule("mma.exe", module => { var assembly = module.Assembly; @@ -160,8 +157,7 @@ namespace Mono.Cecil.Tests { [Test] public void ExportedTypeFromNetModule () { - if (Platform.OnCoreClr) - return; + IgnoreOnCoreClr (); TestModule ("mma.exe", module => { Assert.IsTrue (module.HasExportedTypes); @@ -215,6 +211,8 @@ namespace Mono.Cecil.Tests { [Test] public void Win32FileVersion () { + IgnoreOnCoreClr (); + TestModule ("libhello.dll", module => { var version = FileVersionInfo.GetVersionInfo (module.FileName); @@ -254,6 +252,15 @@ namespace Mono.Cecil.Tests { } } + [Test] + public void GetNonExistentTypeRuntimeName () + { + using (var module = GetResourceModule ("libhello.dll")) { + var type = module.GetType ("DoesNotExist", runtimeName: true); + Assert.IsNull (type); + } + } + [Test] public void OpenModuleImmediate () { @@ -273,7 +280,7 @@ namespace Mono.Cecil.Tests { [Test] public void OwnedStreamModuleFileName () { - var path = GetAssemblyResourcePath ("hello.exe", GetType ().Assembly); + var path = GetAssemblyResourcePath ("hello.exe"); using (var file = File.Open (path, FileMode.Open)) { using (var module = ModuleDefinition.ReadModule (file)) @@ -285,7 +292,6 @@ namespace Mono.Cecil.Tests { } } -#if !READ_ONLY [Test] public void ReadAndWriteFile () { @@ -318,6 +324,5 @@ namespace Mono.Cecil.Tests { // Ensure you can still delete the file File.Delete (path); } -#endif } } diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs index 25ee2d1994..8263871106 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/PortablePdbTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.IO; using System.Linq; @@ -6,6 +5,7 @@ using System.Text; using NUnit.Framework; using Mono.Cecil.Cil; +using Mono.Cecil.PE; namespace Mono.Cecil.Tests { @@ -347,7 +347,6 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY [Test] public void EmbeddedCompressedPortablePdb () { @@ -364,6 +363,8 @@ namespace Mono.Cecil.Tests { var eppdb = header.Entries [1]; Assert.AreEqual (ImageDebugType.EmbeddedPortablePdb, eppdb.Directory.Type); + Assert.AreEqual (0x0100, eppdb.Directory.MajorVersion); + Assert.AreEqual (0x0100, eppdb.Directory.MinorVersion); }, symbolReaderProvider: typeof (EmbeddedPortablePdbReaderProvider), symbolWriterProvider: typeof (EmbeddedPortablePdbWriterProvider)); } @@ -371,7 +372,7 @@ namespace Mono.Cecil.Tests { { TestModule ("PdbTarget.exe", test, symbolReaderProvider: typeof (PortablePdbReaderProvider), symbolWriterProvider: typeof (PortablePdbWriterProvider)); TestModule ("EmbeddedPdbTarget.exe", test, verify: !Platform.OnMono); - TestModule("EmbeddedCompressedPdbTarget.exe", test, symbolReaderProvider: typeof(EmbeddedPortablePdbReaderProvider), symbolWriterProvider: typeof(EmbeddedPortablePdbWriterProvider)); + TestModule ("EmbeddedCompressedPdbTarget.exe", test, symbolReaderProvider: typeof(EmbeddedPortablePdbReaderProvider), symbolWriterProvider: typeof(EmbeddedPortablePdbWriterProvider)); } [Test] @@ -551,7 +552,122 @@ class Program IL_0001: ret", main); }, symbolReaderProvider: typeof (PortablePdbReaderProvider), symbolWriterProvider: typeof (PortablePdbWriterProvider)); } -#endif + + public sealed class SymbolWriterProvider : ISymbolWriterProvider { + + readonly DefaultSymbolWriterProvider writer_provider = new DefaultSymbolWriterProvider (); + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) + { + return new SymbolWriter (writer_provider.GetSymbolWriter (module, fileName)); + } + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, Stream symbolStream) + { + return new SymbolWriter (writer_provider.GetSymbolWriter (module, symbolStream)); + } + } + + public sealed class SymbolWriter : ISymbolWriter { + + readonly ISymbolWriter symbol_writer; + + public SymbolWriter (ISymbolWriter symbolWriter) + { + this.symbol_writer = symbolWriter; + } + + public ImageDebugHeader GetDebugHeader () + { + var header = symbol_writer.GetDebugHeader (); + if (!header.HasEntries) + return header; + + for (int i = 0; i < header.Entries.Length; i++) { + header.Entries [i] = ProcessEntry (header.Entries [i]); + } + + return header; + } + + private static ImageDebugHeaderEntry ProcessEntry (ImageDebugHeaderEntry entry) + { + if (entry.Directory.Type != ImageDebugType.CodeView) + return entry; + + var reader = new ByteBuffer (entry.Data); + var writer = new ByteBuffer (); + + var sig = reader.ReadUInt32 (); + if (sig != 0x53445352) + return entry; + + writer.WriteUInt32 (sig); // RSDS + writer.WriteBytes (reader.ReadBytes (16)); // MVID + writer.WriteUInt32 (reader.ReadUInt32 ()); // Age + + var length = Array.IndexOf (entry.Data, (byte) 0, reader.position) - reader.position; + + var fullPath = Encoding.UTF8.GetString (reader.ReadBytes (length)); + + writer.WriteBytes (Encoding.UTF8.GetBytes (Path.GetFileName (fullPath))); + writer.WriteByte (0); + + var newData = new byte [writer.length]; + Buffer.BlockCopy (writer.buffer, 0, newData, 0, writer.length); + + var directory = entry.Directory; + directory.SizeOfData = newData.Length; + + return new ImageDebugHeaderEntry (directory, newData); + } + + public ISymbolReaderProvider GetReaderProvider () + { + return symbol_writer.GetReaderProvider (); + } + + public void Write (MethodDebugInformation info) + { + symbol_writer.Write (info); + } + + public void Dispose () + { + symbol_writer.Dispose (); + } + } + + static string GetDebugHeaderPdbPath (ModuleDefinition module) + { + var header = module.GetDebugHeader (); + var cv = Mixin.GetCodeViewEntry (header); + Assert.IsNotNull (cv); + var length = Array.IndexOf (cv.Data, (byte)0, 24) - 24; + var bytes = new byte [length]; + Buffer.BlockCopy (cv.Data, 24, bytes, 0, length); + return Encoding.UTF8.GetString (bytes); + } + + [Test] + public void UseCustomSymbolWriterToChangeDebugHeaderPdbPath () + { + const string resource = "mylib.dll"; + + string debug_header_pdb_path; + string dest = Path.Combine (Path.GetTempPath (), resource); + + using (var module = GetResourceModule (resource, new ReaderParameters { SymbolReaderProvider = new PortablePdbReaderProvider () })) { + debug_header_pdb_path = GetDebugHeaderPdbPath (module); + Assert.IsTrue (Path.IsPathRooted (debug_header_pdb_path)); + module.Write (dest, new WriterParameters { SymbolWriterProvider = new SymbolWriterProvider () }); + } + + using (var module = ModuleDefinition.ReadModule (dest, new ReaderParameters { SymbolReaderProvider = new PortablePdbReaderProvider () })) { + var pdb_path = GetDebugHeaderPdbPath (module); + Assert.IsFalse (Path.IsPathRooted (pdb_path)); + Assert.AreEqual (Path.GetFileName (debug_header_pdb_path), pdb_path); + } + } } } -#endif \ No newline at end of file diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs index f65b889b60..bb57570109 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs @@ -134,7 +134,7 @@ namespace Mono.Cecil.Tests { var parameters = new ReaderParameters { AssemblyResolver = resolver }; var types = ModuleDefinition.ReadModule ( - CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs", typeof (ResolveTests).Assembly)), + CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs")), parameters); resolver.Register (types.Assembly); @@ -155,7 +155,7 @@ namespace Mono.Cecil.Tests { var parameters = new ReaderParameters { AssemblyResolver = resolver }; var types = ModuleDefinition.ReadModule ( - CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs", typeof (ResolveTests).Assembly)), + CompilationService.CompileResource (GetCSharpResourcePath ("CustomAttributes.cs")), parameters); resolver.Register (types.Assembly); diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs index c3106f424c..ceaf240cbc 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/SecurityDeclarationTests.cs @@ -93,7 +93,6 @@ namespace Mono.Cecil.Tests { }); } -#if !READ_ONLY [Test] public void DefineSecurityDeclarationByBlob () { @@ -126,7 +125,6 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("System.String", argument.Type.FullName); Assert.AreEqual (permission_set, argument.Value); } -#endif [Test] public void SecurityDeclarationWithoutAttributes () diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs index e2bb51ca34..941f4a1c6a 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/SymbolTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using System.IO; @@ -16,12 +15,10 @@ namespace Mono.Cecil.Tests { [Test] public void DefaultPdb () { - IgnoreOnMono (); - TestModule ("libpdb.dll", module => { Assert.IsTrue (module.HasSymbols); Assert.AreEqual (typeof (NativePdbReader), module.SymbolReader.GetType ()); - }, symbolReaderProvider: typeof (DefaultSymbolReaderProvider), symbolWriterProvider: typeof (DefaultSymbolWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (DefaultSymbolReaderProvider), symbolWriterProvider: typeof (DefaultSymbolWriterProvider)); } [Test] @@ -50,6 +47,86 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (typeof (PortablePdbReader), module.SymbolReader.GetType ()); }, symbolReaderProvider: typeof (DefaultSymbolReaderProvider), symbolWriterProvider: typeof (DefaultSymbolWriterProvider), verify: !Platform.OnMono); } + + [Test] + public void MdbMismatch () + { + Assert.Throws (() => GetResourceModule ("mdb-mismatch.dll", new ReaderParameters { SymbolReaderProvider = new MdbReaderProvider () })); + } + + [Test] + public void MdbIgnoreMismatch() + { + using (var module = GetResourceModule ("mdb-mismatch.dll", new ReaderParameters { SymbolReaderProvider = new MdbReaderProvider (), ThrowIfSymbolsAreNotMatching = false })) { + Assert.IsNull (module.SymbolReader); + Assert.IsFalse (module.HasSymbols); + } + } + + [Test] + public void PortablePdbMismatch () + { + Assert.Throws (() => GetResourceModule ("pdb-mismatch.dll", new ReaderParameters { SymbolReaderProvider = new PortablePdbReaderProvider () })); + } + + [Test] + public void PortablePdbIgnoreMismatch() + { + using (var module = GetResourceModule ("pdb-mismatch.dll", new ReaderParameters { SymbolReaderProvider = new PortablePdbReaderProvider (), ThrowIfSymbolsAreNotMatching = false })) { + Assert.IsNull (module.SymbolReader); + Assert.IsFalse (module.HasSymbols); + } + } + + [Test] + public void DefaultPortablePdbStream () + { + using (var symbolStream = GetResourceStream ("PdbTarget.pdb")) { + var parameters = new ReaderParameters { + SymbolReaderProvider = new PortablePdbReaderProvider (), + SymbolStream = symbolStream, + }; + + using (var module = GetResourceModule ("PdbTarget.exe", parameters)) { + Assert.IsNotNull (module.SymbolReader); + Assert.IsTrue (module.HasSymbols); + Assert.AreEqual (typeof (PortablePdbReader), module.SymbolReader.GetType ()); + } + } + } + + [Test] + public void DefaultPdbStream () + { + using (var symbolStream = GetResourceStream ("libpdb.pdb")) { + var parameters = new ReaderParameters { + SymbolReaderProvider = new NativePdbReaderProvider (), + SymbolStream = symbolStream, + }; + + using (var module = GetResourceModule ("libpdb.dll", parameters)) { + Assert.IsNotNull (module.SymbolReader); + Assert.IsTrue (module.HasSymbols); + Assert.AreEqual (typeof (NativePdbReader), module.SymbolReader.GetType ()); + } + } + } + + [Test] + public void DefaultMdbStream () + { + using (var symbolStream = GetResourceStream ("libmdb.dll.mdb")) { + var parameters = new ReaderParameters { + SymbolReaderProvider = new MdbReaderProvider (), + SymbolStream = symbolStream, + }; + + using (var module = GetResourceModule ("libmdb.dll", parameters)) { + Assert.IsNotNull (module.SymbolReader); + Assert.IsTrue (module.HasSymbols); + Assert.AreEqual (typeof (MdbReader), module.SymbolReader.GetType ()); + } + } + } } } -#endif \ No newline at end of file diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs index d378042095..9147764f01 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/TypeTests.cs @@ -30,6 +30,19 @@ namespace Mono.Cecil.Tests { }); } + [Test] + public void EmptyStructLayout () + { + TestModule ("hello.exe", module => + { + var foo = new TypeDefinition ("", "Foo", + TypeAttributes.Sealed | TypeAttributes.BeforeFieldInit | TypeAttributes.SequentialLayout, + module.ImportReference (typeof (ValueType))) ; + + module.Types.Add (foo) ; + }) ; + } + [Test] public void SimpleInterfaces () { @@ -274,5 +287,12 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (MetadataType.Object, type.BaseType.MetadataType); } } + + [Test] + public void SelfReferencingTypeRef () + { + TestModule ("self-ref-typeref.dll", module => { + }, verify: false); + } } } diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs index fb39e33428..65616294fd 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeAssemblyResolver.cs @@ -68,23 +68,13 @@ namespace Mono.Cecil.Tests { void LoadWindowsSdk (string registryVersion, string windowsKitsVersion, Action registerAssembliesCallback) { -#if NET_4_0 using (var localMachine32Key = RegistryKey.OpenBaseKey (RegistryHive.LocalMachine, RegistryView.Registry32)) { using (var sdkKey = localMachine32Key.OpenSubKey (@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v" + registryVersion)) { -#else - { - // this will fail on 64-bit process as there's no way (other than pinoke) to read from 32-bit registry view - using (var sdkKey = Registry.LocalMachine.OpenSubKey (@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\" + registryVersion)) { -#endif string installationFolder = null; if (sdkKey != null) installationFolder = (string)sdkKey.GetValue ("InstallationFolder"); if (string.IsNullOrEmpty (installationFolder)) { -#if NET_4_0 var programFilesX86 = Environment.GetFolderPath (Environment.SpecialFolder.ProgramFilesX86); -#else - var programFilesX86 = Environment.GetEnvironmentVariable ("ProgramFiles(x86)"); -#endif installationFolder = Path.Combine (programFilesX86, @"Windows Kits\" + windowsKitsVersion); } registerAssembliesCallback (installationFolder); diff --git a/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs b/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs index d5ed3b0b33..9b10fd5cf8 100644 --- a/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs +++ b/external/linker/external/cecil/Test/Mono.Cecil.Tests/WindowsRuntimeProjectionsTests.cs @@ -65,7 +65,6 @@ namespace Mono.Cecil.Tests { }, verify: false, assemblyResolver: WindowsRuntimeAssemblyResolver.CreateInstance (), applyWindowsRuntimeProjections: true); } -#if !READ_ONLY [Test] public void CanStripType () { @@ -93,7 +92,6 @@ namespace Mono.Cecil.Tests { } }, readOnly: true, verify: false, assemblyResolver: assemblyResolver, applyWindowsRuntimeProjections: true); } -#endif } [TestFixture] diff --git a/external/linker/external/cecil/Test/Resources/assemblies/mdb-mismatch.dll.mdb b/external/linker/external/cecil/Test/Resources/assemblies/mdb-mismatch.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..11bff77d4345c77a40b24656bbbdc37751cb4020 GIT binary patch literal 238 zcmWexR{vL7?S-om0|cycwX8m7x6^g=@#3{lnQRT;0fh^II1Gpxf%q8^b3obmpll`} zeGG^tfEWfq`as}65P;Nk0x?J(ud`K5Np3+*PG*u`a&f}4JcsisO+MQ`I9+KhT0T?s zo}>EDK#rgK$9!%T?~e5YTM5*~$jG>ekzq085=O8g{K7yHCML#Bj0~F@w*bX}E@N8( YRJRmj3)>zby%nSnh(WFg(er^A0Ep@_{Qv*} literal 0 HcmV?d00001 diff --git a/external/linker/external/cecil/Test/Resources/assemblies/pdb-mismatch.pdb b/external/linker/external/cecil/Test/Resources/assemblies/pdb-mismatch.pdb new file mode 100644 index 0000000000000000000000000000000000000000..86b2654a10d11665f6357e9dcd7e5851abc7cd5c GIT binary patch literal 420 zcmZhK!96)R4fcQ>1`5?n&@87UoW$Ev^CU2sy zctHf4v8U8;pfH2G2m=ErkOsMm7l@glY>@l7p=^kY!E#XMBA^TiG=TMi1Yv4GqUt~% zGCzz}@XW*o7QXY}sIH!6DwW01Fr!*2B|o_|H#M)MSjnnd$=NCFFms)qco|sIJGD_Kd%I6f?jfdu6|N} zQ3^0z^f3(3H?%ZQu{1MHO*Kz51Y(P%6yxO7L{rlw(= - + - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC} - Mono.Cecil.Rocks - Mono.Cecil.Rocks + netstandard2.0;net40 + $(DefineConstants);INSIDE_ROCKS + + + Mono.Cecil + + - - - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - - - - - - $(DefineConstants);INSIDE_ROCKS - \ No newline at end of file diff --git a/external/linker/external/cecil/rocks/Mono.Cecil.Rocks/DocCommentId.cs b/external/linker/external/cecil/rocks/Mono.Cecil.Rocks/DocCommentId.cs index 30740df673..da74bedee4 100644 --- a/external/linker/external/cecil/rocks/Mono.Cecil.Rocks/DocCommentId.cs +++ b/external/linker/external/cecil/rocks/Mono.Cecil.Rocks/DocCommentId.cs @@ -222,7 +222,7 @@ namespace Mono.Cecil.Rocks { void WriteItemName (string name) { - id.Append (name.Replace ('.', '#')); + id.Append (name.Replace ('.', '#').Replace('<', '{').Replace('>', '}')); } public override string ToString () diff --git a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj index 4019977632..5bab176335 100644 --- a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj +++ b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj @@ -1,21 +1,16 @@ - - + + - {C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} - Mono.Cecil.Rocks.Tests - Mono.Cecil.Rocks.Tests + netcoreapp2.1;net40 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} Mono.Cecil.Tests - {FBC6DD59-D09D-499C-B03C-99C1C78FF2AC} Mono.Cecil.Rocks @@ -25,6 +20,4 @@ - - - \ No newline at end of file + diff --git a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/DocCommentIdTests.cs b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/DocCommentIdTests.cs index b18824c613..244d5ae92e 100644 --- a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/DocCommentIdTests.cs +++ b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/DocCommentIdTests.cs @@ -8,10 +8,11 @@ using Mono.Cecil.Rocks; namespace N { + ///

/// ID string generated is "T:N.X". /// - public class X + public class X : IX> { /// /// ID string generated is "M:N.X.#ctor". @@ -102,7 +103,19 @@ namespace N public static void Linq (IEnumerable enumerable, Func selector) { } + + /// + /// ID string generated is "M:N.X.N#IX{N#KVP{System#String,System#Int32}}#IXA(N.KVP{System.String,System.Int32})" + /// + void IX>.IXA (KVP k) { } } + + public interface IX + { + void IXA (K k); + } + + public class KVP { } } namespace Mono.Cecil.Tests { @@ -251,6 +264,15 @@ namespace Mono.Cecil.Tests { AssertDocumentID ("M:N.X.Linq(System.Collections.Generic.IEnumerable{System.String},System.Func{System.String})", method); } + [Test] + public void EII () + { + var type = GetTestType (); + var method = type.Methods.Where (m => m.Name.Contains("IXA")).First (); + + AssertDocumentID ("M:N.X.N#IX{N#KVP{System#String,System#Int32}}#IXA(N.KVP{System.String,System.Int32})", method); + } + TypeDefinition GetTestType () { return typeof (N.X).ToDefinition (); diff --git a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs index 0c2c125d42..948b5df62a 100644 --- a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs +++ b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/SecurityDeclarationRocksTests.cs @@ -1,3 +1,5 @@ +#if !NET_CORE + using System.Security.Permissions; using NUnit.Framework; @@ -60,3 +62,5 @@ namespace Mono.Cecil.Tests { } } } + +#endif diff --git a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs index bcb9336bc7..2ada1059f9 100644 --- a/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs +++ b/external/linker/external/cecil/rocks/Test/Mono.Cecil.Tests/TypeReferenceRocksTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System; using Mono.Cecil.Rocks; @@ -123,4 +122,3 @@ namespace Mono.Cecil.Tests { } } } -#endif \ No newline at end of file diff --git a/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj b/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj index 310016bb42..08256ba728 100644 --- a/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj +++ b/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb.csproj @@ -1,13 +1,10 @@ - - + - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD} - Mono.Cecil.Mdb - Mono.Cecil.Mdb + netstandard2.0;net40 + $(DefineConstants);CECIL - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil @@ -16,9 +13,4 @@ - - - - $(DefineConstants);CECIL - diff --git a/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs b/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs index 59e933a370..3e2dd18e45 100644 --- a/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs +++ b/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs @@ -25,7 +25,7 @@ namespace Mono.Cecil.Mdb { Mixin.CheckModule (module); Mixin.CheckFileName (fileName); - return new MdbReader (module, MonoSymbolFile.ReadSymbolFile (Mixin.GetMdbFileName (fileName), module.Mvid)); + return new MdbReader (module, MonoSymbolFile.ReadSymbolFile (Mixin.GetMdbFileName (fileName))); } public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) @@ -33,15 +33,7 @@ namespace Mono.Cecil.Mdb { Mixin.CheckModule (module); Mixin.CheckStream (symbolStream); - var file = MonoSymbolFile.ReadSymbolFile (symbolStream); - if (module.Mvid != file.Guid) { - var file_stream = symbolStream as FileStream; - if (file_stream != null) - throw new MonoSymbolFileException ("Symbol file `{0}' does not match assembly", file_stream.Name); - - throw new MonoSymbolFileException ("Symbol file from stream does not match assembly"); - } - return new MdbReader (module, file); + return new MdbReader (module, MonoSymbolFile.ReadSymbolFile (symbolStream)); } } @@ -58,12 +50,10 @@ namespace Mono.Cecil.Mdb { this.documents = new Dictionary (); } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new MdbWriterProvider (); } -#endif public bool ProcessDebugHeader (ImageDebugHeader header) { diff --git a/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs b/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs index 8c3dbe3edc..becbb4f88c 100644 --- a/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs +++ b/external/linker/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs @@ -18,7 +18,6 @@ using Mono.CompilerServices.SymbolWriter; namespace Mono.Cecil.Mdb { -#if !READ_ONLY public sealed class MdbWriterProvider : ISymbolWriterProvider { public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) @@ -211,5 +210,4 @@ namespace Mono.Cecil.Mdb { } } } -#endif } diff --git a/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj b/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj index 9b899ed4dc..8475ec4c1d 100644 --- a/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj +++ b/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj @@ -1,21 +1,16 @@ - - + + - {AC71DF9C-99FA-4A63-990A-66C8010355A6} - Mono.Cecil.Mdb.Tests - Mono.Cecil.Mdb.Tests + netcoreapp2.1;net40 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} Mono.Cecil.Tests - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD} Mono.Cecil.Mdb @@ -25,6 +20,4 @@ - - - \ No newline at end of file + diff --git a/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs b/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs index 2b58f7fbab..6041efaac2 100644 --- a/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs +++ b/external/linker/external/cecil/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using Mono.Cecil.Mdb; using NUnit.Framework; @@ -11,7 +10,7 @@ namespace Mono.Cecil.Tests { [Test] public void MdbWithJustLineInfo () { - TestModule ("hello.exe", module => { + TestModule ("simplemdb.exe", module => { var type = module.GetType ("Program"); var main = type.GetMethod ("Main"); @@ -83,4 +82,3 @@ namespace Mono.Cecil.Tests { } } } -#endif \ No newline at end of file diff --git a/external/linker/external/cecil/symbols/mdb/Test/Resources/assemblies/hello.exe.mdb b/external/linker/external/cecil/symbols/mdb/Test/Resources/assemblies/simplemdb.exe.mdb similarity index 100% rename from external/linker/external/cecil/symbols/mdb/Test/Resources/assemblies/hello.exe.mdb rename to external/linker/external/cecil/symbols/mdb/Test/Resources/assemblies/simplemdb.exe.mdb diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj index eeebce1520..265159d482 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj @@ -1,14 +1,10 @@ - - + - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} - Mono.Cecil.Pdb - Mono.Cecil.Pdb + netstandard2.0;net40 0649 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil @@ -17,6 +13,4 @@ - - diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs index f694e2701c..e64ec78d1e 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedDocumentWriter.cs @@ -8,8 +8,6 @@ using System.Runtime.InteropServices; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { [Guid ("B01FAFEB-C450-3A4D-BEEC-B4CEEC01E006")] @@ -18,5 +16,3 @@ namespace Mono.Cecil.Pdb { interface ISymUnmanagedDocumentWriter { } } - -#endif diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs index 81cc6a3a90..c55c2b1112 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ISymUnmanagedWriter2.cs @@ -13,8 +13,6 @@ using System.Runtime.InteropServices.ComTypes; using Mono.Cecil.Cil; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { [Guid ("0B97726E-9E6D-4f05-9A26-424022093CAA")] @@ -86,5 +84,3 @@ namespace Mono.Cecil.Pdb { [In] int sigToken); } } - -#endif diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs index b175c06a4e..297df0cb41 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/ModuleMetadata.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { [ComImport, InterfaceType (ComInterfaceType.InterfaceIsIUnknown), Guid ("BA3FEE4C-ECB9-4e41-83B7-183FA41CD859")] @@ -792,5 +790,3 @@ namespace Mono.Cecil.Pdb { } } } - -#endif diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs index 964f4ad5ba..9280e0f7e6 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs @@ -35,12 +35,11 @@ namespace Mono.Cecil.Pdb { this.pdb_file = file; } -#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new NativePdbWriterProvider (); } -#endif + /* uint Magic = 0x53445352; Guid Signature; @@ -61,8 +60,6 @@ namespace Mono.Cecil.Pdb { if (directory.Type != ImageDebugType.CodeView) return false; - if (directory.MajorVersion != 0 || directory.MinorVersion != 0) - return false; var data = entry.Data; @@ -185,12 +182,12 @@ namespace Mono.Cecil.Pdb { parent.variables = new Collection (scope.slots.Length); foreach (PdbSlot slot in scope.slots) { - if (slot.flags == 1) // parameter names + if ((slot.flags & 1) != 0) // parameter names continue; var index = (int) slot.slot; var variable = new VariableDebugInformation (index, slot.name); - if (slot.flags == 4) + if ((slot.flags & 4) != 0) variable.IsDebuggerHidden = true; parent.variables.Add (variable); } @@ -280,7 +277,7 @@ namespace Mono.Cecil.Pdb { target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = value }; break; case 'T': { - var type = module.GetType (value, runtimeName: true); + var type = TypeParser.ParseType (module, value); if (type != null) target = new ImportTarget (ImportTargetKind.ImportType) { type = type }; break; @@ -298,7 +295,7 @@ namespace Mono.Cecil.Pdb { target = new ImportTarget (ImportTargetKind.DefineNamespaceAlias) { alias = alias_value, @namespace = alias_target_value }; break; case 'T': - var type = module.GetType (alias_target_value, runtimeName: true); + var type = TypeParser.ParseType (module, alias_target_value); if (type != null) target = new ImportTarget (ImportTargetKind.DefineTypeAlias) { alias = alias_value, type = type }; break; diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs index be871ac481..a0a07476e6 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs @@ -18,22 +18,20 @@ using Mono.Cecil.Cil; using Mono.Cecil.PE; using Mono.Collections.Generic; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { - public class NativePdbWriter : ISymbolWriter, IMetadataSymbolWriter { + public class NativePdbWriter : ISymbolWriter { readonly ModuleDefinition module; + readonly MetadataBuilder metadata; readonly SymWriter writer; readonly Dictionary documents; readonly Dictionary import_info_to_parent; - MetadataBuilder metadata; - internal NativePdbWriter (ModuleDefinition module, SymWriter writer) { this.module = module; + this.metadata = module.metadata_builder; this.writer = writer; this.documents = new Dictionary (); this.import_info_to_parent = new Dictionary (); @@ -75,15 +73,6 @@ namespace Mono.Cecil.Pdb { writer.CloseMethod (); } - void IMetadataSymbolWriter.SetMetadata (MetadataBuilder metadata) - { - this.metadata = metadata; - } - - void IMetadataSymbolWriter.WriteModule () - { - } - void DefineCustomMetadata (MethodDebugInformation info, MetadataToken import_parent) { var metadata = new CustomMetadataWriter (this.writer); @@ -253,9 +242,9 @@ namespace Mono.Cecil.Pdb { doc_writer = writer.DefineDocument ( document.Url, - document.Language.ToGuid (), - document.LanguageVendor.ToGuid (), - document.Type.ToGuid ()); + document.LanguageGuid, + document.LanguageVendorGuid, + document.TypeGuid); documents [document.Url] = doc_writer; return doc_writer; @@ -371,5 +360,3 @@ namespace Mono.Cecil.Pdb { } } } - -#endif diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs index eb75f3d11d..2008eb0026 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs @@ -65,8 +65,6 @@ namespace Mono.Cecil.Pdb { } } -#if !READ_ONLY - public sealed class NativePdbWriterProvider : ISymbolWriterProvider { public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) @@ -125,6 +123,4 @@ namespace Mono.Cecil.Pdb { return new NativePdbWriterProvider ().GetSymbolWriter (module, symbolStream); } } - -#endif } diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs index a2bd1a2bd8..83cea8e54b 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymDocumentWriter.cs @@ -9,8 +9,6 @@ using System; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { internal class SymDocumentWriter @@ -28,5 +26,3 @@ namespace Mono.Cecil.Pdb } } } - -#endif diff --git a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs index 5ecf2173bd..7006c68c7d 100644 --- a/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs +++ b/external/linker/external/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs @@ -13,8 +13,6 @@ using System.Runtime.InteropServices; using Mono.Cecil.Cil; using Mono.Collections.Generic; -#if !READ_ONLY - namespace Mono.Cecil.Pdb { internal class SymWriter @@ -156,5 +154,3 @@ namespace Mono.Cecil.Pdb } } } - -#endif diff --git a/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj b/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj index 2b03651a9e..38112e21a7 100644 --- a/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj +++ b/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj @@ -1,21 +1,16 @@ - - + + - {29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} - Mono.Cecil.Pdb.Tests - Mono.Cecil.Pdb.Tests + netcoreapp2.1;net40 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - {A47B1F49-A81A-43E8-BE6B-DD28AF2C4055} Mono.Cecil.Tests - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} Mono.Cecil.Pdb @@ -25,6 +20,4 @@ - - - \ No newline at end of file + diff --git a/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs b/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs index b6fdcdf566..2269cb5c92 100644 --- a/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs +++ b/external/linker/external/cecil/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs @@ -1,4 +1,3 @@ -#if !READ_ONLY using System.IO; using System.Linq; @@ -57,7 +56,7 @@ namespace Mono.Cecil.Tests { IL_0020: ldloc.1 IL_0021: ret ", main); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -83,7 +82,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("i", variables [0].Name); Assert.IsFalse (variables [0].IsDebuggerHidden); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -103,7 +102,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.CSharp, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -123,7 +122,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.Basic, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); } [Test] @@ -143,28 +142,28 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.FSharp, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void EmptyEnumerable () { TestModule ("empty-iterator.dll", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void EmptyRootNamespace () { TestModule ("EmptyRootNamespace.dll", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void VisualBasicNamespace () { TestModule ("AVbTest.exe", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } @@ -218,7 +217,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("u", variable.Name); Assert.IsFalse (variable.IsDebuggerHidden); Assert.AreEqual (5, variable.Index); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -276,7 +275,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("u", constant.Name); Assert.AreEqual (null, constant.Value); Assert.AreEqual (MetadataType.String, constant.ConstantType.MetadataType); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -325,7 +324,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (ImportTargetKind.DefineNamespaceAlias, target.Kind); Assert.AreEqual ("Foo2", target.Alias); Assert.AreEqual ("System.Reflection", target.Namespace); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -339,7 +338,7 @@ namespace Mono.Cecil.Tests { Assert.IsNotNull (symbol); Assert.IsNotNull (symbol.StateMachineKickOffMethod); Assert.AreEqual ("System.Threading.Tasks.Task ComplexPdb.Program::TestAsync()", symbol.StateMachineKickOffMethod.FullName); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -372,7 +371,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (move_next, async_body.ResumeMethods [0]); Assert.AreEqual (move_next, async_body.ResumeMethods [1]); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -408,13 +407,14 @@ namespace Mono.Cecil.Tests { } Assert.AreEqual ("System", import.Targets [0].Namespace); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + }, readOnly: !Platform.HasNativePdbSupport, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] public void CreateMethodFromScratch () { - IgnoreOnMono (); + if (!Platform.HasNativePdbSupport) + Assert.Ignore (); var module = ModuleDefinition.CreateModule ("Pan", ModuleKind.Dll); var type = new TypeDefinition ("Pin", "Pon", TypeAttributes.Public | TypeAttributes.Abstract | TypeAttributes.Sealed, module.ImportReference (typeof (object))); @@ -465,4 +465,3 @@ namespace Mono.Cecil.Tests { } } } -#endif \ No newline at end of file diff --git a/external/linker/global.json b/external/linker/global.json index a8cfd0ae50..7d5a1c2a77 100644 --- a/external/linker/global.json +++ b/external/linker/global.json @@ -1,9 +1,9 @@ { "tools": { - "dotnet": "3.0.100-preview-010184" + "dotnet": "3.0.100-preview5-011568" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19125.2", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19318.2", "Microsoft.NET.Sdk.IL": "3.0.0-preview4-27520-71" } } diff --git a/external/linker/illink.sln b/external/linker/illink.sln index 43e0685ade..a658066950 100644 --- a/external/linker/illink.sln +++ b/external/linker/illink.sln @@ -49,42 +49,42 @@ Global {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x64.Build.0 = illink_Release|x64 {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x86.ActiveCfg = illink_Release|x86 {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x86.Build.0 = illink_Release|x86 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x64.ActiveCfg = netstandard_Debug|x64 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x64.Build.0 = netstandard_Debug|x64 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.ActiveCfg = netstandard_Debug|x86 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.Build.0 = netstandard_Debug|x86 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x64.ActiveCfg = netstandard_Release|x64 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x64.Build.0 = netstandard_Release|x64 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.ActiveCfg = netstandard_Release|x86 - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.Build.0 = netstandard_Release|x86 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x64.ActiveCfg = netstandard_Debug|x64 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x64.Build.0 = netstandard_Debug|x64 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x86.ActiveCfg = netstandard_Debug|x86 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x86.Build.0 = netstandard_Debug|x86 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x64.ActiveCfg = netstandard_Release|x64 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x64.Build.0 = netstandard_Release|x64 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x86.ActiveCfg = netstandard_Release|x86 - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x86.Build.0 = netstandard_Release|x86 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x64.ActiveCfg = netstandard_Debug|x64 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x64.Build.0 = netstandard_Debug|x64 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x86.ActiveCfg = netstandard_Debug|x86 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x86.Build.0 = netstandard_Debug|x86 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x64.ActiveCfg = netstandard_Release|x64 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x64.Build.0 = netstandard_Release|x64 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x86.ActiveCfg = netstandard_Release|x86 - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x86.Build.0 = netstandard_Release|x86 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x64.ActiveCfg = Debug|x64 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x64.Build.0 = Debug|x64 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.ActiveCfg = Debug|x86 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.Build.0 = Debug|x86 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.Build.0 = Release|Any CPU + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x64.ActiveCfg = Release|x64 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x64.Build.0 = Release|x64 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.ActiveCfg = Release|x86 + {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.Build.0 = Release|x86 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x64.ActiveCfg = Debug|x64 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x64.Build.0 = Debug|x64 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x86.ActiveCfg = Debug|x86 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|x86.Build.0 = Debug|x86 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|Any CPU.Build.0 = Release|Any CPU + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x64.ActiveCfg = Release|x64 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x64.Build.0 = Release|x64 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x86.ActiveCfg = Release|x86 + {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|x86.Build.0 = Release|x86 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x64.ActiveCfg = Debug|x64 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x64.Build.0 = Debug|x64 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x86.ActiveCfg = Debug|x86 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|x86.Build.0 = Debug|x86 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|Any CPU.Build.0 = Release|Any CPU + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x64.ActiveCfg = Release|x64 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x64.Build.0 = Release|x64 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x86.ActiveCfg = Release|x86 + {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|x86.Build.0 = Release|x86 {275C1D10-168A-4AC4-8F3E-AD969F580B9C}.Debug|Any CPU.ActiveCfg = illink_Debug|Any CPU {275C1D10-168A-4AC4-8F3E-AD969F580B9C}.Debug|Any CPU.Build.0 = illink_Debug|Any CPU {275C1D10-168A-4AC4-8F3E-AD969F580B9C}.Debug|x64.ActiveCfg = illink_Debug|x64 diff --git a/external/linker/monobuild/Makefile b/external/linker/monobuild/Makefile index eb438708cb..bcd7cfa06b 100644 --- a/external/linker/monobuild/Makefile +++ b/external/linker/monobuild/Makefile @@ -10,12 +10,12 @@ clean: $(MSBUILD) ../monolinker.sln /t:clean prepare: + nuget help | head -1 + nuget restore ../external/cecil/ nuget restore ../monolinker.sln - # A hack for project.assets.json issues - rm -f ../external/cecil/obj/project.assets.json - rm -f ../external/cecil/symbols/pdb/obj/project.assets.json - rm -f ../external/cecil/symbols/mdb/obj/project.assets.json - rm -f ../src/linker/obj/project.assets.json + # The nunit runner used below seems to expect the old package layout. + # This could potentially be removed with an update to nunit. + nuget restore -PackagesDirectory ../packages ../test/Mono.Linker.Tests/packages.config check: prepare - mono ../packages/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe --result="TestResults.xml;format=nunit2" ../test/Mono.Linker.Tests/bin/$(CONFIGURATION)/Mono.Linker.Tests.dll + mono ../packages/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe --result="TestResults.xml;format=nunit2" ../test/Mono.Linker.Tests/bin/$(CONFIGURATION)/net471/Mono.Linker.Tests.dll diff --git a/external/linker/monolinker.sln b/external/linker/monolinker.sln index 12fa134ace..99cee35ad0 100644 --- a/external/linker/monolinker.sln +++ b/external/linker/monolinker.sln @@ -5,142 +5,52 @@ VisualStudioVersion = 15.0.26403.7 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Linker", "src\linker\Mono.Linker.csproj", "{DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "external\cecil\Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Linker.Tests", "test\Mono.Linker.Tests\Mono.Linker.Tests.csproj", "{400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Pdb", "external\cecil\symbols\pdb\Mono.Cecil.Pdb.csproj", "{63E6915C-7EA4-4D76-AB28-0D7191EEA626}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Linker.Tests.Cases", "test\Mono.Linker.Tests.Cases\Mono.Linker.Tests.Cases.csproj", "{B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Linker.Tests.Cases.Expectations", "test\Mono.Linker.Tests.Cases.Expectations\Mono.Linker.Tests.Cases.Expectations.csproj", "{2C26601F-3E2F-45B9-A02F-58EE9296E19E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Mdb", "external\cecil\symbols\mdb\Mono.Cecil.Mdb.csproj", "{8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "external\cecil\Mono.Cecil.csproj", "{5E89AB62-1526-41F7-AAA3-D9119C9451EA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Mdb", "external\cecil\symbols\mdb\Mono.Cecil.Mdb.csproj", "{76602591-ACB6-42DF-A6F6-8FE64B0E929F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Pdb", "external\cecil\symbols\pdb\Mono.Cecil.Pdb.csproj", "{EC2FE89A-5B34-425A-BBCC-F28E5BA3EE2A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - net_3_5_Debug|Any CPU = net_3_5_Debug|Any CPU - net_3_5_Release|Any CPU = net_3_5_Release|Any CPU - net_4_0_Debug|Any CPU = net_4_0_Debug|Any CPU - net_4_0_Release|Any CPU = net_4_0_Release|Any CPU - netstandard_Debug|Any CPU = netstandard_Debug|Any CPU - netstandard_Release|Any CPU = netstandard_Release|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_3_5_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_3_5_Debug|Any CPU.Build.0 = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_3_5_Release|Any CPU.ActiveCfg = Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_3_5_Release|Any CPU.Build.0 = Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_4_0_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_4_0_Debug|Any CPU.Build.0 = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_4_0_Release|Any CPU.ActiveCfg = Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.net_4_0_Release|Any CPU.Build.0 = Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.netstandard_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.netstandard_Debug|Any CPU.Build.0 = Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.netstandard_Release|Any CPU.ActiveCfg = Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.netstandard_Release|Any CPU.Build.0 = Release|Any CPU {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|Any CPU.Build.0 = Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.Build.0 = netstandard_Release|Any CPU {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_3_5_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_3_5_Debug|Any CPU.Build.0 = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_3_5_Release|Any CPU.ActiveCfg = Release|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_3_5_Release|Any CPU.Build.0 = Release|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_4_0_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_4_0_Debug|Any CPU.Build.0 = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_4_0_Release|Any CPU.ActiveCfg = Release|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.net_4_0_Release|Any CPU.Build.0 = Release|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.netstandard_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.netstandard_Debug|Any CPU.Build.0 = Debug|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.netstandard_Release|Any CPU.ActiveCfg = Release|Any CPU - {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.netstandard_Release|Any CPU.Build.0 = Release|Any CPU {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.Release|Any CPU.ActiveCfg = Release|Any CPU {400A1561-B6B6-482D-9E4C-3DDAEDE5BD07}.Release|Any CPU.Build.0 = Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63E6915C-7EA4-4D76-AB28-0D7191EEA626}.Release|Any CPU.Build.0 = Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug|Any CPU.Build.0 = net_3_5_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Release|Any CPU.Build.0 = net_3_5_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.Release|Any CPU.Build.0 = Release|Any CPU {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_3_5_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_3_5_Debug|Any CPU.Build.0 = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_3_5_Release|Any CPU.ActiveCfg = Release|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_3_5_Release|Any CPU.Build.0 = Release|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_4_0_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_4_0_Debug|Any CPU.Build.0 = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_4_0_Release|Any CPU.ActiveCfg = Release|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.net_4_0_Release|Any CPU.Build.0 = Release|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.netstandard_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.netstandard_Debug|Any CPU.Build.0 = Debug|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.netstandard_Release|Any CPU.ActiveCfg = Release|Any CPU - {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.netstandard_Release|Any CPU.Build.0 = Release|Any CPU {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6BEE6AA-ADA0-4E1D-9A17-FBF2936F82B5}.Release|Any CPU.Build.0 = Release|Any CPU {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_3_5_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_3_5_Debug|Any CPU.Build.0 = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_3_5_Release|Any CPU.ActiveCfg = Release|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_3_5_Release|Any CPU.Build.0 = Release|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_4_0_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_4_0_Debug|Any CPU.Build.0 = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_4_0_Release|Any CPU.ActiveCfg = Release|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.net_4_0_Release|Any CPU.Build.0 = Release|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.netstandard_Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.netstandard_Debug|Any CPU.Build.0 = Debug|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.netstandard_Release|Any CPU.ActiveCfg = Release|Any CPU - {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.netstandard_Release|Any CPU.Build.0 = Release|Any CPU {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.Release|Any CPU.ActiveCfg = Release|Any CPU {2C26601F-3E2F-45B9-A02F-58EE9296E19E}.Release|Any CPU.Build.0 = Release|Any CPU + {5E89AB62-1526-41F7-AAA3-D9119C9451EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E89AB62-1526-41F7-AAA3-D9119C9451EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E89AB62-1526-41F7-AAA3-D9119C9451EA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E89AB62-1526-41F7-AAA3-D9119C9451EA}.Release|Any CPU.Build.0 = Release|Any CPU + {76602591-ACB6-42DF-A6F6-8FE64B0E929F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76602591-ACB6-42DF-A6F6-8FE64B0E929F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76602591-ACB6-42DF-A6F6-8FE64B0E929F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76602591-ACB6-42DF-A6F6-8FE64B0E929F}.Release|Any CPU.Build.0 = Release|Any CPU + {EC2FE89A-5B34-425A-BBCC-F28E5BA3EE2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC2FE89A-5B34-425A-BBCC-F28E5BA3EE2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC2FE89A-5B34-425A-BBCC-F28E5BA3EE2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC2FE89A-5B34-425A-BBCC-F28E5BA3EE2A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/external/linker/netci.groovy b/external/linker/netci.groovy deleted file mode 100644 index a7ed695c9b..0000000000 --- a/external/linker/netci.groovy +++ /dev/null @@ -1,48 +0,0 @@ -import jobs.generation.Utilities; - -def project = GithubProject -def branch = GithubBranchName - -def static setRecursiveSubmoduleOption(def job) { - job.with { - configure { - it / 'scm' / 'extensions' << 'hudson.plugins.git.extensions.impl.SubmoduleOption' { - recursiveSubmodules(true) - } - } - } -} - -[true, false].each { isPR -> - ['Windows_NT', 'Ubuntu'].each { os -> - - def newJob = job(Utilities.getFullJobName(project, os.toLowerCase(), isPR)) {} - - if (os == 'Windows_NT') { - newJob.with { - steps { - batchFile("cd corebuild && restore.cmd") - batchFile("cd corebuild && build.cmd") - } - } - } else if (os == 'Ubuntu') { - newJob.with { - steps { - shell("cd corebuild && ./restore.sh") - shell("cd corebuild && ./build.sh") - } - } - } - - Utilities.setMachineAffinity(newJob, os, 'latest-or-auto') - - Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}") - setRecursiveSubmoduleOption(newJob) - - if (isPR) { - Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} Build") - } else { - Utilities.addGithubPushTrigger(newJob) - } - } -} diff --git a/external/linker/src/ILLink.CustomSteps/ILLink.CustomSteps.csproj b/external/linker/src/ILLink.CustomSteps/ILLink.CustomSteps.csproj index 03d8f984d9..082f1bca9a 100644 --- a/external/linker/src/ILLink.CustomSteps/ILLink.CustomSteps.csproj +++ b/external/linker/src/ILLink.CustomSteps/ILLink.CustomSteps.csproj @@ -1,4 +1,3 @@ - @@ -12,38 +11,8 @@ - - Configuration=illink_Debug - Configuration=illink_Release - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46} - - - Configuration=netstandard_Debug - Configuration=net_4_0_Debug - Configuration=netstandard_Release - Configuration=net_4_0_Release - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - + + - - - - - Configuration=net_4_0_Debug - Configuration=netstandard_Debug - Configuration=net_4_0_Release - Configuration=netstandard_Release - - - Configuration=net_4_0_Debug - Configuration=netstandard_Debug - Configuration=net_4_0_Release - Configuration=netstandard_Release - - - diff --git a/external/linker/src/ILLink.Tasks/AdapterLogger.cs b/external/linker/src/ILLink.Tasks/AdapterLogger.cs deleted file mode 100644 index c36c4bffb2..0000000000 --- a/external/linker/src/ILLink.Tasks/AdapterLogger.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; - -namespace ILLink.Tasks -{ - class AdapterLogger : Mono.Linker.ILogger - { - private TaskLoggingHelper log; - - public AdapterLogger (TaskLoggingHelper log) - { - this.log = log; - } - - public void LogMessage (Mono.Linker.MessageImportance importance, string message, params object[] values) - { - Microsoft.Build.Framework.MessageImportance msBuildImportance; - switch (importance) - { - case Mono.Linker.MessageImportance.High: - msBuildImportance = MessageImportance.High; - break; - case Mono.Linker.MessageImportance.Normal: - msBuildImportance = MessageImportance.Normal; - break; - case Mono.Linker.MessageImportance.Low: - msBuildImportance = MessageImportance.Low; - break; - default: - throw new ArgumentException ($"Unrecognized importance level {importance}", nameof(importance)); - } - - log.LogMessageFromText (String.Format (message, values), msBuildImportance); - } - } -} diff --git a/external/linker/src/ILLink.Tasks/ILLink.Tasks.csproj b/external/linker/src/ILLink.Tasks/ILLink.Tasks.csproj index b0de198244..9ee47368e1 100644 --- a/external/linker/src/ILLink.Tasks/ILLink.Tasks.csproj +++ b/external/linker/src/ILLink.Tasks/ILLink.Tasks.csproj @@ -1,102 +1,30 @@ - - netcoreapp2.0 + netcoreapp2.0;net472 + netcoreapp2.0 false bin/ $(BaseOutputPath)nupkgs true - - - - + MIT + MSBuild tasks for running the IL Linker + $(AssemblyName) + + false - - ILLink.Tasks.nuspec - $(BaseOutputPath)$(NuspecFileName) - id=$(AssemblyName);authors=$(AssemblyName);description=linker tasks; + Pack doesn't support including project references + (https://github.com/NuGet/Home/issues/3891), so we work + around this by explicitly including the publish output in the + package. --> + $(TargetsForTfmSpecificContentInPackage);_LayoutPackage - - - SetDynamicNuspecProperties;BinPlacePackageDeps;$(GenerateNuspecDependsOn) - - - - $(NuspecProperties)version=$(Version); - - - - - - - - - - - - - - TargetFramework=%(TFMsToPublish.Identity);PublishDir=$(BaseOutputPath)%(TFMsToPublish.Identity) - - - - - - @@ -109,114 +37,72 @@ - - Always + + + + + build + + + Sdk - - - + - - - - - - - - - Configuration=illink_$(Configuration) - - - - - Configuration=illink_$(Configuration) - - - - - - - Configuration=net_4_0_$(Configuration) - Configuration=netstandard_$(Configuration) - + + TargetFramework=$(TargetFramework);PublishDir=$(PublishDir) + + + + + <_FilesToDelete Remove="@(_FilesToDelete)" /> + <_FilesToDelete Include="$(PublishDir)/*.dll" /> + <_FilesToDelete Include="$(PublishDir)/*.json" /> + + + + + + + + + + + + + + + - - - - + + + + diff --git a/external/linker/src/ILLink.Tasks/ILLink.Tasks.nuspec b/external/linker/src/ILLink.Tasks/ILLink.Tasks.nuspec deleted file mode 100644 index da9cc50d22..0000000000 --- a/external/linker/src/ILLink.Tasks/ILLink.Tasks.nuspec +++ /dev/null @@ -1,15 +0,0 @@ - - - - $id$ - $version$ - $authors$ - $description$ - - - - - - - - diff --git a/external/linker/src/ILLink.Tasks/LinkTask.cs b/external/linker/src/ILLink.Tasks/LinkTask.cs index c7af45a7a5..f7226406f4 100644 --- a/external/linker/src/ILLink.Tasks/LinkTask.cs +++ b/external/linker/src/ILLink.Tasks/LinkTask.cs @@ -12,12 +12,7 @@ namespace ILLink.Tasks { /// /// Paths to the assembly files that should be considered as - /// input to the linker. Currently the linker will - /// additionally be able to resolve any assemblies in the - /// same directory as an assembly in AssemblyPaths, but this - /// behavior should not be relied upon. Instead, work under - /// the assumption that only the AssemblyPaths given will be - /// resolved. + /// input to the linker. /// Each path can also have an "action" metadata, /// which will set the illink action to take for /// that assembly. @@ -25,6 +20,12 @@ namespace ILLink.Tasks [Required] public ITaskItem [] AssemblyPaths { get; set; } + /// + /// Paths to assembly files that are reference assemblies, + /// representing the surface area for compilation. + /// + public ITaskItem [] ReferenceAssemblyPaths { get; set; } + /// /// The names of the assemblies to root. This should contain /// assembly names without an extension, not file names or @@ -82,14 +83,12 @@ namespace ILLink.Tasks get { if (!String.IsNullOrEmpty (_dotnetPath)) - { return _dotnetPath; - } + _dotnetPath = Environment.GetEnvironmentVariable (DotNetHostPathEnvironmentName); if (String.IsNullOrEmpty (_dotnetPath)) - { throw new InvalidOperationException ($"{DotNetHostPathEnvironmentName} is not set"); - } + return _dotnetPath; } } @@ -106,71 +105,98 @@ namespace ILLink.Tasks public string ILLinkPath { get { if (!String.IsNullOrEmpty (_illinkPath)) - { return _illinkPath; - } + var taskDirectory = Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location); - _illinkPath = Path.Combine (taskDirectory, "illink.dll"); + // The linker always runs on .NET Core, even when using desktop MSBuild to host ILLink.Tasks. + _illinkPath = Path.Combine (Path.GetDirectoryName (taskDirectory), "netcoreapp2.0", "illink.dll"); return _illinkPath; } set => _illinkPath = value; } + private static string Quote (string path) + { + return $"\"{path.TrimEnd('\\')}\""; + } + protected override string GenerateCommandLineCommands () { var args = new StringBuilder (); - args.Append (ILLinkPath); - - if (RootDescriptorFiles != null) { - foreach (var rootFile in RootDescriptorFiles) { - args.Append (" -x ").Append (rootFile.ItemSpec); - } - } - - foreach (var assemblyItem in RootAssemblyNames) { - args.Append (" -a ").Append (assemblyItem.ItemSpec); - } - - HashSet directories = new HashSet (); - foreach (var assembly in AssemblyPaths) { - var assemblyPath = assembly.ItemSpec; - var dir = Path.GetDirectoryName (assemblyPath); - if (!directories.Contains (dir)) { - directories.Add (dir); - args.Append (" -d ").Append (dir); - } - - string action = assembly.GetMetadata ("action"); - if ((action != null) && (action.Length > 0)) { - args.Append (" -p "); - args.Append (action); - args.Append (" ").Append (Path.GetFileNameWithoutExtension (assemblyPath)); - } - } - - if (OutputDirectory != null) { - args.Append (" -out ").Append (OutputDirectory.ItemSpec); - } - - if (ClearInitLocals) { - args.Append (" -s "); - // Version of ILLink.CustomSteps is passed as a workaround for msbuild issue #3016 - args.Append ("LLink.CustomSteps.ClearInitLocalsStep,ILLink.CustomSteps,Version=0.0.0.0:OutputStep"); - if ((ClearInitLocalsAssemblies != null) && (ClearInitLocalsAssemblies.Length > 0)) { - args.Append (" -m ClearInitLocalsAssemblies "); - args.Append (ClearInitLocalsAssemblies); - } - } - - if (ExtraArgs != null) { - args.Append (" ").Append (ExtraArgs); - } - - if (DumpDependencies) - args.Append (" --dump-dependencies"); - + args.Append (Quote (ILLinkPath)); return args.ToString (); } + protected override string GenerateResponseFileCommands () + { + var args = new StringBuilder (); + + if (RootDescriptorFiles != null) { + foreach (var rootFile in RootDescriptorFiles) + args.Append ("-x ").AppendLine (Quote (rootFile.ItemSpec)); + } + + foreach (var assemblyItem in RootAssemblyNames) + args.Append ("-a ").AppendLine (Quote (assemblyItem.ItemSpec)); + + HashSet assemblyNames = new HashSet (StringComparer.OrdinalIgnoreCase); + foreach (var assembly in AssemblyPaths) { + var assemblyPath = assembly.ItemSpec; + var assemblyName = Path.GetFileNameWithoutExtension (assemblyPath); + + // If there are multiple paths with the same assembly name, only use the first one. + if (!assemblyNames.Add (assemblyName)) + continue; + + args.Append ("-reference ").AppendLine (Quote (assemblyPath)); + + string action = assembly.GetMetadata ("action"); + if ((action != null) && (action.Length > 0)) { + args.Append ("-p "); + args.Append (action); + args.Append (" ").AppendLine (Quote (assemblyName)); + } + } + + if (ReferenceAssemblyPaths != null) { + foreach (var assembly in ReferenceAssemblyPaths) { + var assemblyPath = assembly.ItemSpec; + var assemblyName = Path.GetFileNameWithoutExtension (assemblyPath); + + // Don't process references for which we already have + // implementation assemblies. + if (assemblyNames.Contains (assemblyName)) + continue; + + args.Append ("-reference ").AppendLine (Quote (assemblyPath)); + + // Treat reference assemblies as "skip". Ideally we + // would not even look at the IL, but only use them to + // resolve surface area. + args.Append ("-p skip ").AppendLine (Quote (assemblyName)); + } + } + + if (OutputDirectory != null) + args.Append ("-out ").AppendLine (Quote (OutputDirectory.ItemSpec)); + + if (ClearInitLocals) { + args.Append ("-s "); + // Version of ILLink.CustomSteps is passed as a workaround for msbuild issue #3016 + args.AppendLine ("ILLink.CustomSteps.ClearInitLocalsStep,ILLink.CustomSteps,Version=0.0.0.0:OutputStep"); + if ((ClearInitLocalsAssemblies != null) && (ClearInitLocalsAssemblies.Length > 0)) { + args.Append ("-m ClearInitLocalsAssemblies "); + args.AppendLine (ClearInitLocalsAssemblies); + } + } + + if (ExtraArgs != null) + args.AppendLine (ExtraArgs); + + if (DumpDependencies) + args.AppendLine ("--dump-dependencies"); + + return args.ToString (); + } } } diff --git a/external/linker/src/ILLink.Tasks/README.md b/external/linker/src/ILLink.Tasks/README.md index 2eca89540a..2581751016 100644 --- a/external/linker/src/ILLink.Tasks/README.md +++ b/external/linker/src/ILLink.Tasks/README.md @@ -1,10 +1,83 @@ # ILLink.Tasks -ILLink.Tasks is a package containing MSBuild tasks and targets that -will run the linker to run during publish of a .NET Core app. +ILLink.Tasks contains MSBuild tasks that run the linker for .NET Core. It runs illink.dll, built from the same [sources](../linker/) that are used to build monolinker.exe. ILLink.Tasks is shipped as part of the .NET Core 3.0 SDK. -ILLink.Tasks provides an MSBuild task called ILLink that makes it easy -to run the linker from an MSBuild project file: +Note: in previous versions of .NET Core, ILLink.Tasks was shipped as an external nuget package. This is no longer supported - please update to the latest 3.0 SDK and try the new experience! + +## Usage + +To use this tool, set `PublishTrimmed` to `true` in your project and publish a self-contained app: + +``` +dotnet publish -r -c Release +``` + +The publish output will include a subset of the framework libraries, depending on what the application code calls. For a "hello world" app, this reduces the size from ~68MB to ~28MB. + +Applications or frameworks (including ASP.NET Core and WPF) that use reflection or related dynamic features will often break when trimmed, because the linker does not know about this dynamic behavior, and can not determine in general which framework types will be required for reflection at runtime. To trim such apps, you will need to tell the linker about any types needed by reflection in your code, and in packages or frameworks that you depend on. Be sure to test your apps after trimming. + +## How it works + +The IL linker scans the IL of your application to detect which code is actually required, and trims unused framework libraries. This can significantly reduce the size of some apps. Typically small tool-like console apps benefit the most as they tend to use fairly small subsets of the framework, and are usually more amenable to trimming. Applications that use reflection may not work with this approach. + +## Default behavior + +By default, the linker will operate in a conservative mode that keeps +all managed assemblies that aren't part of the framework (they are +kept intact, and the linker simply copies them). This means that any reflection calls to non-framework code should continue to work. Reflection calls to code in the framework can potentially break if the target of the call is removed. Any framework assemblies that aren't predicted to be used at runtime will be removed from the publish output. Used framework assemblies will be kept entirely. + +# Adding reflection roots + +If your app or its dependencies use reflection, you may need to tell the linker to keep reflection targets explicitly. For example, dependency injection in ASP.NET Core apps will activate +types depending on what is present at runtime, and therefore may fail +if the linker has removed assemblies that would otherwise be +present. Similarly, WPF apps may call into framework code depending on +the features used. If you know beforehand what your app will require +at runtime, you can tell the linker about this in a few ways. + +For example, an app may reflect over `System.IO.File`: +```csharp +Type file = System.Type.GetType("System.IO.File,System.IO.FileSystem"); +``` + +To ensure that this works with `PublishTrimmed=true`: + +- You can include a direct reference to the required type in your code + somewhere, for example by using `typeof(System.IO.File)`. + +- You can tell the linker to explicitly keep an assembly by adding it + to your csproj (use the assembly name *without* extension): + + ```xml + + + + ``` + +- You can give the linker a more specific list of types/methods, + etc. to include using an xml file, using the format described at + http://github.com/mono/linker + + `.csproj`: + ```xml + + + + ``` + + `TrimmerRoots.xml`: + ```xml + + + + + + ``` + + +# MSBuild task + +The linker can be invoked as an MSBuild task, `ILLink`. We recommend not using the task directly, because the SDK has built-in logic that handles computing the right set of reference assemblies as inputs, incremental linking, and similar logic. If you would like to use the [advanced options](../linker/README.md), you can invoke the msbuild task directly and pass any extra arguments like this: ```xml ``` -For a description of the options that this task supports, see the +For a full description of the inputs that this task supports, see the comments in [LinkTask.cs](LinkTask.cs). -In addition, ILLink.Tasks contains MSBuild logic that makes the linker -run automatically during `dotnet publish` for .NET Core apps. This -will: +# Building -- Determine the assemblies and options to pass to illink. -- Remove unused native files from the publish output. - -The full set of options is described below. - -## Building +To build ILLink.Tasks: ``` -linker> ./corebuild/dotnet.{sh/ps1} restore illink.sln -linker> ./corebuild/dotnet.{sh/ps1} pack src/ILLink.Tasks/ILLink.Tasks.csproj +linker> dotnet restore illink.sln +linker> dotnet pack illink.sln ``` -The output package will be placed in -`corebuild/integration/bin/nupkgs`. If you are building on unix, you -will need to adjust -[ILLink.Tasks.nuspec](ILLink.Tasks.nuspec). Replace -the dll file includes with the following: +To produce a package: +``` +linker> ./eng/dotnet.{sh/ps1} pack illink.sln +``` -`` +In .NET Core 3.0, this package is shipped with the SDK. -## Using ILLink.Tasks - -Add a package reference to the linker. Ensure that either the -[dotnet-core](https://dotnet.myget.org/gallery/dotnet-core) myget feed -or the path to the locally-built linker package path exists in the -project's nuget.config. If using myget, you probably want to ensure -that you're using the latest version available at -https://dotnet.myget.org/feed/dotnet-core/package/nuget/ILLink.Tasks. - -After adding the package, linking will be turned on during `dotnet -publish`. The publish output will contain the linked assemblies. - -## Default behavior - -By default, the linker will operate in a conservative mode that keeps -all managed assemblies that aren't part of the framework (they are -kept intact, and the linker simply copies them). It also analyzes all -non-framework assemblies to find and keep code used by them (they are -roots for the analysis). This means that unanalyzed reflection calls -within the app should continue to work after linking. Reflection calls -to code in the framework can potentially break when using the linker, -if the target of the call is removed. - -For portable publish, framework assemblies usually do not get -published with the app. In this case they will not be analyzed or -linked. - -For self-contained publish, framework assemblies are part of the -publish output, and are analyzed by the linker. Any framework -assemblies that aren't predicted to be used at runtime based on the -linker analysis will be removed from the publish output. Used -framework assemblies will be kept, and any used code within these -assemblies will be compiled to native code. Unused parts of used -framework assemblies are kept as IL, so that reflection calls will -continue to work, with runtime JIT compilation. - -Native dependencies that aren't referenced by any of the kept managed -assemblies will be removed from the publish output as well. - -## Caveats - -You should make sure to test the publish output before deploying your -code, because the linker can potentially break apps that use -reflection. +# Caveats The linker does not analyze reflection calls, so any reflection targets outside of the kept assemblies will need to be rooted -explicitly using either `LinkerRootAssemblies` or -`LinkerRootDescriptors` (see below). +explicitly (see above). Sometimes an application may include multiple versions of the same assembly. This may happen when portable apps include platform-specific @@ -99,76 +120,3 @@ publish output. In such cases, the linker will pick one of the duplicate assemblies to analyze. This means that dependencies of the un-analyzed duplicates may not be included in the application, so you may need to root such dependencies manually. - -## Options - -The following MSBuild properties can be used to control the behavior -of the linker, from the command-line (via `dotnet publish -/p:PropertyName=PropertyValue`), or from the .csproj file (via -`PropertyValue`). They are defined and -used in -[ILLink.Tasks.targets](ILLink.Tasks.targets). - -- `LinkDuringPublish` (default `true`) - Set to `false` to disable - linking. - -- `ShowLinkerSizeComparison` (default `false`) - Set to `true` to - print out a table showing the size impact of the linker. - -- `RootAllApplicationAssemblies` (default `true`) - If `true`, all - application assemblies are rooted by the linker. This means they are - kept in their entirety, and analyzed for dependencies. If `false`, - only the app dll's entry point is rooted. - -- `LinkerRootAssemblies` - The set of assemblies to root. The default - depends on the value of `RootAllApplicationAssemblies`. Additional - assemblies can be rooted by adding them to this ItemGroup. - -- `LinkerRootDescriptors` - The set of [xml descriptors](../linker#syntax-of-xml-descriptor) - specifying additional roots within assemblies. The default is to - include a generated descriptor that roots everything in the - application assembly if `RootAllApplicationAssemblies` is - `true`. Additional roots from descriptors can be included by adding - the descriptor files to this ItemGroup. - -- `ExtraLinkerArgs` - Extra arguments to pass to the linker. The - default sets some flags that output symbols, tolerate resolution - errors, log warnings, skip mono-specific localization assemblies, - and keep type-forwarder assemblies. See - [ILLink.Tasks.targets](ILLink.Tasks.targets). - Setting this will override the defaults. - -- Assembly actions: illink has the ability to specify an [action](../linker#actions-on-the-assemblies) to - take per-assembly. ILLink.Tasks provides high-level switches that - control the action to take for a set of assemblies. The set of - managed files that make up the application are split into - "application" and "platform" assemblies. The "platform" represents - the .NET framework, while the "application" represents the rest of - the application and its other dependencies. The assembly action can - be set for each of these groups independently, for assemblies that - are analyzed as used and as unused, with the following switches: - - - `UsedApplicationAssemblyAction` - The default is to `Copy` any used - application assemblies to the output, leaving them as-is. - - `UnusedApplicationAssemblyAction` - The default is to `Delete` (not - publish) unused application assemblies. - - `UsedPlatformAssemblyAction` - For self-contained publish, the - default is `AddBypassNGen`, which will add the BypassNGenAttribute - to unused code in used platform assemblies. This causes the native - compilation step to compile only parts of these assemblies that - are used. For portable publish, the default is to `Skip` these, - because the platform assemblies are generally not published with - the app. - - `UnusedPlatformAssemblyAction` - For self-contained publish, the - default is to `Delete` (not publish) unused platform - assemblies. For portable publish, the default is to `Skip`. - - The full list of assembly actions is described in - [AssemblyAction.cs](../linker/Linker/AssemblyAction.cs) Some - combinations of actions may be disallowed if they do not make - sense. For more details, see - [SetAssemblyActions.cs](SetAssemblyActions.cs). - -- `LinkerTrimNativeDeps` (default `true`) - If `true`, enable - detection and removal of unused native dependencies. If `false`, all - native dependencies are kept. diff --git a/external/linker/src/ILLink.Tasks/Sdk/Sdk.props b/external/linker/src/ILLink.Tasks/Sdk/Sdk.props index 6f29718691..8c9c2cacde 100644 --- a/external/linker/src/ILLink.Tasks/Sdk/Sdk.props +++ b/external/linker/src/ILLink.Tasks/Sdk/Sdk.props @@ -11,6 +11,15 @@ Copyright (c) .NET Foundation. All rights reserved. --> - + + <_ILLinkTasksDirectoryRoot Condition=" '$(_ILLinkTasksDirectoryRoot)' == '' ">$(MSBuildThisFileDirectory)../tools/ + <_ILLinkTasksTFM Condition=" '$(MSBuildRuntimeType)' == 'Core' ">netcoreapp2.0 + <_ILLinkTasksTFM Condition=" '$(_ILLinkTasksTFM)' == '' ">net472 + <_ILLinkTasksDirectory>$(_ILLinkTasksDirectoryRoot)$(_ILLinkTasksTFM)/ + $(_ILLinkTasksDirectory)ILLink.Tasks.dll + + + + diff --git a/external/linker/src/ILLink.Tasks/Utils.cs b/external/linker/src/ILLink.Tasks/Utils.cs index dfe873f0e3..265f61ab29 100644 --- a/external/linker/src/ILLink.Tasks/Utils.cs +++ b/external/linker/src/ILLink.Tasks/Utils.cs @@ -1,6 +1,5 @@ using System; using Mono.Cecil; -using Mono.Linker; public static class Utils { @@ -13,14 +12,4 @@ public static class Utils return false; } } - - public static bool IsCrossgenedAssembly (string fileName) - { - try { - ModuleDefinition module = ModuleDefinition.ReadModule (fileName); - return module.IsCrossgened (); - } catch (BadImageFormatException) { - return false; - } - } } diff --git a/external/linker/src/linker/ILLink.props b/external/linker/src/linker/ILLink.props deleted file mode 100644 index cb98e6580c..0000000000 --- a/external/linker/src/linker/ILLink.props +++ /dev/null @@ -1,27 +0,0 @@ - - - - - netcoreapp2.0 - $(DefineConstants);FEATURE_ILLINK - false - false - illink - - Exe - - - - - - - - - - - diff --git a/external/linker/src/linker/Linker.Steps/CodeRewriterStep.cs b/external/linker/src/linker/Linker.Steps/CodeRewriterStep.cs index a7029936b9..5a94f7f13a 100644 --- a/external/linker/src/linker/Linker.Steps/CodeRewriterStep.cs +++ b/external/linker/src/linker/Linker.Steps/CodeRewriterStep.cs @@ -45,33 +45,34 @@ namespace Mono.Linker.Steps { } } - void RewriteBodyToLinkedAway (MethodDefinition method) + protected virtual void RewriteBodyToLinkedAway (MethodDefinition method) { method.ImplAttributes &= ~(MethodImplAttributes.AggressiveInlining | MethodImplAttributes.Synchronized); method.ImplAttributes |= MethodImplAttributes.NoInlining; method.Body = CreateThrowLinkedAwayBody (method); - ClearDebugInformation (method); + + method.ClearDebugInformation(); } - void RewriteBodyToStub (MethodDefinition method) + protected virtual void RewriteBodyToStub (MethodDefinition method) { if (!method.IsIL) throw new NotImplementedException (); method.Body = CreateStubBody (method); - ClearDebugInformation (method); + method.ClearDebugInformation(); } - void RewriteBodyToFalse (MethodDefinition method) + protected virtual void RewriteBodyToFalse (MethodDefinition method) { if (!method.IsIL) throw new NotImplementedException (); method.Body = CreateReturnFalseBody (method); - ClearDebugInformation (method); + method.ClearDebugInformation(); } MethodBody CreateThrowLinkedAwayBody (MethodDefinition method) @@ -80,7 +81,7 @@ namespace Mono.Linker.Steps { var il = body.GetILProcessor (); // import the method into the current assembly - var ctor = Context.MarkedKnownMembers.NotSupportedExceptionCtorString; + MethodReference ctor = Context.MarkedKnownMembers.NotSupportedExceptionCtorString; ctor = assembly.MainModule.ImportReference (ctor); il.Emit (OpCodes.Ldstr, "Linked away"); @@ -98,7 +99,7 @@ namespace Mono.Linker.Steps { var il = body.GetILProcessor (); if (method.IsInstanceConstructor ()) { - var base_ctor = GetDefaultInstanceConstructor (method.DeclaringType.BaseType); + var base_ctor = method.DeclaringType.BaseType.GetDefaultInstanceConstructor(); base_ctor = assembly.MainModule.ImportReference (base_ctor); il.Emit (OpCodes.Ldarg_0); @@ -130,33 +131,5 @@ namespace Mono.Linker.Steps { il.Emit (OpCodes.Ret); return body; } - - static MethodReference GetDefaultInstanceConstructor (TypeReference type) - { - foreach (var m in type.GetMethods ()) { - if (m.HasParameters) - continue; - - var definition = m.Resolve (); - if (!definition.IsDefaultConstructor ()) - continue; - - return m; - } - - throw new NotImplementedException (); - } - - static void ClearDebugInformation (MethodDefinition method) - { - // TODO: This always allocates, update when Cecil catches up - var di = method.DebugInformation; - di.SequencePoints.Clear (); - if (di.Scope != null) { - di.Scope.Variables.Clear (); - di.Scope.Constants.Clear (); - di.Scope = null; - } - } } } diff --git a/external/linker/src/linker/Linker.Steps/MarkStep.cs b/external/linker/src/linker/Linker.Steps/MarkStep.cs index 8bb3437fc6..7b9630a089 100644 --- a/external/linker/src/linker/Linker.Steps/MarkStep.cs +++ b/external/linker/src/linker/Linker.Steps/MarkStep.cs @@ -46,6 +46,7 @@ namespace Mono.Linker.Steps { protected Queue _assemblyLevelAttributes; protected Queue _lateMarkedAttributes; protected List _typesWithInterfaces; + protected List _unreachableBodies; public AnnotationStore Annotations { get { return _context.Annotations; } @@ -64,6 +65,7 @@ namespace Mono.Linker.Steps { _assemblyLevelAttributes = new Queue (); _lateMarkedAttributes = new Queue (); _typesWithInterfaces = new List (); + _unreachableBodies = new List (); } public virtual void Process (LinkContext context) @@ -72,6 +74,7 @@ namespace Mono.Linker.Steps { Initialize (); Process (); + Complete (); } void Initialize () @@ -93,6 +96,13 @@ namespace Mono.Linker.Steps { } } + void Complete () + { + foreach (var body in _unreachableBodies) { + Annotations.SetAction (body.Method, MethodAction.ConvertToThrow); + } + } + void InitializeType (TypeDefinition type) { if (type.HasNestedTypes) { @@ -188,6 +198,7 @@ namespace Mono.Linker.Steps { ProcessQueue (); ProcessVirtualMethods (); ProcessMarkedTypesWithInterfaces (); + ProcessPendingBodies (); DoAdditionalProcessing (); } @@ -242,6 +253,17 @@ namespace Mono.Linker.Steps { } } + void ProcessPendingBodies () + { + for (int i = 0; i < _unreachableBodies.Count; i++) { + var body = _unreachableBodies [i]; + if (Annotations.IsInstantiated (body.Method.DeclaringType)) { + MarkMethodBody (body); + _unreachableBodies.RemoveAt (i--); + } + } + } + void ProcessVirtualMethod (MethodDefinition method) { var overrides = Annotations.GetOverrides (method); @@ -449,7 +471,7 @@ namespace Mono.Linker.Steps { continue; if (signature == null) { - MarkMethod (m); + MarkIndirectlyCalledMethod (m); marked = true; continue; } @@ -469,7 +491,7 @@ namespace Mono.Linker.Steps { if (i < 0) continue; - MarkMethod (m); + MarkIndirectlyCalledMethod (m); marked = true; } @@ -813,6 +835,9 @@ namespace Mono.Linker.Steps { bool ProcessLazyAttributes () { + if (Annotations.HasMarkedAnyIndirectlyCalledMethods () && MarkDisablePrivateReflectionAttribute ()) + return true; + var startingQueueCount = _assemblyLevelAttributes.Count; if (startingQueueCount == 0) return false; @@ -1035,6 +1060,7 @@ namespace Mono.Linker.Steps { _typesWithInterfaces.Add (type); if (type.HasMethods) { + MarkMethodsIf (type.Methods, IsVirtualNeededByTypeDueToPreservedScope); if (ShouldMarkTypeStaticConstructor (type)) MarkStaticConstructor (type); @@ -1346,7 +1372,38 @@ namespace Mono.Linker.Steps { MarkType (constraint); } - bool IsVirtualAndHasPreservedParent (MethodDefinition method) + bool IsVirtualNeededByTypeDueToPreservedScope (MethodDefinition method) + { + if (!method.IsVirtual) + return false; + + var base_list = Annotations.GetBaseMethods (method); + if (base_list == null) + return false; + + foreach (MethodDefinition @base in base_list) { + // Just because the type is marked does not mean we need interface methods. + // if the type is never instantiated, interfaces will be removed + if (@base.DeclaringType.IsInterface) + continue; + + // If the type is marked, we need to keep overrides of abstract members defined in assemblies + // that are copied. However, if the base method is virtual, then we don't need to keep the override + // until the type could be instantiated + if (!@base.IsAbstract) + continue; + + if (IgnoreScope (@base.DeclaringType.Scope)) + return true; + + if (IsVirtualNeededByTypeDueToPreservedScope (@base)) + return true; + } + + return false; + } + + bool IsVirtualNeededByInstantiatedTypeDueToPreservedScope (MethodDefinition method) { if (!method.IsVirtual) return false; @@ -1359,7 +1416,7 @@ namespace Mono.Linker.Steps { if (IgnoreScope (@base.DeclaringType.Scope)) return true; - if (IsVirtualAndHasPreservedParent (@base)) + if (IsVirtualNeededByTypeDueToPreservedScope (@base)) return true; } @@ -1683,6 +1740,12 @@ namespace Mono.Linker.Steps { MarkMethod (method); } + protected void MarkIndirectlyCalledMethod (MethodDefinition method) + { + MarkMethod (method); + Annotations.MarkIndirectlyCalledMethod (method); + } + protected virtual MethodDefinition MarkMethod (MethodReference reference) { reference = GetOriginalMethod (reference); @@ -1841,7 +1904,7 @@ namespace Mono.Linker.Steps { foreach (var method in type.Methods) { if (method.IsFinalizer ()) MarkMethod (method); - else if (IsVirtualAndHasPreservedParent (method)) + else if (IsVirtualNeededByInstantiatedTypeDueToPreservedScope (method)) MarkMethod (method); } @@ -1887,23 +1950,47 @@ namespace Mono.Linker.Steps { break; case MethodAction.ConvertToThrow: - if (_context.MarkedKnownMembers.NotSupportedExceptionCtorString != null) - break; - - var nse = BCL.FindPredefinedType ("System", "NotSupportedException", _context); - if (nse == null) - throw new NotSupportedException ("Missing predefined 'System.NotSupportedException' type"); - - MarkType (nse); - - var nseCtor = MarkMethodIf (nse.Methods, KnownMembers.IsNotSupportedExceptionCtorString); - if (nseCtor == null) - throw new MarkException ($"Could not find constructor on '{nse.FullName}'"); - - _context.MarkedKnownMembers.NotSupportedExceptionCtorString = nseCtor; + MarkAndCacheConvertToThrowExceptionCtor (); break; } - } + } + + protected virtual void MarkAndCacheConvertToThrowExceptionCtor () + { + if (_context.MarkedKnownMembers.NotSupportedExceptionCtorString != null) + return; + + var nse = BCL.FindPredefinedType ("System", "NotSupportedException", _context); + if (nse == null) + throw new NotSupportedException ("Missing predefined 'System.NotSupportedException' type"); + + MarkType (nse); + + var nseCtor = MarkMethodIf (nse.Methods, KnownMembers.IsNotSupportedExceptionCtorString); + if (nseCtor == null) + throw new MarkException ($"Could not find constructor on '{nse.FullName}'"); + + _context.MarkedKnownMembers.NotSupportedExceptionCtorString = nseCtor; + } + + bool MarkDisablePrivateReflectionAttribute () + { + if (_context.MarkedKnownMembers.DisablePrivateReflectionAttributeCtor != null) + return false; + + var nse = BCL.FindPredefinedType ("System.Runtime.CompilerServices", "DisablePrivateReflectionAttribute", _context); + if (nse == null) + throw new NotSupportedException ("Missing predefined 'System.Runtime.CompilerServices.DisablePrivateReflectionAttribute' type"); + + MarkType (nse); + + var ctor = MarkMethodIf (nse.Methods, MethodDefinitionExtensions.IsDefaultConstructor); + if (ctor == null) + throw new MarkException ($"Could not find constructor on '{nse.FullName}'"); + + _context.MarkedKnownMembers.DisablePrivateReflectionAttributeCtor = ctor; + return true; + } void MarkBaseMethods (MethodDefinition method) { @@ -2036,6 +2123,12 @@ namespace Mono.Linker.Steps { protected virtual void MarkMethodBody (MethodBody body) { + if (_context.IsOptimizationEnabled (CodeOptimizations.UnreachableBodies) && IsUnreachableBody (body)) { + MarkAndCacheConvertToThrowExceptionCtor (); + _unreachableBodies.Add (body); + return; + } + foreach (VariableDefinition var in body.Variables) MarkType (var.VariableType); @@ -2053,6 +2146,14 @@ namespace Mono.Linker.Steps { PostMarkMethodBody (body); } + bool IsUnreachableBody (MethodBody body) + { + return !body.Method.IsStatic + && !Annotations.IsInstantiated (body.Method.DeclaringType) + && MethodBodyScanner.IsWorthConvertingToThrow (body); + } + + partial void PostMarkMethodBody (MethodBody body); void MarkInterfacesNeededByBodyStack (MethodBody body) @@ -2226,7 +2327,7 @@ namespace Mono.Linker.Steps { if ((bindingFlags == BindingFlags.Default || bindingFlags.IsSet(BindingFlags.Public) == method.IsPublic) && method.Name == ".ctor") { Tracer.Push ($"Reflection-{method}"); try { - MarkMethod (method); + MarkIndirectlyCalledMethod (method); } finally { Tracer.Pop (); } @@ -2244,7 +2345,7 @@ namespace Mono.Linker.Steps { && method.Name == name) { Tracer.Push ($"Reflection-{method}"); try { - MarkMethod (method); + MarkIndirectlyCalledMethod (method); } finally { Tracer.Pop (); } @@ -2264,8 +2365,13 @@ namespace Mono.Linker.Steps { // It is not easy to reliably detect in the IL code whether the getter or setter (or both) are used. // Be conservative and mark everything for the property. MarkProperty (property); - MarkMethodIfNotNull (property.GetMethod); - MarkMethodIfNotNull (property.SetMethod); + + if (property.GetMethod != null) + MarkIndirectlyCalledMethod (property.GetMethod); + + if (property.SetMethod != null) + MarkIndirectlyCalledMethod (property.SetMethod); + } finally { Tracer.Pop (); } diff --git a/external/linker/src/linker/Linker.Steps/OutputStep.cs b/external/linker/src/linker/Linker.Steps/OutputStep.cs index 0e1bbac31b..32c05752ff 100644 --- a/external/linker/src/linker/Linker.Steps/OutputStep.cs +++ b/external/linker/src/linker/Linker.Steps/OutputStep.cs @@ -155,7 +155,10 @@ namespace Mono.Linker.Steps { WriterParameters SaveSymbols (AssemblyDefinition assembly) { - var parameters = new WriterParameters (); + var parameters = new WriterParameters { + DeterministicMvid = Context.DeterministicOutput + }; + if (!Context.LinkSymbols) return parameters; diff --git a/external/linker/src/linker/Linker.Steps/PreserveCalendarsStep.cs b/external/linker/src/linker/Linker.Steps/PreserveCalendarsStep.cs index 37f4e596b2..41c360d042 100644 --- a/external/linker/src/linker/Linker.Steps/PreserveCalendarsStep.cs +++ b/external/linker/src/linker/Linker.Steps/PreserveCalendarsStep.cs @@ -63,6 +63,7 @@ namespace Mono.Linker.Steps { context.Annotations.AddPreservedMethod (calendar, ctor); // we need to mark the type or the above won't be processed context.Annotations.Mark (calendar); + context.Annotations.MarkIndirectlyCalledMethod (ctor); return; } } diff --git a/external/linker/src/linker/Linker.Steps/ReflectionBlockedStep.cs b/external/linker/src/linker/Linker.Steps/ReflectionBlockedStep.cs new file mode 100644 index 0000000000..b11fbf69a9 --- /dev/null +++ b/external/linker/src/linker/Linker.Steps/ReflectionBlockedStep.cs @@ -0,0 +1,67 @@ +using Mono.Cecil; + +namespace Mono.Linker.Steps +{ + public class ReflectionBlockedStep : BaseStep + { + AssemblyDefinition assembly; + + protected override void ProcessAssembly (AssemblyDefinition assembly) + { + this.assembly = assembly; + + foreach (var type in assembly.MainModule.Types) + ProcessType (type); + } + + void ProcessType (TypeDefinition type) + { + if (!HasIndirectCallers (type)) { + AddCustomAttribute (type); + return; + } + + // + // We mark everything, otherwise we would need to check full visibility + // hierarchy (e.g. public method inside private type) + // + foreach (var method in type.Methods) { + if (!Annotations.IsIndirectlyCalled (method)) { + AddCustomAttribute (method); + } + } + + foreach (var nested in type.NestedTypes) + ProcessType (nested); + } + + bool HasIndirectCallers (TypeDefinition type) + { + foreach (var method in type.Methods) { + if (Annotations.IsIndirectlyCalled (method)) + return true; + } + + if (type.HasNestedTypes) { + foreach (var nested in type.NestedTypes) { + if (HasIndirectCallers (nested)) + return true; + } + } + + return false; + } + + void AddCustomAttribute (ICustomAttributeProvider caProvider) + { + // We are using DisableReflectionAttribute which is not exact match but it's quite + // close to what we need and it already exists in the BCL + MethodReference ctor = Context.MarkedKnownMembers.DisablePrivateReflectionAttributeCtor; + ctor = assembly.MainModule.ImportReference (ctor); + + var ca = new CustomAttribute (ctor); + caProvider.CustomAttributes.Add (ca); + Annotations.Mark (ca); + } + } +} \ No newline at end of file diff --git a/external/linker/src/linker/Linker.Steps/RemoveFeaturesStep.cs b/external/linker/src/linker/Linker.Steps/RemoveFeaturesStep.cs index 225472d4f8..90fa2bac66 100644 --- a/external/linker/src/linker/Linker.Steps/RemoveFeaturesStep.cs +++ b/external/linker/src/linker/Linker.Steps/RemoveFeaturesStep.cs @@ -12,6 +12,7 @@ namespace Mono.Linker.Steps public bool FeatureCOM { get; set; } public bool FeatureETW { get; set; } + public bool FeatureSRE { get; set; } // // Manually overrides System.Globalization.Invariant mode @@ -57,6 +58,20 @@ namespace Mono.Linker.Steps ExcludeEventSourceImplementation (type); } + if (FeatureSRE) { + if (type.Namespace == "System" && type.Name == "RuntimeType") { + foreach (var method in type.Methods) { + if (method.Name == "MakeTypeBuilderInstantiation") { + Annotations.SetAction (method, MethodAction.ConvertToThrow); + break; + } + } + } + } + + if (FeatureGlobalization) + ExcludeGlobalization (type); + if (RemoveCustomAttributes (type)) { if (FeatureCOM && type.IsImport) { type.IsImport = false; @@ -76,6 +91,66 @@ namespace Mono.Linker.Steps ProcessType (nested); } + void ExcludeGlobalization (TypeDefinition type) + { + switch (type.Namespace) { + case "System.Globalization": + switch (type.Name) { + case "CalendarData": + foreach (var method in type.Methods) { + switch (method.Name) { + case "GetJapaneseEraNames": + case "GetJapaneseEnglishEraNames": + Annotations.SetAction (method, MethodAction.ConvertToThrow); + break; + } + } + break; + case "DateTimeFormatInfo": + foreach (var method in type.Methods) { + switch (method.Name) { + case "PopulateSpecialTokenHashTable": + case "GetJapaneseCalendarDTFI": + case "GetTaiwanCalendarDTFI": + case "IsJapaneseCalendar": + case "TryParseHebrewNumber": + Annotations.SetAction (method, MethodAction.ConvertToThrow); + break; + } + } + break; + } + break; + case "System": + switch (type.Name) { + case "DateTimeFormat": + foreach (var method in type.Methods) { + switch (method.Name) { + case "HebrewFormatDigits": + case "FormatHebrewMonthName": + Annotations.SetAction (method, MethodAction.ConvertToThrow); + break; + } + } + break; + case "DateTimeParse": + foreach (var method in type.Methods) { + switch (method.Name) { + case "GetJapaneseCalendarDefaultInstance": + case "GetTaiwanCalendarDefaultInstance": + case "ProcessHebrewTerminalState": + case "GetHebrewDayOfNM": + case "MatchHebrewDigits": + Annotations.SetAction (method, MethodAction.ConvertToThrow); + break; + } + } + break; + } + break; + } + } + void ExcludeEventSource (TypeDefinition type) { var annotations = Context.Annotations; @@ -100,7 +175,8 @@ namespace Mono.Linker.Steps continue; } - annotations.SetAction (method, MethodAction.ConvertToThrow); + if (MethodBodyScanner.IsWorthConvertingToThrow (method.Body)) + annotations.SetAction (method, MethodAction.ConvertToThrow); } } @@ -149,7 +225,7 @@ namespace Mono.Linker.Steps continue; } - if (!skip) + if (!skip && MethodBodyScanner.IsWorthConvertingToThrow (method.Body)) annotations.SetAction (method, MethodAction.ConvertToThrow); } } @@ -166,7 +242,8 @@ namespace Mono.Linker.Steps { foreach (var method in type.Methods) { - annotations.SetAction(method, MethodAction.ConvertToThrow); + if (MethodBodyScanner.IsWorthConvertingToThrow (method.Body)) + annotations.SetAction(method, MethodAction.ConvertToThrow); } } diff --git a/external/linker/src/linker/Linker.Steps/ResolveFromXApiStep.cs b/external/linker/src/linker/Linker.Steps/ResolveFromXApiStep.cs index 2dec3a38b4..57e2774008 100644 --- a/external/linker/src/linker/Linker.Steps/ResolveFromXApiStep.cs +++ b/external/linker/src/linker/Linker.Steps/ResolveFromXApiStep.cs @@ -133,6 +133,7 @@ namespace Mono.Linker.Steps void MarkMethod (MethodDefinition method) { InternalMark (method); + Annotations.MarkIndirectlyCalledMethod (method); Annotations.SetAction (method, MethodAction.Parse); } } diff --git a/external/linker/src/linker/Linker.Steps/ResolveFromXmlStep.cs b/external/linker/src/linker/Linker.Steps/ResolveFromXmlStep.cs index b4b3c884d8..faac4f749e 100644 --- a/external/linker/src/linker/Linker.Steps/ResolveFromXmlStep.cs +++ b/external/linker/src/linker/Linker.Steps/ResolveFromXmlStep.cs @@ -434,6 +434,7 @@ namespace Mono.Linker.Steps { Context.LogMessage ($"Duplicate preserve in {_xmlDocumentLocation} of {method.FullName}"); Annotations.Mark (method); + Annotations.MarkIndirectlyCalledMethod (method); Tracer.AddDirectDependency (this, method); Annotations.SetAction (method, MethodAction.Parse); } diff --git a/external/linker/src/linker/Linker.Steps/SweepStep.cs b/external/linker/src/linker/Linker.Steps/SweepStep.cs index 224a33ae67..ac38a27506 100644 --- a/external/linker/src/linker/Linker.Steps/SweepStep.cs +++ b/external/linker/src/linker/Linker.Steps/SweepStep.cs @@ -285,6 +285,9 @@ namespace Mono.Linker.Steps { if (type.HasCustomAttributes) SweepCustomAttributes (type); + if (type.HasGenericParameters) + SweepCustomAttributeCollection (type.GenericParameters); + if (type.HasProperties) SweepCustomAttributeCollection (type.Properties); @@ -312,8 +315,10 @@ namespace Mono.Linker.Steps { { for (int i = type.Interfaces.Count - 1; i >= 0; i--) { var iface = type.Interfaces [i]; - if (Annotations.IsMarked (iface)) + if (Annotations.IsMarked (iface)) { + SweepCustomAttributes (iface); continue; + } InterfaceRemoved (type, iface); type.Interfaces.RemoveAt (i); } @@ -398,13 +403,16 @@ namespace Mono.Linker.Steps { SweepDebugInfo (methods); foreach (var method in methods) { + if (method.HasGenericParameters) + SweepCustomAttributeCollection (method.GenericParameters); + + SweepCustomAttributes (method.MethodReturnType); + if (!method.HasParameters) continue; foreach (var parameter in method.Parameters) SweepCustomAttributes (parameter); - - SweepCustomAttributes (method.MethodReturnType); } } diff --git a/external/linker/src/linker/Linker/Annotations.cs b/external/linker/src/linker/Linker/Annotations.cs index 02b8ddd5dc..ce91191c05 100644 --- a/external/linker/src/linker/Linker/Annotations.cs +++ b/external/linker/src/linker/Linker/Annotations.cs @@ -55,6 +55,8 @@ namespace Mono.Linker { protected readonly HashSet marked_attributes = new HashSet (); readonly HashSet marked_types_with_cctor = new HashSet (); protected readonly HashSet marked_instantiated = new HashSet (); + protected readonly HashSet indirectly_called = new HashSet(); + public AnnotationStore (LinkContext context) => this.context = context; @@ -142,6 +144,24 @@ namespace Mono.Linker { return marked_attributes.Contains (attribute); } + public void MarkIndirectlyCalledMethod (MethodDefinition method) + { + if (!context.AddReflectionAnnotations) + return; + + indirectly_called.Add (method); + } + + public bool HasMarkedAnyIndirectlyCalledMethods () + { + return indirectly_called.Count != 0; + } + + public bool IsIndirectlyCalled (MethodDefinition method) + { + return indirectly_called.Contains (method); + } + public void MarkInstantiated (TypeDefinition type) { marked_instantiated.Add (type); diff --git a/external/linker/src/linker/Linker/AssemblyInfo.cs b/external/linker/src/linker/Linker/AssemblyInfo.cs index 348e29b29b..51252c53dd 100644 --- a/external/linker/src/linker/Linker/AssemblyInfo.cs +++ b/external/linker/src/linker/Linker/AssemblyInfo.cs @@ -30,14 +30,7 @@ using System; using System.Reflection; using System.Runtime.InteropServices; -[assembly: AssemblyTitle ("Mono.Linker")] -[assembly: AssemblyDescription ("Mono CIL Linker")] -[assembly: AssemblyConfiguration ("")] -[assembly: AssemblyProduct ("")] -[assembly: AssemblyCopyright ("(C) 2006, Jb Evain")] [assembly: AssemblyCulture ("")] [assembly: CLSCompliant (false)] [assembly: ComVisible (false)] - -[assembly: AssemblyVersion ("0.2.0.0")] diff --git a/external/linker/src/linker/Linker/AssemblyResolver.cs b/external/linker/src/linker/Linker/AssemblyResolver.cs index 72ac6e2923..5a4299bae9 100644 --- a/external/linker/src/linker/Linker/AssemblyResolver.cs +++ b/external/linker/src/linker/Linker/AssemblyResolver.cs @@ -30,6 +30,7 @@ using System; using System.Collections.Generic; using System.IO; using Mono.Cecil; +using Mono.Collections.Generic; namespace Mono.Linker { @@ -43,6 +44,8 @@ namespace Mono.Linker { HashSet _unresolvedAssemblies; bool _ignoreUnresolved; LinkContext _context; + readonly Collection _references; + public IDictionary AssemblyCache { get { return _assemblies; } @@ -56,6 +59,7 @@ namespace Mono.Linker { public AssemblyResolver (Dictionary assembly_cache) { _assemblies = assembly_cache; + _references = new Collection () { }; } public bool IgnoreUnresolved { @@ -68,12 +72,51 @@ namespace Mono.Linker { set { _context = value; } } +#if !FEATURE_ILLINK + // The base class's definition of GetAssembly is visible when using DirectoryAssemblyResolver. + AssemblyDefinition GetAssembly (string file, ReaderParameters parameters) + { + if (parameters.AssemblyResolver == null) + parameters.AssemblyResolver = this; + + return ModuleDefinition.ReadModule (file, parameters).Assembly; + } +#endif + + AssemblyDefinition ResolveFromReferences (AssemblyNameReference name, Collection references, ReaderParameters parameters) + { + var fileName = name.Name + ".dll"; + foreach (var reference in references) { + if (Path.GetFileName (reference) != fileName) + continue; + try { + return GetAssembly (reference, parameters); + } catch (BadImageFormatException) { + continue; + } + } + + return null; + } + public override AssemblyDefinition Resolve (AssemblyNameReference name, ReaderParameters parameters) { + // Validate arguments, similarly to how the base class does it. + if (name == null) + throw new ArgumentNullException ("name"); + if (parameters == null) + throw new ArgumentNullException ("parameters"); + AssemblyDefinition asm = null; if (!_assemblies.TryGetValue (name.Name, out asm) && (_unresolvedAssemblies == null || !_unresolvedAssemblies.Contains (name.Name))) { try { - asm = base.Resolve (name, parameters); + // Any full path explicit reference takes precedence over other look up logic + asm = ResolveFromReferences (name, _references, parameters); + + // Fall back to the base class resolution logic + if (asm == null) + asm = base.Resolve (name, parameters); + _assemblies [name.Name] = asm; } catch (AssemblyResolutionException) { if (!_ignoreUnresolved) @@ -96,6 +139,11 @@ namespace Mono.Linker { return assembly; } + public void AddReferenceAssembly (string referencePath) + { + _references.Add (referencePath); + } + protected override void Dispose (bool disposing) { foreach (var asm in _assemblies.Values) { diff --git a/external/linker/src/linker/Linker/BCL.cs b/external/linker/src/linker/Linker/BCL.cs index 1c75a056de..1bc1683da6 100644 --- a/external/linker/src/linker/Linker/BCL.cs +++ b/external/linker/src/linker/Linker/BCL.cs @@ -2,7 +2,7 @@ namespace Mono.Linker { - static class BCL + public static class BCL { public static class EventTracingForWindows { @@ -65,9 +65,14 @@ namespace Mono.Linker var cache = context.Resolver.AssemblyCache; AssemblyDefinition corlib; - if (cache.TryGetValue ("mscorlib", out corlib)) - return corlib.MainModule.GetType (ns, name); - + TypeDefinition type = null; + if (cache.TryGetValue ("mscorlib", out corlib)) { + type = corlib.MainModule.GetType (ns, name); + // The assembly could be a facade with type forwarders, in which case we don't find the type in this assembly. + if (type != null) + return type; + } + if (cache.TryGetValue ("System.Private.CoreLib", out corlib)) return corlib.MainModule.GetType (ns, name); diff --git a/external/linker/src/linker/Linker/DirectoryAssemblyResolver.cs b/external/linker/src/linker/Linker/DirectoryAssemblyResolver.cs index 416dab71b5..e3aa534a40 100644 --- a/external/linker/src/linker/Linker/DirectoryAssemblyResolver.cs +++ b/external/linker/src/linker/Linker/DirectoryAssemblyResolver.cs @@ -32,7 +32,7 @@ namespace Mono.Linker { directories = new Collection (2) { "." }; } - AssemblyDefinition GetAssembly (string file, ReaderParameters parameters) + protected AssemblyDefinition GetAssembly (string file, ReaderParameters parameters) { if (parameters.AssemblyResolver == null) parameters.AssemblyResolver = this; @@ -50,7 +50,7 @@ namespace Mono.Linker { if (name == null) throw new ArgumentNullException ("name"); if (parameters == null) - parameters = new ReaderParameters (); + throw new ArgumentNullException ("parameters"); var assembly = SearchDirectory (name, directories, parameters); if (assembly != null) diff --git a/external/linker/src/linker/Linker/Driver.cs b/external/linker/src/linker/Linker/Driver.cs index 3cca83aaff..e01ed250ae 100644 --- a/external/linker/src/linker/Linker/Driver.cs +++ b/external/linker/src/linker/Linker/Driver.cs @@ -157,6 +157,7 @@ namespace Mono.Linker { var custom_steps = new List (); var excluded_features = new HashSet (StringComparer.Ordinal); var disabled_optimizations = new HashSet (StringComparer.Ordinal); + var enabled_optimizations = new HashSet (StringComparer.Ordinal); bool dumpDependencies = false; bool ignoreDescriptors = false; bool removeCAS = true; @@ -218,6 +219,10 @@ namespace Mono.Linker { } continue; + case "--explicit-reflection": + context.AddReflectionAnnotations = true; + continue; + case "--custom-step": custom_steps.Add (GetParam ()); continue; @@ -236,6 +241,23 @@ namespace Mono.Linker { disabled_optimizations.Add (opt); continue; + + case "--enable-opt": + opt = GetParam ().ToLower (); + if (!enabled_optimizations.Contains (opt)) + enabled_optimizations.Add (opt); + + continue; + + case "--new-mvid": + if (!bool.Parse (GetParam())) + p.RemoveStep (typeof (RegenerateGuidStep)); + continue; + + case "--deterministic": + context.DeterministicOutput = true; + p.RemoveStep (typeof (RegenerateGuidStep)); + continue; } switch (token [2]) { @@ -251,6 +273,12 @@ namespace Mono.Linker { } } + // Ensure this does not conflict with '-r' below. + if (token == "-reference") { + context.Resolver.AddReferenceAssembly (GetParam ()); + continue; + } + switch (token [1]) { case 'd': DirectoryInfo info = new DirectoryInfo (GetParam ()); @@ -328,6 +356,9 @@ namespace Mono.Linker { foreach (string custom_step in custom_steps) AddCustomStep (p, custom_step); + if (context.AddReflectionAnnotations) + p.AddStepAfter (typeof (MarkStep), new ReflectionBlockedStep ()); + p.AddStepAfter (typeof (LoadReferencesStep), new LoadI18nAssemblies (assemblies)); if (_needAddBypassNGenStep) { @@ -346,6 +377,7 @@ namespace Mono.Linker { p.AddStepBefore (typeof (MarkStep), new RemoveFeaturesStep () { FeatureCOM = excluded_features.Contains ("com"), FeatureETW = excluded_features.Contains ("etw"), + FeatureSRE = excluded_features.Contains ("sre"), FeatureGlobalization = excluded_features.Contains ("globalization") }); @@ -363,6 +395,19 @@ namespace Mono.Linker { case "overrideremoval": context.DisabledOptimizations |= CodeOptimizations.OverrideRemoval; break; + case "unreachablebodies": + context.DisabledOptimizations |= CodeOptimizations.UnreachableBodies; + break; + } + } + } + + if (enabled_optimizations.Count > 0) { + foreach (var item in enabled_optimizations) { + switch (item) { + case "unreachablebodies": + context.DisabledOptimizations &= ~CodeOptimizations.UnreachableBodies; + break; } } } @@ -456,7 +501,12 @@ namespace Mono.Linker { AssemblyAction ParseAssemblyAction (string s) { var assemblyAction = (AssemblyAction)Enum.Parse(typeof(AssemblyAction), s, true); - _needAddBypassNGenStep = ((assemblyAction == AssemblyAction.AddBypassNGen) || (assemblyAction == AssemblyAction.AddBypassNGenUsed)); + // The AddBypassNGenStep is necessary if any actions (default or per-assembly) are AddBypassNGen(Used). + // We enable this step as soon as we see such an action. Even if subsequent parameters change an action we have + // already seen, the step will only operate on assemblies with a final action AddBypassNGen(Used). + if ((assemblyAction == AssemblyAction.AddBypassNGen) || (assemblyAction == AssemblyAction.AddBypassNGenUsed)) { + _needAddBypassNGenStep = true; + } return assemblyAction; } @@ -494,15 +544,15 @@ namespace Mono.Linker { Console.WriteLine (" -r Link from a list of assemblies using roots visible outside of the assembly"); Console.WriteLine (" -x Link from XML descriptor"); Console.WriteLine (" -d Specify additional directories to search in for references"); + Console.WriteLine (" -reference Specify additional assemblies to use as references"); Console.WriteLine (" -b Update debug symbols for each linked module. Defaults to false"); Console.WriteLine (" -v Keep members and types used by debugger. Defaults to false"); Console.WriteLine (" -l , List of i18n assemblies to copy to the output directory. Defaults to 'all'"); Console.WriteLine (" Valid names are 'none', 'all', 'cjk', 'mideast', 'other', 'rare', 'west'"); + Console.WriteLine (" -out Specify the output directory. Defaults to 'output'"); Console.WriteLine (" --about About the {0}", _linker); Console.WriteLine (" --verbose Log messages indicating progress and warnings"); Console.WriteLine (" --version Print the version number of the {0}", _linker); - Console.WriteLine (" --skip-unresolved Ignore unresolved types, methods, and assemblies. Defaults to false"); - Console.WriteLine (" -out Specify the output directory. Defaults to 'output'"); Console.WriteLine (); Console.WriteLine ("Actions"); @@ -519,9 +569,11 @@ namespace Mono.Linker { Console.WriteLine (); Console.WriteLine ("Advanced"); Console.WriteLine (" --custom-step Add a custom step to the pipeline"); + Console.WriteLine (" --deterministic Produce a deterministic output for linked assemblies"); Console.WriteLine (" --disable-opt Disable one of the default optimizations"); Console.WriteLine (" beforefieldinit: Unused static fields are removed if there is no static ctor"); Console.WriteLine (" overrideremoval: Overrides of virtual methods on types that are never instantiated are removed"); + Console.WriteLine (" unreachablebodies: Instance methods that are marked but can never be entered are converted to throws"); Console.WriteLine (" --exclude-feature Any code which has a feature in linked assemblies will be removed"); Console.WriteLine (" com: Support for COM Interop"); Console.WriteLine (" etw: Event Tracing for Windows"); @@ -531,9 +583,11 @@ namespace Mono.Linker { Console.WriteLine (" --ignore-descriptors Skips reading embedded descriptors (short -z). Defaults to false"); Console.WriteLine (" --keep-facades Keep assemblies with type-forwarders (short -t). Defaults to false"); Console.WriteLine (" --new-mvid Generate a new guid for each linked assembly (short -g). Defaults to true"); + Console.WriteLine (" --skip-unresolved Ignore unresolved types, methods, and assemblies. Defaults to false"); Console.WriteLine (" --strip-resources Remove XML descriptor resources for linked assemblies. Defaults to true"); Console.WriteLine (" --strip-security Remove metadata and code related to Code Access Security. Defaults to true"); Console.WriteLine (" --used-attrs-only Any attribute is removed if the attribute type is not used. Defaults to false"); + Console.WriteLine (" --explicit-reflection Adds to members never used through reflection DisablePrivateReflection attribute. Defaults to false"); Console.WriteLine (); Console.WriteLine ("Analyzer"); diff --git a/external/linker/src/linker/Linker/KnownMembers.cs b/external/linker/src/linker/Linker/KnownMembers.cs index 7b2a66d1b9..274d4490d1 100644 --- a/external/linker/src/linker/Linker/KnownMembers.cs +++ b/external/linker/src/linker/Linker/KnownMembers.cs @@ -4,7 +4,8 @@ namespace Mono.Linker { public class KnownMembers { - public MethodReference NotSupportedExceptionCtorString { get; set; } + public MethodDefinition NotSupportedExceptionCtorString { get; set; } + public MethodDefinition DisablePrivateReflectionAttributeCtor { get; set; } public static bool IsNotSupportedExceptionCtorString (MethodDefinition method) { diff --git a/external/linker/src/linker/Linker/LinkContext.cs b/external/linker/src/linker/Linker/LinkContext.cs index 1925eb229e..cdce695a32 100644 --- a/external/linker/src/linker/Linker/LinkContext.cs +++ b/external/linker/src/linker/Linker/LinkContext.cs @@ -69,6 +69,8 @@ namespace Mono.Linker { get { return _annotations; } } + public bool DeterministicOutput { get; set; } + public string OutputDirectory { get { return _outputDirectory; } set { _outputDirectory = value; } @@ -149,6 +151,8 @@ namespace Mono.Linker { public CodeOptimizations DisabledOptimizations { get; set; } + public bool AddReflectionAnnotations { get; set; } + public LinkContext (Pipeline pipeline) : this (pipeline, new AssemblyResolver ()) { @@ -181,6 +185,9 @@ namespace Mono.Linker { Tracer = factory.CreateTracer (this); MarkedKnownMembers = new KnownMembers (); StripResources = true; + + // See https://github.com/mono/linker/issues/612 + DisabledOptimizations |= CodeOptimizations.UnreachableBodies; } public TypeDefinition GetType (string fullName) @@ -206,8 +213,12 @@ namespace Mono.Linker { public AssemblyDefinition Resolve (string name) { if (File.Exists (name)) { - AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly (name, _readerParameters); - return _resolver.CacheAssembly (assembly); + try { + AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly (name, _readerParameters); + return _resolver.CacheAssembly (assembly); + } catch (Exception e) { + throw new AssemblyResolutionException (new AssemblyNameReference (name, new Version ()), e); + } } return Resolve (new AssemblyNameReference (name, new Version ())); @@ -293,9 +304,13 @@ namespace Mono.Linker { return reference; } - public void SetAction(AssemblyDefinition assembly, AssemblyAction action) + public void SetAction (AssemblyDefinition assembly, AssemblyAction defaultAction) { RegisterAssembly (assembly); + + if (!_actions.TryGetValue (assembly.Name.Name, out AssemblyAction action)) + action = defaultAction; + Annotations.SetAction (assembly, action); } @@ -401,5 +416,10 @@ namespace Mono.Linker { /// that do not get an instance constructor marked. /// OverrideRemoval = 1 << 1, + + /// + /// Option to disable delaying marking of instance methods until an instance of that type could exist + /// + UnreachableBodies = 1 << 2 } } diff --git a/external/linker/src/linker/Linker/MethodBodyScanner.cs b/external/linker/src/linker/Linker/MethodBodyScanner.cs index 09d672a935..c9b5d0379e 100644 --- a/external/linker/src/linker/Linker/MethodBodyScanner.cs +++ b/external/linker/src/linker/Linker/MethodBodyScanner.cs @@ -6,6 +6,49 @@ using Mono.Cecil.Cil; namespace Mono.Linker { public static class MethodBodyScanner { + public static bool IsWorthConvertingToThrow (MethodBody body) + { + // Some bodies are cheaper size wise to leave alone than to convert to a throw + Instruction previousMeaningful = null; + int meaningfulCount = 0; + foreach (var ins in body.Instructions) { + // Handle ignoring noops because because (1) it's a valid case to ignore + // and (2) When running the tests on .net core roslyn tosses in no ops + // and that leads to a difference in test results between mcs and .net framework csc. + if (ins.OpCode.Code == Code.Nop) + continue; + + meaningfulCount++; + + if (meaningfulCount == 1 && ins.OpCode.Code == Code.Ret) + return false; + + if (meaningfulCount == 2 && ins.OpCode.Code == Code.Ret && previousMeaningful != null) { + if (previousMeaningful.OpCode.StackBehaviourPop == StackBehaviour.Pop0) { + switch (previousMeaningful.OpCode.StackBehaviourPush) { + case StackBehaviour.Pushi: + case StackBehaviour.Pushi8: + case StackBehaviour.Pushr4: + case StackBehaviour.Pushr8: + return false; + } + + switch (previousMeaningful.OpCode.Code) { + case Code.Ldnull: + return false; + } + } + } + + if (meaningfulCount >= 2) + return true; + + previousMeaningful = ins; + } + + return true; + } + public static IEnumerable GetReferencedInterfaces (AnnotationStore annotations, MethodBody body) { var possibleStackTypes = AllPossibleStackTypes (body.Method); diff --git a/external/linker/src/linker/Linker/MethodDefinitionExtensions.cs b/external/linker/src/linker/Linker/MethodDefinitionExtensions.cs index c448a4d11f..078ce01366 100644 --- a/external/linker/src/linker/Linker/MethodDefinitionExtensions.cs +++ b/external/linker/src/linker/Linker/MethodDefinitionExtensions.cs @@ -2,7 +2,7 @@ namespace Mono.Linker { - static class MethodDefinitionExtensions + public static class MethodDefinitionExtensions { public static bool IsDefaultConstructor (this MethodDefinition method) { @@ -29,5 +29,17 @@ namespace Mono.Linker return true; } + + public static void ClearDebugInformation (this MethodDefinition method) + { + // TODO: This always allocates, update when Cecil catches up + var di = method.DebugInformation; + di.SequencePoints.Clear (); + if (di.Scope != null) { + di.Scope.Variables.Clear (); + di.Scope.Constants.Clear (); + di.Scope = null; + } + } } } diff --git a/external/linker/src/linker/Linker/MethodReferenceExtensions.cs b/external/linker/src/linker/Linker/MethodReferenceExtensions.cs index 4d09a3609a..23558db44d 100644 --- a/external/linker/src/linker/Linker/MethodReferenceExtensions.cs +++ b/external/linker/src/linker/Linker/MethodReferenceExtensions.cs @@ -3,7 +3,7 @@ using Mono.Cecil; namespace Mono.Linker { - static class MethodReferenceExtensions + public static class MethodReferenceExtensions { public static TypeReference GetReturnType (this MethodReference method) { diff --git a/external/linker/src/linker/Linker/TypeReferenceExtensions.cs b/external/linker/src/linker/Linker/TypeReferenceExtensions.cs index 1f28e8e6ab..13d9db7aa9 100644 --- a/external/linker/src/linker/Linker/TypeReferenceExtensions.cs +++ b/external/linker/src/linker/Linker/TypeReferenceExtensions.cs @@ -1,10 +1,11 @@ -using Mono.Cecil; +using System; +using Mono.Cecil; using System.Collections.Generic; using System.Linq; namespace Mono.Linker { - static class TypeReferenceExtensions + public static class TypeReferenceExtensions { public static TypeReference GetInflatedBaseType (this TypeReference type) { @@ -214,5 +215,21 @@ namespace Mono.Linker return false; } + + public static MethodReference GetDefaultInstanceConstructor (this TypeReference type) + { + foreach (var m in type.GetMethods ()) { + if (m.HasParameters) + continue; + + var definition = m.Resolve (); + if (!definition.IsDefaultConstructor ()) + continue; + + return m; + } + + throw new NotImplementedException (); + } } } diff --git a/external/linker/src/linker/Mono.Linker.csproj b/external/linker/src/linker/Mono.Linker.csproj index dd3d324e31..169c54b27e 100644 --- a/external/linker/src/linker/Mono.Linker.csproj +++ b/external/linker/src/linker/Mono.Linker.csproj @@ -1,63 +1,38 @@ - - - - - true - false - + + illink + IL Linker + $(DefineConstants);FEATURE_ILLINK + + netcoreapp2.0 + netcoreapp2.0 - + + + monolinker + Mono.Linker + Mono CIL Linker + net462 + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46} Exe - Properties + false Mono - monolinker - illink - v4.6.2 + (C) 2006, Jb Evain + 0.2.0.0 - - True - full - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 + + + true + false - - pdbonly - True - bin\Release\ - TRACE - prompt - 4 + + + true - - - - - - - + @@ -107,34 +82,29 @@ + + - - + + + - - - Configuration=netstandard_Debug - Configuration=net_4_0_Debug - Configuration=netstandard_Release - Configuration=net_4_0_Release - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - - - Configuration=netstandard_Debug - Configuration=netstandard_Release - {8559dd7f-a16f-46d0-a05a-9139faeba8fd} - Mono.Cecil.Mdb - - - Configuration=netstandard_Debug - Configuration=netstandard_Release - {63E6915C-7EA4-4D76-AB28-0D7191EEA626} - Mono.Cecil.Pdb - - - \ No newline at end of file + + + + + + + + + + diff --git a/external/linker/src/linker/app.config b/external/linker/src/linker/app.config deleted file mode 100644 index 2a0024f75e..0000000000 --- a/external/linker/src/linker/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/external/linker/src/linker/runtimeconfig.template.json b/external/linker/src/linker/runtimeconfig.template.json new file mode 100644 index 0000000000..0095a96b3f --- /dev/null +++ b/external/linker/src/linker/runtimeconfig.template.json @@ -0,0 +1,3 @@ +{ + "rollForwardOnNoCandidateFx": 2 +} diff --git a/external/llvm/CMakeLists.txt b/external/llvm/CMakeLists.txt index 01288b9907..7eba9a34dd 100644 --- a/external/llvm/CMakeLists.txt +++ b/external/llvm/CMakeLists.txt @@ -30,7 +30,7 @@ if(NOT DEFINED LLVM_VERSION_SUFFIX) set(LLVM_VERSION_SUFFIX "") endif() -set(MONO_API_VERSION 600) +set(MONO_API_VERSION 610) if (NOT PACKAGE_VERSION) set(PACKAGE_VERSION diff --git a/external/llvm/include/llvm/CodeGen/GCs.h b/external/llvm/include/llvm/CodeGen/GCs.h index 5207f801c8..e0e25cb941 100644 --- a/external/llvm/include/llvm/CodeGen/GCs.h +++ b/external/llvm/include/llvm/CodeGen/GCs.h @@ -24,6 +24,9 @@ class GCMetadataPrinter; /// Creates a CoreCLR-compatible garbage collector. void linkCoreCLRGC(); +/// Creates a Mono-compatible garbage collector. +void linkMonoGC(); + /// Creates an ocaml-compatible garbage collector. void linkOcamlGC(); diff --git a/external/llvm/include/llvm/CodeGen/LinkAllCodegenComponents.h b/external/llvm/include/llvm/CodeGen/LinkAllCodegenComponents.h index fee131e4a3..836276e5da 100644 --- a/external/llvm/include/llvm/CodeGen/LinkAllCodegenComponents.h +++ b/external/llvm/include/llvm/CodeGen/LinkAllCodegenComponents.h @@ -37,6 +37,7 @@ namespace { (void) llvm::createDefaultPBQPRegisterAllocator(); llvm::linkCoreCLRGC(); + llvm::linkMonoGC(); llvm::linkOcamlGC(); llvm::linkErlangGC(); llvm::linkShadowStackGC(); diff --git a/external/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/external/llvm/include/llvm/CodeGen/MachineBasicBlock.h index 0c9110cbaa..89210e1662 100644 --- a/external/llvm/include/llvm/CodeGen/MachineBasicBlock.h +++ b/external/llvm/include/llvm/CodeGen/MachineBasicBlock.h @@ -449,6 +449,13 @@ public: /// Replace successor OLD with NEW and update probability info. void replaceSuccessor(MachineBasicBlock *Old, MachineBasicBlock *New); + /// Copy a successor (and any probability info) from original block to this + /// block's. Uses an iterator into the original blocks successors. + /// + /// This is useful when doing a partial clone of successors. Afterward, the + /// probabilities may need to be normalized. + void copySuccessor(MachineBasicBlock *Orig, succ_iterator I); + /// Transfers all the successors from MBB to this machine basic block (i.e., /// copies all the successors FromMBB and remove all the successors from /// FromMBB). diff --git a/external/llvm/include/llvm/IR/IntrinsicsPowerPC.td b/external/llvm/include/llvm/IR/IntrinsicsPowerPC.td index 6321bb81b8..a302d5726a 100644 --- a/external/llvm/include/llvm/IR/IntrinsicsPowerPC.td +++ b/external/llvm/include/llvm/IR/IntrinsicsPowerPC.td @@ -36,8 +36,12 @@ let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". // Intrinsics used to generate ctr-based loops. These should only be // generated by the PowerPC backend! + // The branch intrinsic is marked as NoDuplicate because loop rotation will + // attempt to duplicate it forming loops where a block reachable from one + // instance of it can contain another. def int_ppc_mtctr : Intrinsic<[], [llvm_anyint_ty], []>; - def int_ppc_is_decremented_ctr_nonzero : Intrinsic<[llvm_i1_ty], [], []>; + def int_ppc_is_decremented_ctr_nonzero : + Intrinsic<[llvm_i1_ty], [], [IntrNoDuplicate]>; // Intrinsics for [double]word extended forms of divide instructions def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">, diff --git a/external/llvm/lib/CodeGen/AsmPrinter/MonoException.cpp b/external/llvm/lib/CodeGen/AsmPrinter/MonoException.cpp index 7baf01e584..b0dae0a162 100644 --- a/external/llvm/lib/CodeGen/AsmPrinter/MonoException.cpp +++ b/external/llvm/lib/CodeGen/AsmPrinter/MonoException.cpp @@ -254,8 +254,7 @@ MonoException::~MonoException() void MonoException::beginFunction(const MachineFunction *MF) { - if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM) - static_cast(Asm->OutStreamer->getTargetStreamer())->emitFnStart(); + EmitFnStart(); EHLabels.clear(); } @@ -363,6 +362,20 @@ MonoException::PrepareMonoLSDA(EHInfo *info) } } +void +MonoException::EmitFnStart(void) +{ + if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM) + static_cast(Asm->OutStreamer->getTargetStreamer())->emitFnStart(); +} + +void +MonoException::EmitFnEnd(void) +{ + if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM) + static_cast(Asm->OutStreamer->getTargetStreamer())->emitFnEnd(); +} + void MonoException::endFunction(const MachineFunction *MF) { @@ -390,8 +403,10 @@ MonoException::endFunction(const MachineFunction *MF) int monoMethodIdx = FuncIndexes.lookup (Asm->MF->getFunction ().getName ()) - 1; - if (monoMethodIdx == -1) + if (monoMethodIdx == -1) { + EmitFnEnd (); return; + } //outs () << "D: " << Asm->MF->getFunction()->getName() << " " << monoMethodIdx << "\n"; @@ -416,8 +431,7 @@ MonoException::endFunction(const MachineFunction *MF) Frames.push_back(info); EHLabels.clear(); - if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM) - static_cast(Asm->OutStreamer->getTargetStreamer())->emitFnEnd(); + EmitFnEnd (); } /// EmitMonoLSDA - Mono's version of EmitExceptionTable diff --git a/external/llvm/lib/CodeGen/AsmPrinter/MonoException.h b/external/llvm/lib/CodeGen/AsmPrinter/MonoException.h index 971913d2d5..9a613f615f 100644 --- a/external/llvm/lib/CodeGen/AsmPrinter/MonoException.h +++ b/external/llvm/lib/CodeGen/AsmPrinter/MonoException.h @@ -67,6 +67,8 @@ private: void PrepareMonoLSDA(EHInfo *info); void EmitMonoLSDA(const EHInfo *info); + void EmitFnStart(); + void EmitFnEnd(); std::vector EHLabels; std::vector Frames; diff --git a/external/llvm/lib/CodeGen/BuiltinGCs.cpp b/external/llvm/lib/CodeGen/BuiltinGCs.cpp index abac555d66..1f772b240c 100644 --- a/external/llvm/lib/CodeGen/BuiltinGCs.cpp +++ b/external/llvm/lib/CodeGen/BuiltinGCs.cpp @@ -122,6 +122,20 @@ public: } }; +/// A GCStrategy for the Mono Runtime. +class MonoGC : public GCStrategy { +public: + MonoGC() { + UseStatepoints = true; + // These options are all gc.root specific, we specify them so that the + // gc.root lowering code doesn't run. + InitRoots = false; + NeededSafePoints = 0; + UsesMetadata = false; + CustomRoots = false; + } +}; + } // end anonymous namespace // Register all the above so that they can be found at runtime. Note that @@ -135,6 +149,7 @@ static GCRegistry::Add static GCRegistry::Add D("statepoint-example", "an example strategy for statepoint"); static GCRegistry::Add E("coreclr", "CoreCLR-compatible GC"); +static GCRegistry::Add F("mono", "Mono-compatible GC"); // Provide hooks to ensure the containing library is fully loaded. void llvm::linkErlangGC() {} @@ -142,3 +157,4 @@ void llvm::linkOcamlGC() {} void llvm::linkShadowStackGC() {} void llvm::linkStatepointExampleGC() {} void llvm::linkCoreCLRGC() {} +void llvm::linkMonoGC() {} diff --git a/external/llvm/lib/CodeGen/IfConversion.cpp b/external/llvm/lib/CodeGen/IfConversion.cpp index a22ce0dab9..d8ce90e63a 100644 --- a/external/llvm/lib/CodeGen/IfConversion.cpp +++ b/external/llvm/lib/CodeGen/IfConversion.cpp @@ -1714,20 +1714,25 @@ bool IfConverter::IfConvertDiamondCommon( } // Remove the duplicated instructions at the beginnings of both paths. - // Skip dbg_value instructions + // Skip dbg_value instructions. MachineBasicBlock::iterator DI1 = MBB1.getFirstNonDebugInstr(); MachineBasicBlock::iterator DI2 = MBB2.getFirstNonDebugInstr(); BBI1->NonPredSize -= NumDups1; BBI2->NonPredSize -= NumDups1; // Skip past the dups on each side separately since there may be - // differing dbg_value entries. + // differing dbg_value entries. NumDups1 can include a "return" + // instruction, if it's not marked as "branch". for (unsigned i = 0; i < NumDups1; ++DI1) { + if (DI1 == MBB1.end()) + break; if (!DI1->isDebugValue()) ++i; } while (NumDups1 != 0) { ++DI2; + if (DI2 == MBB2.end()) + break; if (!DI2->isDebugValue()) --NumDups1; } @@ -1738,11 +1743,16 @@ bool IfConverter::IfConvertDiamondCommon( Redefs.stepForward(MI, Dummy); } } + BBI.BB->splice(BBI.BB->end(), &MBB1, MBB1.begin(), DI1); MBB2.erase(MBB2.begin(), DI2); - // The branches have been checked to match, so it is safe to remove the branch - // in BB1 and rely on the copy in BB2 + // The branches have been checked to match, so it is safe to remove the + // branch in BB1 and rely on the copy in BB2. The complication is that + // the blocks may end with a return instruction, which may or may not + // be marked as "branch". If it's not, then it could be included in + // "dups1", leaving the blocks potentially empty after moving the common + // duplicates. #ifndef NDEBUG // Unanalyzable branches must match exactly. Check that now. if (!BBI1->IsBrAnalyzable) @@ -1768,11 +1778,14 @@ bool IfConverter::IfConvertDiamondCommon( if (RemoveBranch) BBI2->NonPredSize -= TII->removeBranch(*BBI2->BB); else { - do { - assert(DI2 != MBB2.begin()); - DI2--; - } while (DI2->isBranch() || DI2->isDebugValue()); - DI2++; + // Make DI2 point to the end of the range where the common "tail" + // instructions could be found. + while (DI2 != MBB2.begin()) { + MachineBasicBlock::iterator Prev = std::prev(DI2); + if (!Prev->isBranch() && !Prev->isDebugValue()) + break; + DI2 = Prev; + } } while (NumDups2 != 0) { // NumDups2 only counted non-dbg_value instructions, so this won't @@ -1833,11 +1846,15 @@ bool IfConverter::IfConvertDiamondCommon( // a non-predicated in BBI2, then we don't want to predicate the one from // BBI2. The reason is that if we merged these blocks, we would end up with // two predicated terminators in the same block. + // Also, if the branches in MBB1 and MBB2 were non-analyzable, then don't + // predicate them either. They were checked to be identical, and so the + // same branch would happen regardless of which path was taken. if (!MBB2.empty() && (DI2 == MBB2.end())) { MachineBasicBlock::iterator BBI1T = MBB1.getFirstTerminator(); MachineBasicBlock::iterator BBI2T = MBB2.getFirstTerminator(); - if (BBI1T != MBB1.end() && TII->isPredicated(*BBI1T) && - BBI2T != MBB2.end() && !TII->isPredicated(*BBI2T)) + bool BB1Predicated = BBI1T != MBB1.end() && TII->isPredicated(*BBI1T); + bool BB2NonPredicated = BBI2T != MBB2.end() && !TII->isPredicated(*BBI2T); + if (BB2NonPredicated && (BB1Predicated || !BBI2->IsBrAnalyzable)) --DI2; } diff --git a/external/llvm/lib/CodeGen/MachineBasicBlock.cpp b/external/llvm/lib/CodeGen/MachineBasicBlock.cpp index 209abf34d8..cd67449e3a 100644 --- a/external/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/external/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -646,6 +646,14 @@ void MachineBasicBlock::replaceSuccessor(MachineBasicBlock *Old, removeSuccessor(OldI); } +void MachineBasicBlock::copySuccessor(MachineBasicBlock *Orig, + succ_iterator I) { + if (Orig->Probs.empty()) + addSuccessor(*I, Orig->getSuccProbability(I)); + else + addSuccessorWithoutProb(*I); +} + void MachineBasicBlock::addPredecessor(MachineBasicBlock *Pred) { Predecessors.push_back(Pred); } diff --git a/external/llvm/lib/CodeGen/MachineBlockPlacement.cpp.REMOVED.git-id b/external/llvm/lib/CodeGen/MachineBlockPlacement.cpp.REMOVED.git-id index 136cc29bd3..fba01a7cc1 100644 --- a/external/llvm/lib/CodeGen/MachineBlockPlacement.cpp.REMOVED.git-id +++ b/external/llvm/lib/CodeGen/MachineBlockPlacement.cpp.REMOVED.git-id @@ -1 +1 @@ -84c808ee79384e97d654aaf92c19da99349d5089 \ No newline at end of file +167135b56ec08d4c417c661972e2470f2d2270fc \ No newline at end of file diff --git a/external/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/external/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp index c0047d0cde..2c57eee191 100644 --- a/external/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp +++ b/external/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp @@ -1422,7 +1422,8 @@ RuntimeDyldELF::processRelocationRef( SectionEntry &Section = Sections[SectionID]; uint8_t *Target = Section.getAddressWithOffset(Offset); bool RangeOverflow = false; - if (!Value.SymbolName && SymType != SymbolRef::ST_Unknown) { + bool IsExtern = Value.SymbolName || SymType == SymbolRef::ST_Unknown; + if (!IsExtern) { if (AbiVariant != 2) { // In the ELFv1 ABI, a function call may point to the .opd entry, // so the final symbol value is calculated based on the relocation @@ -1432,21 +1433,24 @@ RuntimeDyldELF::processRelocationRef( } else { // In the ELFv2 ABI, a function symbol may provide a local entry // point, which must be used for direct calls. - uint8_t SymOther = Symbol->getOther(); - Value.Addend += ELF::decodePPC64LocalEntryOffset(SymOther); + if (Value.SectionID == SectionID){ + uint8_t SymOther = Symbol->getOther(); + Value.Addend += ELF::decodePPC64LocalEntryOffset(SymOther); + } } uint8_t *RelocTarget = Sections[Value.SectionID].getAddressWithOffset(Value.Addend); int64_t delta = static_cast(Target - RelocTarget); // If it is within 26-bits branch range, just set the branch target - if (SignExtend64<26>(delta) == delta) { + if (SignExtend64<26>(delta) != delta) { + RangeOverflow = true; + } else if ((AbiVariant != 2) || + (AbiVariant == 2 && Value.SectionID == SectionID)) { RelocationEntry RE(SectionID, Offset, RelType, Value.Addend); addRelocationForSection(RE, Value.SectionID); - } else { - RangeOverflow = true; } } - if (Value.SymbolName || SymType == SymbolRef::ST_Unknown || + if (IsExtern || (AbiVariant == 2 && Value.SectionID != SectionID) || RangeOverflow) { // It is an external symbol (either Value.SymbolName is set, or // SymType is SymbolRef::ST_Unknown) or out of range. @@ -1503,10 +1507,10 @@ RuntimeDyldELF::processRelocationRef( RelType, 0); Section.advanceStubOffset(getMaxStubSize()); } - if (Value.SymbolName || SymType == SymbolRef::ST_Unknown) { + if (IsExtern || (AbiVariant == 2 && Value.SectionID != SectionID)) { // Restore the TOC for external calls if (AbiVariant == 2) - writeInt32BE(Target + 4, 0xE8410018); // ld r2,28(r1) + writeInt32BE(Target + 4, 0xE8410018); // ld r2,24(r1) else writeInt32BE(Target + 4, 0xE8410028); // ld r2,40(r1) } diff --git a/external/llvm/lib/IR/Core.cpp.REMOVED.git-id b/external/llvm/lib/IR/Core.cpp.REMOVED.git-id index e4ffeb69d5..191432254a 100644 --- a/external/llvm/lib/IR/Core.cpp.REMOVED.git-id +++ b/external/llvm/lib/IR/Core.cpp.REMOVED.git-id @@ -1 +1 @@ -d3c33edec18678ed71afabbb48c58ea7cf935cd9 \ No newline at end of file +743e3710fd68217eb6053cdcfb0d36bee2993927 \ No newline at end of file diff --git a/external/llvm/lib/MC/MCObjectFileInfo.cpp b/external/llvm/lib/MC/MCObjectFileInfo.cpp index a6b5c43f1d..328f000f37 100644 --- a/external/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/external/llvm/lib/MC/MCObjectFileInfo.cpp @@ -289,6 +289,8 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) { case Triple::mips64el: FDECFIEncoding = dwarf::DW_EH_PE_sdata8; break; + case Triple::ppc64: + case Triple::ppc64le: case Triple::x86_64: FDECFIEncoding = dwarf::DW_EH_PE_pcrel | (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4); diff --git a/external/llvm/lib/Support/CMakeLists.txt b/external/llvm/lib/Support/CMakeLists.txt index d968688911..6439d16a2a 100644 --- a/external/llvm/lib/Support/CMakeLists.txt +++ b/external/llvm/lib/Support/CMakeLists.txt @@ -13,8 +13,13 @@ elseif( CMAKE_HOST_UNIX ) if( HAVE_LIBDL ) set(system_libs ${system_libs} ${CMAKE_DL_LIBS}) endif() - if( HAVE_BACKTRACE ) - set(system_libs ${system_libs} ${Backtrace_LIBRARIES}) + if( HAVE_BACKTRACE AND NOT "${Backtrace_LIBRARIES}" STREQUAL "" ) + # On BSDs, CMake returns a fully qualified path to the backtrace library. + # We need to remove the path and the 'lib' prefix, to make it look like a + # regular short library name, suitable for appending to a -l link flag. + get_filename_component(Backtrace_LIBFILE ${Backtrace_LIBRARIES} NAME_WE) + STRING(REGEX REPLACE "^lib" "" Backtrace_LIBFILE ${Backtrace_LIBFILE}) + set(system_libs ${system_libs} ${Backtrace_LIBFILE}) endif() if(LLVM_ENABLE_TERMINFO) if(HAVE_TERMINFO) diff --git a/external/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/external/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp index 2ff2ee347f..6704fa27c8 100644 --- a/external/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp +++ b/external/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp @@ -299,6 +299,11 @@ void AArch64AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNum, printOffset(MO.getOffset(), O); break; } + case MachineOperand::MO_BlockAddress: { + MCSymbol *Sym = GetBlockAddressSymbol(MO.getBlockAddress()); + Sym->print(O, MAI); + break; + } } } diff --git a/external/llvm/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp b/external/llvm/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp index d1ddb2e3ef..0d00dab598 100644 --- a/external/llvm/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp +++ b/external/llvm/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp @@ -46,6 +46,7 @@ #include "llvm/Pass.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/DebugCounter.h" #include "llvm/Support/raw_ostream.h" #include #include @@ -60,6 +61,8 @@ STATISTIC(NumCollisionsAvoided, "Number of HW prefetch tag collisions avoided"); STATISTIC(NumCollisionsNotAvoided, "Number of HW prefetch tag collisions not avoided due to lack of regsiters"); +DEBUG_COUNTER(FixCounter, "falkor-hwpf", + "Controls which tag collisions are avoided"); namespace { @@ -729,6 +732,21 @@ void FalkorHWPFFix::runOnLoop(MachineLoop &L, MachineFunction &Fn) { bool Fixed = false; DEBUG(dbgs() << "Attempting to fix tag collision: " << MI); + if (!DebugCounter::shouldExecute(FixCounter)) { + DEBUG(dbgs() << "Skipping fix due to debug counter:\n " << MI); + continue; + } + + // Add the non-base registers of MI as live so we don't use them as + // scratch registers. + for (unsigned OpI = 0, OpE = MI.getNumOperands(); OpI < OpE; ++OpI) { + if (OpI == static_cast(LdI.BaseRegIdx)) + continue; + MachineOperand &MO = MI.getOperand(OpI); + if (MO.isReg() && MO.readsReg()) + LR.addReg(MO.getReg()); + } + for (unsigned ScratchReg : AArch64::GPR64RegClass) { if (!LR.available(ScratchReg) || MRI.isReserved(ScratchReg)) continue; diff --git a/external/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/external/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp index d66f7b59a4..789200b284 100644 --- a/external/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp +++ b/external/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp @@ -917,6 +917,8 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF, int FPOffset = MFI.getObjectOffset(FI) + FixedObject + 16; int Offset = MFI.getObjectOffset(FI) + MFI.getStackSize(); bool isFixed = MFI.isFixedObjectIndex(FI); + bool isCSR = !isFixed && MFI.getObjectOffset(FI) >= + -((int)AFI->getCalleeSavedStackSize()); // Use frame pointer to reference fixed objects. Use it for locals if // there are VLAs or a dynamically realigned SP (and thus the SP isn't @@ -930,6 +932,12 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF, // Argument access should always use the FP. if (isFixed) { UseFP = hasFP(MF); + } else if (isCSR && RegInfo->needsStackRealignment(MF)) { + // References to the CSR area must use FP if we're re-aligning the stack + // since the dynamically-sized alignment padding is between the SP/BP and + // the CSR area. + assert(hasFP(MF) && "Re-aligned stack must have frame pointer"); + UseFP = true; } else if (hasFP(MF) && !RegInfo->hasBasePointer(MF) && !RegInfo->needsStackRealignment(MF)) { // Use SP or FP, whichever gives us the best chance of the offset @@ -947,9 +955,9 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF, } } - assert((isFixed || !RegInfo->needsStackRealignment(MF) || !UseFP) && + assert(((isFixed || isCSR) || !RegInfo->needsStackRealignment(MF) || !UseFP) && "In the presence of dynamic stack pointer realignment, " - "non-argument objects cannot be accessed through the frame pointer"); + "non-argument/CSR objects cannot be accessed through the frame pointer"); if (UseFP) { FrameReg = RegInfo->getFrameRegister(MF); diff --git a/external/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp.REMOVED.git-id b/external/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp.REMOVED.git-id index 4afeb31f6d..5e5214a226 100644 --- a/external/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp.REMOVED.git-id @@ -1 +1 @@ -9a021c751eec90145bb1ee521df8e93258028de5 \ No newline at end of file +3fa5457b4e0cd4affafb6c28aff7b0e1156bc74c \ No newline at end of file diff --git a/external/llvm/lib/Target/AArch64/AArch64InstrInfo.td.REMOVED.git-id b/external/llvm/lib/Target/AArch64/AArch64InstrInfo.td.REMOVED.git-id index 437a9fbc41..4f889f7a25 100644 --- a/external/llvm/lib/Target/AArch64/AArch64InstrInfo.td.REMOVED.git-id +++ b/external/llvm/lib/Target/AArch64/AArch64InstrInfo.td.REMOVED.git-id @@ -1 +1 @@ -79826ca2ed8dc6f3d0f111508f3cb638fe2f4281 \ No newline at end of file +040011d858e771021341f098d0f852310aba87f1 \ No newline at end of file diff --git a/external/llvm/lib/Target/ARM/ARMFrameLowering.cpp b/external/llvm/lib/Target/ARM/ARMFrameLowering.cpp index 4ff864ac6c..df6939a5af 100644 --- a/external/llvm/lib/Target/ARM/ARMFrameLowering.cpp +++ b/external/llvm/lib/Target/ARM/ARMFrameLowering.cpp @@ -355,6 +355,7 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF, unsigned ArgRegsSaveSize = AFI->getArgRegsSaveSize(); unsigned NumBytes = MFI.getStackSize(); const std::vector &CSI = MFI.getCalleeSavedInfo(); + bool AvoidNonfpCFA = false; // Debug location must be unknown since the first debug location is used // to determine the end of the prologue. @@ -580,6 +581,7 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF, dl, TII, FramePtr, ARM::SP, PushSize + FramePtrOffsetInPush, MachineInstr::FrameSetup); +#if 0 if (FramePtrOffsetInPush + PushSize != 0) { unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createDefCfa( nullptr, MRI->getDwarfRegNum(FramePtr, true), @@ -595,6 +597,15 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF, .addCFIIndex(CFIIndex) .setMIFlags(MachineInstr::FrameSetup); } +#else + /* on iOS `r7 + 8` is always the previous stack pointer */ + unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createDefCfa(nullptr, MRI->getDwarfRegNum(FramePtr, true), -8)); + BuildMI(MBB, AfterPush, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex) + .setMIFlags(MachineInstr::FrameSetup); + + AvoidNonfpCFA = true; +#endif } // Now that the prologue's actual instructions are finalised, we can insert @@ -683,7 +694,8 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF, // throughout the process. If we have a frame pointer, it takes over the job // half-way through, so only the first few .cfi_def_cfa_offset instructions // actually get emitted. - DefCFAOffsetCandidates.emitDefCFAOffsets(MBB, dl, TII, HasFP); + if (!AvoidNonfpCFA) + DefCFAOffsetCandidates.emitDefCFAOffsets(MBB, dl, TII, HasFP); if (STI.isTargetELF() && hasFP(MF)) MFI.setOffsetAdjustment(MFI.getOffsetAdjustment() - diff --git a/external/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp b/external/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp index 6d2f098a6b..3c67743947 100644 --- a/external/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp +++ b/external/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp @@ -225,6 +225,8 @@ unsigned MipsELFObjectWriter::getRelocType(MCContext &Ctx, switch (Kind) { case Mips::fixup_Mips_NONE: return ELF::R_MIPS_NONE; + case FK_Data_1: + report_fatal_error("MIPS does not support one byte relocations"); case Mips::fixup_Mips_16: case FK_Data_2: return IsPCRel ? ELF::R_MIPS_PC16 : ELF::R_MIPS_16; diff --git a/external/llvm/lib/Target/Mips/MipsISelLowering.cpp.REMOVED.git-id b/external/llvm/lib/Target/Mips/MipsISelLowering.cpp.REMOVED.git-id index 08300d7377..c05a200de5 100644 --- a/external/llvm/lib/Target/Mips/MipsISelLowering.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/Mips/MipsISelLowering.cpp.REMOVED.git-id @@ -1 +1 @@ -ba05b0f48df79816f8fb55249b06a9b4ddbf9ba8 \ No newline at end of file +3d383b3dfe3e476d0a59da5df71e4f1baac71288 \ No newline at end of file diff --git a/external/llvm/lib/Target/Mips/MipsSEISelLowering.cpp.REMOVED.git-id b/external/llvm/lib/Target/Mips/MipsSEISelLowering.cpp.REMOVED.git-id index b4b95d7700..a0cb4737df 100644 --- a/external/llvm/lib/Target/Mips/MipsSEISelLowering.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/Mips/MipsSEISelLowering.cpp.REMOVED.git-id @@ -1 +1 @@ -f7d7e2af85e476555070b6045488a799d7022d3c \ No newline at end of file +eee5b23117f6fba5f0536879d0ab7f3b0fdc892c \ No newline at end of file diff --git a/external/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/external/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp index d31e1cb504..cb8cc7bb34 100644 --- a/external/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/external/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -44,6 +44,14 @@ static cl::opt cl::desc("Disable load/store vectorizer"), cl::init(false), cl::Hidden); +// TODO: Remove this flag when we are confident with no regressions. +static cl::opt DisableRequireStructuredCFG( + "disable-nvptx-require-structured-cfg", + cl::desc("Transitional flag to turn off NVPTX's requirement on preserving " + "structured CFG. The requirement should be disabled only when " + "unexpected regressions happen."), + cl::init(false), cl::Hidden); + namespace llvm { void initializeNVVMIntrRangePass(PassRegistry&); @@ -108,6 +116,8 @@ NVPTXTargetMachine::NVPTXTargetMachine(const Target &T, const Triple &TT, drvInterface = NVPTX::NVCL; else drvInterface = NVPTX::CUDA; + if (!DisableRequireStructuredCFG) + setRequiresStructuredCFG(true); initAsmInfo(); } diff --git a/external/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp.REMOVED.git-id b/external/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp.REMOVED.git-id index 84e18a6cf6..c7424f20d7 100644 --- a/external/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp.REMOVED.git-id @@ -1 +1 @@ -fb16700a5e177a112820eda422ceb6c6a9a2971b \ No newline at end of file +4ef71effd49b4eabfd27e4569c4d229210b90b4e \ No newline at end of file diff --git a/external/llvm/lib/Target/X86/CMakeLists.txt b/external/llvm/lib/Target/X86/CMakeLists.txt index 23ac9d9936..4440081309 100644 --- a/external/llvm/lib/Target/X86/CMakeLists.txt +++ b/external/llvm/lib/Target/X86/CMakeLists.txt @@ -31,6 +31,7 @@ set(sources X86FixupBWInsts.cpp X86FixupLEAs.cpp X86FixupSetCC.cpp + X86FlagsCopyLowering.cpp X86FloatingPoint.cpp X86FrameLowering.cpp X86InstructionSelector.cpp diff --git a/external/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/external/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp index c58254ae38..b3c491b3de 100644 --- a/external/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp +++ b/external/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp @@ -265,13 +265,10 @@ MCDisassembler::DecodeStatus X86GenericDisassembler::getInstruction( /// @param reg - The Reg to append. static void translateRegister(MCInst &mcInst, Reg reg) { #define ENTRY(x) X86::x, - uint8_t llvmRegnums[] = { - ALL_REGS - 0 - }; + static constexpr MCPhysReg llvmRegnums[] = {ALL_REGS}; #undef ENTRY - uint8_t llvmRegnum = llvmRegnums[reg]; + MCPhysReg llvmRegnum = llvmRegnums[reg]; mcInst.addOperand(MCOperand::createReg(llvmRegnum)); } diff --git a/external/llvm/lib/Target/X86/X86.h b/external/llvm/lib/Target/X86/X86.h index 3613268242..642dda8f42 100644 --- a/external/llvm/lib/Target/X86/X86.h +++ b/external/llvm/lib/Target/X86/X86.h @@ -66,6 +66,9 @@ FunctionPass *createX86OptimizeLEAs(); /// Return a pass that transforms setcc + movzx pairs into xor + setcc. FunctionPass *createX86FixupSetCC(); +/// Return a pass that lowers EFLAGS copy pseudo instructions. +FunctionPass *createX86FlagsCopyLoweringPass(); + /// Return a pass that expands WinAlloca pseudo-instructions. FunctionPass *createX86WinAllocaExpander(); diff --git a/external/llvm/lib/Target/X86/X86DomainReassignment.cpp b/external/llvm/lib/Target/X86/X86DomainReassignment.cpp index bc0f55f581..ffe176ad47 100644 --- a/external/llvm/lib/Target/X86/X86DomainReassignment.cpp +++ b/external/llvm/lib/Target/X86/X86DomainReassignment.cpp @@ -26,6 +26,7 @@ #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/Printable.h" #include using namespace llvm; @@ -262,25 +263,6 @@ public: } }; -/// An Instruction Converter which completely deletes an instruction. -/// For example, IMPLICIT_DEF instructions can be deleted when converting from -/// GPR to mask. -class InstrDeleter : public InstrConverterBase { -public: - InstrDeleter(unsigned SrcOpcode) : InstrConverterBase(SrcOpcode) {} - - bool convertInstr(MachineInstr *MI, const TargetInstrInfo *TII, - MachineRegisterInfo *MRI) const override { - assert(isLegal(MI, TII) && "Cannot convert instruction"); - return true; - } - - double getExtraCost(const MachineInstr *MI, - MachineRegisterInfo *MRI) const override { - return 0; - } -}; - // Key type to be used by the Instruction Converters map. // A converter is identified by typedef std::pair InstrConverterBaseKeyTy; @@ -310,8 +292,12 @@ private: /// Domains which this closure can legally be reassigned to. std::bitset LegalDstDomains; + /// An ID to uniquely identify this closure, even when it gets + /// moved around + unsigned ID; + public: - Closure(std::initializer_list LegalDstDomainList) { + Closure(unsigned ID, std::initializer_list LegalDstDomainList) : ID(ID) { for (RegDomain D : LegalDstDomainList) LegalDstDomains.set(D); } @@ -347,6 +333,27 @@ public: return Instrs; } + LLVM_DUMP_METHOD void dump(const MachineRegisterInfo *MRI) const { + dbgs() << "Registers: "; + bool First = true; + for (unsigned Reg : Edges) { + if (!First) + dbgs() << ", "; + First = false; + dbgs() << printReg(Reg, MRI->getTargetRegisterInfo()); + } + dbgs() << "\n" << "Instructions:"; + for (MachineInstr *MI : Instrs) { + dbgs() << "\n "; + MI->print(dbgs()); + } + dbgs() << "\n"; + } + + unsigned getID() const { + return ID; + } + }; class X86DomainReassignment : public MachineFunctionPass { @@ -358,7 +365,7 @@ class X86DomainReassignment : public MachineFunctionPass { DenseSet EnclosedEdges; /// All instructions that are included in some closure. - DenseMap EnclosedInstrs; + DenseMap EnclosedInstrs; public: static char ID; @@ -435,14 +442,14 @@ void X86DomainReassignment::visitRegister(Closure &C, unsigned Reg, void X86DomainReassignment::encloseInstr(Closure &C, MachineInstr *MI) { auto I = EnclosedInstrs.find(MI); if (I != EnclosedInstrs.end()) { - if (I->second != &C) + if (I->second != C.getID()) // Instruction already belongs to another closure, avoid conflicts between // closure and mark this closure as illegal. C.setAllIllegal(); return; } - EnclosedInstrs[MI] = &C; + EnclosedInstrs[MI] = C.getID(); C.addInstruction(MI); // Mark closure as illegal for reassignment to domains, if there is no @@ -587,7 +594,7 @@ void X86DomainReassignment::initConverters() { new InstrIgnore(TargetOpcode::PHI); Converters[{MaskDomain, TargetOpcode::IMPLICIT_DEF}] = - new InstrDeleter(TargetOpcode::IMPLICIT_DEF); + new InstrIgnore(TargetOpcode::IMPLICIT_DEF); Converters[{MaskDomain, TargetOpcode::INSERT_SUBREG}] = new InstrReplaceWithCopy(TargetOpcode::INSERT_SUBREG, 2); @@ -723,6 +730,7 @@ bool X86DomainReassignment::runOnMachineFunction(MachineFunction &MF) { std::vector Closures; // Go over all virtual registers and calculate a closure. + unsigned ClosureID = 0; for (unsigned Idx = 0; Idx < MRI->getNumVirtRegs(); ++Idx) { unsigned Reg = TargetRegisterInfo::index2VirtReg(Idx); @@ -735,7 +743,7 @@ bool X86DomainReassignment::runOnMachineFunction(MachineFunction &MF) { continue; // Calculate closure starting with Reg. - Closure C({MaskDomain}); + Closure C(ClosureID++, {MaskDomain}); buildClosure(C, Reg); // Collect all closures that can potentially be converted. @@ -743,15 +751,16 @@ bool X86DomainReassignment::runOnMachineFunction(MachineFunction &MF) { Closures.push_back(std::move(C)); } - for (Closure &C : Closures) + for (Closure &C : Closures) { + DEBUG(C.dump(MRI)); if (isReassignmentProfitable(C, MaskDomain)) { reassign(C, MaskDomain); ++NumClosuresConverted; Changed = true; } + } - for (auto I : Converters) - delete I.second; + DeleteContainerSeconds(Converters); DEBUG(dbgs() << "***** Machine Function after Domain Reassignment *****\n"); DEBUG(MF.print(dbgs())); diff --git a/external/llvm/lib/Target/X86/X86FastISel.cpp.REMOVED.git-id b/external/llvm/lib/Target/X86/X86FastISel.cpp.REMOVED.git-id index b0cc21061d..686e68891d 100644 --- a/external/llvm/lib/Target/X86/X86FastISel.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/X86/X86FastISel.cpp.REMOVED.git-id @@ -1 +1 @@ -d482edc4b3d857336a8e0ff82a0d2a1b9039ed9d \ No newline at end of file +42fac99997d5480ca2c9886d1fb3a557f0f54abe \ No newline at end of file diff --git a/external/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp b/external/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp new file mode 100644 index 0000000000..a6fccd1347 --- /dev/null +++ b/external/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp @@ -0,0 +1,935 @@ +//====- X86FlagsCopyLowering.cpp - Lowers COPY nodes of EFLAGS ------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// \file +/// +/// Lowers COPY nodes of EFLAGS by directly extracting and preserving individual +/// flag bits. +/// +/// We have to do this by carefully analyzing and rewriting the usage of the +/// copied EFLAGS register because there is no general way to rematerialize the +/// entire EFLAGS register safely and efficiently. Using `popf` both forces +/// dynamic stack adjustment and can create correctness issues due to IF, TF, +/// and other non-status flags being overwritten. Using sequences involving +/// SAHF don't work on all x86 processors and are often quite slow compared to +/// directly testing a single status preserved in its own GPR. +/// +//===----------------------------------------------------------------------===// + +#include "X86.h" +#include "X86InstrBuilder.h" +#include "X86InstrInfo.h" +#include "X86Subtarget.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/ScopeExit.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallSet.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/SparseBitVector.h" +#include "llvm/ADT/Statistic.h" +#include "llvm/CodeGen/MachineBasicBlock.h" +#include "llvm/CodeGen/MachineConstantPool.h" +#include "llvm/CodeGen/MachineDominators.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachineInstr.h" +#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachineModuleInfo.h" +#include "llvm/CodeGen/MachineOperand.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/MachineSSAUpdater.h" +#include "llvm/CodeGen/TargetInstrInfo.h" +#include "llvm/CodeGen/TargetRegisterInfo.h" +#include "llvm/CodeGen/TargetSchedule.h" +#include "llvm/CodeGen/TargetSubtargetInfo.h" +#include "llvm/IR/DebugLoc.h" +#include "llvm/MC/MCSchedule.h" +#include "llvm/Pass.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" +#include +#include +#include +#include + +using namespace llvm; + +#define PASS_KEY "x86-flags-copy-lowering" +#define DEBUG_TYPE PASS_KEY + +STATISTIC(NumCopiesEliminated, "Number of copies of EFLAGS eliminated"); +STATISTIC(NumSetCCsInserted, "Number of setCC instructions inserted"); +STATISTIC(NumTestsInserted, "Number of test instructions inserted"); +STATISTIC(NumAddsInserted, "Number of adds instructions inserted"); + +namespace llvm { + +void initializeX86FlagsCopyLoweringPassPass(PassRegistry &); + +} // end namespace llvm + +namespace { + +// Convenient array type for storing registers associated with each condition. +using CondRegArray = std::array; + +class X86FlagsCopyLoweringPass : public MachineFunctionPass { +public: + X86FlagsCopyLoweringPass() : MachineFunctionPass(ID) { + initializeX86FlagsCopyLoweringPassPass(*PassRegistry::getPassRegistry()); + } + + StringRef getPassName() const override { return "X86 EFLAGS copy lowering"; } + bool runOnMachineFunction(MachineFunction &MF) override; + void getAnalysisUsage(AnalysisUsage &AU) const override; + + /// Pass identification, replacement for typeid. + static char ID; + +private: + MachineRegisterInfo *MRI; + const X86InstrInfo *TII; + const TargetRegisterInfo *TRI; + const TargetRegisterClass *PromoteRC; + MachineDominatorTree *MDT; + + CondRegArray collectCondsInRegs(MachineBasicBlock &MBB, + MachineInstr &CopyDefI); + + unsigned promoteCondToReg(MachineBasicBlock &MBB, + MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, X86::CondCode Cond); + std::pair + getCondOrInverseInReg(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, DebugLoc TestLoc, + X86::CondCode Cond, CondRegArray &CondRegs); + void insertTest(MachineBasicBlock &MBB, MachineBasicBlock::iterator Pos, + DebugLoc Loc, unsigned Reg); + + void rewriteArithmetic(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, DebugLoc TestLoc, + MachineInstr &MI, MachineOperand &FlagUse, + CondRegArray &CondRegs); + void rewriteCMov(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, DebugLoc TestLoc, + MachineInstr &CMovI, MachineOperand &FlagUse, + CondRegArray &CondRegs); + void rewriteCondJmp(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, DebugLoc TestLoc, + MachineInstr &JmpI, CondRegArray &CondRegs); + void rewriteCopy(MachineInstr &MI, MachineOperand &FlagUse, + MachineInstr &CopyDefI); + void rewriteSetCarryExtended(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, MachineInstr &SetBI, + MachineOperand &FlagUse, CondRegArray &CondRegs); + void rewriteSetCC(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, DebugLoc TestLoc, + MachineInstr &SetCCI, MachineOperand &FlagUse, + CondRegArray &CondRegs); +}; + +} // end anonymous namespace + +INITIALIZE_PASS_BEGIN(X86FlagsCopyLoweringPass, DEBUG_TYPE, + "X86 EFLAGS copy lowering", false, false) +INITIALIZE_PASS_END(X86FlagsCopyLoweringPass, DEBUG_TYPE, + "X86 EFLAGS copy lowering", false, false) + +FunctionPass *llvm::createX86FlagsCopyLoweringPass() { + return new X86FlagsCopyLoweringPass(); +} + +char X86FlagsCopyLoweringPass::ID = 0; + +void X86FlagsCopyLoweringPass::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired(); + MachineFunctionPass::getAnalysisUsage(AU); +} + +namespace { +/// An enumeration of the arithmetic instruction mnemonics which have +/// interesting flag semantics. +/// +/// We can map instruction opcodes into these mnemonics to make it easy to +/// dispatch with specific functionality. +enum class FlagArithMnemonic { + ADC, + ADCX, + ADOX, + RCL, + RCR, + SBB, +}; +} // namespace + +static FlagArithMnemonic getMnemonicFromOpcode(unsigned Opcode) { + switch (Opcode) { + default: + report_fatal_error("No support for lowering a copy into EFLAGS when used " + "by this instruction!"); + +#define LLVM_EXPAND_INSTR_SIZES(MNEMONIC, SUFFIX) \ + case X86::MNEMONIC##8##SUFFIX: \ + case X86::MNEMONIC##16##SUFFIX: \ + case X86::MNEMONIC##32##SUFFIX: \ + case X86::MNEMONIC##64##SUFFIX: + +#define LLVM_EXPAND_ADC_SBB_INSTR(MNEMONIC) \ + LLVM_EXPAND_INSTR_SIZES(MNEMONIC, rr) \ + LLVM_EXPAND_INSTR_SIZES(MNEMONIC, rr_REV) \ + LLVM_EXPAND_INSTR_SIZES(MNEMONIC, rm) \ + LLVM_EXPAND_INSTR_SIZES(MNEMONIC, mr) \ + case X86::MNEMONIC##8ri: \ + case X86::MNEMONIC##16ri8: \ + case X86::MNEMONIC##32ri8: \ + case X86::MNEMONIC##64ri8: \ + case X86::MNEMONIC##16ri: \ + case X86::MNEMONIC##32ri: \ + case X86::MNEMONIC##64ri32: \ + case X86::MNEMONIC##8mi: \ + case X86::MNEMONIC##16mi8: \ + case X86::MNEMONIC##32mi8: \ + case X86::MNEMONIC##64mi8: \ + case X86::MNEMONIC##16mi: \ + case X86::MNEMONIC##32mi: \ + case X86::MNEMONIC##64mi32: \ + case X86::MNEMONIC##8i8: \ + case X86::MNEMONIC##16i16: \ + case X86::MNEMONIC##32i32: \ + case X86::MNEMONIC##64i32: + + LLVM_EXPAND_ADC_SBB_INSTR(ADC) + return FlagArithMnemonic::ADC; + + LLVM_EXPAND_ADC_SBB_INSTR(SBB) + return FlagArithMnemonic::SBB; + +#undef LLVM_EXPAND_ADC_SBB_INSTR + + LLVM_EXPAND_INSTR_SIZES(RCL, rCL) + LLVM_EXPAND_INSTR_SIZES(RCL, r1) + LLVM_EXPAND_INSTR_SIZES(RCL, ri) + return FlagArithMnemonic::RCL; + + LLVM_EXPAND_INSTR_SIZES(RCR, rCL) + LLVM_EXPAND_INSTR_SIZES(RCR, r1) + LLVM_EXPAND_INSTR_SIZES(RCR, ri) + return FlagArithMnemonic::RCR; + +#undef LLVM_EXPAND_INSTR_SIZES + + case X86::ADCX32rr: + case X86::ADCX64rr: + case X86::ADCX32rm: + case X86::ADCX64rm: + return FlagArithMnemonic::ADCX; + + case X86::ADOX32rr: + case X86::ADOX64rr: + case X86::ADOX32rm: + case X86::ADOX64rm: + return FlagArithMnemonic::ADOX; + } +} + +static MachineBasicBlock &splitBlock(MachineBasicBlock &MBB, + MachineInstr &SplitI, + const X86InstrInfo &TII) { + MachineFunction &MF = *MBB.getParent(); + + assert(SplitI.getParent() == &MBB && + "Split instruction must be in the split block!"); + assert(SplitI.isBranch() && + "Only designed to split a tail of branch instructions!"); + assert(X86::getCondFromBranchOpc(SplitI.getOpcode()) != X86::COND_INVALID && + "Must split on an actual jCC instruction!"); + + // Dig out the previous instruction to the split point. + MachineInstr &PrevI = *std::prev(SplitI.getIterator()); + assert(PrevI.isBranch() && "Must split after a branch!"); + assert(X86::getCondFromBranchOpc(PrevI.getOpcode()) != X86::COND_INVALID && + "Must split after an actual jCC instruction!"); + assert(!std::prev(PrevI.getIterator())->isTerminator() && + "Must only have this one terminator prior to the split!"); + + // Grab the one successor edge that will stay in `MBB`. + MachineBasicBlock &UnsplitSucc = *PrevI.getOperand(0).getMBB(); + + // Analyze the original block to see if we are actually splitting an edge + // into two edges. This can happen when we have multiple conditional jumps to + // the same successor. + bool IsEdgeSplit = + std::any_of(SplitI.getIterator(), MBB.instr_end(), + [&](MachineInstr &MI) { + assert(MI.isTerminator() && + "Should only have spliced terminators!"); + return llvm::any_of( + MI.operands(), [&](MachineOperand &MOp) { + return MOp.isMBB() && MOp.getMBB() == &UnsplitSucc; + }); + }) || + MBB.getFallThrough() == &UnsplitSucc; + + MachineBasicBlock &NewMBB = *MF.CreateMachineBasicBlock(); + + // Insert the new block immediately after the current one. Any existing + // fallthrough will be sunk into this new block anyways. + MF.insert(std::next(MachineFunction::iterator(&MBB)), &NewMBB); + + // Splice the tail of instructions into the new block. + NewMBB.splice(NewMBB.end(), &MBB, SplitI.getIterator(), MBB.end()); + + // Copy the necessary succesors (and their probability info) into the new + // block. + for (auto SI = MBB.succ_begin(), SE = MBB.succ_end(); SI != SE; ++SI) + if (IsEdgeSplit || *SI != &UnsplitSucc) + NewMBB.copySuccessor(&MBB, SI); + // Normalize the probabilities if we didn't end up splitting the edge. + if (!IsEdgeSplit) + NewMBB.normalizeSuccProbs(); + + // Now replace all of the moved successors in the original block with the new + // block. This will merge their probabilities. + for (MachineBasicBlock *Succ : NewMBB.successors()) + if (Succ != &UnsplitSucc) + MBB.replaceSuccessor(Succ, &NewMBB); + + // We should always end up replacing at least one successor. + assert(MBB.isSuccessor(&NewMBB) && + "Failed to make the new block a successor!"); + + // Now update all the PHIs. + for (MachineBasicBlock *Succ : NewMBB.successors()) { + for (MachineInstr &MI : *Succ) { + if (!MI.isPHI()) + break; + + for (int OpIdx = 1, NumOps = MI.getNumOperands(); OpIdx < NumOps; + OpIdx += 2) { + MachineOperand &OpV = MI.getOperand(OpIdx); + MachineOperand &OpMBB = MI.getOperand(OpIdx + 1); + assert(OpMBB.isMBB() && "Block operand to a PHI is not a block!"); + if (OpMBB.getMBB() != &MBB) + continue; + + // Replace the operand for unsplit successors + if (!IsEdgeSplit || Succ != &UnsplitSucc) { + OpMBB.setMBB(&NewMBB); + + // We have to continue scanning as there may be multiple entries in + // the PHI. + continue; + } + + // When we have split the edge append a new successor. + MI.addOperand(MF, OpV); + MI.addOperand(MF, MachineOperand::CreateMBB(&NewMBB)); + break; + } + } + } + + return NewMBB; +} + +bool X86FlagsCopyLoweringPass::runOnMachineFunction(MachineFunction &MF) { + DEBUG(dbgs() << "********** " << getPassName() << " : " << MF.getName() + << " **********\n"); + + auto &Subtarget = MF.getSubtarget(); + MRI = &MF.getRegInfo(); + TII = Subtarget.getInstrInfo(); + TRI = Subtarget.getRegisterInfo(); + MDT = &getAnalysis(); + PromoteRC = &X86::GR8RegClass; + + if (MF.begin() == MF.end()) + // Nothing to do for a degenerate empty function... + return false; + + SmallVector Copies; + for (MachineBasicBlock &MBB : MF) + for (MachineInstr &MI : MBB) + if (MI.getOpcode() == TargetOpcode::COPY && + MI.getOperand(0).getReg() == X86::EFLAGS) + Copies.push_back(&MI); + + for (MachineInstr *CopyI : Copies) { + MachineBasicBlock &MBB = *CopyI->getParent(); + + MachineOperand &VOp = CopyI->getOperand(1); + assert(VOp.isReg() && + "The input to the copy for EFLAGS should always be a register!"); + MachineInstr &CopyDefI = *MRI->getVRegDef(VOp.getReg()); + if (CopyDefI.getOpcode() != TargetOpcode::COPY) { + // FIXME: The big likely candidate here are PHI nodes. We could in theory + // handle PHI nodes, but it gets really, really hard. Insanely hard. Hard + // enough that it is probably better to change every other part of LLVM + // to avoid creating them. The issue is that once we have PHIs we won't + // know which original EFLAGS value we need to capture with our setCCs + // below. The end result will be computing a complete set of setCCs that + // we *might* want, computing them in every place where we copy *out* of + // EFLAGS and then doing SSA formation on all of them to insert necessary + // PHI nodes and consume those here. Then hoping that somehow we DCE the + // unnecessary ones. This DCE seems very unlikely to be successful and so + // we will almost certainly end up with a glut of dead setCC + // instructions. Until we have a motivating test case and fail to avoid + // it by changing other parts of LLVM's lowering, we refuse to handle + // this complex case here. + DEBUG(dbgs() << "ERROR: Encountered unexpected def of an eflags copy: "; + CopyDefI.dump()); + report_fatal_error( + "Cannot lower EFLAGS copy unless it is defined in turn by a copy!"); + } + + auto Cleanup = make_scope_exit([&] { + // All uses of the EFLAGS copy are now rewritten, kill the copy into + // eflags and if dead the copy from. + CopyI->eraseFromParent(); + if (MRI->use_empty(CopyDefI.getOperand(0).getReg())) + CopyDefI.eraseFromParent(); + ++NumCopiesEliminated; + }); + + MachineOperand &DOp = CopyI->getOperand(0); + assert(DOp.isDef() && "Expected register def!"); + assert(DOp.getReg() == X86::EFLAGS && "Unexpected copy def register!"); + if (DOp.isDead()) + continue; + + MachineBasicBlock &TestMBB = *CopyDefI.getParent(); + auto TestPos = CopyDefI.getIterator(); + DebugLoc TestLoc = CopyDefI.getDebugLoc(); + + DEBUG(dbgs() << "Rewriting copy: "; CopyI->dump()); + + // Scan for usage of newly set EFLAGS so we can rewrite them. We just buffer + // jumps because their usage is very constrained. + bool FlagsKilled = false; + SmallVector JmpIs; + + // Gather the condition flags that have already been preserved in + // registers. We do this from scratch each time as we expect there to be + // very few of them and we expect to not revisit the same copy definition + // many times. If either of those change sufficiently we could build a map + // of these up front instead. + CondRegArray CondRegs = collectCondsInRegs(TestMBB, CopyDefI); + + // Collect the basic blocks we need to scan. Typically this will just be + // a single basic block but we may have to scan multiple blocks if the + // EFLAGS copy lives into successors. + SmallVector Blocks; + SmallPtrSet VisitedBlocks; + Blocks.push_back(&MBB); + VisitedBlocks.insert(&MBB); + + do { + MachineBasicBlock &UseMBB = *Blocks.pop_back_val(); + + // We currently don't do any PHI insertion and so we require that the + // test basic block dominates all of the use basic blocks. + // + // We could in theory do PHI insertion here if it becomes useful by just + // taking undef values in along every edge that we don't trace this + // EFLAGS copy along. This isn't as bad as fully general PHI insertion, + // but still seems like a great deal of complexity. + // + // Because it is theoretically possible that some earlier MI pass or + // other lowering transformation could induce this to happen, we do + // a hard check even in non-debug builds here. + if (&TestMBB != &UseMBB && !MDT->dominates(&TestMBB, &UseMBB)) { + DEBUG({ + dbgs() << "ERROR: Encountered use that is not dominated by our test " + "basic block! Rewriting this would require inserting PHI " + "nodes to track the flag state across the CFG.\n\nTest " + "block:\n"; + TestMBB.dump(); + dbgs() << "Use block:\n"; + UseMBB.dump(); + }); + report_fatal_error("Cannot lower EFLAGS copy when original copy def " + "does not dominate all uses."); + } + + for (auto MII = &UseMBB == &MBB ? std::next(CopyI->getIterator()) + : UseMBB.instr_begin(), + MIE = UseMBB.instr_end(); + MII != MIE;) { + MachineInstr &MI = *MII++; + MachineOperand *FlagUse = MI.findRegisterUseOperand(X86::EFLAGS); + if (!FlagUse) { + if (MI.findRegisterDefOperand(X86::EFLAGS)) { + // If EFLAGS are defined, it's as-if they were killed. We can stop + // scanning here. + // + // NB!!! Many instructions only modify some flags. LLVM currently + // models this as clobbering all flags, but if that ever changes + // this will need to be carefully updated to handle that more + // complex logic. + FlagsKilled = true; + break; + } + continue; + } + + DEBUG(dbgs() << " Rewriting use: "; MI.dump()); + + // Check the kill flag before we rewrite as that may change it. + if (FlagUse->isKill()) + FlagsKilled = true; + + // Once we encounter a branch, the rest of the instructions must also be + // branches. We can't rewrite in place here, so we handle them below. + // + // Note that we don't have to handle tail calls here, even conditional + // tail calls, as those are not introduced into the X86 MI until post-RA + // branch folding or black placement. As a consequence, we get to deal + // with the simpler formulation of conditional branches followed by tail + // calls. + if (X86::getCondFromBranchOpc(MI.getOpcode()) != X86::COND_INVALID) { + auto JmpIt = MI.getIterator(); + do { + JmpIs.push_back(&*JmpIt); + ++JmpIt; + } while (JmpIt != UseMBB.instr_end() && + X86::getCondFromBranchOpc(JmpIt->getOpcode()) != + X86::COND_INVALID); + break; + } + + // Otherwise we can just rewrite in-place. + if (X86::getCondFromCMovOpc(MI.getOpcode()) != X86::COND_INVALID) { + rewriteCMov(TestMBB, TestPos, TestLoc, MI, *FlagUse, CondRegs); + } else if (X86::getCondFromSETOpc(MI.getOpcode()) != + X86::COND_INVALID) { + rewriteSetCC(TestMBB, TestPos, TestLoc, MI, *FlagUse, CondRegs); + } else if (MI.getOpcode() == TargetOpcode::COPY) { + rewriteCopy(MI, *FlagUse, CopyDefI); + } else { + // We assume all other instructions that use flags also def them. + assert(MI.findRegisterDefOperand(X86::EFLAGS) && + "Expected a def of EFLAGS for this instruction!"); + + // NB!!! Several arithmetic instructions only *partially* update + // flags. Theoretically, we could generate MI code sequences that + // would rely on this fact and observe different flags independently. + // But currently LLVM models all of these instructions as clobbering + // all the flags in an undef way. We rely on that to simplify the + // logic. + FlagsKilled = true; + + switch (MI.getOpcode()) { + case X86::SETB_C8r: + case X86::SETB_C16r: + case X86::SETB_C32r: + case X86::SETB_C64r: + // Use custom lowering for arithmetic that is merely extending the + // carry flag. We model this as the SETB_C* pseudo instructions. + rewriteSetCarryExtended(TestMBB, TestPos, TestLoc, MI, *FlagUse, + CondRegs); + break; + + default: + // Generically handle remaining uses as arithmetic instructions. + rewriteArithmetic(TestMBB, TestPos, TestLoc, MI, *FlagUse, + CondRegs); + break; + } + break; + } + + // If this was the last use of the flags, we're done. + if (FlagsKilled) + break; + } + + // If the flags were killed, we're done with this block. + if (FlagsKilled) + break; + + // Otherwise we need to scan successors for ones where the flags live-in + // and queue those up for processing. + for (MachineBasicBlock *SuccMBB : UseMBB.successors()) + if (SuccMBB->isLiveIn(X86::EFLAGS) && + VisitedBlocks.insert(SuccMBB).second) + Blocks.push_back(SuccMBB); + } while (!Blocks.empty()); + + // Now rewrite the jumps that use the flags. These we handle specially + // because if there are multiple jumps in a single basic block we'll have + // to do surgery on the CFG. + MachineBasicBlock *LastJmpMBB = nullptr; + for (MachineInstr *JmpI : JmpIs) { + // Past the first jump within a basic block we need to split the blocks + // apart. + if (JmpI->getParent() == LastJmpMBB) + splitBlock(*JmpI->getParent(), *JmpI, *TII); + else + LastJmpMBB = JmpI->getParent(); + + rewriteCondJmp(TestMBB, TestPos, TestLoc, *JmpI, CondRegs); + } + + // FIXME: Mark the last use of EFLAGS before the copy's def as a kill if + // the copy's def operand is itself a kill. + } + +#ifndef NDEBUG + for (MachineBasicBlock &MBB : MF) + for (MachineInstr &MI : MBB) + if (MI.getOpcode() == TargetOpcode::COPY && + (MI.getOperand(0).getReg() == X86::EFLAGS || + MI.getOperand(1).getReg() == X86::EFLAGS)) { + DEBUG(dbgs() << "ERROR: Found a COPY involving EFLAGS: "; MI.dump()); + llvm_unreachable("Unlowered EFLAGS copy!"); + } +#endif + + return true; +} + +/// Collect any conditions that have already been set in registers so that we +/// can re-use them rather than adding duplicates. +CondRegArray +X86FlagsCopyLoweringPass::collectCondsInRegs(MachineBasicBlock &MBB, + MachineInstr &CopyDefI) { + CondRegArray CondRegs = {}; + + // Scan backwards across the range of instructions with live EFLAGS. + for (MachineInstr &MI : llvm::reverse( + llvm::make_range(MBB.instr_begin(), CopyDefI.getIterator()))) { + X86::CondCode Cond = X86::getCondFromSETOpc(MI.getOpcode()); + if (Cond != X86::COND_INVALID && MI.getOperand(0).isReg() && + TRI->isVirtualRegister(MI.getOperand(0).getReg())) + CondRegs[Cond] = MI.getOperand(0).getReg(); + + // Stop scanning when we see the first definition of the EFLAGS as prior to + // this we would potentially capture the wrong flag state. + if (MI.findRegisterDefOperand(X86::EFLAGS)) + break; + } + return CondRegs; +} + +unsigned X86FlagsCopyLoweringPass::promoteCondToReg( + MachineBasicBlock &TestMBB, MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, X86::CondCode Cond) { + unsigned Reg = MRI->createVirtualRegister(PromoteRC); + auto SetI = BuildMI(TestMBB, TestPos, TestLoc, + TII->get(X86::getSETFromCond(Cond)), Reg); + (void)SetI; + DEBUG(dbgs() << " save cond: "; SetI->dump()); + ++NumSetCCsInserted; + return Reg; +} + +std::pair X86FlagsCopyLoweringPass::getCondOrInverseInReg( + MachineBasicBlock &TestMBB, MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, X86::CondCode Cond, CondRegArray &CondRegs) { + unsigned &CondReg = CondRegs[Cond]; + unsigned &InvCondReg = CondRegs[X86::GetOppositeBranchCondition(Cond)]; + if (!CondReg && !InvCondReg) + CondReg = promoteCondToReg(TestMBB, TestPos, TestLoc, Cond); + + if (CondReg) + return {CondReg, false}; + else + return {InvCondReg, true}; +} + +void X86FlagsCopyLoweringPass::insertTest(MachineBasicBlock &MBB, + MachineBasicBlock::iterator Pos, + DebugLoc Loc, unsigned Reg) { + // We emit test instructions as register/immediate test against -1. This + // allows register allocation to fold a memory operand if needed (that will + // happen often due to the places this code is emitted). But hopefully will + // also allow us to select a shorter encoding of `testb %reg, %reg` when that + // would be equivalent. + auto TestI = + BuildMI(MBB, Pos, Loc, TII->get(X86::TEST8rr)).addReg(Reg).addReg(Reg); + (void)TestI; + DEBUG(dbgs() << " test cond: "; TestI->dump()); + ++NumTestsInserted; +} + +void X86FlagsCopyLoweringPass::rewriteArithmetic( + MachineBasicBlock &TestMBB, MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, MachineInstr &MI, MachineOperand &FlagUse, + CondRegArray &CondRegs) { + // Arithmetic is either reading CF or OF. Figure out which condition we need + // to preserve in a register. + X86::CondCode Cond; + + // The addend to use to reset CF or OF when added to the flag value. + int Addend; + + switch (getMnemonicFromOpcode(MI.getOpcode())) { + case FlagArithMnemonic::ADC: + case FlagArithMnemonic::ADCX: + case FlagArithMnemonic::RCL: + case FlagArithMnemonic::RCR: + case FlagArithMnemonic::SBB: + Cond = X86::COND_B; // CF == 1 + // Set up an addend that when one is added will need a carry due to not + // having a higher bit available. + Addend = 255; + break; + + case FlagArithMnemonic::ADOX: + Cond = X86::COND_O; // OF == 1 + // Set up an addend that when one is added will turn from positive to + // negative and thus overflow in the signed domain. + Addend = 127; + break; + } + + // Now get a register that contains the value of the flag input to the + // arithmetic. We require exactly this flag to simplify the arithmetic + // required to materialize it back into the flag. + unsigned &CondReg = CondRegs[Cond]; + if (!CondReg) + CondReg = promoteCondToReg(TestMBB, TestPos, TestLoc, Cond); + + MachineBasicBlock &MBB = *MI.getParent(); + + // Insert an instruction that will set the flag back to the desired value. + unsigned TmpReg = MRI->createVirtualRegister(PromoteRC); + auto AddI = + BuildMI(MBB, MI.getIterator(), MI.getDebugLoc(), TII->get(X86::ADD8ri)) + .addDef(TmpReg, RegState::Dead) + .addReg(CondReg) + .addImm(Addend); + (void)AddI; + DEBUG(dbgs() << " add cond: "; AddI->dump()); + ++NumAddsInserted; + FlagUse.setIsKill(true); +} + +void X86FlagsCopyLoweringPass::rewriteCMov(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, + MachineInstr &CMovI, + MachineOperand &FlagUse, + CondRegArray &CondRegs) { + // First get the register containing this specific condition. + X86::CondCode Cond = X86::getCondFromCMovOpc(CMovI.getOpcode()); + unsigned CondReg; + bool Inverted; + std::tie(CondReg, Inverted) = + getCondOrInverseInReg(TestMBB, TestPos, TestLoc, Cond, CondRegs); + + MachineBasicBlock &MBB = *CMovI.getParent(); + + // Insert a direct test of the saved register. + insertTest(MBB, CMovI.getIterator(), CMovI.getDebugLoc(), CondReg); + + // Rewrite the CMov to use the !ZF flag from the test (but match register + // size and memory operand), and then kill its use of the flags afterward. + auto &CMovRC = *MRI->getRegClass(CMovI.getOperand(0).getReg()); + CMovI.setDesc(TII->get(X86::getCMovFromCond( + Inverted ? X86::COND_E : X86::COND_NE, TRI->getRegSizeInBits(CMovRC) / 8, + !CMovI.memoperands_empty()))); + FlagUse.setIsKill(true); + DEBUG(dbgs() << " fixed cmov: "; CMovI.dump()); +} + +void X86FlagsCopyLoweringPass::rewriteCondJmp( + MachineBasicBlock &TestMBB, MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, MachineInstr &JmpI, CondRegArray &CondRegs) { + // First get the register containing this specific condition. + X86::CondCode Cond = X86::getCondFromBranchOpc(JmpI.getOpcode()); + unsigned CondReg; + bool Inverted; + std::tie(CondReg, Inverted) = + getCondOrInverseInReg(TestMBB, TestPos, TestLoc, Cond, CondRegs); + + MachineBasicBlock &JmpMBB = *JmpI.getParent(); + + // Insert a direct test of the saved register. + insertTest(JmpMBB, JmpI.getIterator(), JmpI.getDebugLoc(), CondReg); + + // Rewrite the jump to use the !ZF flag from the test, and kill its use of + // flags afterward. + JmpI.setDesc(TII->get( + X86::GetCondBranchFromCond(Inverted ? X86::COND_E : X86::COND_NE))); + const int ImplicitEFLAGSOpIdx = 1; + JmpI.getOperand(ImplicitEFLAGSOpIdx).setIsKill(true); + DEBUG(dbgs() << " fixed jCC: "; JmpI.dump()); +} + +void X86FlagsCopyLoweringPass::rewriteCopy(MachineInstr &MI, + MachineOperand &FlagUse, + MachineInstr &CopyDefI) { + // Just replace this copy with the the original copy def. + MRI->replaceRegWith(MI.getOperand(0).getReg(), + CopyDefI.getOperand(0).getReg()); + MI.eraseFromParent(); +} + +void X86FlagsCopyLoweringPass::rewriteSetCarryExtended( + MachineBasicBlock &TestMBB, MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, MachineInstr &SetBI, MachineOperand &FlagUse, + CondRegArray &CondRegs) { + // This routine is only used to handle pseudos for setting a register to zero + // or all ones based on CF. This is essentially the sign extended from 1-bit + // form of SETB and modeled with the SETB_C* pseudos. They require special + // handling as they aren't normal SETcc instructions and are lowered to an + // EFLAGS clobbering operation (SBB typically). One simplifying aspect is that + // they are only provided in reg-defining forms. A complicating factor is that + // they can define many different register widths. + assert(SetBI.getOperand(0).isReg() && + "Cannot have a non-register defined operand to this variant of SETB!"); + + // Little helper to do the common final step of replacing the register def'ed + // by this SETB instruction with a new register and removing the SETB + // instruction. + auto RewriteToReg = [&](unsigned Reg) { + MRI->replaceRegWith(SetBI.getOperand(0).getReg(), Reg); + SetBI.eraseFromParent(); + }; + + // Grab the register class used for this particular instruction. + auto &SetBRC = *MRI->getRegClass(SetBI.getOperand(0).getReg()); + + MachineBasicBlock &MBB = *SetBI.getParent(); + auto SetPos = SetBI.getIterator(); + auto SetLoc = SetBI.getDebugLoc(); + + auto AdjustReg = [&](unsigned Reg) { + auto &OrigRC = *MRI->getRegClass(Reg); + if (&OrigRC == &SetBRC) + return Reg; + + unsigned NewReg; + + int OrigRegSize = TRI->getRegSizeInBits(OrigRC) / 8; + int TargetRegSize = TRI->getRegSizeInBits(SetBRC) / 8; + assert(OrigRegSize <= 8 && "No GPRs larger than 64-bits!"); + assert(TargetRegSize <= 8 && "No GPRs larger than 64-bits!"); + int SubRegIdx[] = {X86::NoSubRegister, X86::sub_8bit, X86::sub_16bit, + X86::NoSubRegister, X86::sub_32bit}; + + // If the original size is smaller than the target *and* is smaller than 4 + // bytes, we need to explicitly zero extend it. We always extend to 4-bytes + // to maximize the chance of being able to CSE that operation and to avoid + // partial dependency stalls extending to 2-bytes. + if (OrigRegSize < TargetRegSize && OrigRegSize < 4) { + NewReg = MRI->createVirtualRegister(&X86::GR32RegClass); + BuildMI(MBB, SetPos, SetLoc, TII->get(X86::MOVZX32rr8), NewReg) + .addReg(Reg); + if (&SetBRC == &X86::GR32RegClass) + return NewReg; + Reg = NewReg; + OrigRegSize = 4; + } + + NewReg = MRI->createVirtualRegister(&SetBRC); + if (OrigRegSize < TargetRegSize) { + BuildMI(MBB, SetPos, SetLoc, TII->get(TargetOpcode::SUBREG_TO_REG), + NewReg) + .addImm(0) + .addReg(Reg) + .addImm(SubRegIdx[OrigRegSize]); + } else if (OrigRegSize > TargetRegSize) { + BuildMI(MBB, SetPos, SetLoc, TII->get(TargetOpcode::EXTRACT_SUBREG), + NewReg) + .addReg(Reg) + .addImm(SubRegIdx[TargetRegSize]); + } else { + BuildMI(MBB, SetPos, SetLoc, TII->get(TargetOpcode::COPY), NewReg) + .addReg(Reg); + } + return NewReg; + }; + + unsigned &CondReg = CondRegs[X86::COND_B]; + if (!CondReg) + CondReg = promoteCondToReg(TestMBB, TestPos, TestLoc, X86::COND_B); + + // Adjust the condition to have the desired register width by zero-extending + // as needed. + // FIXME: We should use a better API to avoid the local reference and using a + // different variable here. + unsigned ExtCondReg = AdjustReg(CondReg); + + // Now we need to turn this into a bitmask. We do this by subtracting it from + // zero. + unsigned ZeroReg = MRI->createVirtualRegister(&X86::GR32RegClass); + BuildMI(MBB, SetPos, SetLoc, TII->get(X86::MOV32r0), ZeroReg); + ZeroReg = AdjustReg(ZeroReg); + + unsigned Sub; + switch (SetBI.getOpcode()) { + case X86::SETB_C8r: + Sub = X86::SUB8rr; + break; + + case X86::SETB_C16r: + Sub = X86::SUB16rr; + break; + + case X86::SETB_C32r: + Sub = X86::SUB32rr; + break; + + case X86::SETB_C64r: + Sub = X86::SUB64rr; + break; + + default: + llvm_unreachable("Invalid SETB_C* opcode!"); + } + unsigned ResultReg = MRI->createVirtualRegister(&SetBRC); + BuildMI(MBB, SetPos, SetLoc, TII->get(Sub), ResultReg) + .addReg(ZeroReg) + .addReg(ExtCondReg); + return RewriteToReg(ResultReg); +} + +void X86FlagsCopyLoweringPass::rewriteSetCC(MachineBasicBlock &TestMBB, + MachineBasicBlock::iterator TestPos, + DebugLoc TestLoc, + MachineInstr &SetCCI, + MachineOperand &FlagUse, + CondRegArray &CondRegs) { + X86::CondCode Cond = X86::getCondFromSETOpc(SetCCI.getOpcode()); + // Note that we can't usefully rewrite this to the inverse without complex + // analysis of the users of the setCC. Largely we rely on duplicates which + // could have been avoided already being avoided here. + unsigned &CondReg = CondRegs[Cond]; + if (!CondReg) + CondReg = promoteCondToReg(TestMBB, TestPos, TestLoc, Cond); + + // Rewriting a register def is trivial: we just replace the register and + // remove the setcc. + if (!SetCCI.mayStore()) { + assert(SetCCI.getOperand(0).isReg() && + "Cannot have a non-register defined operand to SETcc!"); + MRI->replaceRegWith(SetCCI.getOperand(0).getReg(), CondReg); + SetCCI.eraseFromParent(); + return; + } + + // Otherwise, we need to emit a store. + auto MIB = BuildMI(*SetCCI.getParent(), SetCCI.getIterator(), + SetCCI.getDebugLoc(), TII->get(X86::MOV8mr)); + // Copy the address operands. + for (int i = 0; i < X86::AddrNumOperands; ++i) + MIB.add(SetCCI.getOperand(i)); + + MIB.addReg(CondReg); + + MIB->setMemRefs(SetCCI.memoperands_begin(), SetCCI.memoperands_end()); + + SetCCI.eraseFromParent(); + return; +} diff --git a/external/llvm/lib/Target/X86/X86FrameLowering.cpp.REMOVED.git-id b/external/llvm/lib/Target/X86/X86FrameLowering.cpp.REMOVED.git-id index 21a6cc4b74..3698eb0eeb 100644 --- a/external/llvm/lib/Target/X86/X86FrameLowering.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/X86/X86FrameLowering.cpp.REMOVED.git-id @@ -1 +1 @@ -261c9ce22a183900c16001661122c89f5f9df44c \ No newline at end of file +aa97a905ded038ea12e52b9e5ae1161a84cc37db \ No newline at end of file diff --git a/external/llvm/lib/Target/X86/X86ISelLowering.cpp.REMOVED.git-id b/external/llvm/lib/Target/X86/X86ISelLowering.cpp.REMOVED.git-id index 55d38316b0..e8b2ccd300 100644 --- a/external/llvm/lib/Target/X86/X86ISelLowering.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/X86/X86ISelLowering.cpp.REMOVED.git-id @@ -1 +1 @@ -2bd332f545da11681e63ee22d9eef248b8fb7b64 \ No newline at end of file +3a23916ad4b5b53e4f14128e415bed14167d9f11 \ No newline at end of file diff --git a/external/llvm/lib/Target/X86/X86ISelLowering.h b/external/llvm/lib/Target/X86/X86ISelLowering.h index 3aa9d01bff..7820c3e032 100644 --- a/external/llvm/lib/Target/X86/X86ISelLowering.h +++ b/external/llvm/lib/Target/X86/X86ISelLowering.h @@ -1099,9 +1099,6 @@ namespace llvm { bool lowerInterleavedStore(StoreInst *SI, ShuffleVectorInst *SVI, unsigned Factor) const override; - - void finalizeLowering(MachineFunction &MF) const override; - protected: std::pair findRepresentativeClass(const TargetRegisterInfo *TRI, diff --git a/external/llvm/lib/Target/X86/X86InstrArithmetic.td b/external/llvm/lib/Target/X86/X86InstrArithmetic.td index d09deb5b75..98cc8fb743 100644 --- a/external/llvm/lib/Target/X86/X86InstrArithmetic.td +++ b/external/llvm/lib/Target/X86/X86InstrArithmetic.td @@ -1334,7 +1334,7 @@ let Predicates = [HasBMI2] in { } //===----------------------------------------------------------------------===// -// ADCX Instruction +// ADCX and ADOX Instructions // let Predicates = [HasADX], Defs = [EFLAGS], Uses = [EFLAGS], Constraints = "$src0 = $dst", AddedComplexity = 10 in { @@ -1349,6 +1349,15 @@ let Predicates = [HasADX], Defs = [EFLAGS], Uses = [EFLAGS], [(set GR64:$dst, EFLAGS, (X86adc_flag GR64:$src0, GR64:$src, EFLAGS))], IIC_BIN_CARRY_NONMEM>, T8PD; + + // We don't have patterns for ADOX yet. + let hasSideEffects = 0 in { + def ADOX32rr : I<0xF6, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src0, GR32:$src), + "adox{l}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS; + + def ADOX64rr : RI<0xF6, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src0, GR64:$src), + "adox{q}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS; + } // hasSideEffects = 0 } // SchedRW let mayLoad = 1, SchedRW = [WriteALULd] in { @@ -1363,27 +1372,14 @@ let Predicates = [HasADX], Defs = [EFLAGS], Uses = [EFLAGS], [(set GR64:$dst, EFLAGS, (X86adc_flag GR64:$src0, (loadi64 addr:$src), EFLAGS))], IIC_BIN_CARRY_MEM>, T8PD; - } -} -//===----------------------------------------------------------------------===// -// ADOX Instruction -// -let Predicates = [HasADX], hasSideEffects = 0, Defs = [EFLAGS], - Uses = [EFLAGS] in { - let SchedRW = [WriteALU] in { - def ADOX32rr : I<0xF6, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src), - "adox{l}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS; - - def ADOX64rr : RI<0xF6, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src), - "adox{q}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS; - } // SchedRW - - let mayLoad = 1, SchedRW = [WriteALULd] in { - def ADOX32rm : I<0xF6, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src), + // We don't have patterns for ADOX yet. + let hasSideEffects = 0 in { + def ADOX32rm : I<0xF6, MRMSrcMem, (outs GR32:$dst), (ins GR32:$src0, i32mem:$src), "adox{l}\t{$src, $dst|$dst, $src}", [], IIC_BIN_MEM>, T8XS; - def ADOX64rm : RI<0xF6, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src), + def ADOX64rm : RI<0xF6, MRMSrcMem, (outs GR64:$dst), (ins GR64:$src0, i64mem:$src), "adox{q}\t{$src, $dst|$dst, $src}", [], IIC_BIN_MEM>, T8XS; } + } // hasSideEffects = 0 } diff --git a/external/llvm/lib/Target/X86/X86InstrCompiler.td b/external/llvm/lib/Target/X86/X86InstrCompiler.td index d66d9258e9..b3371c96cc 100644 --- a/external/llvm/lib/Target/X86/X86InstrCompiler.td +++ b/external/llvm/lib/Target/X86/X86InstrCompiler.td @@ -473,7 +473,7 @@ let Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, FP7, ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7, MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, - XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS], + XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS, DF], usesCustomInserter = 1, Uses = [ESP, SSP] in { def TLS_addr32 : I<0, Pseudo, (outs), (ins i32mem:$sym), "# TLS_addr32", @@ -493,7 +493,7 @@ let Defs = [RAX, RCX, RDX, RSI, RDI, R8, R9, R10, R11, ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7, MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, - XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS], + XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS, DF], usesCustomInserter = 1, Uses = [RSP, SSP] in { def TLS_addr64 : I<0, Pseudo, (outs), (ins i64mem:$sym), "# TLS_addr64", @@ -509,7 +509,7 @@ def TLS_base_addr64 : I<0, Pseudo, (outs), (ins i64mem:$sym), // For i386, the address of the thunk is passed on the stack, on return the // address of the variable is in %eax. %ecx is trashed during the function // call. All other registers are preserved. -let Defs = [EAX, ECX, EFLAGS], +let Defs = [EAX, ECX, EFLAGS, DF], Uses = [ESP, SSP], usesCustomInserter = 1 in def TLSCall_32 : I<0, Pseudo, (outs), (ins i32mem:$sym), @@ -522,7 +522,7 @@ def TLSCall_32 : I<0, Pseudo, (outs), (ins i32mem:$sym), // %rdi. The lowering will do the right thing with RDI. // On return the address of the variable is in %rax. All other // registers are preserved. -let Defs = [RAX, EFLAGS], +let Defs = [RAX, EFLAGS, DF], Uses = [RSP, SSP], usesCustomInserter = 1 in def TLSCall_64 : I<0, Pseudo, (outs), (ins i64mem:$sym), diff --git a/external/llvm/lib/Target/X86/X86InstrInfo.cpp.REMOVED.git-id b/external/llvm/lib/Target/X86/X86InstrInfo.cpp.REMOVED.git-id index 97a7b2f5af..d94e8d552b 100644 --- a/external/llvm/lib/Target/X86/X86InstrInfo.cpp.REMOVED.git-id +++ b/external/llvm/lib/Target/X86/X86InstrInfo.cpp.REMOVED.git-id @@ -1 +1 @@ -7ca1c58184f63fd2101868310f1c26d6b58a73b0 \ No newline at end of file +11ada51a87046aa82b69a5d566a6dc47e0f5fe10 \ No newline at end of file diff --git a/external/llvm/lib/Target/X86/X86InstrInfo.h b/external/llvm/lib/Target/X86/X86InstrInfo.h index 02a09c340c..2b5ad934f9 100644 --- a/external/llvm/lib/Target/X86/X86InstrInfo.h +++ b/external/llvm/lib/Target/X86/X86InstrInfo.h @@ -77,6 +77,12 @@ unsigned getSETFromCond(CondCode CC, bool HasMemoryOperand = false); unsigned getCMovFromCond(CondCode CC, unsigned RegBytes, bool HasMemoryOperand = false); +// Turn jCC opcode into condition code. +CondCode getCondFromBranchOpc(unsigned Opc); + +// Turn setCC opcode into condition code. +CondCode getCondFromSETOpc(unsigned Opc); + // Turn CMov opcode into condition code. CondCode getCondFromCMovOpc(unsigned Opc); diff --git a/external/llvm/lib/Target/X86/X86InstrInfo.td.REMOVED.git-id b/external/llvm/lib/Target/X86/X86InstrInfo.td.REMOVED.git-id index 2be5c678db..62a5cb057a 100644 --- a/external/llvm/lib/Target/X86/X86InstrInfo.td.REMOVED.git-id +++ b/external/llvm/lib/Target/X86/X86InstrInfo.td.REMOVED.git-id @@ -1 +1 @@ -a657b19c08c97c74cf5b5a740500bb5a5601746c \ No newline at end of file +68f40c28d52791651f66d178cb08dfe2f269459e \ No newline at end of file diff --git a/external/llvm/lib/Target/X86/X86InstrSystem.td b/external/llvm/lib/Target/X86/X86InstrSystem.td index 40d2dca4f9..576f87b13a 100644 --- a/external/llvm/lib/Target/X86/X86InstrSystem.td +++ b/external/llvm/lib/Target/X86/X86InstrSystem.td @@ -692,6 +692,19 @@ let Uses = [RAX, RBX, RCX, RDX], Defs = [RAX, RBX, RCX] in { } // Uses, Defs } // SchedRW +//===----------------------------------------------------------------------===// +// TS flag control instruction. +let SchedRW = [WriteSystem] in { +def CLTS : I<0x06, RawFrm, (outs), (ins), "clts", [], IIC_CLTS>, TB; +} + +//===----------------------------------------------------------------------===// +// IF (inside EFLAGS) management instructions. +let SchedRW = [WriteSystem], Uses = [EFLAGS], Defs = [EFLAGS] in { +def CLI : I<0xFA, RawFrm, (outs), (ins), "cli", [], IIC_CLI>; +def STI : I<0xFB, RawFrm, (outs), (ins), "sti", [], IIC_STI>; +} + //===----------------------------------------------------------------------===// // RDPID Instruction let SchedRW = [WriteSystem] in { diff --git a/external/llvm/lib/Target/X86/X86RegisterInfo.td b/external/llvm/lib/Target/X86/X86RegisterInfo.td index 2341e1fb0f..1a776dcd04 100644 --- a/external/llvm/lib/Target/X86/X86RegisterInfo.td +++ b/external/llvm/lib/Target/X86/X86RegisterInfo.td @@ -251,9 +251,19 @@ def ST7 : X86Reg<"st(7)", 7>, DwarfRegNum<[40, 19, 18]>; // Floating-point status word def FPSW : X86Reg<"fpsw", 0>; -// Status flags register +// Status flags register. +// +// Note that some flags that are commonly thought of as part of the status +// flags register are modeled separately. Typically this is due to instructions +// reading and updating those flags independently of all the others. We don't +// want to create false dependencies between these instructions and so we use +// a separate register to model them. def EFLAGS : X86Reg<"flags", 0>; +// The direction flag. +def DF : X86Reg<"DF", 0>; + + // Segment registers def CS : X86Reg<"cs", 1>; def DS : X86Reg<"ds", 3>; @@ -497,6 +507,10 @@ def FPCCR : RegisterClass<"X86", [i16], 16, (add FPSW)> { let CopyCost = -1; // Don't allow copying of status registers. let isAllocatable = 0; } +def DFCCR : RegisterClass<"X86", [i32], 32, (add DF)> { + let CopyCost = -1; // Don't allow copying of status registers. + let isAllocatable = 0; +} // AVX-512 vector/mask registers. def VR512 : RegisterClass<"X86", [v16f32, v8f64, v64i8, v32i16, v16i32, v8i64], diff --git a/external/llvm/lib/Target/X86/X86Schedule.td b/external/llvm/lib/Target/X86/X86Schedule.td index 2e21a97541..078d459634 100644 --- a/external/llvm/lib/Target/X86/X86Schedule.td +++ b/external/llvm/lib/Target/X86/X86Schedule.td @@ -608,12 +608,10 @@ def IIC_CMPXCHG_8B : InstrItinClass; def IIC_CMPXCHG_16B : InstrItinClass; def IIC_LODS : InstrItinClass; def IIC_OUTS : InstrItinClass; -def IIC_CLC : InstrItinClass; +def IIC_CLC_CMC_STC : InstrItinClass; def IIC_CLD : InstrItinClass; def IIC_CLI : InstrItinClass; -def IIC_CMC : InstrItinClass; def IIC_CLTS : InstrItinClass; -def IIC_STC : InstrItinClass; def IIC_STI : InstrItinClass; def IIC_STD : InstrItinClass; def IIC_XLAT : InstrItinClass; diff --git a/external/llvm/lib/Target/X86/X86ScheduleAtom.td b/external/llvm/lib/Target/X86/X86ScheduleAtom.td index e052ad9810..460b9823a7 100644 --- a/external/llvm/lib/Target/X86/X86ScheduleAtom.td +++ b/external/llvm/lib/Target/X86/X86ScheduleAtom.td @@ -514,12 +514,10 @@ def AtomItineraries : ProcessorItineraries< InstrItinData] >, InstrItinData] >, InstrItinData] >, - InstrItinData] >, + InstrItinData] >, InstrItinData] >, InstrItinData] >, - InstrItinData] >, InstrItinData] >, - InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, diff --git a/external/llvm/lib/Target/X86/X86TargetMachine.cpp b/external/llvm/lib/Target/X86/X86TargetMachine.cpp index ac242e1c00..e41e16d82d 100644 --- a/external/llvm/lib/Target/X86/X86TargetMachine.cpp +++ b/external/llvm/lib/Target/X86/X86TargetMachine.cpp @@ -62,6 +62,7 @@ void initializeX86CallFrameOptimizationPass(PassRegistry &); void initializeX86CmovConverterPassPass(PassRegistry &); void initializeX86ExecutionDepsFixPass(PassRegistry &); void initializeX86DomainReassignmentPass(PassRegistry &); +void initializeX86FlagsCopyLoweringPassPass(PassRegistry &); } // end namespace llvm @@ -80,6 +81,7 @@ extern "C" void LLVMInitializeX86Target() { initializeX86CmovConverterPassPass(PR); initializeX86ExecutionDepsFixPass(PR); initializeX86DomainReassignmentPass(PR); + initializeX86FlagsCopyLoweringPassPass(PR); } static std::unique_ptr createTLOF(const Triple &TT) { @@ -415,6 +417,7 @@ void X86PassConfig::addPreRegAlloc() { addPass(createX86CallFrameOptimization()); } + addPass(createX86FlagsCopyLoweringPass()); addPass(createX86WinAllocaExpander()); } void X86PassConfig::addMachineSSAOptimization() { diff --git a/external/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/external/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp index 5446541550..b2afa6f2c9 100644 --- a/external/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/external/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -507,14 +507,28 @@ void DeadArgumentEliminationPass::SurveyFunction(const Function &F) { // MaybeLive. Initialized to a list of RetCount empty lists. RetUses MaybeLiveRetUses(RetCount); - for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) - if (const ReturnInst *RI = dyn_cast(BB->getTerminator())) + bool HasMustTailCalls = false; + + for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { + if (const ReturnInst *RI = dyn_cast(BB->getTerminator())) { if (RI->getNumOperands() != 0 && RI->getOperand(0)->getType() != F.getFunctionType()->getReturnType()) { // We don't support old style multiple return values. MarkLive(F); return; } + } + + // If we have any returns of `musttail` results - the signature can't + // change + if (BB->getTerminatingMustTailCall() != nullptr) + HasMustTailCalls = true; + } + + if (HasMustTailCalls) { + DEBUG(dbgs() << "DeadArgumentEliminationPass - " << F.getName() + << " has musttail calls\n"); + } if (!F.hasLocalLinkage() && (!ShouldHackArguments || F.isIntrinsic())) { MarkLive(F); @@ -526,6 +540,9 @@ void DeadArgumentEliminationPass::SurveyFunction(const Function &F) { // Keep track of the number of live retvals, so we can skip checks once all // of them turn out to be live. unsigned NumLiveRetVals = 0; + + bool HasMustTailCallers = false; + // Loop all uses of the function. for (const Use &U : F.uses()) { // If the function is PASSED IN as an argument, its address has been @@ -536,6 +553,11 @@ void DeadArgumentEliminationPass::SurveyFunction(const Function &F) { return; } + // The number of arguments for `musttail` call must match the number of + // arguments of the caller + if (CS.isMustTailCall()) + HasMustTailCallers = true; + // If this use is anything other than a call site, the function is alive. const Instruction *TheCall = CS.getInstruction(); if (!TheCall) { // Not a direct call site? @@ -580,6 +602,11 @@ void DeadArgumentEliminationPass::SurveyFunction(const Function &F) { } } + if (HasMustTailCallers) { + DEBUG(dbgs() << "DeadArgumentEliminationPass - " << F.getName() + << " has musttail callers\n"); + } + // Now we've inspected all callers, record the liveness of our return values. for (unsigned i = 0; i != RetCount; ++i) MarkValue(CreateRet(&F, i), RetValLiveness[i], MaybeLiveRetUses[i]); @@ -593,12 +620,19 @@ void DeadArgumentEliminationPass::SurveyFunction(const Function &F) { for (Function::const_arg_iterator AI = F.arg_begin(), E = F.arg_end(); AI != E; ++AI, ++i) { Liveness Result; - if (F.getFunctionType()->isVarArg()) { + if (F.getFunctionType()->isVarArg() || HasMustTailCallers || + HasMustTailCalls) { // Variadic functions will already have a va_arg function expanded inside // them, making them potentially very sensitive to ABI changes resulting // from removing arguments entirely, so don't. For example AArch64 handles // register and stack HFAs very differently, and this is reflected in the // IR which has already been generated. + // + // `musttail` calls to this function restrict argument removal attempts. + // The signature of the caller must match the signature of the function. + // + // `musttail` calls in this function prevents us from changing its + // signature Result = Live; } else { // See what the effect of this use is (recording any uses that cause diff --git a/external/llvm/lib/Transforms/IPO/MergeFunctions.cpp b/external/llvm/lib/Transforms/IPO/MergeFunctions.cpp index 76b90391fb..8886af90ba 100644 --- a/external/llvm/lib/Transforms/IPO/MergeFunctions.cpp +++ b/external/llvm/lib/Transforms/IPO/MergeFunctions.cpp @@ -638,6 +638,19 @@ void MergeFunctions::filterInstsUnrelatedToPDI( DEBUG(dbgs() << " }\n"); } +// Don't merge tiny functions using a thunk, since it can just end up +// making the function larger. +static bool isThunkProfitable(Function * F) { + if (F->size() == 1) { + if (F->front().size() <= 2) { + DEBUG(dbgs() << "isThunkProfitable: " << F->getName() + << " is too small to bother creating a thunk for\n"); + return false; + } + } + return true; +} + // Replace G with a simple tail call to bitcast(F). Also (unless // MergeFunctionsPDI holds) replace direct uses of G with bitcast(F), // delete G. Under MergeFunctionsPDI, we use G itself for creating @@ -647,39 +660,6 @@ void MergeFunctions::filterInstsUnrelatedToPDI( // For better debugability, under MergeFunctionsPDI, we do not modify G's // call sites to point to F even when within the same translation unit. void MergeFunctions::writeThunk(Function *F, Function *G) { - if (!G->isInterposable() && !MergeFunctionsPDI) { - if (G->hasGlobalUnnamedAddr()) { - // G might have been a key in our GlobalNumberState, and it's illegal - // to replace a key in ValueMap with a non-global. - GlobalNumbers.erase(G); - // If G's address is not significant, replace it entirely. - Constant *BitcastF = ConstantExpr::getBitCast(F, G->getType()); - G->replaceAllUsesWith(BitcastF); - } else { - // Redirect direct callers of G to F. (See note on MergeFunctionsPDI - // above). - replaceDirectCallers(G, F); - } - } - - // If G was internal then we may have replaced all uses of G with F. If so, - // stop here and delete G. There's no need for a thunk. (See note on - // MergeFunctionsPDI above). - if (G->hasLocalLinkage() && G->use_empty() && !MergeFunctionsPDI) { - G->eraseFromParent(); - return; - } - - // Don't merge tiny functions using a thunk, since it can just end up - // making the function larger. - if (F->size() == 1) { - if (F->front().size() <= 2) { - DEBUG(dbgs() << "writeThunk: " << F->getName() - << " is too small to bother creating a thunk for\n"); - return; - } - } - BasicBlock *GEntryBlock = nullptr; std::vector PDIUnrelatedWL; BasicBlock *BB = nullptr; @@ -754,6 +734,10 @@ void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) { if (F->isInterposable()) { assert(G->isInterposable()); + if (!isThunkProfitable(F)) { + return; + } + // Make them both thunks to the same internal function. Function *H = Function::Create(F->getFunctionType(), F->getLinkage(), "", F->getParent()); @@ -770,11 +754,41 @@ void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) { F->setAlignment(MaxAlignment); F->setLinkage(GlobalValue::PrivateLinkage); ++NumDoubleWeak; + ++NumFunctionsMerged; } else { - writeThunk(F, G); - } + // For better debugability, under MergeFunctionsPDI, we do not modify G's + // call sites to point to F even when within the same translation unit. + if (!G->isInterposable() && !MergeFunctionsPDI) { + if (G->hasGlobalUnnamedAddr()) { + // G might have been a key in our GlobalNumberState, and it's illegal + // to replace a key in ValueMap with a non-global. + GlobalNumbers.erase(G); + // If G's address is not significant, replace it entirely. + Constant *BitcastF = ConstantExpr::getBitCast(F, G->getType()); + G->replaceAllUsesWith(BitcastF); + } else { + // Redirect direct callers of G to F. (See note on MergeFunctionsPDI + // above). + replaceDirectCallers(G, F); + } + } - ++NumFunctionsMerged; + // If G was internal then we may have replaced all uses of G with F. If so, + // stop here and delete G. There's no need for a thunk. (See note on + // MergeFunctionsPDI above). + if (G->hasLocalLinkage() && G->use_empty() && !MergeFunctionsPDI) { + G->eraseFromParent(); + ++NumFunctionsMerged; + return; + } + + if (!isThunkProfitable(F)) { + return; + } + + writeThunk(F, G); + ++NumFunctionsMerged; + } } /// Replace function F by function G. diff --git a/external/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp.REMOVED.git-id b/external/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp.REMOVED.git-id index 61a401111b..1ede1f83cb 100644 --- a/external/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp.REMOVED.git-id +++ b/external/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp.REMOVED.git-id @@ -1 +1 @@ -35ed592ac07d8e8a22a6b66073705c0d84ce501e \ No newline at end of file +8fa7d0684b94d2ad273f4204ed8a51d41f668b20 \ No newline at end of file diff --git a/external/llvm/lib/Transforms/Scalar/DivRemPairs.cpp b/external/llvm/lib/Transforms/Scalar/DivRemPairs.cpp index e383af89a3..e1bc590c5c 100644 --- a/external/llvm/lib/Transforms/Scalar/DivRemPairs.cpp +++ b/external/llvm/lib/Transforms/Scalar/DivRemPairs.cpp @@ -13,6 +13,8 @@ //===----------------------------------------------------------------------===// #include "llvm/Transforms/Scalar/DivRemPairs.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/MapVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/GlobalsModRef.h" #include "llvm/Analysis/TargetTransformInfo.h" @@ -48,7 +50,10 @@ static bool optimizeDivRem(Function &F, const TargetTransformInfo &TTI, // Insert all divide and remainder instructions into maps keyed by their // operands and opcode (signed or unsigned). - DenseMap DivMap, RemMap; + DenseMap DivMap; + // Use a MapVector for RemMap so that instructions are moved/inserted in a + // deterministic order. + MapVector RemMap; for (auto &BB : F) { for (auto &I : BB) { if (I.getOpcode() == Instruction::SDiv) @@ -67,14 +72,14 @@ static bool optimizeDivRem(Function &F, const TargetTransformInfo &TTI, // rare than division. for (auto &RemPair : RemMap) { // Find the matching division instruction from the division map. - Instruction *DivInst = DivMap[RemPair.getFirst()]; + Instruction *DivInst = DivMap[RemPair.first]; if (!DivInst) continue; // We have a matching pair of div/rem instructions. If one dominates the // other, hoist and/or replace one. NumPairs++; - Instruction *RemInst = RemPair.getSecond(); + Instruction *RemInst = RemPair.second; bool IsSigned = DivInst->getOpcode() == Instruction::SDiv; bool HasDivRemOp = TTI.hasDivRemOp(DivInst->getType(), IsSigned); diff --git a/external/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/external/llvm/lib/Transforms/Scalar/JumpThreading.cpp index 141c9938bf..2f1645433f 100644 --- a/external/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/external/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -1454,6 +1454,9 @@ FindMostPopularDest(BasicBlock *BB, if (PredToDest.second) DestPopularity[PredToDest.second]++; + if (DestPopularity.empty()) + return nullptr; + // Find the most popular dest. DenseMap::iterator DPI = DestPopularity.begin(); BasicBlock *MostPopularDest = DPI->first; @@ -1629,8 +1632,20 @@ bool JumpThreadingPass::ProcessThreadableEdges(Value *Cond, BasicBlock *BB, // threadable destination (the common case) we can avoid this. BasicBlock *MostPopularDest = OnlyDest; - if (MostPopularDest == MultipleDestSentinel) + if (MostPopularDest == MultipleDestSentinel) { + // Remove any loop headers from the Dest list, ThreadEdge conservatively + // won't process them, but we might have other destination that are eligible + // and we still want to process. + erase_if(PredToDestList, + [&](const std::pair &PredToDest) { + return LoopHeaders.count(PredToDest.second) != 0; + }); + + if (PredToDestList.empty()) + return false; + MostPopularDest = FindMostPopularDest(BB, PredToDestList); + } // Now that we know what the most popular destination is, factor all // predecessors that will jump to it into a single predecessor. diff --git a/external/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp b/external/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp index 2d0cb6fbf2..b98fd3370c 100644 --- a/external/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp +++ b/external/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp @@ -450,8 +450,10 @@ static bool shouldRewriteFunction(Function &F) { const auto &FunctionGCName = F.getGC(); const StringRef StatepointExampleName("statepoint-example"); const StringRef CoreCLRName("coreclr"); + const StringRef MonoName("mono"); return (StatepointExampleName == FunctionGCName) || - (CoreCLRName == FunctionGCName); + (CoreCLRName == FunctionGCName) || + (MonoName == FunctionGCName); } else return false; } diff --git a/external/llvm/lib/Transforms/Scalar/SCCP.cpp b/external/llvm/lib/Transforms/Scalar/SCCP.cpp index 69636ed3ac..3e12649dde 100644 --- a/external/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/external/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -1853,6 +1853,7 @@ static void findReturnsToZap(Function &F, if (CallInst *CI = BB.getTerminatingMustTailCall()) { DEBUG(dbgs() << "Can't zap return of the block due to present " << "musttail call : " << *CI << "\n"); + (void)CI; return; } diff --git a/external/llvm/lib/Transforms/Utils/FunctionComparator.cpp b/external/llvm/lib/Transforms/Utils/FunctionComparator.cpp index bddcbd86e9..75539428b6 100644 --- a/external/llvm/lib/Transforms/Utils/FunctionComparator.cpp +++ b/external/llvm/lib/Transforms/Utils/FunctionComparator.cpp @@ -710,7 +710,7 @@ int FunctionComparator::cmpInlineAsm(const InlineAsm *L, return Res; if (int Res = cmpNumbers(L->getDialect(), R->getDialect())) return Res; - llvm_unreachable("InlineAsm blocks were not uniqued."); + assert(L->getFunctionType() != R->getFunctionType()); return 0; } diff --git a/external/llvm/projects/CMakeLists.txt b/external/llvm/projects/CMakeLists.txt index 32617fd4ba..d5b39fd2dd 100644 --- a/external/llvm/projects/CMakeLists.txt +++ b/external/llvm/projects/CMakeLists.txt @@ -12,7 +12,8 @@ foreach(entry ${entries}) (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/test-suite) AND (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/parallel-libs) AND (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/openmp) AND - (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/debuginfo-tests)) + (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/debuginfo-tests) AND + (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/llvm-cbe)) add_subdirectory(${entry}) endif() endif() diff --git a/external/llvm/projects/llvm-cbe/.gitignore b/external/llvm/projects/llvm-cbe/.gitignore new file mode 100644 index 0000000000..0def2755df --- /dev/null +++ b/external/llvm/projects/llvm-cbe/.gitignore @@ -0,0 +1,21 @@ +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/external/llvm/projects/llvm-cbe/CMakeLists.txt b/external/llvm/projects/llvm-cbe/CMakeLists.txt new file mode 100644 index 0000000000..cc29966da9 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(lib) +add_subdirectory(tools) diff --git a/external/llvm/projects/llvm-cbe/LICENSE b/external/llvm/projects/llvm-cbe/LICENSE new file mode 100644 index 0000000000..42b02dd208 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/LICENSE @@ -0,0 +1,57 @@ +============================================================================== +LLVM Release License +============================================================================== +University of Illinois/NCSA +Open Source License +Copyright (c) 2003-2014 University of Illinois at Urbana-Champaign. +All rights reserved. +Developed by: +LLVM Team +University of Illinois at Urbana-Champaign +http://llvm.org +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimers. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimers in the +documentation and/or other materials provided with the distribution. +* Neither the names of the LLVM Team, University of Illinois at +Urbana-Champaign, nor the names of its contributors may be used to +endorse or promote products derived from this Software without specific +prior written permission. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. +============================================================================== +Copyrights and Licenses for Third Party Software Distributed with LLVM: +============================================================================== +The LLVM software contains code written by third parties. Such software will +have its own individual LICENSE.TXT file in the directory in which it appears. +This file will describe the copyrights, license, and restrictions which apply +to that code. +The disclaimer of warranty in the University of Illinois Open Source License +applies to all code in the LLVM Distribution, and nothing in any of the +other licenses gives permission to use the names of the LLVM Team or the +University of Illinois to endorse or promote products derived from this +Software. +The following pieces of software have additional or alternate copyrights, +licenses, and/or restrictions: +Program Directory +------- --------- +Autoconf llvm/autoconf +llvm/projects/ModuleMaker/autoconf +llvm/projects/sample/autoconf +Google Test llvm/utils/unittest/googletest +OpenBSD regex llvm/lib/Support/{reg*, COPYRIGHT.regex} +pyyaml tests llvm/test/YAMLParser/{*.data, LICENSE.TXT} +ARM contributions llvm/lib/Target/ARM/LICENSE.TXT +md5 contributions llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h diff --git a/external/llvm/projects/llvm-cbe/README.md b/external/llvm/projects/llvm-cbe/README.md new file mode 100644 index 0000000000..2b58ab609d --- /dev/null +++ b/external/llvm/projects/llvm-cbe/README.md @@ -0,0 +1,72 @@ +llvm-cbe +======== + +resurrected LLVM "C Backend", with improvements + + +INSTALLATION INSTRUCTIONS +========================= + +This version of the LLVM-CBE library works with LLVM 6.0 and 7.0. You will have +to compile this version of LLVM before you try to use LLVM-CBE. This +guide will walk you through the compilation and installation of both +tools and show usage statements to verify that the LLVM-CBE library is +compiled correctly. + +The library is known to compile on various Linux versions (Redhat, +Mageia, Ubuntu, Debian), Mac OS X, and Windows (Mingw-w64). + +Step 1: Installing LLVM +======================= + +LLVM-CBE relies on specific LLVM internals, and so it is best to use +it with a specific revision of the LLVM development tree. Currently, +llvm-cbe works with the LLVM 6.0 and 7.0 release versions and autotools. + +Note: to convert C to LLVM IR to run the tests, you will also need a C compiler such as clang. + +The first step is to compile LLVM on your machine +(this assumes an in-tree build, but out-of-tree will also work): + + cd $HOME + git clone https://github.com/llvm-mirror/llvm + cd llvm + git checkout release_37 + mkdir build + cd build + ../configure + make + +Step 2: Compiling LLVM-CBE +========================== + +Next, download and compile llvm-cbe from the same folder: + + cd $HOME/llvm/projects + git clone https://github.com/JuliaComputing/llvm-cbe + cd ../build + make + +Step 3: Usage Examples +====================== + +If llvm-cbe compiles, you should be able to run it with the following commands. +``` +$ cd $HOME/llvm/projects/llvm-cbe/test/selectionsort +$ ls +main.c +$ clang -S -emit-llvm main.c +$ ls +main.c main.ll +$ $(HOME)/llvm/build/Debug+Asserts/bin/llvm-cbe main.ll +``` + +Compile Generated C-Code and Run +================================ + +``` +$ gcc -o main.cbe main.cbe.c +$ ls +main.c main.cbe main.cbe.c main.ll +$ ./main.cbe +``` diff --git a/external/llvm/projects/llvm-cbe/docs/index.html b/external/llvm/projects/llvm-cbe/docs/index.html new file mode 100644 index 0000000000..d2e6786317 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/docs/index.html @@ -0,0 +1,6 @@ + + +

SAMPLE PROJECT DOCUMENTATION

+

This is just a placeholder

+ + diff --git a/external/llvm/projects/llvm-cbe/include/sample.h b/external/llvm/projects/llvm-cbe/include/sample.h new file mode 100644 index 0000000000..b3ce9ce292 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/include/sample.h @@ -0,0 +1,8 @@ +/* + * File: sample.h + * + * This is a sample header file that is global to the entire project. + * It is located here so that everyone will find it. + */ +extern int compute_sample (int a); + diff --git a/external/llvm/projects/llvm-cbe/lib/CMakeLists.txt b/external/llvm/projects/llvm-cbe/lib/CMakeLists.txt new file mode 100644 index 0000000000..310cf4abc0 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(Target) diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.cpp.REMOVED.git-id b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.cpp.REMOVED.git-id new file mode 100644 index 0000000000..4cbddff7d3 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.cpp.REMOVED.git-id @@ -0,0 +1 @@ +4d2af4c2a0589f2de37eb6097b2c6d6753aaef14 \ No newline at end of file diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.h b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.h new file mode 100644 index 0000000000..02fb035695 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CBackend.h @@ -0,0 +1,260 @@ + +#include "CTargetMachine.h" +#include "llvm/ADT/StringExtras.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/Analysis/LoopInfo.h" +#include "llvm/CodeGen/IntrinsicLowering.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/IR/Attributes.h" +#include "llvm/IR/CallingConv.h" +#include "llvm/IR/CallSite.h" +#include "llvm/IR/CFG.h" +#include "llvm/IR/Constants.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/GetElementPtrTypeIterator.h" +#include "llvm/IR/InstVisitor.h" +#include "llvm/IR/InlineAsm.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/Intrinsics.h" +#include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/Module.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectFileInfo.h" +#include "llvm/MC/MCRegisterInfo.h" +#include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCSymbol.h" +#include "llvm/Pass.h" +#include "llvm/IR/LegacyPassManager.h" +#include "llvm/Support/FormattedStream.h" +#include "llvm/Transforms/Scalar.h" + +#include + +namespace { + using namespace llvm; + + class CBEMCAsmInfo : public MCAsmInfo { + public: + CBEMCAsmInfo() { + PrivateGlobalPrefix = ""; + } + }; + + /// CWriter - This class is the main chunk of code that converts an LLVM + /// module to a C translation unit. + class CWriter : public FunctionPass, public InstVisitor { + std::string _Out; + raw_string_ostream Out; + raw_pwrite_stream &FileOut; + IntrinsicLowering *IL; + LoopInfo *LI; + const Module *TheModule; + const MCAsmInfo* TAsm; + const MCRegisterInfo *MRI; + const MCObjectFileInfo *MOFI; + MCContext *TCtx; + const DataLayout* TD; + + std::map FPConstantMap; + std::set ByValParams; + unsigned FPCounter; + unsigned OpaqueCounter; + + DenseMap AnonValueNumbers; + unsigned NextAnonValueNumber; + + /// UnnamedStructIDs - This contains a unique ID for each struct that is + /// either anonymous or has no name. + DenseMap UnnamedStructIDs; + unsigned NextAnonStructNumber; + + std::set TypedefDeclTypes; + std::set SelectDeclTypes; + std::set> CmpDeclTypes; + std::set>> CastOpDeclTypes; + std::set> InlineOpDeclTypes; + std::set CtorDeclTypes; + + DenseMap>, unsigned> UnnamedFunctionIDs; + unsigned NextFunctionNumber; + + // This is used to keep track of intrinsics that get generated to a lowered + // function. We must generate the prototypes before the function body which + // will only be expanded on first use + std::vector prototypesToGen; + + public: + static char ID; + explicit CWriter(raw_pwrite_stream &o) + : FunctionPass(ID), Out(_Out), FileOut(o), IL(0), LI(0), + TheModule(0), TAsm(0), MRI(0), MOFI(0), TCtx(0), TD(0), + OpaqueCounter(0), NextAnonValueNumber(0), + NextAnonStructNumber(0), NextFunctionNumber(0) { + FPCounter = 0; + } + + virtual StringRef getPassName() const { return "C backend"; } + + void getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired(); + AU.setPreservesCFG(); + } + + virtual bool doInitialization(Module &M); + virtual bool doFinalization(Module &M); + virtual bool runOnFunction(Function &F); + + private: + + void generateHeader(Module &M); + void declareOneGlobalVariable(GlobalVariable* I); + + void forwardDeclareStructs(raw_ostream &Out, Type *Ty, std::set &TypesPrinted); + void forwardDeclareFunctionTypedefs(raw_ostream &Out, Type *Ty, std::set &TypesPrinted); + + raw_ostream &printFunctionProto(raw_ostream &Out, FunctionType *Ty, + std::pair Attrs, + const std::string &Name, + iterator_range *ArgList); + raw_ostream &printFunctionProto(raw_ostream &Out, Function *F) { + return printFunctionProto(Out, F->getFunctionType(), std::make_pair(F->getAttributes(), F->getCallingConv()), GetValueName(F), NULL); + } + + raw_ostream &printFunctionDeclaration(raw_ostream &Out, FunctionType *Ty, + std::pair PAL = std::make_pair(AttributeList(), CallingConv::C)); + raw_ostream &printStructDeclaration(raw_ostream &Out, StructType *Ty); + raw_ostream &printArrayDeclaration(raw_ostream &Out, ArrayType *Ty); + raw_ostream &printVectorDeclaration(raw_ostream &Out, VectorType *Ty); + + raw_ostream &printTypeName(raw_ostream &Out, Type *Ty, bool isSigned = false, std::pair PAL = std::make_pair(AttributeList(), CallingConv::C)); + raw_ostream &printTypeNameUnaligned(raw_ostream &Out, Type *Ty, bool isSigned = false); + raw_ostream &printSimpleType(raw_ostream &Out, Type *Ty, bool isSigned); + raw_ostream &printTypeString(raw_ostream &Out, Type *Ty, bool isSigned); + + std::string getStructName(StructType *ST); + std::string getFunctionName(FunctionType *FT, std::pair PAL = std::make_pair(AttributeList(), CallingConv::C)); + std::string getArrayName(ArrayType *AT); + std::string getVectorName(VectorType *VT, bool Aligned); + + enum OperandContext { + ContextNormal, + ContextCasted, + // Casted context means the type-cast will be implicit, + // such as the RHS of a `var = RHS;` expression + // or inside a struct initializer expression + ContextStatic + // Static context means that it is being used in as a static initializer + // (also implies ContextCasted) + }; + + void writeOperandDeref(Value *Operand); + void writeOperand(Value *Operand, enum OperandContext Context = ContextNormal); + void writeInstComputationInline(Instruction &I); + void writeOperandInternal(Value *Operand, enum OperandContext Context = ContextNormal); + void writeOperandWithCast(Value* Operand, unsigned Opcode); + void opcodeNeedsCast(unsigned Opcode, bool &shouldCast, bool &castIsSigned); + + void writeOperandWithCast(Value* Operand, ICmpInst &I); + bool writeInstructionCast(Instruction &I); + void writeMemoryAccess(Value *Operand, Type *OperandType, + bool IsVolatile, unsigned Alignment); + + std::string InterpretASMConstraint(InlineAsm::ConstraintInfo& c); + + void lowerIntrinsics(Function &F); + /// Prints the definition of the intrinsic function F. Supports the + /// intrinsics which need to be explicitly defined in the CBackend. + void printIntrinsicDefinition(Function &F, raw_ostream &Out); + void printIntrinsicDefinition(FunctionType *funT, + unsigned Opcode, std::string OpName, + raw_ostream &Out); + + void printModuleTypes(raw_ostream &Out); + void printContainedTypes(raw_ostream &Out, Type *Ty, std::set &); + + void printFloatingPointConstants(Function &F); + void printFloatingPointConstants(const Constant *C); + + void printFunction(Function &); + void printBasicBlock(BasicBlock *BB); + void printLoop(Loop *L); + + void printCast(unsigned opcode, Type *SrcTy, Type *DstTy); + void printConstant(Constant *CPV, enum OperandContext Context); + void printConstantWithCast(Constant *CPV, unsigned Opcode); + bool printConstExprCast(ConstantExpr *CE); + void printConstantArray(ConstantArray *CPA, enum OperandContext Context); + void printConstantVector(ConstantVector *CV, enum OperandContext Context); + void printConstantDataSequential(ConstantDataSequential *CDS, enum OperandContext Context); + bool printConstantString(Constant *C, enum OperandContext Context); + + bool isEmptyType(Type *Ty) const; + bool isAddressExposed(Value *V) const; + bool isInlinableInst(Instruction &I) const; + AllocaInst *isDirectAlloca(Value *V) const; + bool isInlineAsm(Instruction& I) const; + + // Instruction visitation functions + friend class InstVisitor; + + void visitReturnInst(ReturnInst &I); + void visitBranchInst(BranchInst &I); + void visitSwitchInst(SwitchInst &I); + void visitIndirectBrInst(IndirectBrInst &I); + void visitInvokeInst(InvokeInst &I) { + llvm_unreachable("Lowerinvoke pass didn't work!"); + } + void visitResumeInst(ResumeInst &I) { + llvm_unreachable("DwarfEHPrepare pass didn't work!"); + } + void visitUnreachableInst(UnreachableInst &I); + + void visitPHINode(PHINode &I); + void visitBinaryOperator(BinaryOperator &I); + void visitICmpInst(ICmpInst &I); + void visitFCmpInst(FCmpInst &I); + + void visitCastInst (CastInst &I); + void visitSelectInst(SelectInst &I); + void visitCallInst (CallInst &I); + void visitInlineAsm(CallInst &I); + bool visitBuiltinCall(CallInst &I, Intrinsic::ID ID); + + void visitAllocaInst(AllocaInst &I); + void visitLoadInst (LoadInst &I); + void visitStoreInst (StoreInst &I); + void visitGetElementPtrInst(GetElementPtrInst &I); + void visitVAArgInst (VAArgInst &I); + + void visitInsertElementInst(InsertElementInst &I); + void visitExtractElementInst(ExtractElementInst &I); + void visitShuffleVectorInst(ShuffleVectorInst &SVI); + + void visitInsertValueInst(InsertValueInst &I); + void visitExtractValueInst(ExtractValueInst &I); + + void visitInstruction(Instruction &I) { +#ifndef NDEBUG + errs() << "C Writer does not know about " << I; +#endif + llvm_unreachable(0); + } + + void outputLValue(Instruction *I) { + Out << " " << GetValueName(I) << " = "; + } + + bool isGotoCodeNecessary(BasicBlock *From, BasicBlock *To); + void printPHICopiesForSuccessor(BasicBlock *CurBlock, + BasicBlock *Successor, unsigned Indent); + void printBranchToBlock(BasicBlock *CurBlock, BasicBlock *SuccBlock, + unsigned Indent); + void printGEPExpression(Value *Ptr, gep_type_iterator I, gep_type_iterator E); + + std::string GetValueName(Value *Operand); + }; +} diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CMakeLists.txt b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CMakeLists.txt new file mode 100644 index 0000000000..fa819a4e0b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CMakeLists.txt @@ -0,0 +1,5 @@ +add_llvm_target(CBackendCodeGen + CBackend.cpp + ) + +add_subdirectory(TargetInfo) diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CTargetMachine.h b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CTargetMachine.h new file mode 100644 index 0000000000..62463e105b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/CTargetMachine.h @@ -0,0 +1,44 @@ +//===-- CTargetMachine.h - TargetMachine for the C backend ------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file declares the TargetMachine that is used by the C backend. +// +//===----------------------------------------------------------------------===// + +#ifndef CTARGETMACHINE_H +#define CTARGETMACHINE_H + +#include "llvm/Target/TargetMachine.h" +#include "llvm/IR/DataLayout.h" + +namespace llvm { + +struct CTargetMachine : public TargetMachine { + CTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, + const TargetOptions &Options, Optional RM, + Optional CM, CodeGenOpt::Level OL, bool JIT) + : TargetMachine(T, "", TT, CPU, FS, Options) { } + + /// Add passes to the specified pass manager to get the specified file + /// emitted. Typically this will involve several steps of code generation. + bool addPassesToEmitFile( + PassManagerBase &PM, raw_pwrite_stream &Out, +#if LLVM_VERSION_MAJOR == 7 + raw_pwrite_stream *DwoOut, +#endif + CodeGenFileType FileType, bool DisableVerify=true, MachineModuleInfo *MMI=nullptr) override; + +}; + +extern Target TheCBackendTarget; + +} // End llvm namespace + + +#endif diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/LLVMBuild.txt b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/LLVMBuild.txt new file mode 100644 index 0000000000..e64feb0e60 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/LLVMBuild.txt @@ -0,0 +1,31 @@ +;===- ./lib/Target/CBackend/LLVMBuild.txt ----------------------*- Conf -*--===; +; +; The LLVM Compiler Infrastructure +; +; This file is distributed under the University of Illinois Open Source +; License. See LICENSE.TXT for details. +; +;===------------------------------------------------------------------------===; +; +; This is an LLVMBuild description file for the components in this subdirectory. +; +; For more information on the LLVMBuild system, please see: +; +; http://llvm.org/docs/LLVMBuild.html +; +;===------------------------------------------------------------------------===; + +[common] +subdirectories = TargetInfo + +[component_0] +type = TargetGroup +name = CBackend +parent = Target + +[component_1] +type = Library +name = CBackendCodeGen +parent = CBackend +required_libraries = Analysis CBackendInfo CodeGen Core MC Scalar Support Target TransformUtils +add_to_library_groups = CBackend diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CBackendTargetInfo.cpp b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CBackendTargetInfo.cpp new file mode 100644 index 0000000000..9423e0abaf --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CBackendTargetInfo.cpp @@ -0,0 +1,21 @@ +//===-- CBackendTargetInfo.cpp - CBackend Target Implementation -----------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "../CTargetMachine.h" +#include "llvm/IR/Module.h" +#include "llvm/Support/TargetRegistry.h" +using namespace llvm; + +Target llvm::TheCBackendTarget; + +extern "C" void LLVMInitializeCBackendTargetInfo() { + RegisterTarget<> X(TheCBackendTarget, "c", "C backend", "C"); +} + +extern "C" void LLVMInitializeCBackendTargetMC() {} diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CMakeLists.txt b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CMakeLists.txt new file mode 100644 index 0000000000..62036161fd --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/CMakeLists.txt @@ -0,0 +1,5 @@ +include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. ) + +add_llvm_library(LLVMCBackendInfo + CBackendTargetInfo.cpp + ) diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/LLVMBuild.txt b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/LLVMBuild.txt new file mode 100644 index 0000000000..1b47d8ebbe --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CBackend/TargetInfo/LLVMBuild.txt @@ -0,0 +1,23 @@ +;===- ./lib/Target/CBackend/TargetInfo/LLVMBuild.txt -----------*- Conf -*--===; +; +; The LLVM Compiler Infrastructure +; +; This file is distributed under the University of Illinois Open Source +; License. See LICENSE.TXT for details. +; +;===------------------------------------------------------------------------===; +; +; This is an LLVMBuild description file for the components in this subdirectory. +; +; For more information on the LLVMBuild system, please see: +; +; http://llvm.org/docs/LLVMBuild.html +; +;===------------------------------------------------------------------------===; + +[component_0] +type = Library +name = CBackendInfo +parent = CBackend +required_libraries = MC Support Target +add_to_library_groups = CBackend diff --git a/external/llvm/projects/llvm-cbe/lib/Target/CMakeLists.txt b/external/llvm/projects/llvm-cbe/lib/Target/CMakeLists.txt new file mode 100644 index 0000000000..bc216b4365 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/lib/Target/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(CBackend) diff --git a/external/llvm/projects/llvm-cbe/test/.gitignore b/external/llvm/projects/llvm-cbe/test/.gitignore new file mode 100644 index 0000000000..1b3fac7675 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/.gitignore @@ -0,0 +1,5 @@ +*.ll +*.exe +*.cbe +*.cexe +*.cbe.c diff --git a/external/llvm/projects/llvm-cbe/test/CBEWarningsErrors.txt b/external/llvm/projects/llvm-cbe/test/CBEWarningsErrors.txt new file mode 100644 index 0000000000..d2dfdfffb8 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/CBEWarningsErrors.txt @@ -0,0 +1,31 @@ +CBE Warnings/Errors + +1. "warning: conflicting types for built-in function + +‘memcpy’ [enabled by default]" + +Affecting: +test093.cbe.c:126:23 +test095.cbe.c:121:23 + +This warning is generated when an array is declared and + +initialized in the same line. + +/*-----------------------*/ + +2. "error: cannot convert to a pointer type" + +Affecting: +test089.cbe.c:158:3 +test091.cbe.c:143:3 + +/*-----------------------*/ + +3. "warning: cast from pointer to integer of different size + +[-Wpointer-to-int-cast]" + +Affecting: +test101.cbe.c:214:10 +test101.cbe.c:214:43 diff --git a/external/llvm/projects/llvm-cbe/test/selectionsort/main.c b/external/llvm/projects/llvm-cbe/test/selectionsort/main.c new file mode 100644 index 0000000000..47cf877d34 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/selectionsort/main.c @@ -0,0 +1,39 @@ +#include + +int main() +{ + int array[100], n, c, d, position, swap; + + printf("Enter number of elements\n"); + scanf("%d", &n); + + printf("Enter %d integers\n", n); + + for (c = 0; c < n; c++) + scanf("%d", &array[c]); + + for (c = 0; c < (n - 1); c++) + { + position = c; + + for (d = c +1; d < n; d++) + { + if (array[position] > array[d]) + position = d; + } + if (position != c) + { + swap = array[c]; + array[c] = array[position]; + array[position] = swap; + } + } + + printf("Sorted list in ascending order:\n"); + + for (c = 0; c < n; c++) + printf("%d\n", array[c]); + + return 0; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test001.c b/external/llvm/projects/llvm-cbe/test/test001.c new file mode 100644 index 0000000000..817d7ca8ca --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test001.c @@ -0,0 +1,17 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will return the correct number. +// +//===----------------------------------------------------------------------===// + +int main() +{ + return 6; +} diff --git a/external/llvm/projects/llvm-cbe/test/test002.c b/external/llvm/projects/llvm-cbe/test/test002.c new file mode 100644 index 0000000000..9af3c34ee8 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test002.c @@ -0,0 +1,21 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a for loop correctly. +// *TW +// +//===----------------------------------------------------------------------===// + +int main() +{ + int i, x = 0; + for (i = 0; i < 6; i++) + ++x; + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test003.c b/external/llvm/projects/llvm-cbe/test/test003.c new file mode 100644 index 0000000000..4aa8eb6bfb --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test003.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a while loop correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() +{ + int i = 0, x = 0; + while (i < 6) { + ++x; + ++i; + } + return x; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test004.c b/external/llvm/projects/llvm-cbe/test/test004.c new file mode 100644 index 0000000000..ba619f09bb --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test004.c @@ -0,0 +1,21 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute an if/else statement correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() { + int x = 3; + x += 3; + if (x == 6) + return x; + else + return 0; +} diff --git a/external/llvm/projects/llvm-cbe/test/test005.c b/external/llvm/projects/llvm-cbe/test/test005.c new file mode 100644 index 0000000000..8b9323a97e --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test005.c @@ -0,0 +1,21 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a nested for loop correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() { + int i, j, x = 0; + for (i = 0; i < 3; i++) + for (j = 0; j < 2; j++) + ++x; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test006.c b/external/llvm/projects/llvm-cbe/test/test006.c new file mode 100644 index 0000000000..b513d75d4a --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test006.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a nested while loop correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() { + int i = 0, j = 0, x = 0; + while (i < 6) { + while (j < 6) { + ++x; + ++j; + } + ++i; + } + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test007.c b/external/llvm/projects/llvm-cbe/test/test007.c new file mode 100644 index 0000000000..50c895d181 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test007.c @@ -0,0 +1,33 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a switch statement correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() { + char var = 'x'; + + switch (var) { + case 'z' : + return 0; + break; + case 'y' : + return 1; + break; + case 'x' : + return 6; + break; + case 'w' : + return 7; + break; + default : + return 100; + } +} diff --git a/external/llvm/projects/llvm-cbe/test/test008.c b/external/llvm/projects/llvm-cbe/test/test008.c new file mode 100644 index 0000000000..283b8f73ba --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test008.c @@ -0,0 +1,29 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a struct correctly. +// *TW +//===----------------------------------------------------------------------===// + +struct test { + int var1; + int var2; + int var3; +}; + +int main() { + + struct test variable; + + variable.var2 = 5; + variable.var3 = 6; + variable.var1 = 9; + + return variable.var3; +} diff --git a/external/llvm/projects/llvm-cbe/test/test009.c b/external/llvm/projects/llvm-cbe/test/test009.c new file mode 100644 index 0000000000..a46509105c --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test009.c @@ -0,0 +1,21 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute an array correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() { + int example[10]; + int i; + for (i = 0;i < 10; ++i) { + example[i] = i; + } + return example[6]; +} diff --git a/external/llvm/projects/llvm-cbe/test/test010.c b/external/llvm/projects/llvm-cbe/test/test010.c new file mode 100644 index 0000000000..e3841e64d3 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test010.c @@ -0,0 +1,43 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a nested switch statement correctly. +// *TW +//===----------------------------------------------------------------------===// + +int main() { + char var = 'x', var2; + switch (var) { + case 'z' : + return 0; + break; + case 'y' : + return 1; + break; + case 'x' : + var2 = 'b'; + + switch (var2) { + case 'a' : + return 10; + break; + case 'b' : + return 6; + break; + default : + return 18; + } + + case 'w' : + return 7; + break; + default : + return 100; + } +} diff --git a/external/llvm/projects/llvm-cbe/test/test011.c b/external/llvm/projects/llvm-cbe/test/test011.c new file mode 100644 index 0000000000..aa0ee7229f --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test011.c @@ -0,0 +1,20 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle addition between two variables. +// *TW +//===------------------------------------------------------------------------===// + +int main() +{ + int i = 2, t = 4, x = 0; + x = i+t; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test012.c b/external/llvm/projects/llvm-cbe/test/test012.c new file mode 100644 index 0000000000..403c635686 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test012.c @@ -0,0 +1,20 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle subtraction between two variables. +// *TW +//===----------------------------------------------------------------------------===// + +int main() +{ + int i = 8, t = 2, x = 0; + x = i-t; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test013.c b/external/llvm/projects/llvm-cbe/test/test013.c new file mode 100644 index 0000000000..444d4676b7 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test013.c @@ -0,0 +1,20 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle multiplication between two variables. +// *TW +//===------------------------------------------------------------------------------===// + +int main() +{ + int i = 3, t = 2, x = 0; + x = i*t; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test014.c b/external/llvm/projects/llvm-cbe/test/test014.c new file mode 100644 index 0000000000..e1dc6931f9 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test014.c @@ -0,0 +1,20 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle division between two variables. +// *TW +//===------------------------------------------------------------------------------===// + +int main() +{ + int i = 30, t = 5, x = 0; + x = i/t; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test015.c b/external/llvm/projects/llvm-cbe/test/test015.c new file mode 100644 index 0000000000..e4c2a5c03b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test015.c @@ -0,0 +1,20 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle modulus between two variables. +// *TW +//===------------------------------------------------------------------------------===// + +int main() +{ + int i = 26, t = 20, x = 0; + x = i%t; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test016.c b/external/llvm/projects/llvm-cbe/test/test016.c new file mode 100644 index 0000000000..0841840ebc --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test016.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the unary plus (+a) operator. +// Increases the amount of space the char data type to 4. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + char ch; + + if(sizeof(+ch) == 4) { + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test017.c b/external/llvm/projects/llvm-cbe/test/test017.c new file mode 100644 index 0000000000..0535862b30 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test017.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the unary minus (-a) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main() { + + signed int a = 10; + signed int b = -a; + + if(b == -10) { + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test018.c b/external/llvm/projects/llvm-cbe/test/test018.c new file mode 100644 index 0000000000..c02efa9d0e --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test018.c @@ -0,0 +1,21 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the incremental (++a) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 5; + + ++x; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test019.c b/external/llvm/projects/llvm-cbe/test/test019.c new file mode 100644 index 0000000000..1975bb9c5b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test019.c @@ -0,0 +1,21 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the decremental (--a) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 7; + + --x; + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test020.c b/external/llvm/projects/llvm-cbe/test/test020.c new file mode 100644 index 0000000000..a68801708d --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test020.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// greater than (>) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 3; + + if(x > y){ + return x; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test021.c b/external/llvm/projects/llvm-cbe/test/test021.c new file mode 100644 index 0000000000..93eed31d9b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test021.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// greater than or equal (>=) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 6; + + if(x >= y){ + return x; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test022.c b/external/llvm/projects/llvm-cbe/test/test022.c new file mode 100644 index 0000000000..895069a83b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test022.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// less than (<) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 12; + + + if(x < y){ + return x; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test023.c b/external/llvm/projects/llvm-cbe/test/test023.c new file mode 100644 index 0000000000..52348d3e16 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test023.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// less than or equal to (=<) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 6; + + if(x <= y){ + return x; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test024.c b/external/llvm/projects/llvm-cbe/test/test024.c new file mode 100644 index 0000000000..2c90879b87 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test024.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// equal (==) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 6; + + if(x == y){ + return x; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test025.c b/external/llvm/projects/llvm-cbe/test/test025.c new file mode 100644 index 0000000000..153cb40134 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test025.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// not equal (!=) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 2; + + if(x != y){ + return x; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test026.c b/external/llvm/projects/llvm-cbe/test/test026.c new file mode 100644 index 0000000000..874c06957d --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test026.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// AND (&&) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + +int x = 6; +int y = 6; +int z = 6; + + if(x == y && x == z){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test027.c b/external/llvm/projects/llvm-cbe/test/test027.c new file mode 100644 index 0000000000..d1322597c3 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test027.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// OR (||) relational logic operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int x = 6; + int y = 6; + int z = 6; + + if(x == y || x != z){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test028.c b/external/llvm/projects/llvm-cbe/test/test028.c new file mode 100644 index 0000000000..ce77d792f3 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test028.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// NOT (~a) bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = -7; + unsigned int b = 0; + + b = ~a; + if( b == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test029.c b/external/llvm/projects/llvm-cbe/test/test029.c new file mode 100644 index 0000000000..b7ac93ecf5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test029.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// AND (a&b) bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 6; //0110 + unsigned int b = 15; //1111 + unsigned int c = 0; + + c = a&b; + if(c == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test030.c b/external/llvm/projects/llvm-cbe/test/test030.c new file mode 100644 index 0000000000..333ce5aa01 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test030.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// OR (a&b) bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + +unsigned int a = 2; +unsigned int b = 4; +unsigned int c = 0; + + c = a|b; + if(c == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test031.c b/external/llvm/projects/llvm-cbe/test/test031.c new file mode 100644 index 0000000000..69d0dab0e1 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test031.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// XOR (a^b) bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 9; //1001 + unsigned int b = 15; //1111 + unsigned int c = 0; + + + c = a^b; + if(c == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test032.c b/external/llvm/projects/llvm-cbe/test/test032.c new file mode 100644 index 0000000000..ae63e2c4d2 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test032.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Binary Shift Left (a<>b) bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 13; //1100 + unsigned int b = 0; + + b = a >> 1; //0110 + if(b == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test034.c b/external/llvm/projects/llvm-cbe/test/test034.c new file mode 100644 index 0000000000..dd9106b0be --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test034.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Compound Addition Assignment(a+=b) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int a = 3; + int b = 3; + + a+=b; + if(a == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test035.c b/external/llvm/projects/llvm-cbe/test/test035.c new file mode 100644 index 0000000000..d1c0ae391f --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test035.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Compound Subtraction Assignment(a-=b) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int a = 9; + int b = 3; + + a-=b; + if(a == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test036.c b/external/llvm/projects/llvm-cbe/test/test036.c new file mode 100644 index 0000000000..d8d5a1957c --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test036.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Compound Multiplication Assignment(a*=b) operator. +// *TW +//===------------------------------------------------------------------------===// +int main(){ + + int a = 2; + int b = 3; + + a*=b; + if(a == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test037.c b/external/llvm/projects/llvm-cbe/test/test037.c new file mode 100644 index 0000000000..5bf5ee705a --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test037.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Compound Division Assignment(a/=b) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int a = 30; + int b = 5; + + a/=b; + if(a == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test038.c b/external/llvm/projects/llvm-cbe/test/test038.c new file mode 100644 index 0000000000..efbe234607 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test038.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Compound Modulus Assignment(a%=b) operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int a = 20; + int b = 14; + + a%=b; + if(a == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test039.c b/external/llvm/projects/llvm-cbe/test/test039.c new file mode 100644 index 0000000000..112d7f6970 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test039.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// AND (a&=b) Compound Assignment bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 6; //0110 + unsigned int b = 15; //1111 + + a&=b; + if(a == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test040.c b/external/llvm/projects/llvm-cbe/test/test040.c new file mode 100644 index 0000000000..5285fb73ec --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test040.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// OR (a|=b) Compound Assignment bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 2; + unsigned int b = 4; + + a|=b; + if(a == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test041.c b/external/llvm/projects/llvm-cbe/test/test041.c new file mode 100644 index 0000000000..f04e682356 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test041.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// XOR (a^=b) Compound Assignment bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 9; //1001 + unsigned int b = 15; //1111 + + a^=b; + if(a == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test042.c b/external/llvm/projects/llvm-cbe/test/test042.c new file mode 100644 index 0000000000..5b4f12d808 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test042.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Binary Shift Left (a<<=b) Compound Assignment bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 3; //0011 + + a <<= 1; //0110 + if( a == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test043.c b/external/llvm/projects/llvm-cbe/test/test043.c new file mode 100644 index 0000000000..3b42179304 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test043.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle the +// Binary Shift Right (a>>=b) Compound Assignment bitwise operator. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 13; //1100 + + a >>= 1; //0110 + if(a == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test044.c b/external/llvm/projects/llvm-cbe/test/test044.c new file mode 100644 index 0000000000..dbb9d31ad9 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test044.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a char. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + char a = 'A' ; //65 + int ia = 0; + + ia = a; + ia-=59; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test045.c b/external/llvm/projects/llvm-cbe/test/test045.c new file mode 100644 index 0000000000..50aaa8effc --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test045.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring +// and returning a signed char. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + signed char a = 'A'; + int ia = 0; + + ia = a; + ia-=59; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test046.c b/external/llvm/projects/llvm-cbe/test/test046.c new file mode 100644 index 0000000000..ea57085caf --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test046.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring +// and returning an unsigned char. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned char a = 'A'; + int ia = 0; + + ia = a; + ia-=59; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test047.c b/external/llvm/projects/llvm-cbe/test/test047.c new file mode 100644 index 0000000000..2b90d14c7f --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test047.c @@ -0,0 +1,19 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning an int. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + int a = 6; + return a; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test048.c b/external/llvm/projects/llvm-cbe/test/test048.c new file mode 100644 index 0000000000..c30694ff50 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test048.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle +// declaring and returning a short int. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + short int a = 6; + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test049.c b/external/llvm/projects/llvm-cbe/test/test049.c new file mode 100644 index 0000000000..bb4a080198 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test049.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle +// declaring and returning a long int. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + long int a = 6; + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test050.c b/external/llvm/projects/llvm-cbe/test/test050.c new file mode 100644 index 0000000000..f69c7cee23 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test050.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle +// declaring and returning a signed int. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + signed int a = 6; + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test051.c b/external/llvm/projects/llvm-cbe/test/test051.c new file mode 100644 index 0000000000..61f1e03d57 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test051.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle +// declaring and returning a unsigned int. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + unsigned int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test052.c b/external/llvm/projects/llvm-cbe/test/test052.c new file mode 100644 index 0000000000..48e1ce67f8 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test052.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a float. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + float a = 6.0; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test053.c b/external/llvm/projects/llvm-cbe/test/test053.c new file mode 100644 index 0000000000..86dd5691a7 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test053.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a double. +// *TW +//===------------------------------------------------------------------------===// + +int main(){ + + double a = 6.0; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test054.c b/external/llvm/projects/llvm-cbe/test/test054.c new file mode 100644 index 0000000000..4c86601412 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test054.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a long double. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + long double a = 6.0; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test055.c b/external/llvm/projects/llvm-cbe/test/test055.c new file mode 100644 index 0000000000..cd7891acfe --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test055.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a short. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + short a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test056.c b/external/llvm/projects/llvm-cbe/test/test056.c new file mode 100644 index 0000000000..b12df1df99 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test056.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a signed short. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + signed short a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test057.c b/external/llvm/projects/llvm-cbe/test/test057.c new file mode 100644 index 0000000000..50678081ec --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test057.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning an unsigned short. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + unsigned short a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test058.c b/external/llvm/projects/llvm-cbe/test/test058.c new file mode 100644 index 0000000000..cdbfac068f --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test058.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a signed short int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + signed short int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test059.c b/external/llvm/projects/llvm-cbe/test/test059.c new file mode 100644 index 0000000000..4de964a13e --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test059.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a unsigned short int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + unsigned short int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test060.c b/external/llvm/projects/llvm-cbe/test/test060.c new file mode 100644 index 0000000000..a0a6e16949 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test060.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a long. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + long a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test061.c b/external/llvm/projects/llvm-cbe/test/test061.c new file mode 100644 index 0000000000..d1bf812aa0 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test061.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a signed long. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + signed long a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test062.c b/external/llvm/projects/llvm-cbe/test/test062.c new file mode 100644 index 0000000000..077ace8b32 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test062.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a unsigned long. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + unsigned long a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test063.c b/external/llvm/projects/llvm-cbe/test/test063.c new file mode 100644 index 0000000000..78fbe390f5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test063.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a signed long int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + signed long int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test064.c b/external/llvm/projects/llvm-cbe/test/test064.c new file mode 100644 index 0000000000..c26a3da001 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test064.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and +// returning an unsigned long int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + unsigned long int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test065.c b/external/llvm/projects/llvm-cbe/test/test065.c new file mode 100644 index 0000000000..d9b299752c --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test065.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a long long. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + long long a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test066.c b/external/llvm/projects/llvm-cbe/test/test066.c new file mode 100644 index 0000000000..b4adc62240 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test066.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a long long int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + long long int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test067.c b/external/llvm/projects/llvm-cbe/test/test067.c new file mode 100644 index 0000000000..9d786b5210 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test067.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a signed long long. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + signed long long a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test068.c b/external/llvm/projects/llvm-cbe/test/test068.c new file mode 100644 index 0000000000..1f72ecd1b7 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test068.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning a unsigned long long. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + unsigned long long a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test069.c b/external/llvm/projects/llvm-cbe/test/test069.c new file mode 100644 index 0000000000..bc611f13c1 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test069.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring +// and returning a signed long long int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + signed long long int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test070.c b/external/llvm/projects/llvm-cbe/test/test070.c new file mode 100644 index 0000000000..94c42bd8b5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test070.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===-------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle declaring and returning an unsigned long long int. +// *TW +//===-------------------------------------------------------------------------------===// + +int main(){ + + unsigned long long int a = 6; + + int ia = 0; + ia = (int)a; + + return ia; +} diff --git a/external/llvm/projects/llvm-cbe/test/test071.c b/external/llvm/projects/llvm-cbe/test/test071.c new file mode 100644 index 0000000000..7417c499ae --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test071.c @@ -0,0 +1,19 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute an if statement correctly. +// *TW +// +//===----------------------------------------------------------------------===// + +int main() { + int x = 6; + if (x == 6) + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test072.c b/external/llvm/projects/llvm-cbe/test/test072.c new file mode 100644 index 0000000000..7c7cbcb391 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test072.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute an else-if statement correctly. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + int x = 6; + if (x == 4) { + return 2; + } else if (x == 6){ + return 6; + } else { + return 8; + } +} + diff --git a/external/llvm/projects/llvm-cbe/test/test073.c b/external/llvm/projects/llvm-cbe/test/test073.c new file mode 100644 index 0000000000..006a7348e8 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test073.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a do-while statement correctly. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + int x = 0; + do { + x++; + } while (x < 6); + + return x; +} diff --git a/external/llvm/projects/llvm-cbe/test/test074.c b/external/llvm/projects/llvm-cbe/test/test074.c new file mode 100644 index 0000000000..bb3ff37858 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test074.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a break/continue statement correctly. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + int x; + for (x=0; x<=25; x++) { + if (x == 6) + break; + if (x < 15) + continue; + } + return x; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test075.c b/external/llvm/projects/llvm-cbe/test/test075.c new file mode 100644 index 0000000000..a0601622c2 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test075.c @@ -0,0 +1,28 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a Goto-Label statement correctly. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + int x = 0; + goto label; + + for(;;) { + x = 10; + return x; + } + + label: + x = 6; + return x; + +} diff --git a/external/llvm/projects/llvm-cbe/test/test076.c b/external/llvm/projects/llvm-cbe/test/test076.c new file mode 100644 index 0000000000..d5f149eb3b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test076.c @@ -0,0 +1,22 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use an integer pointer and +// return the value located originally at the address of x. +// *TW +// +//===----------------------------------------------------------------------===// + +int main() { + + int x = 6, y = 0, *ip = 0; + ip = &x; + y = *ip; + return y; +} diff --git a/external/llvm/projects/llvm-cbe/test/test077.c b/external/llvm/projects/llvm-cbe/test/test077.c new file mode 100644 index 0000000000..a6e1fc7985 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test077.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use a char pointer and +// return the value located originally at the address of x. +// *TW +// +//===----------------------------------------------------------------------===// + +int main() { + char x = 'a', y = 'b', *cp; + cp = &x; + y = *cp; + if (y == 'a'){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test078.c b/external/llvm/projects/llvm-cbe/test/test078.c new file mode 100644 index 0000000000..cc60c18e34 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test078.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use a NULL pointer and +// confirm that it is equal to zero. +// *TW +// +//===----------------------------------------------------------------------===// +#include + +int main() { + int *ptr = NULL; + if (ptr == 0){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test079.c b/external/llvm/projects/llvm-cbe/test/test079.c new file mode 100644 index 0000000000..fd1ea11039 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test079.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use a double pointer and +// confirms the value located originally at the address of x. +// *TW +// +//===----------------------------------------------------------------------===// + +int main() { + double x = 6, y = 0, *dp; + dp = &x; + y = *dp; + if (y == 6){ + return 6; + } + return 1; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test080.c b/external/llvm/projects/llvm-cbe/test/test080.c new file mode 100644 index 0000000000..b7fb855bf4 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test080.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use a double pointer and +// confirms the value located originally at the address of x. +// *TW +// +//===----------------------------------------------------------------------===// + +int main() { + float x = 6, y = 0, *fp; + fp = &x; + y = *fp; + if (y == 6){ + return 6; + } + return 1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test081.c b/external/llvm/projects/llvm-cbe/test/test081.c new file mode 100644 index 0000000000..6efcad46ea --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test081.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use the address-of value (&) +// variable and and return the value-at address (*) variable from integer 'num'. +// *TW +// +//===----------------------------------------------------------------------===// + +int main(){ + int *ptr; + int num = 6; + ptr = # + int deref = *ptr; + return deref; + +} diff --git a/external/llvm/projects/llvm-cbe/test/test082.c b/external/llvm/projects/llvm-cbe/test/test082.c new file mode 100644 index 0000000000..e30bb7a2f1 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test082.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use a pointer to +// a structure (->). +// *TW +// +//===----------------------------------------------------------------------===// + +struct Number{ + int price; +}; + +int main(){ + struct Number a; + struct Number* ptr = &a; + ptr->price = 6; + return ptr->price; +} diff --git a/external/llvm/projects/llvm-cbe/test/test083.c b/external/llvm/projects/llvm-cbe/test/test083.c new file mode 100644 index 0000000000..5dc920edf4 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test083.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly use a pointer to +// access an array. +// *TW +// +//===----------------------------------------------------------------------===// + +int main(){ + int *ip; + int a[2]; + a[0] = 1; + a[1] = 6; + ip = &a[1]; + + return *ip; +} diff --git a/external/llvm/projects/llvm-cbe/test/test084.c b/external/llvm/projects/llvm-cbe/test/test084.c new file mode 100644 index 0000000000..df2d0c7373 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test084.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly increment a pointer via int. +// This example works by subtracting two mem. addresses and adding 2 to return 6. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + + int inc0 = 0, inc1 = 0, diff = 0, a = 100; + int *p = &a; + inc0 = (long)p; + ++(*p++); //++(*p++); + inc1 = (long)p; + diff = inc1-inc0; + diff += 2; + return diff; +} diff --git a/external/llvm/projects/llvm-cbe/test/test085.c b/external/llvm/projects/llvm-cbe/test/test085.c new file mode 100644 index 0000000000..080f4a8a8b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test085.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly decrement a pointer via int. +// This example works by subtracting two mem. addresses and adding 2 to return 6. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + + int inc0 = 0, inc1 = 0, diff = 0, a = 100; + int *p = &a; + inc0 = (long)p; + --(*p--); //--(*p--); + inc1 = (long)p; + diff = inc0-inc1; + diff += 2; + return diff; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test086.c b/external/llvm/projects/llvm-cbe/test/test086.c new file mode 100644 index 0000000000..5508af0a54 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test086.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly increment a pointer via char. +// This example works by subtracting two mem. addresses and adding 2 to return 6. +// *TW +// +//===---------------------------------------------------------------------------===// + +int main() { + + char inc0 = 0, inc1 = 0; + int diff = 0, a = 100; + int *p = &a; + inc0 =(long)p; + ++(*p++); //++(*p++); + inc1 =(long)p; + diff = inc1-inc0; + diff += 2; + return diff; +} diff --git a/external/llvm/projects/llvm-cbe/test/test087.c b/external/llvm/projects/llvm-cbe/test/test087.c new file mode 100644 index 0000000000..a20cc70f21 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test087.c @@ -0,0 +1,26 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly decrement a pointer via char. +// This example works by subtracting two mem. addresses and adding 2 to return 6. +// *TW +//===---------------------------------------------------------------------------===// + +int main() { + + char inc0 = 0, inc1 = 0; + int diff = 0, a = 100; + int *p = &a; + inc0 =(long)p; + --(*p--); //--*p--); + inc1 =(long)p; + diff = inc0-inc1; + diff += 2; + return diff; +} diff --git a/external/llvm/projects/llvm-cbe/test/test088.c b/external/llvm/projects/llvm-cbe/test/test088.c new file mode 100644 index 0000000000..938237bea9 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test088.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will properly declare a multi-dimension. +// This example works by using a pointer to access address[1][1] to return 6. +// *TW +//===---------------------------------------------------------------------------===// + +int main(){ + int a[2][2]; + int *ip; + a[0][0] = 0; + a[0][1] = 1; + a[1][0] = 3; + a[1][1] = 6; + ip = &a[1][1]; + + return *ip; +} diff --git a/external/llvm/projects/llvm-cbe/test/test089.c b/external/llvm/projects/llvm-cbe/test/test089.c new file mode 100644 index 0000000000..33d2411849 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test089.c @@ -0,0 +1,28 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute data-packing in a structure correctly. +// *TW +//===------------------------------------------------------------------------------===// + +#pragma pack(push) +#pragma pack(1) + +struct DataSize{ + char Data2; + char Data3; + int Data1; +}; + +int main(){ + struct DataSize example; + return sizeof(example); +} + +#pragma pack(pop) diff --git a/external/llvm/projects/llvm-cbe/test/test090.c b/external/llvm/projects/llvm-cbe/test/test090.c new file mode 100644 index 0000000000..021a05e8a0 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test090.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a union and check the data size correctly. +// *TW +//===------------------------------------------------------------------------------===// + +union Data{ + int i; + float f; + char str[8]; +}; + +int main(){ + union Data data; + int datasize = sizeof(data) - 2; + + return datasize; +} diff --git a/external/llvm/projects/llvm-cbe/test/test091.c b/external/llvm/projects/llvm-cbe/test/test091.c new file mode 100644 index 0000000000..dce59d85d5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test091.c @@ -0,0 +1,25 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will access and return union members correctly. +// *TW +//===------------------------------------------------------------------------------===// + +union Data{ + char unit1[6]; + char unit2; + char unit3; +}; + +int main(){ + union Data data; + return sizeof(data); +} + + diff --git a/external/llvm/projects/llvm-cbe/test/test092.c b/external/llvm/projects/llvm-cbe/test/test092.c new file mode 100644 index 0000000000..3b197f21a5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test092.c @@ -0,0 +1,35 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will pass a structure into a function correctly. +// *TW +//===------------------------------------------------------------------------------===// + +int k = 0; + +struct test{ + int i; + float f; +}; + +void funct(struct test example){ + k = example.i; +} + +int main(){ + struct test example; + + example.i = 6; + example.f = 6.0; + funct(example); + + return k; +} + + diff --git a/external/llvm/projects/llvm-cbe/test/test093.c b/external/llvm/projects/llvm-cbe/test/test093.c new file mode 100644 index 0000000000..3553edea3a --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test093.c @@ -0,0 +1,29 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a nested structure properly. +// *TW +//===------------------------------------------------------------------------------===// + +struct layer1{ + int depth1; + char name1[20]; +}; + +struct layer2{ + int depth2; + char name2[20]; + struct layer1 layer_data; +}layer2_data; + +int main(){ + struct layer2 layer2_data = {1, "test", {6, "test2"}}; + + return layer2_data.layer_data.depth1; +} diff --git a/external/llvm/projects/llvm-cbe/test/test094.c b/external/llvm/projects/llvm-cbe/test/test094.c new file mode 100644 index 0000000000..2568c9c353 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test094.c @@ -0,0 +1,29 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a structure using typedef. +// *TW +//===------------------------------------------------------------------------------===// + +typedef struct test { + int var1; + int var2; + int var3; +}testrename; + +int main(){ + testrename variable; + + variable.var2 = 5; + variable.var3 = 6; + variable.var1 = 9; + + return variable.var3; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test095.c b/external/llvm/projects/llvm-cbe/test/test095.c new file mode 100644 index 0000000000..21db272034 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test095.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute an array of structures. +// *TW +//===------------------------------------------------------------------------------===// + +struct Shows + { + char show[20]; + int runlength; + int rating; +}; + +int main(){ +struct Shows b1[3] = { + {"Big Bang Theory",22,6}, + {"NCIS",45,9}, + }; + return b1[0].rating; +} diff --git a/external/llvm/projects/llvm-cbe/test/test096.c b/external/llvm/projects/llvm-cbe/test/test096.c new file mode 100644 index 0000000000..81661df121 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test096.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE will execute a self referencing structure. +// *TW +//===------------------------------------------------------------------------------===// +#include //for NULL + +struct data{ + int a; + struct data *ptr; +}; + +int main(){ + struct data p=(struct data){.a=3,.ptr=&(struct data){.a=6,.ptr=NULL}}; + return p.ptr->a; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test097.c b/external/llvm/projects/llvm-cbe/test/test097.c new file mode 100644 index 0000000000..a42e36b6cb --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test097.c @@ -0,0 +1,27 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// This code tests to see that the CBE can handle a simple addition function. +// *TW +//===------------------------------------------------------------------------------===// + +int addby2 ( int x ); + +int main( ){ + int n ; + n = addby2 ( 4 ) ; + return n; +} + +int addby2(int x){ + int p ; + p = x + 2 ; + return ( p ) ; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test098.c b/external/llvm/projects/llvm-cbe/test/test098.c new file mode 100644 index 0000000000..70de117e51 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test098.c @@ -0,0 +1,28 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// Test if CBE can handle static variables. +// *TW +//===------------------------------------------------------------------------------===// + +int subtrby2 ( int x ); +static int eight = 8; +static int two = 2; + +int main( ){ + int n ; + n = subtrby2 ( eight ) ; + return n; +} + +int subtrby2(int x){ + int p ; + p = x - two ; + return ( p ) ; +} diff --git a/external/llvm/projects/llvm-cbe/test/test099.c b/external/llvm/projects/llvm-cbe/test/test099.c new file mode 100644 index 0000000000..1c4713262e --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test099.c @@ -0,0 +1,20 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// Test if CBE can handle register variables. +// *TW +//===------------------------------------------------------------------------------===// + +int main() { + register int counter = 0; + counter += 6; + + return 6; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test100.c b/external/llvm/projects/llvm-cbe/test/test100.c new file mode 100644 index 0000000000..db2cd9ea60 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test100.c @@ -0,0 +1,30 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// Test if CBE can handle a recursive function. +// *TW +//===------------------------------------------------------------------------------===// + +int fibonaci(int i){ + if(i == 0){ + return 0; + } + if(i == 1){ + return 1; + } + return fibonaci(i-1) + fibonaci(i-2); +} + +int main(){ + int returnval; + returnval = fibonaci(6) - 2; + + return returnval; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test101.c b/external/llvm/projects/llvm-cbe/test/test101.c new file mode 100644 index 0000000000..50d18d3ec3 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test101.c @@ -0,0 +1,37 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// Tests if the CBE will execute a fibonacci numbers example. +// Credit: http://en.literateprograms.org/Fibonacci_numbers_(C) +// *TW +//===------------------------------------------------------------------------------===// + +unsigned int fastfib(unsigned int n); + +int main(){ + return fastfib(6) - 2; +} + +unsigned int fastfib(unsigned int n){ + unsigned int a[3]; + unsigned int *p=a; + unsigned int i; + + for(i=0; i<=n; ++i) { + if(i<2) *p=i; + else{ + if(p==a) *p=*(a+1)+*(a+2); + else if(p==a+1) *p=*a+*(a+2); + else *p=*a+*(a+1); + } + if(++p>a+2) p=a; + } + return p==a?*(p+2):*(p-1); +} + diff --git a/external/llvm/projects/llvm-cbe/test/test102.c b/external/llvm/projects/llvm-cbe/test/test102.c new file mode 100644 index 0000000000..572ea03103 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test102.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===------------------------------------------------------------------------------===// +// +// Tests if the CBE will execute a function pointer. +// *TW +// +//===------------------------------------------------------------------------------===// + +int subtract(int x, int y) { + int z = x - y; + return z; +} + +int main() { + int (*sabPtr)(int, int) = subtract; + return (*sabPtr)(10, 4); +} diff --git a/external/llvm/projects/llvm-cbe/test/test103.c b/external/llvm/projects/llvm-cbe/test/test103.c new file mode 100644 index 0000000000..6e2329021d --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test103.c @@ -0,0 +1,23 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C -------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===---------------------------------------------------------------------===// +// +// Tests if the CBE will execute Macro Substitution. +// *TW +// +//===---------------------------------------------------------------------===// +#define A 3 +#define B 3 +#define C A + B + +int main(){ + + int x = C; + return x; +} + diff --git a/external/llvm/projects/llvm-cbe/test/test104.c b/external/llvm/projects/llvm-cbe/test/test104.c new file mode 100644 index 0000000000..88884d6857 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test104.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests if the CBE will execute a tail recursion example correctly. +// *TW +// +//===----------------------------------------------------------------------===// + +int tail (int n) { + if (n == 6) + return n; + else + return tail(n+1); +} + +int main(){ + return tail(0); +} diff --git a/external/llvm/projects/llvm-cbe/test/test105.c b/external/llvm/projects/llvm-cbe/test/test105.c new file mode 100644 index 0000000000..7e830d55c5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/test105.c @@ -0,0 +1,24 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This code tests if the CBE will execute a head recursion example correctly. +// *TW +// +//===----------------------------------------------------------------------===// + +int head(int n){ + if(n == 6) + return n; + else + return head(n+1); +} + +int main(){ + return head(0); +} diff --git a/external/llvm/projects/llvm-cbe/test/testCaseInfo.csv b/external/llvm/projects/llvm-cbe/test/testCaseInfo.csv new file mode 100644 index 0000000000..a90aed5646 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/testCaseInfo.csv @@ -0,0 +1,105 @@ +test001,"Returns a value (6)" +test002,"For loop with variable x incrementing ++x to 6" +test003,"While loop with incrementing ++x values up to 6" +test004,"If/else statement including += and == operators" +test005,"Nested for loop using ++x" +test006,"Nested while loop using ++x" +test007,"Switch statement based on matching ‘x’ and returning 6" +test008,"Struct statement based on returning a member 6" +test009,"Array example incrementing from 0 - 10, returning the 6th member of array" +test010,"Nested switch statement, returning ‘x’ then ‘6’" +test011,"Addition using variables, x(6) = i(2) + t(4)" +test012,"Subtraction using variables, x(6) = i(8) - t(2)" +test013,"Multiplication using variables, x(6) = i(3) * t(2)" +test014,"Division using variables, x(6) = i(30) / t(5)" +test015,"Modulus using variables, x(6) = i(26) % t(20)" +test016,"Unary plus (+a) operator, increase data size of char from 2 to 4" +test017,"Unary minus (-a) operator, convert 10 to -10 and check all three variables" +test018,"Increment (++a) operator, ++5 returns 6" +test019,"Decrement (--a) operator, --7 returns 6" +test020,"Greater Than (>) Relational Logic Operator, if x>y, return x (6)" +test021,"Greater Than or Equal (>=) Relational Logic Operator, if x>y, return x (6)" +test022,"Less Than (<) Relational Logic Operator, if x>b) Bitwise Operator, b(6)=a(13)>>1, return (6)" +test034,"Compound Addition (a+=b) Assignment Operator, a(3)+=b(3), return a(6)" +test035,"Compound Subtraction (a+=b) Assignment Operator, a(9)-=b(3), return a(6)" +test036,"Compound Multiplication (a*=) Assignment Operator, a(2)*=b(3), return a(6)" +test037,"Compound Division (a/=b) Assignment Operator, a(30)/=b(5), return a(6)" +test038,"Compound Modulus (a%=b) Assignment Operator, a(20)%=b(14), return a(6)" +test039,"AND (a&=b) Compound Assignment Bitwise Operator, a(6)&=b(15), return a(6)" +test040,"OR (a|=b) Compound Assignment Bitwise Operator, a(2)|=b(4), return a(6)" +test041,"XOR (a^=b) Compound Assignment Bitwise Operator, a(9)^=b(15), return a(6)" +test042,"Binary Shift Left (a<<=b) Compound Assignment B. Operator, a(3)<<=1, return a(6)" +test043,"Binary Shift Right (a>>=) Compound Assignment B. Operator, a(13)>>=1, return a(6)" +test044,"Declaring ‘char’, char a(’A’), ia=a, ia-59, return ia(6)" +test045,"Declaring ‘signed char’, signed char a(’A’), ia=a, ia-59, return ia(6)" +test046,"Declaring ‘unsigned char’, unsigned char a(’A’), ia=a, ia-59, return ia(6)" +test047,"Declaring ‘int’, int a(6), return a(6)" +test048,"Declaring ‘short int’, short int a(6), ia=a, ia=(int)a, return ia(6)" +test049,"Declaring ‘long int’, long int a(6), ia=a, ia=(int)a, return ia(6)" +test050,"Declaring ‘signed int’, signed int a(6), ia=a, ia=(int)a, return ia(6)" +test051,"Declaring ‘unsigned int’, unsigned int a(6), ia=a, ia=(int)a, return ia(6)" +test052,"Declaring ‘float’, float a(6.0), ia=a, ia=(int)a, return ia(6)" +test053,"Declaring ‘double’, double a(6.0), ia=a, ia=(int)a, return ia(6)" +test054,"Declaring ‘long double’, long double a(6.0), ia=a, ia=(int)a, return ia(6)" +test055,"Declaring ‘short’, short a(6), ia=a, ia=(int)a, return ia(6)" +test056,"Declaring ‘signed short’, signed short a(6), ia=a, ia=(int)a, return ia(6)" +test057,"Declaring ‘unsigned short’, unsigned short a(6), ia=a, ia=(int)a, return ia(6)" +test058,"Declaring ‘signed short int’, signed short int a(6), ia=a, ia=(int)a, return ia(6)" +test059,"Declaring ‘unsigned short int’, unsigned short int a(6), ia=a, ia=(int)a, return ia(6)" +test060,"Declaring ‘long’, long a(6), ia=a, ia=(int)a, return ia(6)" +test061,"Declaring ‘signed long’, signed long a(6), ia=a, ia=(int)a, return ia(6)" +test062,"Declaring ‘unsigned long’, unsigned long a(6), ia=a, ia=(int)a, return ia(6)" +test063,"Declaring ‘signed long int’, signed long int a(6), ia=a, ia=(int)a, return ia(6)" +test064,"Declaring ‘unsigned long int’, unsigned long int a(6), ia=a, ia=(int)a, return ia(6)" +test065,"Declaring ‘long long’, signed long a(6), ia=a, ia=(int)a, return ia(6)" +test066,"Declaring ‘long long int’, long long int a(6), ia=a, ia=(int)a, return ia(6)" +test067,"Declaring ‘signed long long’, signed long long a(6), ia=a, ia=(int)a, return ia(6)" +test068,"Declaring ‘unsigned long long’, unsigned long long a(6), ia=a, ia=(int)a, return ia(6)" +test069,"Declaring ‘signed long long int’, signed long long int a(6), ia=a, ia=(int)a, return ia(6)" +test070,"Declaring ‘unsigned long long int’, unsigned long long int a(6), ia=a, ia=(int)a, return ia(6)" +test071,"Executes an if statement, returns x(6)" +test072,"Executes an else/if statement, else option returns 6" +test073,"Executes a do/while statement, while x==0, return 6" +test074,"Executes a break/continue statement, x++, if x<15 continue, if x==10 break, return 6" +test075,"Executes a Goto-Label statement, goto label (skips an infinite loop), return 6" +test076,"Declares and returns the value of an integer pointer, return 6" +test077,Declares a char pointer and compares the value to return 6 +test078,"Assigned a NULL pointer and checks to make sure it returns 0, return 6" +test079,"Declares a double pointer and confirms its value located at address x, return 6" +test080,"Declares a float pointer and confirms its value located at address x, return 6" +test081,"Properly uses an address-of value (&) variable and returns the value-at address (*), return 6" +test082,Tests a pointer to a structure (->) and returns 6 +test083,"Declares an array and uses a pointer to return 6 (cannot announce arrays: a[2]={1,6};)" +test084,"Increments a pointer via int, Subtracts two memory addresses and adds 2 to return 6" +test085,"Decrements a pointer via int, Subtracts two memory addresses and adds 2 to return 6" +test086,"Increments a pointer via char, Subrtracts two memory addresses and adds 2 to return 6" +test087,"Decrements a pointer via char, Subtracts two memory addresses and adds 2 to return 6" +test088,Tests a Multi-Dimensional Array Uses a pointer to access address [1][1] and returns 6 +test089,"Tests an executed data-packing structure, returns 6" +test090,"Tests an executed union and checks if the data size is correct, returns 6" +test091,Tests an executed union and returns a member (6) +test092,"Tests to see if the CBE can pass a structure into a function, returns 6" +test093,"Tests if the CBE will execute a nested structure properly, returns 6" +test094,"Tests if the CBE will execute a structure using typedef properly, returns 6" +test095,"Tests if the CBE will execute an array of structures, returns 6" +test096,"Tests if the CBE will execute a self-referencing structure, returns 6" +test097,"Tests if the CBE can handle a simple addition function, returns 6" +test098,"Tests if the CBE can handle static variables, returns 6" +test099,"Tests if the CBE can handle register variables, returns 6" +test100,"Tests if the CBE can handle a recursive function, returns 6" +test101,"Tests if the CBE can handle a fibonacci numbers example, returns 6" +test102,"Tests if the CBE will execute a function pointer, returns 6" +test103,"Tests if the CBE will execute Macro Substitution, returns 6" +test104,"Tests if the CBE will execute a tail recursion example, returns 6" +test105,"Tests if the CBE will execute a head recursion example, returns 6" diff --git a/external/llvm/projects/llvm-cbe/test/testFile.py b/external/llvm/projects/llvm-cbe/test/testFile.py new file mode 100755 index 0000000000..afc1c49e9b --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/testFile.py @@ -0,0 +1,87 @@ +#!/usr/bin/python +import os +import re +import subprocess + +LLVMToolDir = os.getenv('LLVMToolDir') +if not LLVMToolDir: + LLVMToolDir = '.' + +cexe_res = [] +ll_res = [] +cbe_res = [] +failure_list = [] + +def getList(fileExt): + fl = [] + for name in os.listdir("."): + if re.search(fileExt, name): + fl.append(name) + fl.sort() + return fl + +def genResults(fileExt, fl): + for names in fl: + if os.path.isfile(names): + if (fileExt == ".cexe"): + res = subprocess.call(["./%s" % (names)]) + cexe_res.append(res) # append for each optimization level + cexe_res.append(res) + cexe_res.append(res) + cexe_res.append(res) + + elif (fileExt == ".ll"): + res = subprocess.call([LLVMToolDir + "/lli", names]) + ll_res.append(res) + + elif (fileExt == ".cbe"): + res = subprocess.call(["./%s" % (names)]) + cbe_res.append(res) + + if (res != 6 and res != 25): + catstring = names + ":\tFailure [" + str(res) + "]" + failure_list.append(catstring) + +def main(): + print "Hunting for bugs... Please wait..." + + cexeRegex = ".cexe$" + cexe = ".cexe" + file_list = getList(cexeRegex) + genResults(cexe, file_list) + print 'Running tests:', file_list + + irRegex = ".ll$" + llIR = ".ll" + file_list = getList(irRegex) + genResults(llIR, file_list) + + cbeRegex = ".cbe$" + cbe = ".cbe" + file_list = getList(cbeRegex) + genResults(cbe, file_list) + + print 'cexe_res:', cexe_res + print 'll_res: ', ll_res + print 'cbe_res: ', cbe_res + + if (cexe_res == ll_res == cbe_res): + print("Success!") + + elif (cexe_res != ll_res == cbe_res): + print("Failure Detected between C and IR! Incorrect Return Values!") + for bug in failure_list: + print(bug) + + elif (cexe_res == ll_res != cbe_res): + print("Failure Detected between IR and CBE! Incorrect Return Values!") + for bug in failure_list: + print(bug) + + elif (cexe_res != ll_res != cbe_res): + print("Discrepancy between all three types! Incorrect Return Values!") + for bug in failure_list: + print(bug) + +if __name__ == "__main__": + main() diff --git a/external/llvm/projects/llvm-cbe/test/testbad.c b/external/llvm/projects/llvm-cbe/test/testbad.c new file mode 100644 index 0000000000..a7456dc2b5 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/test/testbad.c @@ -0,0 +1,17 @@ +//===-- CBackend.cpp - Library for converting LLVM code to C --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Does not return 6, will always fail. Exception for 25 so it will succeed. +// +//===----------------------------------------------------------------------===// + +int main() +{ + return 25; +} diff --git a/external/llvm/projects/llvm-cbe/tools/CMakeLists.txt b/external/llvm/projects/llvm-cbe/tools/CMakeLists.txt new file mode 100644 index 0000000000..49dead7dff --- /dev/null +++ b/external/llvm/projects/llvm-cbe/tools/CMakeLists.txt @@ -0,0 +1 @@ +add_llvm_tool_subdirectory(llvm-cbe) \ No newline at end of file diff --git a/external/llvm/projects/llvm-cbe/tools/llvm-cbe/CMakeLists.txt b/external/llvm/projects/llvm-cbe/tools/llvm-cbe/CMakeLists.txt new file mode 100644 index 0000000000..68f630ca11 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/tools/llvm-cbe/CMakeLists.txt @@ -0,0 +1,17 @@ +# Support plugins. +set(LLVM_NO_DEAD_STRIP 1) + +set(LLVM_LINK_COMPONENTS + ${LLVM_TARGETS_TO_BUILD} + BitReader + AsmParser + IRReader + CBackendInfo + CBackendCodeGen + ) + + +add_llvm_tool(llvm-cbe + llvm-cbe.cpp + ) +export_executable_symbols(llvm-cbe) diff --git a/external/llvm/projects/llvm-cbe/tools/llvm-cbe/LLVMBuild.txt b/external/llvm/projects/llvm-cbe/tools/llvm-cbe/LLVMBuild.txt new file mode 100644 index 0000000000..0ea1cd8a50 --- /dev/null +++ b/external/llvm/projects/llvm-cbe/tools/llvm-cbe/LLVMBuild.txt @@ -0,0 +1,22 @@ +;===- ./tools/llc/LLVMBuild.txt --------------------------------*- Conf -*--===; +; +; The LLVM Compiler Infrastructure +; +; This file is distributed under the University of Illinois Open Source +; License. See LICENSE.TXT for details. +; +;===------------------------------------------------------------------------===; +; +; This is an LLVMBuild description file for the components in this subdirectory. +; +; For more information on the LLVMBuild system, please see: +; +; http://llvm.org/docs/LLVMBuild.html +; +;===------------------------------------------------------------------------===; + +[component_0] +type = Tool +name = llc +parent = Tools +required_libraries = BitReader AsmParser IRReader all-targets diff --git a/external/llvm/projects/llvm-cbe/tools/llvm-cbe/llvm-cbe.cpp b/external/llvm/projects/llvm-cbe/tools/llvm-cbe/llvm-cbe.cpp new file mode 100644 index 0000000000..bee2b237fd --- /dev/null +++ b/external/llvm/projects/llvm-cbe/tools/llvm-cbe/llvm-cbe.cpp @@ -0,0 +1,351 @@ +//===-- llc.cpp - Implement the LLVM Native Code Generator ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This is the llc code generator driver. It provides a convenient +// command-line interface for generating native assembly-language code +// or C code, given LLVM bitcode. +// +//===----------------------------------------------------------------------===// + +#include "llvm/ADT/Triple.h" +#include "llvm/Analysis/TargetLibraryInfo.h" +#include "llvm/Analysis/TargetTransformInfo.h" +#if LLVM_VERSION_MAJOR == 7 +#include "llvm/CodeGen/CommandFlags.inc" +#else +#include "llvm/CodeGen/CommandFlags.def" +#endif +#include "llvm/CodeGen/LinkAllAsmWriterComponents.h" +#include "llvm/CodeGen/LinkAllCodegenComponents.h" +#include "llvm/CodeGen/TargetPassConfig.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/IRPrintingPasses.h" +#include "llvm/IR/LegacyPassManager.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" +#include "llvm/IRReader/IRReader.h" +#include "llvm/MC/SubtargetFeature.h" +#include "llvm/Pass.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/FormattedStream.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/PluginLoader.h" +#include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/SourceMgr.h" +#include "llvm/Support/TargetRegistry.h" +#include "llvm/Support/TargetSelect.h" +#include "llvm/Support/ToolOutputFile.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Target/TargetMachine.h" +#include +using namespace llvm; + + +extern "C" void LLVMInitializeCBackendTarget(); +extern "C" void LLVMInitializeCBackendTargetInfo(); +extern "C" void LLVMInitializeCBackendTargetMC(); + +// General options for llc. Other pass-specific options are specified +// within the corresponding llc passes, and target-specific options +// and back-end code generation options are specified with the target machine. +// +static cl::opt +InputFilename(cl::Positional, cl::desc(""), cl::init("-")); + +static cl::opt +OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename")); + +static cl::opt +TimeCompilations("time-compilations", cl::Hidden, cl::init(1u), + cl::value_desc("N"), + cl::desc("Repeat compilation N times for timing")); + +// Determine optimization level. +static cl::opt +OptLevel("O", + cl::desc("Optimization level. [-O0, -O1, -O2, or -O3] " + "(default = '-O2')"), + cl::Prefix, + cl::ZeroOrMore, + cl::init(' ')); + +static cl::opt +TargetTriple("mtriple", cl::desc("Override target triple for module")); + +cl::opt NoVerify("disable-verify", cl::Hidden, + cl::desc("Do not verify input module")); + +static int compileModule(char**, LLVMContext&); + +// GetFileNameRoot - Helper function to get the basename of a filename. +static inline std::string +GetFileNameRoot(const std::string &InputFilename) { + std::string IFN = InputFilename; + std::string outputFilename; + int Len = IFN.length(); + if ((Len > 2) && + IFN[Len-3] == '.' && + ((IFN[Len-2] == 'b' && IFN[Len-1] == 'c') || + (IFN[Len-2] == 'l' && IFN[Len-1] == 'l'))) { + outputFilename = std::string(IFN.begin(), IFN.end()-3); // s/.bc/.s/ + } else { + outputFilename = IFN; + } + return outputFilename; +} + +static ToolOutputFile *GetOutputStream(const char *TargetName, + Triple::OSType OS, + const char *ProgName) { + // If we don't yet have an output filename, make one. + if (OutputFilename.empty()) { + if (InputFilename == "-") + OutputFilename = "-"; + else { + OutputFilename = GetFileNameRoot(InputFilename); + + switch (FileType) { + case TargetMachine::CGFT_AssemblyFile: + if (TargetName[0] == 'c') { + if (TargetName[1] == 0) + OutputFilename += ".cbe.c"; + else if (TargetName[1] == 'p' && TargetName[2] == 'p') + OutputFilename += ".cpp"; + else + OutputFilename += ".s"; + } else + OutputFilename += ".s"; + break; + case TargetMachine::CGFT_ObjectFile: + if (OS == Triple::Win32) + OutputFilename += ".obj"; + else + OutputFilename += ".o"; + break; + case TargetMachine::CGFT_Null: + OutputFilename += ".null"; + break; + } + } + } + + // Decide if we need "binary" output. + bool Binary = false; + switch (FileType) { + case TargetMachine::CGFT_AssemblyFile: + break; + case TargetMachine::CGFT_ObjectFile: + case TargetMachine::CGFT_Null: + Binary = true; + break; + } + + // Open the file. + std::error_code error; + sys::fs::OpenFlags OpenFlags = sys::fs::F_None; + if (Binary) + OpenFlags |= sys::fs::F_Text; + ToolOutputFile *FDOut = new ToolOutputFile(OutputFilename.c_str(), error, + OpenFlags); + if (error) { + errs() << error.message() << '\n'; + delete FDOut; + return 0; + } + + return FDOut; +} + +static LLVMContext TheContext; + +// main - Entry point for the llc compiler. +// +int main(int argc, char **argv) { + sys::PrintStackTraceOnErrorSignal(argv[0]); + PrettyStackTraceProgram X(argc, argv); + + // Enable debug stream buffering. + EnableDebugBuffering = true; + + llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. + + // Initialize targets first, so that --version shows registered targets. + InitializeAllTargets(); + InitializeAllTargetMCs(); + InitializeAllAsmPrinters(); + InitializeAllAsmParsers(); + + LLVMInitializeCBackendTarget(); + LLVMInitializeCBackendTargetInfo(); + LLVMInitializeCBackendTargetMC(); + + // Initialize codegen and IR passes used by llc so that the -print-after, + // -print-before, and -stop-after options work. + PassRegistry *Registry = PassRegistry::getPassRegistry(); + initializeCore(*Registry); + initializeCodeGen(*Registry); + initializeLoopStrengthReducePass(*Registry); + initializeLowerIntrinsicsPass(*Registry); + initializeUnreachableBlockElimLegacyPassPass(*Registry); + + // Register the target printer for --version. + cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion); + + cl::ParseCommandLineOptions(argc, argv, "llvm system compiler\n"); + + // Compile the module TimeCompilations times to give better compile time + // metrics. + for (unsigned I = TimeCompilations; I; --I) + if (int RetVal = compileModule(argv, TheContext)) + return RetVal; + return 0; +} + +static int compileModule(char **argv, LLVMContext &Context) { + // Load the module to be compiled... + SMDiagnostic Err; + + std::unique_ptr M; + + Module *mod = 0; + Triple TheTriple; + + bool SkipModule = MCPU == "help" || + (!MAttrs.empty() && MAttrs.front() == "help"); + + // If user just wants to list available options, skip module loading + if (!SkipModule) { + M = parseIRFile(InputFilename, Err, Context); + mod = M.get(); + if (mod == 0) { + Err.print(argv[0], errs()); + return 1; + } + + // If we are supposed to override the target triple, do so now. + if (!TargetTriple.empty()) + mod->setTargetTriple(Triple::normalize(TargetTriple)); + TheTriple = Triple(mod->getTargetTriple()); + } else { + TheTriple = Triple(Triple::normalize(TargetTriple)); + } + + if (TheTriple.getTriple().empty()) + TheTriple.setTriple(sys::getDefaultTargetTriple()); + + // Get the target specific parser. + std::string Error; + // Override MArch + MArch = "c"; + const Target *TheTarget = TargetRegistry::lookupTarget(MArch, TheTriple, + Error); + if (!TheTarget) { + errs() << argv[0] << ": " << Error; + return 1; + } + + // Package up features to be passed to target/subtarget + std::string FeaturesStr; + if (MAttrs.size()) { + SubtargetFeatures Features; + for (unsigned i = 0; i != MAttrs.size(); ++i) + Features.AddFeature(MAttrs[i]); + FeaturesStr = Features.getString(); + } + + CodeGenOpt::Level OLvl = CodeGenOpt::Default; + + switch (OptLevel) { + default: + errs() << argv[0] << ": invalid optimization level.\n"; + return 1; + case ' ': break; + case '0': OLvl = CodeGenOpt::None; break; + case '1': OLvl = CodeGenOpt::Less; break; + case '2': OLvl = CodeGenOpt::Default; break; + case '3': OLvl = CodeGenOpt::Aggressive; break; + } + + TargetOptions Options; + Options.AllowFPOpFusion = FuseFPOps; + Options.UnsafeFPMath = EnableUnsafeFPMath; + Options.NoInfsFPMath = EnableNoInfsFPMath; + Options.NoNaNsFPMath = EnableNoNaNsFPMath; + Options.HonorSignDependentRoundingFPMathOption = + EnableHonorSignDependentRoundingFPMath; + if (FloatABIForCalls != FloatABI::Default) + Options.FloatABIType = FloatABIForCalls; + Options.NoZerosInBSS = DontPlaceZerosInBSS; + Options.GuaranteedTailCallOpt = EnableGuaranteedTailCallOpt; + Options.StackAlignmentOverride = OverrideStackAlignment; + + //Jackson Korba 9/30/14 + //OwningPtr + std::unique_ptr + target(TheTarget->createTargetMachine(TheTriple.getTriple(), + MCPU, FeaturesStr, Options, + getRelocModel(), getCodeModel(), OLvl)); + assert(target.get() && "Could not allocate target machine!"); + assert(mod && "Should have exited after outputting help!"); + TargetMachine &Target = *target.get(); + + // Disable .loc support for older OS X versions. + if (TheTriple.isMacOSX() && + TheTriple.isMacOSXVersionLT(10, 6)){} + //TODO: Find a replacement to this function + /* Greg Simpson 6-09-13 + no member named setMCUseLoc + removed statement + Target.setMCUseLoc(false); */ + + //Jackson Korba 9/30/14 + std::unique_ptr Out + (GetOutputStream(TheTarget->getName(), TheTriple.getOS(), argv[0])); + if (!Out) return 1; + + // Build up all of the passes that we want to do to the module. + legacy::PassManager PM; + + // Add an appropriate TargetLibraryInfo pass for the module's triple. + TargetLibraryInfoWrapperPass *TLI = new TargetLibraryInfoWrapperPass(TheTriple); + PM.add(TLI); + + // Add intenal analysis passes from the target machine. + PM.add(createTargetTransformInfoWrapperPass(Target.getTargetIRAnalysis())); + + if (RelaxAll) { + if (FileType != TargetMachine::CGFT_ObjectFile) + errs() << argv[0] + << ": warning: ignoring -mc-relax-all because filetype != obj"; + } + + // Ask the target to add backend passes as necessary. + if (Target.addPassesToEmitFile(PM, Out->os(), +#if LLVM_VERSION_MAJOR == 7 + nullptr, +#endif + FileType, NoVerify)) { + errs() << argv[0] << ": target does not support generation of this" + << " file type!\n"; + return 1; + } + + // Before executing passes, print the final values of the LLVM options. + cl::PrintOptionValues(); + + PM.run(*mod); + + // Declare success. + Out->keep(); + + return 0; +} diff --git a/external/llvm/scripts/ci/.gitattributes b/external/llvm/scripts/ci/.gitattributes new file mode 100644 index 0000000000..775b5751c0 --- /dev/null +++ b/external/llvm/scripts/ci/.gitattributes @@ -0,0 +1,3 @@ +# Windows line ending +*.sh text eol=lf +*.bat text eol=crlf diff --git a/external/llvm/scripts/ci/.gitignore b/external/llvm/scripts/ci/.gitignore new file mode 100644 index 0000000000..3f75e21fc7 --- /dev/null +++ b/external/llvm/scripts/ci/.gitignore @@ -0,0 +1,3 @@ +builds +out +*.tar.gz diff --git a/external/llvm/scripts/ci/build-external-llvm.bat b/external/llvm/scripts/ci/build-external-llvm.bat new file mode 100644 index 0000000000..e0d49d13fa --- /dev/null +++ b/external/llvm/scripts/ci/build-external-llvm.bat @@ -0,0 +1,429 @@ +:: -------------------------------------------------- +:: Run full LLVM build using msvc toolchain and available cmake generator. +:: Script needs to be run from within a matching build environment, x86|x64. +:: When executed from withing Visual Studio build environment current +:: build environment will be inherited by script. +:: +:: %1 LLVM source root directory. +:: %2 LLVM build root directory. +:: %3 LLVM install root directory. +:: %4 Mono distribution root directory. +:: %5 VS CFLAGS. +:: %6 Additional CMake arguments. +:: %7 VS platform (Win32/x64). +:: %8 VS configuration (Debug/Release). +:: %9 VS target. +:: %10 MsBuild bin path, if used. +:: %11 Force MSBuild (true/false), if used. +:: -------------------------------------------------- + +@echo off +setlocal + +set TEMP_PATH=%PATH% +set BUILD_RESULT=1 + +set CL_BIN_NAME=cl.exe +set LINK_BIN_NAME=link.exe +set GIT_BIN_NAME=git.exe +set CMAKE_BIN_NAME=cmake.exe +set NINJA_BIN_NAME=ninja.exe +set PYTHON_BIN_NAME=python.exe + +set LLVM_DIR=%~1 +shift +set LLVM_BUILD_DIR=%~1 +shift +set LLVM_INSTALL_DIR=%~1 +shift +set MONO_DIST_DIR=%~1 +shift +set VS_CFLAGS=%~1 +shift +set LLVM_ADDITIONAL_CMAKE_ARGS=%~1 +shift +set VS_PLATFORM=%~1 +shift +set VS_CONFIGURATION=%~1 +shift +set VS_TARGET=%~1 +shift +set MSBUILD_BIN_PATH=%~1 +shift +set FORCE_MSBUILD=%~1 + +:: Setup toolchain. +:: set GIT= +:: set CMAKE= +:: set NINJA= +set MSBUILD=%MSBUILD_BIN_PATH%msbuild.exe + +if "%LLVM_DIR%" == "" ( + echo Missing LLVM source directory argument. + goto ECHO_USAGE +) + +if "%LLVM_BUILD_DIR%" == "" ( + echo Missing LLVM build directory argument. + goto ECHO_USAGE +) + +if "%LLVM_INSTALL_DIR%" == "" ( + echo Missing LLVM install directory argument. + goto ECHO_USAGE +) + +if "%MONO_DIST_DIR%" == "" ( + echo Missing Mono dist directory argument. + goto ECHO_USAGE +) + +if "%VS_CFLAGS%" == "" ( + echo Missing CFLAGS argument. + goto ECHO_USAGE +) + +if "%VS_PLATFORM%" == "" ( + set VS_PLATFORM=x64 +) + +if "%VS_CONFIGURATION%" == "" ( + set VS_CONFIGURATION=Release +) + +if "%VS_TARGET%" == "" ( + set VS_TARGET=Build +) + +if "%FORCE_MSBUILD%" == "" ( + set FORCE_MSBUILD=false +) + +if not exist "%LLVM_DIR%" ( + echo Could not find "%LLVM_DIR%". + goto ON_ERROR +) + +set LLVM_CFLAGS=%VS_CFLAGS% +set LLVM_ARCH=x86_64 +if /i "%VS_PLATFORM%" == "win32" ( + set LLVM_ARCH=i386 +) + +:: Check if executed from VS2015/VS2017 build environment. +if "%VisualStudioVersion%" == "14.0" ( + goto ON_ENV_OK +) + +if "%VisualStudioVersion%" == "15.0" ( + goto ON_ENV_OK +) + +:: Executed outside VS2015/VS2017 build environment, try to locate Visual Studio C/C++ compiler and linker. +call :FIND_PROGRAM "" "%CL_BIN_NAME%" CL_PATH +if "%CL_PATH%" == "" ( + goto ON_ENV_WARNING +) + +call :FIND_PROGRAM "" "%LINK_BIN_NAME%" LINK_PATH +if "%LINK_PATH%" == "" ( + goto ON_ENV_WARNING +) + +goto ON_ENV_OK + +:ON_ENV_WARNING + +:: VS 2015. +set VC_VARS_ALL_FILE=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat +IF EXIST "%VC_VARS_ALL_FILE%" ( + echo For VS2015 builds, make sure to run this from within Visual Studio build or using "VS2015 x86|x64 Native Tools Command Prompt" command prompt. + echo Setup a "VS2015 x86|x64 Native Tools Command Prompt" command prompt by using "%VC_VARS_ALL_FILE% x86|amd64". +) + +:: VS 2017. +set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe +if exist "%VSWHERE_TOOLS_BIN%" ( + echo For VS2017 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2017" command prompt. + for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -latest -property installationPath') do ( + echo Setup a "x86|x64 Native Tools Command Prompt for VS2017" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat". + ) +) + +echo Could not detect Visual Studio build environment. You may experience build problems if wrong toolchain is auto detected. + +:ON_ENV_OK + +:: Setup all cmake related generator, tools and variables. +call :SETUP_CMAKE_ENVIRONMENT +if "%CMAKE%" == "" ( + echo Failed to located working %CMAKE_BIN_NAME%, needs to be accessible in PATH or set using CMAKE environment variable. + goto ON_ERROR +) + +if "%CMAKE_GENERATOR%" == "" ( + echo Failed to setup cmake generator. + goto ON_ERROR +) + +:: Check target. +if /i "%VS_TARGET%" == "build" ( + goto ON_BUILD_LLVM +) + +if /i "%VS_TARGET%" == "install" ( + goto ON_INSTALL_LLVM +) + +if /i "%VS_TARGET%" == "clean" ( + goto ON_CLEAN_LLVM +) + +:ON_BUILD_LLVM + +:: If not set by caller, check environment for working git.exe. +call :FIND_PROGRAM "%GIT%" "%GIT_BIN_NAME%" GIT +if "%GIT%" == "" ( + echo Failed to located working %GIT_BIN_NAME%, needs to be accessible in PATH or set using GIT environment variable. + goto ON_ERROR +) + +:: Make sure llvm submodule is up to date. +pushd +cd "%LLVM_DIR%" +"%GIT%" submodule update --init +if not ERRORLEVEL == 0 ( + "%GIT%" submodule init + "%GIT%" submodule update + if not ERRORLEVEL == 0 ( + echo Git llvm submodules failed to updated. You may experience compilation problems if some submodules are out of date. + ) +) +popd + +if not exist "%LLVM_BUILD_DIR%" ( + mkdir "%LLVM_BUILD_DIR%" +) + +cd "%LLVM_BUILD_DIR%" + +:: Make sure cmake pick up msvc toolchain regardless of selected generator (Visual Studio|Ninja) +set CC=%CL_BIN_NAME% +set CXX=%CL_BIN_NAME% + +set CMAKE_GENERATOR_ARGS= +if /i "%CMAKE_GENERATOR%" == "ninja" ( + set CMAKE_GENERATOR_ARGS=-DCMAKE_BUILD_TYPE=%VS_CONFIGURATION% +) else ( + set CMAKE_GENERATOR_ARGS=-Thost=x64 +) + +:: Run cmake. +"%CMAKE%" ^ +-DCMAKE_INSTALL_PREFIX="%LLVM_INSTALL_DIR%" ^ +-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" ^ +-DLLVM_BUILD_TESTS=Off ^ +-DLLVM_INCLUDE_TESTS=Off ^ +-DLLVM_BUILD_EXAMPLES=Off ^ +-DLLVM_INCLUDE_EXAMPLES=Off ^ +-DLLVM_TOOLS_TO_BUILD="opt;llc;llvm-config;llvm-dis;llvm-mc;llvm-as" ^ +-DLLVM_ENABLE_LIBXML2=Off ^ +-DCMAKE_SYSTEM_PROCESSOR="%LLVM_ARCH%" ^ +%LLVM_ADDITIONAL_CMAKE_ARGS% ^ +%CMAKE_GENERATOR_ARGS% ^ +-G "%CMAKE_GENERATOR%" ^ +"%LLVM_DIR%" + +if not ERRORLEVEL == 0 ( + goto ON_ERROR +) + +if /i "%CMAKE_GENERATOR%" == "ninja" ( + :: Build LLVM using ninja build system. + call "%NINJA%" -j4 || ( + goto ON_ERROR + ) +) else ( + :: Build LLVM using msbuild build system. + call "%MSBUILD%" llvm.sln /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:%VS_TARGET% /v:m /nologo || ( + goto ON_ERROR + ) +) + +:ON_INSTALL_LLVM + +:: Make sure build install folder exists. +if not exist "%LLVM_INSTALL_DIR%" ( + echo Could not find "%LLVM_INSTALL_DIR%", creating folder for build output. + mkdir "%LLVM_INSTALL_DIR%" +) + +:: Make sure Mono dist folder exists. +if not exist "%MONO_DIST_DIR%" ( + echo Could not find "%MONO_DIST_DIR%", creating folder for build output. + mkdir "%MONO_DIST_DIR%" +) + +if exist "%LLVM_BUILD_DIR%\build.ninja" ( + pushd + cd "%LLVM_BUILD_DIR%" + call "%NINJA%" install + popd +) + +if exist "%LLVM_BUILD_DIR%\install.vcxproj" ( + "%MSBUILD%" "%LLVM_BUILD_DIR%\install.vcxproj" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /v:m /nologo +) + +if not exist "%LLVM_INSTALL_DIR%\bin\opt.exe" ( + echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\opt.exe" + goto ON_ERROR +) + +if not exist "%LLVM_INSTALL_DIR%\bin\llc.exe" ( + echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llc.exe" + goto ON_ERROR +) + +if not exist "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" ( + echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" + goto ON_ERROR +) + +if not exist "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" ( + echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" + goto ON_ERROR +) + +if not exist "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" ( + echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" + goto ON_ERROR +) + +copy /Y "%LLVM_INSTALL_DIR%\bin\opt.exe" "%MONO_DIST_DIR%" >nul 2>&1 +copy /Y "%LLVM_INSTALL_DIR%\bin\llc.exe" "%MONO_DIST_DIR%" >nul 2>&1 +copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" "%MONO_DIST_DIR%" >nul 2>&1 +copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" "%MONO_DIST_DIR%" >nul 2>&1 +copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" "%MONO_DIST_DIR%" >nul 2>&1 + +goto ON_SUCCESS + +:ON_CLEAN_LLVM + +if exist "%LLVM_BUILD_DIR%\build.ninja" ( + pushd + cd "%LLVM_BUILD_DIR%" + call "%NINJA%" clean + popd +) + +if exist "%LLVM_BUILD_DIR%\llvm.sln" ( + "%MSBUILD%" "%LLVM_BUILD_DIR%\llvm.sln" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:Clean /v:m /nologo +) + +goto ON_SUCCESS + +:ON_SUCCESS + +set BUILD_RESULT=0 +goto ON_EXIT + +:ECHO_USAGE: + ECHO Usage: build-external-llvm.bat [llvm_src_dir] [llvm_build_dir] [llvm_install_dir] [mono_dist_dir] [vs_cflags] [vs_plaform] [vs_configuration]. + +:ON_ERROR + echo Failed to build LLVM. + goto ON_EXIT + +:ON_EXIT + set PATH=%TEMP_PATH% + exit /b %BUILD_RESULT% + +:: ############################################################################################################################## +:: Functions + +:: -------------------------------------------------- +:: Finds a program using environment. +:: +:: %1 Existing program to check for. +:: %2 Name of binary to locate. +:: %3 Output, variable to set if found requested program. +:: -------------------------------------------------- +:FIND_PROGRAM + +:: If not set by caller, check environment for program. +if exist "%~1" ( + goto :EOF +) + +call where /q "%~2" && ( + for /f "delims=" %%a in ('where "%~2"') do ( + set "%~3=%%a" + ) +) || ( + set "%~3=" +) + +goto :EOF + +:: -------------------------------------------------- +:: Setup up cmake build environment, including generator, build tools and variables. +:: -------------------------------------------------- +:SETUP_CMAKE_ENVIRONMENT + +:: If not set by caller, check environment for working cmake.exe. +call :FIND_PROGRAM "%CMAKE%" "%CMAKE_BIN_NAME%" CMAKE +if "%CMAKE%" == "" ( + goto _SETUP_CMAKE_ENVIRONMENT_EXIT +) + +if /i "%VS_TARGET%" == "build" ( + echo Found CMake: "%CMAKE%" +) + +if /i "%FORCE_MSBUILD%" == "true" ( + goto _SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR +) + +:: Check for optional cmake generate and build tools. +call :FIND_PROGRAM "%NINJA%" "%NINJA_BIN_NAME%" NINJA + +if not "%NINJA%" == "" ( + goto _SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR +) + +:_SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR + +if /i "%VS_TARGET%" == "build" ( + echo Using Visual Studio build generator. +) + +:: Detect VS version to use right cmake generator. +set CMAKE_GENERATOR=Visual Studio 14 2015 +if "%VisualStudioVersion%" == "15.0" ( + set CMAKE_GENERATOR=Visual Studio 15 2017 +) + +if /i "%VS_PLATFORM%" == "x64" ( + set CMAKE_GENERATOR=%CMAKE_GENERATOR% Win64 +) + +set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR%\%VS_CONFIGURATION% + +goto _SETUP_CMAKE_ENVIRONMENT_EXIT + +:_SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR + +if /i "%VS_TARGET%" == "build" ( + echo Found Ninja: "%NINJA%" + echo Using Ninja build generator. +) + +set CMAKE_GENERATOR=Ninja +set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR% + +:_SETUP_CMAKE_ENVIRONMENT_EXIT + +goto :EOF + +@echo on diff --git a/external/llvm/scripts/ci/run-jenkins-linux.sh b/external/llvm/scripts/ci/run-jenkins-linux.sh new file mode 100755 index 0000000000..3973a5b43e --- /dev/null +++ b/external/llvm/scripts/ci/run-jenkins-linux.sh @@ -0,0 +1,8 @@ +#!/bin/bash -e + +RUN_JENKINS_LINUX_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +echo "ENVIRONMENT:" +env + +$RUN_JENKINS_LINUX_SCRIPT_DIR/package.sh diff --git a/external/llvm/scripts/ci/run-jenkins-osx.sh b/external/llvm/scripts/ci/run-jenkins-osx.sh new file mode 100755 index 0000000000..2ffdf82184 --- /dev/null +++ b/external/llvm/scripts/ci/run-jenkins-osx.sh @@ -0,0 +1,39 @@ +#!/bin/bash -e + +echo "ENVIRONMENT:" +env + +llvm_base_CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_BUILD_TESTS=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_TOOLS_TO_BUILD=opt;llc;llvm-config;llvm-dis -G Ninja" + +llvm64_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS" +llvm32_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS -DLLVM_BUILD_32_BITS=On" + +rm -rf build +mkdir -p build +cd build +cmake $llvm64_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr64 ../ +ninja +ninja install +cd .. +rm -rf build32 +mkdir -p build32 +cd build32 +cmake $llvm32_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr32 ../ +ninja +ninja install +cd .. + +rm -rf tmp-bin +mkdir tmp-bin +cp usr64/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin/ +rm usr64/bin/* +cp tmp-bin/* usr64/bin/ + +rm -rf tmp-bin2 +mkdir tmp-bin2 +cp usr32/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin2 +rm usr32/bin/* +cp tmp-bin2/* usr32/bin/ +# Don't need 32 bit binaries +rm -f usr64/lib/libLTO.* usr64/lib/*.dylib usr32/lib/libLTO.* usr32/lib/*.dylib +tar cvzf llvm-osx64-$GIT_COMMIT.tar.gz usr64 usr32 diff --git a/external/llvm/scripts/ci/run-jenkins-windows.bat b/external/llvm/scripts/ci/run-jenkins-windows.bat new file mode 100755 index 0000000000..45c2ce03d9 --- /dev/null +++ b/external/llvm/scripts/ci/run-jenkins-windows.bat @@ -0,0 +1,47 @@ +:: Set up build environment and build LLVM using build-external-llvm.bat. + +:: Arguments: +:: ------------------------------------------------------- +:: ------------------------------------------------------- + +@echo off +setlocal + +set BUILD_RESULT=1 + +:: Get path for current running script. +set RUN_JENKINS_WINDOWS_SCRIPT_PATH=%~dp0 +set MONO_LLVM_SRC_DIR=%RUN_JENKINS_WINDOWS_SCRIPT_PATH%..\.. +set MONO_LLVM_BUILD_DIR=%RUN_JENKINS_WINDOWS_SCRIPT_PATH%builds\llvm-llvmwin64-msvc +set MONO_LLVM_INSTALL_DIR=%RUN_JENKINS_WINDOWS_SCRIPT_PATH%out\llvm-llvmwin64-msvc + +if exist "%MONO_LLVM_BUILD_DIR%" ( + rmdir /S /Q "%MONO_LLVM_BUILD_DIR%" +) + +if exist "%MONO_LLVM_INSTALL_DIR%" ( + rmdir /S /Q "%MONO_LLVM_INSTALL_DIR%" +) + +mkdir "%MONO_LLVM_BUILD_DIR%" +mkdir "%MONO_LLVM_INSTALL_DIR%" + +:: Setup Windows environment. +call %RUN_JENKINS_WINDOWS_SCRIPT_PATH%setup-windows-env.bat + +:: Setup VS msvc build environment. +call %RUN_JENKINS_WINDOWS_SCRIPT_PATH%setup-vs-msvcbuild-env.bat + +:: Run LLVM builds using default argument (similar to how its build from mono.sln) +call %RUN_JENKINS_WINDOWS_SCRIPT_PATH%build-external-llvm.bat "%MONO_LLVM_SRC_DIR%" "%MONO_LLVM_BUILD_DIR%" "%MONO_LLVM_INSTALL_DIR%" "%MONO_LLVM_BUILD_DIR%" "-D__default_codegen__ -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -DHAVE_CONFIG_H -DGC_NOT_DLL -DWIN32_THREADS -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DFD_SETSIZE=1024 -DNVALGRIND" "-DLLVM_ENABLE_ASSERTIONS=Off" "x64" "Release" "Build" "" "false" && ( + set BUILD_RESULT=0 +) || ( + set BUILD_RESULT=1 + if not %ERRORLEVEL% == 0 ( + set BUILD_RESULT=%ERRORLEVEL% + ) +) + +exit /b %BUILD_RESULT% + +@echo on \ No newline at end of file diff --git a/external/llvm/scripts/ci/run-jenkins-windows.sh b/external/llvm/scripts/ci/run-jenkins-windows.sh new file mode 100755 index 0000000000..03ce6c0a31 --- /dev/null +++ b/external/llvm/scripts/ci/run-jenkins-windows.sh @@ -0,0 +1,41 @@ +#!/bin/bash -e + +function win32_format_path { + local formatted_path=$1 + local host_win32_wsl=0 + local host_win32_cygwin=0 + + host_uname="$(uname -a)" + case "$host_uname" in + *Microsoft*) + host_win32_wsl=1 + ;; + CYGWIN*) + host_win32_cygwin=1 + ;; + esac + + if [[ $host_win32_wsl = 1 ]] && [[ $1 == "/mnt/"* ]]; then + formatted_path="$(wslpath -a -w "$1")" + elif [[ $host_win32_cygwin = 1 ]] && [[ $1 == "/cygdrive/"* ]]; then + formatted_path="$(cygpath -a -w "$1")" + fi + + echo "$formatted_path" +} + +echo "ENVIRONMENT:" +env + +RUN_JENKINS_WINDOWS_SCRIPT_PATH=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +RUN_JENKINS_WINDOWS_SCRIPT_PATH_WINDOWS=$(win32_format_path "$RUN_JENKINS_WINDOWS_SCRIPT_PATH/run-jenkins-windows.bat") + +WINDOWS_CMD=$(which cmd.exe) +if [ ! -f $WINDOWS_CMD ]; then + WINDOWS_CMD=$WINDIR/System32/cmd.exe +fi + +"$WINDOWS_CMD" /c "$RUN_JENKINS_WINDOWS_SCRIPT_PATH_WINDOWS" + +GIT_COMMIT=$(git rev-parse HEAD) +tar cvzf llvm-llvmwin64-msvc-$GIT_COMMIT-Windows.tar.gz -C $RUN_JENKINS_WINDOWS_SCRIPT_PATH/out/llvm-llvmwin64-msvc . diff --git a/external/llvm/scripts/ci/run-jenkins.sh b/external/llvm/scripts/ci/run-jenkins.sh index 2ffdf82184..d30109452c 100755 --- a/external/llvm/scripts/ci/run-jenkins.sh +++ b/external/llvm/scripts/ci/run-jenkins.sh @@ -1,39 +1,24 @@ #!/bin/bash -e -echo "ENVIRONMENT:" -env +RUN_JENKINS_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -llvm_base_CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_BUILD_TESTS=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_TOOLS_TO_BUILD=opt;llc;llvm-config;llvm-dis -G Ninja" - -llvm64_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS" -llvm32_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS -DLLVM_BUILD_32_BITS=On" - -rm -rf build -mkdir -p build -cd build -cmake $llvm64_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr64 ../ -ninja -ninja install -cd .. -rm -rf build32 -mkdir -p build32 -cd build32 -cmake $llvm32_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr32 ../ -ninja -ninja install -cd .. - -rm -rf tmp-bin -mkdir tmp-bin -cp usr64/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin/ -rm usr64/bin/* -cp tmp-bin/* usr64/bin/ - -rm -rf tmp-bin2 -mkdir tmp-bin2 -cp usr32/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin2 -rm usr32/bin/* -cp tmp-bin2/* usr32/bin/ -# Don't need 32 bit binaries -rm -f usr64/lib/libLTO.* usr64/lib/*.dylib usr32/lib/libLTO.* usr32/lib/*.dylib -tar cvzf llvm-osx64-$GIT_COMMIT.tar.gz usr64 usr32 +host_uname="$(uname)" +case "$host_uname" in + CYGWIN*) + $RUN_JENKINS_SCRIPT_DIR/run-jenkins-windows.sh + ;; + Linux) + host_uname="$(uname -a)" + case "$host_uname" in + *Microsoft*) + $RUN_JENKINS_SCRIPT_DIR/run-jenkins-windows.sh + ;; + *) + $RUN_JENKINS_SCRIPT_DIR/run-jenkins-linux.sh + ;; + esac + ;; + Darwin) + $RUN_JENKINS_SCRIPT_DIR/run-jenkins-osx.sh + ;; +esac diff --git a/external/llvm/scripts/ci/setup-vs-msvcbuild-env.bat b/external/llvm/scripts/ci/setup-vs-msvcbuild-env.bat new file mode 100755 index 0000000000..98b42b336b --- /dev/null +++ b/external/llvm/scripts/ci/setup-vs-msvcbuild-env.bat @@ -0,0 +1,155 @@ +:: Set up VS MSVC environment depending on installed VS versions. +:: Script will setup environment variables directly in callers environment. + +:: Make sure we can restore current working directory after setting up environment. +:: Some of the VS scripts can change the current working directory. +set CALLER_WD=%CD% + +:: Get path for current running script. +set RUN_SETUP_VS_MSVCBUILD_ENV_SCRIPT_PATH=%~dp0 + +:: NOTE, MSVC build Mono full AOT tooling currently support 64-bit AMD codegen. Below will only setup +:: amd64 versions of VS MSVC build environment and corresponding ClangC2 compiler. +set VS_2015_TOOLCHAIN_ARCH=amd64 +set VS_2015_VCVARS_ARCH=%VS_2015_TOOLCHAIN_ARCH%\vcvars64.bat +set VS_2015_CLANGC2_ARCH=%VS_2015_TOOLCHAIN_ARCH% +set VS_2017_VCVARS_ARCH=vcvars64.bat +set VS_2017_CLANGC2_ARCH=HostX64 + +:: 32-bit AOT toolchains for MSVC build mono-sgen.exe is currently not supported. +:: set VS_2015_TOOLCHAIN_ARCH=x86 +:: set VS_2015_VCVARS_ARCH=vcvars32.bat +:: set VS_2015_CLANGC2_ARCH=%VS_2015_TOOLCHAIN_ARCH% +:: set VS_2017_VCVARS_ARCH=vcvars32.bat +:: set VS_2017_CLANGC2_ARCH=HostX86 + +set VS_CLANGC2_TOOLS_BIN_PATH= + +:: Visual Studio 2015 == 14.0 +if "%VisualStudioVersion%" == "14.0" ( + goto SETUP_VS_2015 +) + +:: Visual Studio 2017 == 15.0 +if "%VisualStudioVersion%" == "15.0" ( + goto SETUP_VS_2017 +) + +:SETUP_VS_2015 + +set VS_2015_VCINSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\ + +:: Try to locate installed VS2015 Clang/C2. +SET VS_2015_CLANGC2_TOOLS_BIN_PATH=%VS_2015_VCINSTALL_DIR%ClangC2\bin\%VS_2015_CLANGC2_ARCH%\ +SET VS_2015_CLANGC2_TOOLS_BIN=%VS_2015_CLANGC2_TOOLS_BIN_PATH%clang.exe + +if not exist "%VS_2015_CLANGC2_TOOLS_BIN%" ( + goto SETUP_VS_2017 +) + +:SETUP_VS_2015_BUILD_TOOLS + +:: Try to locate VS2015 build tools installation. +set VS_2015_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual C++ Build Tools\ +set VS_2015_BUILD_TOOLS_CMD=%VS_2015_BUILD_TOOLS_INSTALL_DIR%vcbuildtools.bat + +:: Setup VS2015 VC development environment using build tools installation. +call :setup_build_env "%VS_2015_BUILD_TOOLS_CMD%" "%VS_2015_TOOLCHAIN_ARCH%" "%CALLER_WD%" && ( + set "VS_CLANGC2_TOOLS_BIN_PATH=%VS_2015_CLANGC2_TOOLS_BIN_PATH%" + goto ON_EXIT +) + +:SETUP_VS_2015_VC + +:: Try to locate installed VS2015 VC environment. +set VS_2015_DEV_CMD=%VS_2015_VCINSTALL_DIR%bin\%VS_2015_VCVARS_ARCH% + +call :setup_build_env "%VS_2015_DEV_CMD%" "" "%CALLER_WD%" && ( + set "VS_CLANGC2_TOOLS_BIN_PATH=%VS_2015_CLANGC2_TOOLS_BIN_PATH%" + goto ON_EXIT +) + +:SETUP_VS_2017 + +:: VS2017 includes vswhere.exe that can be used to locate current VS2017 installation. +set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe +set VS_2017_VCINSTALL_DIR= + +:: Try to locate installed VS2017 VC environment. +if exist "%VSWHERE_TOOLS_BIN%" ( + for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -latest -property installationPath') do ( + set VS_2017_VCINSTALL_DIR=%%a\VC\ + ) +) + +:: Try to locate installed VS2017 Clang/C2. +SET VS_2017_CLANGC2_VERSION_FILE=%VS_2017_VCINSTALL_DIR%Auxiliary/Build/Microsoft.ClangC2Version.default.txt +if not exist "%VS_2017_CLANGC2_VERSION_FILE%" ( + goto ON_ENV_ERROR +) + +set /p VS_2017_CLANGC2_VERSION=<"%VS_2017_CLANGC2_VERSION_FILE%" +set VS_2017_CLANGC2_TOOLS_BIN_PATH=%VS_2017_VCINSTALL_DIR%Tools\ClangC2\%VS_2017_CLANGC2_VERSION%\bin\%VS_2017_CLANGC2_ARCH%\ +set VS_2017_CLANGC2_TOOLS_BIN=%VS_2017_CLANGC2_TOOLS_BIN_PATH%clang.exe +if not exist "%VS_2017_CLANGC2_TOOLS_BIN%" ( + goto ON_ENV_ERROR +) + +:SETUP_VS_2017_BUILD_TOOLS + +:: Try to locate VS2017 build tools installation. +set VS_2017_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\ +set VS_2017_BUILD_TOOLS_CMD=%VS_2017_BUILD_TOOLS_INSTALL_DIR%VC\Auxiliary\Build\%VS_2017_VCVARS_ARCH% + +:: Setup VS2017 VC development environment using build tools installation. +call :setup_build_env "%VS_2017_BUILD_TOOLS_CMD%" "" "%CALLER_WD%" && ( + set "VS_CLANGC2_TOOLS_BIN_PATH=%VS_2017_CLANGC2_TOOLS_BIN_PATH%" + goto ON_EXIT +) + +:SETUP_VS_2017_VC + +:: Try to locate installed VS2017 VC environment. +set VS_2017_DEV_CMD=%VS_2017_VCINSTALL_DIR%Auxiliary\Build\%VS_2017_VCVARS_ARCH% + +:: Setup VS2017 VC development environment using VS installation. +call :setup_build_env "%VS_2017_DEV_CMD%" "" "%CALLER_WD%" && ( + set "VS_CLANGC2_TOOLS_BIN_PATH=%VS_2017_CLANGC2_TOOLS_BIN_PATH%" + goto ON_EXIT +) + +:ON_ENV_ERROR + +echo Warning, failed to setup VS build environment needed by VS tooling. +echo Incomplete build environment can cause build error's due to missing compiler, +echo linker and platform libraries. + +exit /b 1 + +:ON_EXIT + +:: Add ClangC2 folders to PATH +set "PATH=%VS_CLANGC2_TOOLS_BIN_PATH%;%PATH%" + +exit /b 0 + +:setup_build_env + +:: Check if VS build environment script exists. +if not exist "%~1" ( + goto setup_build_env_error +) + +:: Run VS build environment script. +call "%~1" %~2 > NUL + +:: Restore callers working directory in case it has been changed by VS scripts. +cd /d "%~3" + +goto setup_build_env_exit + +:setup_build_env_error +exit /b 1 + +:setup_build_env_exit +goto :EOF \ No newline at end of file diff --git a/external/llvm/scripts/ci/setup-windows-env.bat b/external/llvm/scripts/ci/setup-windows-env.bat new file mode 100755 index 0000000000..80b5b7d8db --- /dev/null +++ b/external/llvm/scripts/ci/setup-windows-env.bat @@ -0,0 +1,64 @@ +:: Script will setup environment variables directly in callers environment. + +:: If we are running from none Windows shell we will need to restore a clean PATH +:: before setting up VS MSVC build environment. If not there is a risk we will pick up +:: for example cygwin binaries when running toolchain commands not explicitly setup by +:: VS MSVC build environment. +set HKCU_ENV_PATH= +set HKLM_ENV_PATH= +if "%SHELL%" == "/bin/bash" ( + for /f "tokens=2,*" %%a in ('%WINDIR%\System32\reg.exe query "HKCU\Environment" /v "Path" ^| %WINDIR%\System32\find.exe /i "REG_"') do ( + SET HKCU_ENV_PATH=%%b + ) + for /f "tokens=2,*" %%a in ('%WINDIR%\System32\reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "Path" ^| %WINDIR%\System32\find.exe /i "REG_"') do ( + SET HKLM_ENV_PATH=%%b + ) +) + +:: Restore default path, if we are running from none Windows shell. +if "%SHELL%" == "/bin/bash" ( + call :restore_default_path "%HKCU_ENV_PATH%" "%HKLM_ENV_PATH%" +) + +:: There is still a scenario where the default path can include cygwin\bin folder. If that's the case +:: there is still a big risk that build tools will be incorrectly resolved towards cygwin bin folder. +:: Make sure to adjust path and drop all cygwin paths. +set NEW_PATH= +call where /Q "cygpath.exe" && ( + echo Warning, PATH includes cygwin bin folders. This can cause build errors due to incorrectly + echo located build tools. Build script will drop all cygwin folders from used PATH. + for %%a in ("%PATH:;=";"%") do ( + if not exist "%%~a\cygpath.exe" ( + call :add_to_new_path "%%~a" + ) + ) +) + +if not "%NEW_PATH%" == "" ( + set "PATH=%NEW_PATH%" +) + +exit /b 0 + +:restore_default_path + +:: Restore default PATH. +if not "%~2" == "" ( + if not "%~1" == "" ( + set "PATH=%~2;%~1" + ) else ( + set "PATH=%~2" + ) +) + +goto :EOF + +:add_to_new_path + +if "%NEW_PATH%" == "" ( + set "NEW_PATH=%~1" +) else ( + SET "NEW_PATH=%NEW_PATH%;%~1" +) + +goto :EOF \ No newline at end of file diff --git a/external/llvm/test/CodeGen/AArch64/arm64-indexed-vector-ldst-2.ll b/external/llvm/test/CodeGen/AArch64/arm64-indexed-vector-ldst-2.ll index 14beb1ae9c..1032a6d620 100644 --- a/external/llvm/test/CodeGen/AArch64/arm64-indexed-vector-ldst-2.ll +++ b/external/llvm/test/CodeGen/AArch64/arm64-indexed-vector-ldst-2.ll @@ -28,6 +28,28 @@ return: ; preds = %if.then172, %cond.e ret void } +; Avoid an assert/bad codegen in LD1LANEPOST lowering by not forming +; LD1LANEPOST ISD nodes with a non-constant lane index. +define <4 x i32> @f2(i32 *%p, <4 x i1> %m, <4 x i32> %v1, <4 x i32> %v2, i32 %idx) { + %L0 = load i32, i32* %p + %p1 = getelementptr i32, i32* %p, i64 1 + %L1 = load i32, i32* %p1 + %v = select <4 x i1> %m, <4 x i32> %v1, <4 x i32> %v2 + %vret = insertelement <4 x i32> %v, i32 %L0, i32 %idx + store i32 %L1, i32 *%p + ret <4 x i32> %vret +} + +; Check that a cycle is avoided during isel between the LD1LANEPOST instruction and the load of %L1. +define <4 x i32> @f3(i32 *%p, <4 x i1> %m, <4 x i32> %v1, <4 x i32> %v2) { + %L0 = load i32, i32* %p + %p1 = getelementptr i32, i32* %p, i64 1 + %L1 = load i32, i32* %p1 + %v = select <4 x i1> %m, <4 x i32> %v1, <4 x i32> %v2 + %vret = insertelement <4 x i32> %v, i32 %L0, i32 %L1 + ret <4 x i32> %vret +} + ; Function Attrs: nounwind readnone declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) #1 diff --git a/external/llvm/test/CodeGen/AArch64/arm64-zero-cycle-zeroing.ll b/external/llvm/test/CodeGen/AArch64/arm64-zero-cycle-zeroing.ll index 2fb9d3b2d0..664078fb7e 100644 --- a/external/llvm/test/CodeGen/AArch64/arm64-zero-cycle-zeroing.ll +++ b/external/llvm/test/CodeGen/AArch64/arm64-zero-cycle-zeroing.ll @@ -1,27 +1,31 @@ -; RUN: llc -mtriple=arm64-apple-ios -mcpu=cyclone < %s | FileCheck %s -check-prefix=CYCLONE --check-prefix=ALL -; RUN: llc -mtriple=aarch64-gnu-linux -mcpu=kryo < %s | FileCheck %s -check-prefix=KRYO --check-prefix=ALL -; RUN: llc -mtriple=aarch64-gnu-linux -mcpu=falkor < %s | FileCheck %s -check-prefix=FALKOR --check-prefix=ALL +; RUN: llc -mtriple=arm64-apple-ios -mcpu=cyclone < %s | FileCheck %s -check-prefixes=ALL,CYCLONE +; RUN: llc -mtriple=arm64-apple-ios -mcpu=cyclone -mattr=+fullfp16 < %s | FileCheck %s -check-prefixes=CYCLONE-FULLFP16 +; RUN: llc -mtriple=aarch64-gnu-linux -mcpu=exynos-m1 < %s | FileCheck %s -check-prefixes=ALL,OTHERS +; RUN: llc -mtriple=aarch64-gnu-linux -mcpu=exynos-m3 < %s | FileCheck %s -check-prefixes=ALL,OTHERS +; RUN: llc -mtriple=aarch64-gnu-linux -mcpu=kryo < %s | FileCheck %s -check-prefixes=ALL,OTHERS +; RUN: llc -mtriple=aarch64-gnu-linux -mcpu=falkor < %s | FileCheck %s -check-prefixes=ALL,OTHERS -; rdar://11481771 -; rdar://13713797 +declare void @bar(half, float, double, <2 x double>) +declare void @bari(i32, i32) +declare void @barl(i64, i64) +declare void @barf(float, float) define void @t1() nounwind ssp { entry: ; ALL-LABEL: t1: ; ALL-NOT: fmov -; CYCLONE: fmov d0, xzr -; CYCLONE: fmov d1, xzr +; ALL: ldr h0,{{.*}} +; CYCLONE: fmov s1, wzr ; CYCLONE: fmov d2, xzr -; CYCLONE: fmov d3, xzr -; KRYO: movi v0.2d, #0000000000000000 -; KRYO: movi v1.2d, #0000000000000000 -; KRYO: movi v2.2d, #0000000000000000 -; KRYO: movi v3.2d, #0000000000000000 -; FALKOR: movi v0.2d, #0000000000000000 -; FALKOR: movi v1.2d, #0000000000000000 -; FALKOR: movi v2.2d, #0000000000000000 -; FALKOR: movi v3.2d, #0000000000000000 - tail call void @bar(double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00) nounwind +; CYCLONE: movi.16b v3, #0 +; CYCLONE-FULLFP16: fmov h0, wzr +; CYCLONE-FULLFP16: fmov s1, wzr +; CYCLONE-FULLFP16: fmov d2, xzr +; CYCLONE-FULLFP16: movi.16b v3, #0 +; OTHERS: movi v{{[0-3]+}}.2d, #0000000000000000 +; OTHERS: movi v{{[0-3]+}}.2d, #0000000000000000 +; OTHERS: movi v{{[0-3]+}}.2d, #0000000000000000 + tail call void @bar(half 0.000000e+00, float 0.000000e+00, double 0.000000e+00, <2 x double> ) nounwind ret void } @@ -29,8 +33,8 @@ define void @t2() nounwind ssp { entry: ; ALL-LABEL: t2: ; ALL-NOT: mov w0, wzr -; ALL: mov w0, #0 -; ALL: mov w1, #0 +; ALL: mov w{{[0-3]+}}, #0 +; ALL: mov w{{[0-3]+}}, #0 tail call void @bari(i32 0, i32 0) nounwind ret void } @@ -39,8 +43,8 @@ define void @t3() nounwind ssp { entry: ; ALL-LABEL: t3: ; ALL-NOT: mov x0, xzr -; ALL: mov x0, #0 -; ALL: mov x1, #0 +; ALL: mov x{{[0-3]+}}, #0 +; ALL: mov x{{[0-3]+}}, #0 tail call void @barl(i64 0, i64 0) nounwind ret void } @@ -48,26 +52,21 @@ entry: define void @t4() nounwind ssp { ; ALL-LABEL: t4: ; ALL-NOT: fmov -; CYCLONE: fmov s0, wzr -; CYCLONE: fmov s1, wzr -; KRYO: movi v0.2d, #0000000000000000 -; KRYO: movi v1.2d, #0000000000000000 -; FALKOR: movi v0.2d, #0000000000000000 -; FALKOR: movi v1.2d, #0000000000000000 +; CYCLONE: fmov s{{[0-3]+}}, wzr +; CYCLONE: fmov s{{[0-3]+}}, wzr +; CYCLONE-FULLFP16: fmov s{{[0-3]+}}, wzr +; CYCLONE-FULLFP16: fmov s{{[0-3]+}}, wzr +; OTHERS: movi v{{[0-3]+}}.2d, #0000000000000000 +; OTHERS: movi v{{[0-3]+}}.2d, #0000000000000000 tail call void @barf(float 0.000000e+00, float 0.000000e+00) nounwind ret void } -declare void @bar(double, double, double, double) -declare void @bari(i32, i32) -declare void @barl(i64, i64) -declare void @barf(float, float) - ; We used to produce spills+reloads for a Q register with zero cycle zeroing ; enabled. ; ALL-LABEL: foo: -; ALL-NOT: str {{q[0-9]+}} -; ALL-NOT: ldr {{q[0-9]+}} +; ALL-NOT: str q{{[0-9]+}} +; ALL-NOT: ldr q{{[0-9]+}} define double @foo(i32 %n) { entry: br label %for.body @@ -90,8 +89,7 @@ for.end: define <2 x i64> @t6() { ; ALL-LABEL: t6: ; CYCLONE: movi.16b v0, #0 -; KRYO: movi v0.2d, #0000000000000000 -; FALKOR: movi v0.2d, #0000000000000000 +; OTHERS: movi v0.2d, #0000000000000000 ret <2 x i64> zeroinitializer } diff --git a/external/llvm/test/CodeGen/AArch64/falkor-hwpf-fix.mir b/external/llvm/test/CodeGen/AArch64/falkor-hwpf-fix.mir index 38622ae0e4..28b19f8776 100644 --- a/external/llvm/test/CodeGen/AArch64/falkor-hwpf-fix.mir +++ b/external/llvm/test/CodeGen/AArch64/falkor-hwpf-fix.mir @@ -353,3 +353,28 @@ body: | bb.1: RET_ReallyLR ... +--- +# Check that non-base registers are considered live when finding a +# scratch register by making sure we don't use %x2 for the scratch +# register for the inserted ORRXrs. +# CHECK-LABEL: name: hwpf_offreg +# CHECK: %x3 = ORRXrs %xzr, %x1, 0 +# CHECK: %w10 = LDRWroX %x3, %x2, 0, 0 +name: hwpf_offreg +tracksRegLiveness: true +body: | + bb.0: + liveins: %w0, %x1, %x2, %x17, %x18 + + %w10 = LDRWroX %x1, %x2, 0, 0 :: ("aarch64-strided-access" load 4) + + %x2 = ORRXrs %xzr, %x10, 0 + %w26 = LDRWroX %x1, %x2, 0, 0 + + %w0 = SUBWri %w0, 1, 0 + %wzr = SUBSWri %w0, 0, 0, implicit-def %nzcv + Bcc 9, %bb.0, implicit %nzcv + + bb.1: + RET_ReallyLR +... diff --git a/external/llvm/test/CodeGen/AArch64/inlineasm-S-constraint.ll b/external/llvm/test/CodeGen/AArch64/inlineasm-S-constraint.ll new file mode 100644 index 0000000000..3fb2a3f32c --- /dev/null +++ b/external/llvm/test/CodeGen/AArch64/inlineasm-S-constraint.ll @@ -0,0 +1,20 @@ +;RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s +@var = global i32 0 +define void @test_inline_constraint_S() { +; CHECK-LABEL: test_inline_constraint_S: + call void asm sideeffect "adrp x0, $0", "S"(i32* @var) + call void asm sideeffect "add x0, x0, :lo12:$0", "S"(i32* @var) +; CHECK: adrp x0, var +; CHECK: add x0, x0, :lo12:var + ret void +} +define i32 @test_inline_constraint_S_label(i1 %in) { +; CHECK-LABEL: test_inline_constraint_S_label: + call void asm sideeffect "adr x0, $0", "S"(i8* blockaddress(@test_inline_constraint_S_label, %loc)) +; CHECK: adr x0, .Ltmp{{[0-9]+}} +br i1 %in, label %loc, label %loc2 +loc: + ret i32 0 +loc2: + ret i32 42 +} diff --git a/external/llvm/test/CodeGen/AArch64/spill-stack-realignment.mir b/external/llvm/test/CodeGen/AArch64/spill-stack-realignment.mir new file mode 100644 index 0000000000..fe85f4b640 --- /dev/null +++ b/external/llvm/test/CodeGen/AArch64/spill-stack-realignment.mir @@ -0,0 +1,35 @@ +# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=prologepilog %s -o - | FileCheck %s + +# Ensure references to scavenged stack slots in the CSR area use the +# FP as a base when the stack pointer must be aligned to something +# larger than required by the target. This is necessary because the +# alignment padding area is between the CSR area and the SP, so the SP +# cannot be used to reference the CSR area. +name: test +tracksRegLiveness: true +frameInfo: + maxAlignment: 64 +# CHECK: stack: +# CHECK: id: 0, name: '', type: default, offset: -64, size: 4, alignment: 64 +# CHECK-NEXT: stack-id: 0 +# CHECK-NEXT: local-offset: -64 +# CHECK: id: 1, name: '', type: default, offset: -20, size: 4, alignment: 4 +# CHECK-NEXT: stack-id: 0 +# CHECK-NEXT: local-offset: -68 +stack: + - { id: 0, size: 4, alignment: 64, local-offset: -64 } + - { id: 1, size: 4, alignment: 4, local-offset: -68 } + +# CHECK: body: +# CHECK: %sp = ANDXri killed %{{x[0-9]+}}, 7865 +# CHECK: STRSui %s0, %sp, 0 +# CHECK: STURSi %s0, %fp, -4 +body: | + bb.0.entry: + liveins: %s0 + + STRSui %s0, %stack.0, 0 + STRSui %s0, %stack.1, 0 + ; Force preserve a CSR to create a hole in the CSR stack region. + %x28 = IMPLICIT_DEF + RET_ReallyLR diff --git a/external/llvm/test/CodeGen/Hexagon/ifcvt-diamond-ret.mir b/external/llvm/test/CodeGen/Hexagon/ifcvt-diamond-ret.mir new file mode 100644 index 0000000000..e896d9aaa9 --- /dev/null +++ b/external/llvm/test/CodeGen/Hexagon/ifcvt-diamond-ret.mir @@ -0,0 +1,25 @@ +# RUN: llc -march=hexagon -run-pass if-converter %s -o - | FileCheck %s + +# Make sure this gets if-converted and it doesn't crash. +# CHECK-LABEL: bb.0 +# CHECK: PS_jmpret %r31 +# CHECK-NOT: bb.{{[1-9]+}}: + +--- +name: fred +tracksRegLiveness: true +body: | + bb.0: + successors: %bb.1, %bb.2 + liveins: %r0 + renamable %p0 = C2_cmpeqi killed renamable %r0, 0 + J2_jumpf killed renamable %p0, %bb.2, implicit-def dead %pc + + bb.1: + S4_storeiri_io undef renamable %r0, 0, 32768 :: (store 4 into `i32* undef`) + PS_jmpret %r31, implicit-def dead %pc + + bb.2: + S4_storeiri_io undef renamable %r0, 0, 32768 :: (store 4 into `i32* undef`) + PS_jmpret %r31, implicit-def dead %pc +... diff --git a/external/llvm/test/CodeGen/MIR/PowerPC/ifcvt-diamond-ret.mir b/external/llvm/test/CodeGen/MIR/PowerPC/ifcvt-diamond-ret.mir new file mode 100644 index 0000000000..c63c055c3b --- /dev/null +++ b/external/llvm/test/CodeGen/MIR/PowerPC/ifcvt-diamond-ret.mir @@ -0,0 +1,34 @@ +# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -run-pass=if-converter %s -o - | FileCheck %s +--- +name: foo +body: | + bb.0: + liveins: %x0, %x3 + successors: %bb.1(0x40000000), %bb.2(0x40000000) + + dead renamable %x3 = ANDIo8 killed renamable %x3, 1, implicit-def dead %cr0, implicit-def %cr0gt + %cr2lt = CROR %cr0gt, %cr0gt + BCn killed renamable %cr2lt, %bb.2 + B %bb.1 + + bb.1: + renamable %x3 = LIS8 4096 + MTLR8 %x0, implicit-def %lr8 + BLR8 implicit %lr8, implicit %rm, implicit %x3 + + bb.2: + renamable %x3 = LIS8 4096 + MTLR8 %x0, implicit-def %lr8 + BLR8 implicit %lr8, implicit %rm, implicit %x3 +... + +# Diamond testcase with equivalent branches terminating in returns. + +# CHECK: body: | +# CHECK: bb.0: +# CHECK: dead renamable %x3 = ANDIo8 killed renamable %x3, 1, implicit-def dead %cr0, implicit-def %cr0gt +# CHECK: %cr2lt = CROR %cr0gt, %cr0gt +# CHECK: renamable %x3 = LIS8 4096 +# CHECK: MTLR8 %x0, implicit-def %lr8 +# CHECK: BLR8 implicit %lr8, implicit %rm, implicit %x3 + diff --git a/external/llvm/test/CodeGen/Mips/const-mult.ll b/external/llvm/test/CodeGen/Mips/const-mult.ll index 459aad6182..dc4f2f9c86 100644 --- a/external/llvm/test/CodeGen/Mips/const-mult.ll +++ b/external/llvm/test/CodeGen/Mips/const-mult.ll @@ -1,93 +1,626 @@ -; RUN: llc -march=mipsel < %s | FileCheck %s -; RUN: llc -march=mips64el < %s | FileCheck %s -check-prefixes=CHECK,CHECK64 +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=mipsel-mti-linux-gnu < %s | FileCheck %s -check-prefix=MIPS32 +; RUN: llc -mtriple=mips64el-mti-linux-gnu < %s | FileCheck %s -check-prefix=MIPS64 -; CHECK-LABEL: mul5_32: -; CHECK: sll $[[R0:[0-9]+]], $4, 2 -; CHECK: addu ${{[0-9]+}}, $[[R0]], $4 define i32 @mul5_32(i32 signext %a) { +; MIPS32-LABEL: mul5_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 2 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $1, $4 +; +; MIPS64-LABEL: mul5_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 2 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $1, $4 entry: %mul = mul nsw i32 %a, 5 ret i32 %mul } -; CHECK-LABEL: mul27_32: -; CHECK-DAG: sll $[[R0:[0-9]+]], $4, 2 -; CHECK-DAG: addu $[[R1:[0-9]+]], $[[R0]], $4 -; CHECK-DAG: sll $[[R2:[0-9]+]], $4, 5 -; CHECK: subu ${{[0-9]+}}, $[[R2]], $[[R1]] - define i32 @mul27_32(i32 signext %a) { +; MIPS32-LABEL: mul27_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 2 +; MIPS32-NEXT: addu $1, $1, $4 +; MIPS32-NEXT: sll $2, $4, 5 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: subu $2, $2, $1 +; +; MIPS64-LABEL: mul27_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 2 +; MIPS64-NEXT: addu $1, $1, $4 +; MIPS64-NEXT: sll $2, $4, 5 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: subu $2, $2, $1 entry: %mul = mul nsw i32 %a, 27 ret i32 %mul } -; CHECK-LABEL: muln2147483643_32: -; CHECK-DAG: sll $[[R0:[0-9]+]], $4, 2 -; CHECK-DAG: addu $[[R1:[0-9]+]], $[[R0]], $4 -; CHECK-DAG: sll $[[R2:[0-9]+]], $4, 31 -; CHECK: addu ${{[0-9]+}}, $[[R2]], $[[R1]] - define i32 @muln2147483643_32(i32 signext %a) { +; MIPS32-LABEL: muln2147483643_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 2 +; MIPS32-NEXT: addu $1, $1, $4 +; MIPS32-NEXT: sll $2, $4, 31 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $2, $1 +; +; MIPS64-LABEL: muln2147483643_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 2 +; MIPS64-NEXT: addu $1, $1, $4 +; MIPS64-NEXT: sll $2, $4, 31 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $2, $1 entry: %mul = mul nsw i32 %a, -2147483643 ret i32 %mul } -; CHECK64-LABEL: muln9223372036854775805_64: -; CHECK64-DAG: dsll $[[R0:[0-9]+]], $4, 1 -; CHECK64-DAG: daddu $[[R1:[0-9]+]], $[[R0]], $4 -; CHECK64-DAG: dsll $[[R2:[0-9]+]], $4, 63 -; CHECK64: daddu ${{[0-9]+}}, $[[R2]], $[[R1]] - define i64 @muln9223372036854775805_64(i64 signext %a) { +; MIPS32-LABEL: muln9223372036854775805_64: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 1 +; MIPS32-NEXT: addu $2, $1, $4 +; MIPS32-NEXT: sltu $1, $2, $1 +; MIPS32-NEXT: srl $3, $4, 31 +; MIPS32-NEXT: sll $6, $5, 1 +; MIPS32-NEXT: or $3, $6, $3 +; MIPS32-NEXT: addu $3, $3, $5 +; MIPS32-NEXT: addu $1, $3, $1 +; MIPS32-NEXT: sll $3, $4, 31 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $3, $3, $1 +; +; MIPS64-LABEL: muln9223372036854775805_64: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsll $1, $4, 1 +; MIPS64-NEXT: daddu $1, $1, $4 +; MIPS64-NEXT: dsll $2, $4, 63 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: daddu $2, $2, $1 entry: %mul = mul nsw i64 %a, -9223372036854775805 ret i64 %mul } -; CHECK64-LABEL: muln170141183460469231731687303715884105725_128: -; CHECK64-DAG: dsrl $[[R0:[0-9]+]], $4, 63 -; CHECK64-DAG: dsll $[[R1:[0-9]+]], $5, 1 -; CHECK64-DAG: or $[[R2:[0-9]+]], $[[R1]], $[[R0]] -; CHECK64-DAG: daddu $[[R3:[0-9]+]], $[[R2]], $5 -; CHECK64-DAG: dsll $[[R4:[0-9]+]], $4, 1 -; CHECK64-DAG: daddu $[[R5:[0-9]+]], $[[R4]], $4 -; CHECK64-DAG: sltu $[[R6:[0-9]+]], $[[R5]], $[[R4]] -; CHECK64-DAG: dsll $[[R7:[0-9]+]], $[[R6]], 32 -; CHECK64-DAG: dsrl $[[R8:[0-9]+]], $[[R7]], 32 -; CHECK64-DAG: daddu $[[R9:[0-9]+]], $[[R3]], $[[R8]] -; CHECK64-DAG: dsll $[[R10:[0-9]+]], $4, 63 -; CHECK64: daddu ${{[0-9]+}}, $[[R10]], $[[R9]] - define i128 @muln170141183460469231731687303715884105725_128(i128 signext %a) { +; MIPS32-LABEL: muln170141183460469231731687303715884105725_128: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 1 +; MIPS32-NEXT: addu $2, $1, $4 +; MIPS32-NEXT: sltu $1, $2, $1 +; MIPS32-NEXT: srl $3, $4, 31 +; MIPS32-NEXT: sll $8, $5, 1 +; MIPS32-NEXT: or $8, $8, $3 +; MIPS32-NEXT: addu $3, $8, $5 +; MIPS32-NEXT: addu $3, $3, $1 +; MIPS32-NEXT: sltu $9, $3, $8 +; MIPS32-NEXT: xor $8, $3, $8 +; MIPS32-NEXT: movz $9, $1, $8 +; MIPS32-NEXT: srl $1, $5, 31 +; MIPS32-NEXT: sll $5, $6, 1 +; MIPS32-NEXT: or $5, $5, $1 +; MIPS32-NEXT: addu $8, $5, $6 +; MIPS32-NEXT: addu $1, $8, $9 +; MIPS32-NEXT: sltu $5, $8, $5 +; MIPS32-NEXT: srl $6, $6, 31 +; MIPS32-NEXT: sll $9, $7, 1 +; MIPS32-NEXT: or $6, $9, $6 +; MIPS32-NEXT: addu $6, $6, $7 +; MIPS32-NEXT: addu $5, $6, $5 +; MIPS32-NEXT: sll $4, $4, 31 +; MIPS32-NEXT: sltu $6, $1, $8 +; MIPS32-NEXT: addu $5, $5, $6 +; MIPS32-NEXT: addu $5, $4, $5 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: move $4, $1 +; +; MIPS64-LABEL: muln170141183460469231731687303715884105725_128: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsrl $1, $4, 63 +; MIPS64-NEXT: dsll $2, $5, 1 +; MIPS64-NEXT: or $1, $2, $1 +; MIPS64-NEXT: daddu $1, $1, $5 +; MIPS64-NEXT: dsll $3, $4, 1 +; MIPS64-NEXT: daddu $2, $3, $4 +; MIPS64-NEXT: sltu $3, $2, $3 +; MIPS64-NEXT: dsll $3, $3, 32 +; MIPS64-NEXT: dsrl $3, $3, 32 +; MIPS64-NEXT: daddu $1, $1, $3 +; MIPS64-NEXT: dsll $3, $4, 63 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: daddu $3, $3, $1 entry: %mul = mul nsw i128 %a, -170141183460469231731687303715884105725 ret i128 %mul } -; CHECK64-LABEL: mul170141183460469231731687303715884105723_128: -; CHECK64-DAG: dsrl $[[R0:[0-9]+]], $4, 62 -; CHECK64-DAG: dsll $[[R1:[0-9]+]], $5, 2 -; CHECK64-DAG: or $[[R2:[0-9]+]], $[[R1]], $[[R0]] -; CHECK64-DAG: daddu $[[R3:[0-9]+]], $[[R2]], $5 -; CHECK64-DAG: dsll $[[R4:[0-9]+]], $4, 2 -; CHECK64-DAG: daddu $[[R5:[0-9]+]], $[[R4]], $4 -; CHECK64-DAG: sltu $[[R6:[0-9]+]], $[[R5]], $[[R4]] -; CHECK64-DAG: dsll $[[R7:[0-9]+]], $[[R6]], 32 -; CHECK64-DAG: dsrl $[[R8:[0-9]+]], $[[R7]], 32 -; CHECK64-DAG: daddu $[[R9:[0-9]+]], $[[R3]], $[[R8]] -; CHECK64-DAG: dsll $[[R10:[0-9]+]], $4, 63 -; CHECK64-DAG: dsubu $[[R11:[0-9]+]], $[[R10]], $[[R9]] -; CHECK64-DAG: sltu $[[R12:[0-9]+]], $zero, $[[R5]] -; CHECK64-DAG: dsll $[[R13:[0-9]+]], $[[R12]], 32 -; CHECK64-DAG: dsrl $[[R14:[0-9]+]], $[[R13]], 32 -; CHECK64-DAG: dsubu $[[R15:[0-9]+]], $[[R11]], $[[R14]] -; CHECK64: dnegu ${{[0-9]+}}, $[[R5]] - define i128 @mul170141183460469231731687303715884105723_128(i128 signext %a) { +; MIPS32-LABEL: mul170141183460469231731687303715884105723_128: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 2 +; MIPS32-NEXT: addu $2, $1, $4 +; MIPS32-NEXT: sltu $1, $2, $1 +; MIPS32-NEXT: srl $3, $4, 30 +; MIPS32-NEXT: sll $8, $5, 2 +; MIPS32-NEXT: or $3, $8, $3 +; MIPS32-NEXT: addu $8, $3, $5 +; MIPS32-NEXT: addu $8, $8, $1 +; MIPS32-NEXT: sltu $9, $8, $3 +; MIPS32-NEXT: xor $3, $8, $3 +; MIPS32-NEXT: sltu $10, $zero, $8 +; MIPS32-NEXT: sltu $11, $zero, $2 +; MIPS32-NEXT: movz $10, $11, $8 +; MIPS32-NEXT: movz $9, $1, $3 +; MIPS32-NEXT: srl $1, $5, 30 +; MIPS32-NEXT: sll $3, $6, 2 +; MIPS32-NEXT: or $1, $3, $1 +; MIPS32-NEXT: addu $3, $1, $6 +; MIPS32-NEXT: addu $5, $3, $9 +; MIPS32-NEXT: sll $4, $4, 31 +; MIPS32-NEXT: negu $9, $5 +; MIPS32-NEXT: sltu $12, $9, $10 +; MIPS32-NEXT: sltu $13, $5, $3 +; MIPS32-NEXT: sltu $1, $3, $1 +; MIPS32-NEXT: srl $3, $6, 30 +; MIPS32-NEXT: sll $6, $7, 2 +; MIPS32-NEXT: or $3, $6, $3 +; MIPS32-NEXT: addu $3, $3, $7 +; MIPS32-NEXT: addu $1, $3, $1 +; MIPS32-NEXT: addu $1, $1, $13 +; MIPS32-NEXT: subu $1, $4, $1 +; MIPS32-NEXT: sltu $3, $zero, $5 +; MIPS32-NEXT: subu $1, $1, $3 +; MIPS32-NEXT: subu $5, $1, $12 +; MIPS32-NEXT: subu $4, $9, $10 +; MIPS32-NEXT: negu $1, $8 +; MIPS32-NEXT: subu $3, $1, $11 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: negu $2, $2 +; +; MIPS64-LABEL: mul170141183460469231731687303715884105723_128: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsrl $1, $4, 62 +; MIPS64-NEXT: dsll $2, $5, 2 +; MIPS64-NEXT: or $1, $2, $1 +; MIPS64-NEXT: daddu $1, $1, $5 +; MIPS64-NEXT: dsll $2, $4, 2 +; MIPS64-NEXT: daddu $5, $2, $4 +; MIPS64-NEXT: sltu $2, $5, $2 +; MIPS64-NEXT: dsll $2, $2, 32 +; MIPS64-NEXT: dsrl $2, $2, 32 +; MIPS64-NEXT: daddu $1, $1, $2 +; MIPS64-NEXT: dsll $2, $4, 63 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: sltu $2, $zero, $5 +; MIPS64-NEXT: dsll $2, $2, 32 +; MIPS64-NEXT: dsrl $2, $2, 32 +; MIPS64-NEXT: dsubu $3, $1, $2 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: dnegu $2, $5 entry: %mul = mul nsw i128 %a, 170141183460469231731687303715884105723 ret i128 %mul } + +define i32 @mul42949673_32(i32 %a) { +; MIPS32-LABEL: mul42949673_32: +; MIPS32: # %bb.0: +; MIPS32-NEXT: sll $1, $4, 3 +; MIPS32-NEXT: addu $1, $1, $4 +; MIPS32-NEXT: sll $2, $4, 5 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 10 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 13 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 15 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 20 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 25 +; MIPS32-NEXT: sll $3, $4, 23 +; MIPS32-NEXT: addu $1, $3, $1 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $2, $1 +; +; MIPS64-LABEL: mul42949673_32: +; MIPS64: # %bb.0: +; MIPS64-NEXT: sll $1, $4, 0 +; MIPS64-NEXT: sll $2, $1, 3 +; MIPS64-NEXT: addu $2, $2, $1 +; MIPS64-NEXT: sll $3, $1, 5 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 10 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 13 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 15 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 20 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 25 +; MIPS64-NEXT: sll $1, $1, 23 +; MIPS64-NEXT: addu $1, $1, $2 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $3, $1 + %b = mul i32 %a, 42949673 + ret i32 %b +} + +define i64 @mul42949673_64(i64 %a) { +; MIPS32-LABEL: mul42949673_64: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: lui $1, 655 +; MIPS32-NEXT: ori $1, $1, 23593 +; MIPS32-NEXT: multu $4, $1 +; MIPS32-NEXT: mflo $2 +; MIPS32-NEXT: mfhi $1 +; MIPS32-NEXT: sll $3, $5, 3 +; MIPS32-NEXT: addu $3, $3, $5 +; MIPS32-NEXT: sll $4, $5, 5 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 10 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 13 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 15 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 20 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 25 +; MIPS32-NEXT: sll $5, $5, 23 +; MIPS32-NEXT: addu $3, $5, $3 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $3, $1, $3 +; +; MIPS64-LABEL: mul42949673_64: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsll $1, $4, 3 +; MIPS64-NEXT: daddu $1, $1, $4 +; MIPS64-NEXT: dsll $2, $4, 5 +; MIPS64-NEXT: daddu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 10 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 13 +; MIPS64-NEXT: daddu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 15 +; MIPS64-NEXT: daddu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 20 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 25 +; MIPS64-NEXT: dsll $3, $4, 23 +; MIPS64-NEXT: daddu $1, $3, $1 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: daddu $2, $2, $1 +entry: + %b = mul i64 %a, 42949673 + ret i64 %b +} + +define i32 @mul22224078_32(i32 %a) { +; MIPS32-LABEL: mul22224078_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 1 +; MIPS32-NEXT: sll $2, $4, 4 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 6 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 8 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 10 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 13 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 16 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 24 +; MIPS32-NEXT: sll $3, $4, 22 +; MIPS32-NEXT: sll $5, $4, 20 +; MIPS32-NEXT: sll $4, $4, 18 +; MIPS32-NEXT: subu $1, $4, $1 +; MIPS32-NEXT: addu $1, $5, $1 +; MIPS32-NEXT: addu $1, $3, $1 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $2, $1 +; +; MIPS64-LABEL: mul22224078_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 0 +; MIPS64-NEXT: sll $2, $1, 1 +; MIPS64-NEXT: sll $3, $1, 4 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 6 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 8 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 10 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 13 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 16 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 24 +; MIPS64-NEXT: sll $4, $1, 22 +; MIPS64-NEXT: sll $5, $1, 20 +; MIPS64-NEXT: sll $1, $1, 18 +; MIPS64-NEXT: subu $1, $1, $2 +; MIPS64-NEXT: addu $1, $5, $1 +; MIPS64-NEXT: addu $1, $4, $1 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $3, $1 +entry: + %b = mul i32 %a, 22224078 + ret i32 %b +} + +define i64 @mul22224078_64(i64 %a) { +; MIPS32-LABEL: mul22224078_64: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: lui $1, 339 +; MIPS32-NEXT: ori $1, $1, 7374 +; MIPS32-NEXT: multu $4, $1 +; MIPS32-NEXT: mflo $2 +; MIPS32-NEXT: mfhi $1 +; MIPS32-NEXT: sll $3, $5, 1 +; MIPS32-NEXT: sll $4, $5, 4 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 6 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 8 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 10 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 13 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 16 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 24 +; MIPS32-NEXT: sll $6, $5, 22 +; MIPS32-NEXT: sll $7, $5, 20 +; MIPS32-NEXT: sll $5, $5, 18 +; MIPS32-NEXT: subu $3, $5, $3 +; MIPS32-NEXT: addu $3, $7, $3 +; MIPS32-NEXT: addu $3, $6, $3 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $3, $1, $3 +; +; MIPS64-LABEL: mul22224078_64: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsll $1, $4, 1 +; MIPS64-NEXT: dsll $2, $4, 4 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 6 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 8 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 10 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 13 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 16 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 24 +; MIPS64-NEXT: dsll $3, $4, 22 +; MIPS64-NEXT: dsll $5, $4, 20 +; MIPS64-NEXT: dsll $4, $4, 18 +; MIPS64-NEXT: dsubu $1, $4, $1 +; MIPS64-NEXT: daddu $1, $5, $1 +; MIPS64-NEXT: daddu $1, $3, $1 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: daddu $2, $2, $1 +entry: + %b = mul i64 %a, 22224078 + ret i64 %b +} + +define i32 @mul22245375_32(i32 %a) { +; MIPS32-LABEL: mul22245375_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 12 +; MIPS32-NEXT: addu $1, $1, $4 +; MIPS32-NEXT: sll $2, $4, 15 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 18 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 20 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 22 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 24 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $2, $1 +; +; MIPS64-LABEL: mul22245375_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 0 +; MIPS64-NEXT: sll $2, $1, 12 +; MIPS64-NEXT: addu $2, $2, $1 +; MIPS64-NEXT: sll $3, $1, 15 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 18 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 20 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 22 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $1, $1, 24 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $1, $2 +entry: + %b = mul i32 %a, 22245375 + ret i32 %b +} + +define i64 @mul22245375_64(i64 %a) { +; MIPS32-LABEL: mul22245375_64: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: lui $1, 339 +; MIPS32-NEXT: ori $1, $1, 28671 +; MIPS32-NEXT: multu $4, $1 +; MIPS32-NEXT: mflo $2 +; MIPS32-NEXT: mfhi $1 +; MIPS32-NEXT: sll $3, $5, 12 +; MIPS32-NEXT: addu $3, $3, $5 +; MIPS32-NEXT: sll $4, $5, 15 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 18 +; MIPS32-NEXT: subu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 20 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 22 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: sll $4, $5, 24 +; MIPS32-NEXT: addu $3, $4, $3 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $3, $1, $3 +; +; MIPS64-LABEL: mul22245375_64: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsll $1, $4, 12 +; MIPS64-NEXT: daddu $1, $1, $4 +; MIPS64-NEXT: dsll $2, $4, 15 +; MIPS64-NEXT: daddu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 18 +; MIPS64-NEXT: dsubu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 20 +; MIPS64-NEXT: daddu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 22 +; MIPS64-NEXT: daddu $1, $2, $1 +; MIPS64-NEXT: dsll $2, $4, 24 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: daddu $2, $2, $1 +entry: + %b = mul i64 %a, 22245375 + ret i64 %b +} + +define i32 @mul25165824_32(i32 %a) { +; MIPS32-LABEL: mul25165824_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 12 +; MIPS32-NEXT: addu $1, $1, $4 +; MIPS32-NEXT: sll $2, $4, 15 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 18 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 20 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 22 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 24 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $2, $1 +; +; MIPS64-LABEL: mul25165824_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 0 +; MIPS64-NEXT: sll $2, $1, 12 +; MIPS64-NEXT: addu $2, $2, $1 +; MIPS64-NEXT: sll $3, $1, 15 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 18 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 20 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 22 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $1, $1, 24 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $1, $2 +entry: + %b = mul i32 %a, 22245375 + ret i32 %b +} + +define i64 @mul25165824_64(i64 %a) { +; MIPS32-LABEL: mul25165824_64: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: srl $1, $4, 9 +; MIPS32-NEXT: sll $2, $5, 23 +; MIPS32-NEXT: or $1, $2, $1 +; MIPS32-NEXT: srl $2, $4, 8 +; MIPS32-NEXT: sll $3, $5, 24 +; MIPS32-NEXT: or $2, $3, $2 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 23 +; MIPS32-NEXT: sll $3, $4, 24 +; MIPS32-NEXT: addu $2, $3, $2 +; MIPS32-NEXT: sltu $3, $2, $3 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $3, $1, $3 +; +; MIPS64-LABEL: mul25165824_64: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: dsll $1, $4, 23 +; MIPS64-NEXT: dsll $2, $4, 24 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: daddu $2, $2, $1 +entry: + %b = mul i64 %a, 25165824 + ret i64 %b +} + +define i32 @mul33554432_32(i32 %a) { +; MIPS32-LABEL: mul33554432_32: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: sll $1, $4, 12 +; MIPS32-NEXT: addu $1, $1, $4 +; MIPS32-NEXT: sll $2, $4, 15 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 18 +; MIPS32-NEXT: subu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 20 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 22 +; MIPS32-NEXT: addu $1, $2, $1 +; MIPS32-NEXT: sll $2, $4, 24 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: addu $2, $2, $1 +; +; MIPS64-LABEL: mul33554432_32: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: sll $1, $4, 0 +; MIPS64-NEXT: sll $2, $1, 12 +; MIPS64-NEXT: addu $2, $2, $1 +; MIPS64-NEXT: sll $3, $1, 15 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 18 +; MIPS64-NEXT: subu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 20 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $3, $1, 22 +; MIPS64-NEXT: addu $2, $3, $2 +; MIPS64-NEXT: sll $1, $1, 24 +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: addu $2, $1, $2 +entry: + %b = mul i32 %a, 22245375 + ret i32 %b +} + +define i64 @mul33554432_64(i64 %a) { +; MIPS32-LABEL: mul33554432_64: +; MIPS32: # %bb.0: # %entry +; MIPS32-NEXT: srl $1, $4, 7 +; MIPS32-NEXT: sll $2, $5, 25 +; MIPS32-NEXT: or $3, $2, $1 +; MIPS32-NEXT: jr $ra +; MIPS32-NEXT: sll $2, $4, 25 +; +; MIPS64-LABEL: mul33554432_64: +; MIPS64: # %bb.0: # %entry +; MIPS64-NEXT: jr $ra +; MIPS64-NEXT: dsll $2, $4, 25 +entry: + %b = mul i64 %a, 33554432 + ret i64 %b +} diff --git a/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-bad-l1.ll b/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-bad-l1.ll new file mode 100644 index 0000000000..1cd86d617a --- /dev/null +++ b/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-bad-l1.ll @@ -0,0 +1,13 @@ +; Negative test. The constraint 'l' represents the register 'lo'. +; Check error message in case of invalid usage. +; +; RUN: not llc -march=mips -filetype=obj < %s 2>&1 | FileCheck %s + +define void @constraint_l() nounwind { +entry: + +; CHECK: error: invalid operand for instruction + + tail call i16 asm sideeffect "addiu $0,$1,$2", "=l,r,r,~{$1}"(i16 0, i16 0) + ret void +} diff --git a/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-reg.ll b/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-reg.ll index 63ee42c0c7..b4c1587a8f 100644 --- a/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-reg.ll +++ b/external/llvm/test/CodeGen/Mips/inlineasm-cnstrnt-reg.ll @@ -41,5 +41,15 @@ entry: call i32 asm sideeffect "\09mtlo $3 \0A\09\09madd $1, $2 ", "=l,r,r,r"(i32 7, i32 6, i32 44) nounwind store volatile i32 %4, i32* %bosco, align 4 +; Check the 'l' constraint for 16-bit type. +; CHECK: #APP +; CHECK: mtlo ${{[0-9]+}} +; CHECK-NEXT: madd ${{[0-9]+}}, ${{[0-9]+}} +; CHECK: #NO_APP +; CHECK-NEXT: mflo ${{[0-9]+}} + %bosco16 = alloca i16, align 4 + call i16 asm sideeffect "\09mtlo $3 \0A\09\09madd $1, $2 ", "=l,r,r,r"(i32 7, i32 6, i32 44) nounwind + store volatile i16 %5, i16* %bosco16, align 4 + ret i32 0 } diff --git a/external/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir.REMOVED.git-id b/external/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir.REMOVED.git-id index 75948b0b50..fbe9bfcc6e 100644 --- a/external/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir.REMOVED.git-id +++ b/external/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir.REMOVED.git-id @@ -1 +1 @@ -67733795ed5de0cf155b38a0ff3bb1a92a429e27 \ No newline at end of file +f2ca07367b991eaea539df025ca1dc1a8d20b401 \ No newline at end of file diff --git a/external/llvm/test/CodeGen/PowerPC/no-dup-of-bdnz.ll b/external/llvm/test/CodeGen/PowerPC/no-dup-of-bdnz.ll new file mode 100644 index 0000000000..7d72242aa4 --- /dev/null +++ b/external/llvm/test/CodeGen/PowerPC/no-dup-of-bdnz.ll @@ -0,0 +1,75 @@ +; RUN: opt -early-cse-memssa -loop-rotate -licm -loop-rotate -S %s -o - | FileCheck %s +; ModuleID = 'bugpoint-reduced-simplified.bc' +source_filename = "bugpoint-output-8903f29.bc" +target datalayout = "e-m:e-i64:64-n32:64" +target triple = "powerpc64le-unknown-linux-gnu" + +define void @test(i64 %arg.ssa, i64 %arg.nb) local_unnamed_addr { +; Ensure that loop rotation doesn't duplicate the call to +; llvm.ppc.is.decremented.ctr.nonzero +; CHECK-LABEL: test +; CHECK: call i1 @llvm.ppc.is.decremented.ctr.nonzero +; CHECK-NOT: call i1 @llvm.ppc.is.decremented.ctr.nonzero +; CHECK: declare i1 @llvm.ppc.is.decremented.ctr.nonzero +entry: + switch i32 undef, label %BB_8 [ + i32 -2, label %BB_9 + i32 0, label %BB_9 + ] + +BB_1: ; preds = %BB_12, %BB_4 + %bcount.1.us = phi i64 [ %.810.us, %BB_4 ], [ 0, %BB_12 ] + %0 = add i64 %arg.ssa, %bcount.1.us + %.568.us = load i32, i32* undef, align 4 + %.15.i.us = icmp slt i32 0, %.568.us + br i1 %.15.i.us, label %BB_3, label %BB_2 + +BB_2: ; preds = %BB_1 + %.982.us = add nsw i64 %0, 1 + unreachable + +BB_3: ; preds = %BB_1 + %1 = add i64 %arg.ssa, %bcount.1.us + %2 = add i64 %1, 1 + %3 = call i1 @llvm.ppc.is.decremented.ctr.nonzero() + br i1 %3, label %BB_4, label %BB_7 + +BB_4: ; preds = %BB_3 + %.810.us = add nuw nsw i64 %bcount.1.us, 1 + br label %BB_1 + +BB_5: ; preds = %BB_7, %BB_5 + %lsr.iv20.i116 = phi i64 [ %2, %BB_7 ], [ %lsr.iv.next21.i126, %BB_5 ] + %lsr.iv.next21.i126 = add i64 %lsr.iv20.i116, 1 + br i1 undef, label %BB_5, label %BB_6 + +BB_6: ; preds = %BB_5 + ret void + +BB_7: ; preds = %BB_3 + br label %BB_5 + +BB_8: ; preds = %entry + ret void + +BB_9: ; preds = %entry, %entry + br label %BB_10 + +BB_10: ; preds = %BB_9 + br label %BB_11 + +BB_11: ; preds = %BB_11, %BB_10 + br i1 undef, label %BB_11, label %BB_12 + +BB_12: ; preds = %BB_11 + call void @llvm.ppc.mtctr.i64(i64 %arg.nb) + br label %BB_1 +} + +; Function Attrs: nounwind +declare void @llvm.ppc.mtctr.i64(i64) #0 + +; Function Attrs: nounwind +declare i1 @llvm.ppc.is.decremented.ctr.nonzero() #0 + +attributes #0 = { nounwind } diff --git a/external/llvm/test/CodeGen/X86/GlobalISel/add-scalar.ll b/external/llvm/test/CodeGen/X86/GlobalISel/add-scalar.ll index 0ef7c956d4..3d41d75940 100644 --- a/external/llvm/test/CodeGen/X86/GlobalISel/add-scalar.ll +++ b/external/llvm/test/CodeGen/X86/GlobalISel/add-scalar.ll @@ -10,16 +10,10 @@ define i64 @test_add_i64(i64 %arg1, i64 %arg2) { ; ; X32-LABEL: test_add_i64: ; X32: # %bb.0: -; X32-NEXT: pushl %ebp -; X32-NEXT: .cfi_def_cfa_offset 8 -; X32-NEXT: .cfi_offset %ebp, -8 -; X32-NEXT: movl %esp, %ebp -; X32-NEXT: .cfi_def_cfa_register %ebp -; X32-NEXT: movl 16(%ebp), %eax -; X32-NEXT: movl 20(%ebp), %edx -; X32-NEXT: addl 8(%ebp), %eax -; X32-NEXT: adcl 12(%ebp), %edx -; X32-NEXT: popl %ebp +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: movl {{[0-9]+}}(%esp), %edx +; X32-NEXT: addl {{[0-9]+}}(%esp), %eax +; X32-NEXT: adcl {{[0-9]+}}(%esp), %edx ; X32-NEXT: retl %ret = add i64 %arg1, %arg2 ret i64 %ret diff --git a/external/llvm/test/CodeGen/X86/O0-pipeline.ll b/external/llvm/test/CodeGen/X86/O0-pipeline.ll index 3a720a5288..53707cb313 100644 --- a/external/llvm/test/CodeGen/X86/O0-pipeline.ll +++ b/external/llvm/test/CodeGen/X86/O0-pipeline.ll @@ -37,6 +37,8 @@ ; CHECK-NEXT: X86 PIC Global Base Reg Initialization ; CHECK-NEXT: Expand ISel Pseudo-instructions ; CHECK-NEXT: Local Stack Slot Allocation +; CHECK-NEXT: MachineDominator Tree Construction +; CHECK-NEXT: X86 EFLAGS copy lowering ; CHECK-NEXT: X86 WinAlloca Expander ; CHECK-NEXT: Eliminate PHI nodes for register allocation ; CHECK-NEXT: Two-Address instruction pass diff --git a/external/llvm/test/CodeGen/X86/clobber-fi0.ll b/external/llvm/test/CodeGen/X86/clobber-fi0.ll deleted file mode 100644 index b69b185316..0000000000 --- a/external/llvm/test/CodeGen/X86/clobber-fi0.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: llc < %s -verify-machineinstrs -mcpu=generic -mtriple=x86_64-linux | FileCheck %s - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.7.0" - -; In the code below we need to copy the EFLAGS because of scheduling constraints. -; When copying the EFLAGS we need to write to the stack with push/pop. This forces -; us to emit the prolog. - -; CHECK: main -; CHECK: subq{{.*}}rsp -; CHECK: ret -define i32 @main(i32 %arg, i8** %arg1) nounwind { -bb: - %tmp = alloca i32, align 4 ; [#uses=3 type=i32*] - %tmp2 = alloca i32, align 4 ; [#uses=3 type=i32*] - %tmp3 = alloca i32 ; [#uses=1 type=i32*] - store volatile i32 1, i32* %tmp, align 4 - store volatile i32 1, i32* %tmp2, align 4 - br label %bb4 - -bb4: ; preds = %bb4, %bb - %tmp6 = load volatile i32, i32* %tmp2, align 4 ; [#uses=1 type=i32] - %tmp7 = add i32 %tmp6, -1 ; [#uses=2 type=i32] - store volatile i32 %tmp7, i32* %tmp2, align 4 - %tmp8 = icmp eq i32 %tmp7, 0 ; [#uses=1 type=i1] - %tmp9 = load volatile i32, i32* %tmp ; [#uses=1 type=i32] - %tmp10 = add i32 %tmp9, -1 ; [#uses=1 type=i32] - store volatile i32 %tmp10, i32* %tmp3 - br i1 %tmp8, label %bb11, label %bb4 - -bb11: ; preds = %bb4 - %tmp12 = load volatile i32, i32* %tmp, align 4 ; [#uses=1 type=i32] - ret i32 %tmp12 -} - - diff --git a/external/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll b/external/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll index 8d289fa9fb..827aba7869 100644 --- a/external/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll +++ b/external/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll @@ -1,100 +1,110 @@ -; RUN: llc -mtriple=i386-linux-gnu %s -o - | FileCheck %s -check-prefix=i386 -; RUN: llc -mtriple=i386-linux-gnu -pre-RA-sched=fast %s -o - | FileCheck %s -check-prefix=i386f +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=i386-linux-gnu -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=32-ALL,32-GOOD-RA +; RUN: llc -mtriple=i386-linux-gnu -verify-machineinstrs -pre-RA-sched=fast %s -o - | FileCheck %s --check-prefixes=32-ALL,32-FAST-RA -; RUN: llc -mtriple=x86_64-linux-gnu %s -o - | FileCheck %s -check-prefix=x8664 -; RUN: llc -mtriple=x86_64-linux-gnu -pre-RA-sched=fast %s -o - | FileCheck %s -check-prefix=x8664 -; RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sahf %s -o - | FileCheck %s -check-prefix=x8664-sahf -; RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sahf -pre-RA-sched=fast %s -o - | FileCheck %s -check-prefix=x8664-sahf -; RUN: llc -mtriple=x86_64-linux-gnu -mcpu=corei7 %s -o - | FileCheck %s -check-prefix=x8664-sahf - -; TODO: Reenable verify-machineinstr once the if (!AXDead) // FIXME -; in X86InstrInfo::copyPhysReg() is resolved. +; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=64-ALL,64-GOOD-RA +; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs -pre-RA-sched=fast %s -o - | FileCheck %s --check-prefixes=64-ALL,64-FAST-RA +; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs -mattr=+sahf %s -o - | FileCheck %s --check-prefixes=64-ALL,64-GOOD-RA-SAHF +; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs -mattr=+sahf -pre-RA-sched=fast %s -o - | FileCheck %s --check-prefixes=64-ALL,64-FAST-RA-SAHF +; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs -mcpu=corei7 %s -o - | FileCheck %s --check-prefixes=64-ALL,64-GOOD-RA-SAHF declare i32 @foo() declare i32 @bar(i64) -define i64 @test_intervening_call(i64* %foo, i64 %bar, i64 %baz) { -; i386-LABEL: test_intervening_call: -; i386: cmpxchg8b -; i386-NEXT: pushl %eax -; i386-NEXT: seto %al -; i386-NEXT: lahf -; i386-NEXT: movl %eax, [[FLAGS:%.*]] -; i386-NEXT: popl %eax -; i386-NEXT: subl $8, %esp -; i386-NEXT: pushl %edx -; i386-NEXT: pushl %eax -; i386-NEXT: calll bar -; i386-NEXT: addl $16, %esp -; i386-NEXT: movl [[FLAGS]], %eax -; i386-NEXT: addb $127, %al -; i386-NEXT: sahf -; i386-NEXT: jne - -; In the following case we get a long chain of EFLAGS save/restore due to -; a sequence of: +; In the following case when using fast scheduling we get a long chain of +; EFLAGS save/restore due to a sequence of: ; cmpxchg8b (implicit-def eflags) ; eax = copy eflags ; adjcallstackdown32 ; ... ; use of eax ; During PEI the adjcallstackdown32 is replaced with the subl which -; clobbers eflags, effectively interfering in the liveness interval. -; Is this a case we care about? Maybe no, considering this issue -; happens with the fast pre-regalloc scheduler enforced. A more -; performant scheduler would move the adjcallstackdown32 out of the -; eflags liveness interval. - -; i386f-LABEL: test_intervening_call: -; i386f: cmpxchg8b -; i386f-NEXT: pushl %eax -; i386f-NEXT: seto %al -; i386f-NEXT: lahf -; i386f-NEXT: movl %eax, [[FLAGS:%.*]] -; i386f-NEXT: popl %eax -; i386f-NEXT: subl $8, %esp -; i386f-NEXT: pushl %eax -; i386f-NEXT: movl %ecx, %eax -; i386f-NEXT: addb $127, %al -; i386f-NEXT: sahf -; i386f-NEXT: popl %eax -; i386f-NEXT: pushl %eax -; i386f-NEXT: seto %al -; i386f-NEXT: lahf -; i386f-NEXT: movl %eax, %esi -; i386f-NEXT: popl %eax -; i386f-NEXT: pushl %edx -; i386f-NEXT: pushl %eax -; i386f-NEXT: calll bar -; i386f-NEXT: addl $16, %esp -; i386f-NEXT: movl %esi, %eax -; i386f-NEXT: addb $127, %al - -; x8664-LABEL: test_intervening_call: -; x8664: cmpxchgq -; x8664: pushfq -; x8664-NEXT: popq [[FLAGS:%.*]] -; x8664-NEXT: movq %rax, %rdi -; x8664-NEXT: callq bar -; x8664-NEXT: pushq [[FLAGS]] -; x8664-NEXT: popfq -; x8664-NEXT: jne - -; x8664-sahf-LABEL: test_intervening_call: -; x8664-sahf: cmpxchgq -; x8664-sahf: pushq %rax -; x8664-sahf-NEXT: seto %al -; x8664-sahf-NEXT: lahf -; x8664-sahf-NEXT: movq %rax, [[FLAGS:%.*]] -; x8664-sahf-NEXT: popq %rax -; x8664-sahf-NEXT: movq %rax, %rdi -; x8664-sahf-NEXT: callq bar -; RAX is dead, no need to push and pop it. -; x8664-sahf-NEXT: movq [[FLAGS]], %rax -; x8664-sahf-NEXT: addb $127, %al -; x8664-sahf-NEXT: sahf -; x8664-sahf-NEXT: jne - +; clobbers eflags, effectively interfering in the liveness interval. However, +; we then promote these copies into independent conditions in GPRs that avoids +; repeated saving and restoring logic and can be trivially managed by the +; register allocator. +define i64 @test_intervening_call(i64* %foo, i64 %bar, i64 %baz) nounwind { +; 32-GOOD-RA-LABEL: test_intervening_call: +; 32-GOOD-RA: # %bb.0: # %entry +; 32-GOOD-RA-NEXT: pushl %ebx +; 32-GOOD-RA-NEXT: pushl %esi +; 32-GOOD-RA-NEXT: pushl %eax +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %eax +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %edx +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %ebx +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %ecx +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %esi +; 32-GOOD-RA-NEXT: lock cmpxchg8b (%esi) +; 32-GOOD-RA-NEXT: setne %bl +; 32-GOOD-RA-NEXT: subl $8, %esp +; 32-GOOD-RA-NEXT: pushl %edx +; 32-GOOD-RA-NEXT: pushl %eax +; 32-GOOD-RA-NEXT: calll bar +; 32-GOOD-RA-NEXT: addl $16, %esp +; 32-GOOD-RA-NEXT: testb %bl, %bl +; 32-GOOD-RA-NEXT: jne .LBB0_3 +; 32-GOOD-RA-NEXT: # %bb.1: # %t +; 32-GOOD-RA-NEXT: movl $42, %eax +; 32-GOOD-RA-NEXT: jmp .LBB0_2 +; 32-GOOD-RA-NEXT: .LBB0_3: # %f +; 32-GOOD-RA-NEXT: xorl %eax, %eax +; 32-GOOD-RA-NEXT: .LBB0_2: # %t +; 32-GOOD-RA-NEXT: xorl %edx, %edx +; 32-GOOD-RA-NEXT: addl $4, %esp +; 32-GOOD-RA-NEXT: popl %esi +; 32-GOOD-RA-NEXT: popl %ebx +; 32-GOOD-RA-NEXT: retl +; +; 32-FAST-RA-LABEL: test_intervening_call: +; 32-FAST-RA: # %bb.0: # %entry +; 32-FAST-RA-NEXT: pushl %ebx +; 32-FAST-RA-NEXT: pushl %esi +; 32-FAST-RA-NEXT: pushl %eax +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %esi +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %ebx +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %ecx +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %eax +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %edx +; 32-FAST-RA-NEXT: lock cmpxchg8b (%esi) +; 32-FAST-RA-NEXT: setne %bl +; 32-FAST-RA-NEXT: subl $8, %esp +; 32-FAST-RA-NEXT: pushl %edx +; 32-FAST-RA-NEXT: pushl %eax +; 32-FAST-RA-NEXT: calll bar +; 32-FAST-RA-NEXT: addl $16, %esp +; 32-FAST-RA-NEXT: testb %bl, %bl +; 32-FAST-RA-NEXT: jne .LBB0_3 +; 32-FAST-RA-NEXT: # %bb.1: # %t +; 32-FAST-RA-NEXT: movl $42, %eax +; 32-FAST-RA-NEXT: jmp .LBB0_2 +; 32-FAST-RA-NEXT: .LBB0_3: # %f +; 32-FAST-RA-NEXT: xorl %eax, %eax +; 32-FAST-RA-NEXT: .LBB0_2: # %t +; 32-FAST-RA-NEXT: xorl %edx, %edx +; 32-FAST-RA-NEXT: addl $4, %esp +; 32-FAST-RA-NEXT: popl %esi +; 32-FAST-RA-NEXT: popl %ebx +; 32-FAST-RA-NEXT: retl +; +; 64-ALL-LABEL: test_intervening_call: +; 64-ALL: # %bb.0: # %entry +; 64-ALL-NEXT: pushq %rbx +; 64-ALL-NEXT: movq %rsi, %rax +; 64-ALL-NEXT: lock cmpxchgq %rdx, (%rdi) +; 64-ALL-NEXT: setne %bl +; 64-ALL-NEXT: movq %rax, %rdi +; 64-ALL-NEXT: callq bar +; 64-ALL-NEXT: testb %bl, %bl +; 64-ALL-NEXT: jne .LBB0_2 +; 64-ALL-NEXT: # %bb.1: # %t +; 64-ALL-NEXT: movl $42, %eax +; 64-ALL-NEXT: popq %rbx +; 64-ALL-NEXT: retq +; 64-ALL-NEXT: .LBB0_2: # %f +; 64-ALL-NEXT: xorl %eax, %eax +; 64-ALL-NEXT: popq %rbx +; 64-ALL-NEXT: retq +entry: %cx = cmpxchg i64* %foo, i64 %bar, i64 %baz seq_cst seq_cst %v = extractvalue { i64, i1 } %cx, 0 %p = extractvalue { i64, i1 } %cx, 1 @@ -109,23 +119,62 @@ f: } ; Interesting in producing a clobber without any function calls. -define i32 @test_control_flow(i32* %p, i32 %i, i32 %j) { -; i386-LABEL: test_control_flow: -; i386: cmpxchg -; i386-NEXT: jne - -; i386f-LABEL: test_control_flow: -; i386f: cmpxchg -; i386f-NEXT: jne - -; x8664-LABEL: test_control_flow: -; x8664: cmpxchg -; x8664-NEXT: jne - -; x8664-sahf-LABEL: test_control_flow: -; x8664-sahf: cmpxchg -; x8664-sahf-NEXT: jne - +define i32 @test_control_flow(i32* %p, i32 %i, i32 %j) nounwind { +; 32-ALL-LABEL: test_control_flow: +; 32-ALL: # %bb.0: # %entry +; 32-ALL-NEXT: movl {{[0-9]+}}(%esp), %eax +; 32-ALL-NEXT: cmpl {{[0-9]+}}(%esp), %eax +; 32-ALL-NEXT: jle .LBB1_6 +; 32-ALL-NEXT: # %bb.1: # %loop_start +; 32-ALL-NEXT: movl {{[0-9]+}}(%esp), %ecx +; 32-ALL-NEXT: .p2align 4, 0x90 +; 32-ALL-NEXT: .LBB1_2: # %while.condthread-pre-split.i +; 32-ALL-NEXT: # =>This Loop Header: Depth=1 +; 32-ALL-NEXT: # Child Loop BB1_3 Depth 2 +; 32-ALL-NEXT: movl (%ecx), %edx +; 32-ALL-NEXT: .p2align 4, 0x90 +; 32-ALL-NEXT: .LBB1_3: # %while.cond.i +; 32-ALL-NEXT: # Parent Loop BB1_2 Depth=1 +; 32-ALL-NEXT: # => This Inner Loop Header: Depth=2 +; 32-ALL-NEXT: movl %edx, %eax +; 32-ALL-NEXT: xorl %edx, %edx +; 32-ALL-NEXT: testl %eax, %eax +; 32-ALL-NEXT: je .LBB1_3 +; 32-ALL-NEXT: # %bb.4: # %while.body.i +; 32-ALL-NEXT: # in Loop: Header=BB1_2 Depth=1 +; 32-ALL-NEXT: lock cmpxchgl %eax, (%ecx) +; 32-ALL-NEXT: jne .LBB1_2 +; 32-ALL-NEXT: # %bb.5: +; 32-ALL-NEXT: xorl %eax, %eax +; 32-ALL-NEXT: .LBB1_6: # %cond.end +; 32-ALL-NEXT: retl +; +; 64-ALL-LABEL: test_control_flow: +; 64-ALL: # %bb.0: # %entry +; 64-ALL-NEXT: cmpl %edx, %esi +; 64-ALL-NEXT: jle .LBB1_5 +; 64-ALL-NEXT: .p2align 4, 0x90 +; 64-ALL-NEXT: .LBB1_1: # %while.condthread-pre-split.i +; 64-ALL-NEXT: # =>This Loop Header: Depth=1 +; 64-ALL-NEXT: # Child Loop BB1_2 Depth 2 +; 64-ALL-NEXT: movl (%rdi), %ecx +; 64-ALL-NEXT: .p2align 4, 0x90 +; 64-ALL-NEXT: .LBB1_2: # %while.cond.i +; 64-ALL-NEXT: # Parent Loop BB1_1 Depth=1 +; 64-ALL-NEXT: # => This Inner Loop Header: Depth=2 +; 64-ALL-NEXT: movl %ecx, %eax +; 64-ALL-NEXT: xorl %ecx, %ecx +; 64-ALL-NEXT: testl %eax, %eax +; 64-ALL-NEXT: je .LBB1_2 +; 64-ALL-NEXT: # %bb.3: # %while.body.i +; 64-ALL-NEXT: # in Loop: Header=BB1_1 Depth=1 +; 64-ALL-NEXT: lock cmpxchgl %eax, (%rdi) +; 64-ALL-NEXT: jne .LBB1_1 +; 64-ALL-NEXT: # %bb.4: +; 64-ALL-NEXT: xorl %esi, %esi +; 64-ALL-NEXT: .LBB1_5: # %cond.end +; 64-ALL-NEXT: movl %esi, %eax +; 64-ALL-NEXT: retq entry: %cmp = icmp sgt i32 %i, %j br i1 %cmp, label %loop_start, label %cond.end @@ -158,52 +207,68 @@ cond.end: ; This one is an interesting case because CMOV doesn't have a chain ; operand. Naive attempts to limit cmpxchg EFLAGS use are likely to fail here. -define i32 @test_feed_cmov(i32* %addr, i32 %desired, i32 %new) { -; i386-LABEL: test_feed_cmov: -; i386: cmpxchgl -; i386-NEXT: seto %al -; i386-NEXT: lahf -; i386-NEXT: movl %eax, [[FLAGS:%.*]] -; i386-NEXT: calll foo -; i386-NEXT: pushl %eax -; i386-NEXT: movl [[FLAGS]], %eax -; i386-NEXT: addb $127, %al -; i386-NEXT: sahf -; i386-NEXT: popl %eax - -; i386f-LABEL: test_feed_cmov: -; i386f: cmpxchgl -; i386f-NEXT: seto %al -; i386f-NEXT: lahf -; i386f-NEXT: movl %eax, [[FLAGS:%.*]] -; i386f-NEXT: calll foo -; i386f-NEXT: pushl %eax -; i386f-NEXT: movl [[FLAGS]], %eax -; i386f-NEXT: addb $127, %al -; i386f-NEXT: sahf -; i386f-NEXT: popl %eax - -; x8664-LABEL: test_feed_cmov: -; x8664: cmpxchg -; x8664: pushfq -; x8664-NEXT: popq [[FLAGS:%.*]] -; x8664-NEXT: callq foo -; x8664-NEXT: pushq [[FLAGS]] -; x8664-NEXT: popfq - -; x8664-sahf-LABEL: test_feed_cmov: -; x8664-sahf: cmpxchgl -; RAX is dead, do not push or pop it. -; x8664-sahf-NEXT: seto %al -; x8664-sahf-NEXT: lahf -; x8664-sahf-NEXT: movq %rax, [[FLAGS:%.*]] -; x8664-sahf-NEXT: callq foo -; x8664-sahf-NEXT: pushq %rax -; x8664-sahf-NEXT: movq [[FLAGS]], %rax -; x8664-sahf-NEXT: addb $127, %al -; x8664-sahf-NEXT: sahf -; x8664-sahf-NEXT: popq %rax - +define i32 @test_feed_cmov(i32* %addr, i32 %desired, i32 %new) nounwind { +; 32-GOOD-RA-LABEL: test_feed_cmov: +; 32-GOOD-RA: # %bb.0: # %entry +; 32-GOOD-RA-NEXT: pushl %ebx +; 32-GOOD-RA-NEXT: pushl %esi +; 32-GOOD-RA-NEXT: pushl %eax +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %eax +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %esi +; 32-GOOD-RA-NEXT: movl {{[0-9]+}}(%esp), %ecx +; 32-GOOD-RA-NEXT: lock cmpxchgl %esi, (%ecx) +; 32-GOOD-RA-NEXT: sete %bl +; 32-GOOD-RA-NEXT: calll foo +; 32-GOOD-RA-NEXT: testb %bl, %bl +; 32-GOOD-RA-NEXT: jne .LBB2_2 +; 32-GOOD-RA-NEXT: # %bb.1: # %entry +; 32-GOOD-RA-NEXT: movl %eax, %esi +; 32-GOOD-RA-NEXT: .LBB2_2: # %entry +; 32-GOOD-RA-NEXT: movl %esi, %eax +; 32-GOOD-RA-NEXT: addl $4, %esp +; 32-GOOD-RA-NEXT: popl %esi +; 32-GOOD-RA-NEXT: popl %ebx +; 32-GOOD-RA-NEXT: retl +; +; 32-FAST-RA-LABEL: test_feed_cmov: +; 32-FAST-RA: # %bb.0: # %entry +; 32-FAST-RA-NEXT: pushl %ebx +; 32-FAST-RA-NEXT: pushl %esi +; 32-FAST-RA-NEXT: pushl %eax +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %ecx +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %esi +; 32-FAST-RA-NEXT: movl {{[0-9]+}}(%esp), %eax +; 32-FAST-RA-NEXT: lock cmpxchgl %esi, (%ecx) +; 32-FAST-RA-NEXT: sete %bl +; 32-FAST-RA-NEXT: calll foo +; 32-FAST-RA-NEXT: testb %bl, %bl +; 32-FAST-RA-NEXT: jne .LBB2_2 +; 32-FAST-RA-NEXT: # %bb.1: # %entry +; 32-FAST-RA-NEXT: movl %eax, %esi +; 32-FAST-RA-NEXT: .LBB2_2: # %entry +; 32-FAST-RA-NEXT: movl %esi, %eax +; 32-FAST-RA-NEXT: addl $4, %esp +; 32-FAST-RA-NEXT: popl %esi +; 32-FAST-RA-NEXT: popl %ebx +; 32-FAST-RA-NEXT: retl +; +; 64-ALL-LABEL: test_feed_cmov: +; 64-ALL: # %bb.0: # %entry +; 64-ALL-NEXT: pushq %rbp +; 64-ALL-NEXT: pushq %rbx +; 64-ALL-NEXT: pushq %rax +; 64-ALL-NEXT: movl %edx, %ebx +; 64-ALL-NEXT: movl %esi, %eax +; 64-ALL-NEXT: lock cmpxchgl %ebx, (%rdi) +; 64-ALL-NEXT: sete %bpl +; 64-ALL-NEXT: callq foo +; 64-ALL-NEXT: testb %bpl, %bpl +; 64-ALL-NEXT: cmovnel %ebx, %eax +; 64-ALL-NEXT: addq $8, %rsp +; 64-ALL-NEXT: popq %rbx +; 64-ALL-NEXT: popq %rbp +; 64-ALL-NEXT: retq +entry: %res = cmpxchg i32* %addr, i32 %desired, i32 %new seq_cst seq_cst %success = extractvalue { i32, i1 } %res, 1 diff --git a/external/llvm/test/CodeGen/X86/copy-eflags.ll b/external/llvm/test/CodeGen/X86/copy-eflags.ll index d98d8a7839..1f44559368 100644 --- a/external/llvm/test/CodeGen/X86/copy-eflags.ll +++ b/external/llvm/test/CodeGen/X86/copy-eflags.ll @@ -1,6 +1,8 @@ -; RUN: llc -o - %s | FileCheck %s -; This tests for the problem originally reported in http://llvm.org/PR25951 -target triple = "i686-unknown-linux-gnu" +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -o - -mtriple=i686-unknown-unknown %s | FileCheck %s --check-prefixes=ALL,X32 +; RUN: llc -o - -mtriple=x86_64-unknown-unknown %s | FileCheck %s --check-prefixes=ALL,X64 +; +; Test patterns that require preserving and restoring flags. @b = common global i8 0, align 1 @c = common global i32 0, align 4 @@ -8,13 +10,61 @@ target triple = "i686-unknown-linux-gnu" @d = common global i8 0, align 1 @.str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1 -; CHECK-LABEL: func: -; This tests whether eax is properly saved/restored around the -; lahf/sahf instruction sequences. We make mem op volatile to prevent -; their reordering to avoid spills. +declare void @external(i32) - -define i32 @func() { +; A test that re-uses flags in interesting ways due to volatile accesses. +; Specifically, the first increment's flags are reused for the branch despite +; being clobbered by the second increment. +define i32 @test1() nounwind { +; X32-LABEL: test1: +; X32: # %bb.0: # %entry +; X32-NEXT: movb b, %cl +; X32-NEXT: movl %ecx, %eax +; X32-NEXT: incb %al +; X32-NEXT: movb %al, b +; X32-NEXT: incl c +; X32-NEXT: sete %dl +; X32-NEXT: movb a, %ah +; X32-NEXT: movb %ah, %ch +; X32-NEXT: incb %ch +; X32-NEXT: cmpb %cl, %ah +; X32-NEXT: sete d +; X32-NEXT: movb %ch, a +; X32-NEXT: testb %dl, %dl +; X32-NEXT: jne .LBB0_2 +; X32-NEXT: # %bb.1: # %if.then +; X32-NEXT: movsbl %al, %eax +; X32-NEXT: pushl %eax +; X32-NEXT: calll external +; X32-NEXT: addl $4, %esp +; X32-NEXT: .LBB0_2: # %if.end +; X32-NEXT: xorl %eax, %eax +; X32-NEXT: retl +; +; X64-LABEL: test1: +; X64: # %bb.0: # %entry +; X64-NEXT: movb {{.*}}(%rip), %dil +; X64-NEXT: movl %edi, %eax +; X64-NEXT: incb %al +; X64-NEXT: movb %al, {{.*}}(%rip) +; X64-NEXT: incl {{.*}}(%rip) +; X64-NEXT: sete %sil +; X64-NEXT: movb {{.*}}(%rip), %cl +; X64-NEXT: movl %ecx, %edx +; X64-NEXT: incb %dl +; X64-NEXT: cmpb %dil, %cl +; X64-NEXT: sete {{.*}}(%rip) +; X64-NEXT: movb %dl, {{.*}}(%rip) +; X64-NEXT: testb %sil, %sil +; X64-NEXT: jne .LBB0_2 +; X64-NEXT: # %bb.1: # %if.then +; X64-NEXT: pushq %rax +; X64-NEXT: movsbl %al, %edi +; X64-NEXT: callq external +; X64-NEXT: addq $8, %rsp +; X64-NEXT: .LBB0_2: # %if.end +; X64-NEXT: xorl %eax, %eax +; X64-NEXT: retq entry: %bval = load i8, i8* @b %inc = add i8 %bval, 1 @@ -25,33 +75,290 @@ entry: %aval = load volatile i8, i8* @a %inc2 = add i8 %aval, 1 store volatile i8 %inc2, i8* @a -; Copy flags produced by the incb of %inc1 to a register, need to save+restore -; eax around it. The flags will be reused by %tobool. -; CHECK: pushl %eax -; CHECK: seto %al -; CHECK: lahf -; CHECK: movl %eax, [[REG:%[a-z]+]] -; CHECK: popl %eax %cmp = icmp eq i8 %aval, %bval %conv5 = zext i1 %cmp to i8 store i8 %conv5, i8* @d %tobool = icmp eq i32 %inc1, 0 -; We restore flags with an 'addb, sahf' sequence, need to save+restore eax -; around it. -; CHECK: pushl %eax -; CHECK: movl [[REG]], %eax -; CHECK: addb $127, %al -; CHECK: sahf -; CHECK: popl %eax br i1 %tobool, label %if.end, label %if.then if.then: %conv6 = sext i8 %inc to i32 - %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %conv6) + call void @external(i32 %conv6) br label %if.end if.end: ret i32 0 } -declare i32 @printf(i8* nocapture readonly, ...) +; Preserve increment flags across a call. +define i32 @test2(i32* %ptr) nounwind { +; X32-LABEL: test2: +; X32: # %bb.0: # %entry +; X32-NEXT: pushl %ebx +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: incl (%eax) +; X32-NEXT: setne %bl +; X32-NEXT: pushl $42 +; X32-NEXT: calll external +; X32-NEXT: addl $4, %esp +; X32-NEXT: testb %bl, %bl +; X32-NEXT: je .LBB1_1 +; X32-NEXT: # %bb.2: # %else +; X32-NEXT: xorl %eax, %eax +; X32-NEXT: popl %ebx +; X32-NEXT: retl +; X32-NEXT: .LBB1_1: # %then +; X32-NEXT: movl $64, %eax +; X32-NEXT: popl %ebx +; X32-NEXT: retl +; +; X64-LABEL: test2: +; X64: # %bb.0: # %entry +; X64-NEXT: pushq %rbx +; X64-NEXT: incl (%rdi) +; X64-NEXT: setne %bl +; X64-NEXT: movl $42, %edi +; X64-NEXT: callq external +; X64-NEXT: testb %bl, %bl +; X64-NEXT: je .LBB1_1 +; X64-NEXT: # %bb.2: # %else +; X64-NEXT: xorl %eax, %eax +; X64-NEXT: popq %rbx +; X64-NEXT: retq +; X64-NEXT: .LBB1_1: # %then +; X64-NEXT: movl $64, %eax +; X64-NEXT: popq %rbx +; X64-NEXT: retq +entry: + %val = load i32, i32* %ptr + %inc = add i32 %val, 1 + store i32 %inc, i32* %ptr + %cmp = icmp eq i32 %inc, 0 + call void @external(i32 42) + br i1 %cmp, label %then, label %else + +then: + ret i32 64 + +else: + ret i32 0 +} + +declare void @external_a() +declare void @external_b() + +; This lowers to a conditional tail call instead of a conditional branch. This +; is tricky because we can only do this from a leaf function, and so we have to +; use volatile stores similar to test1 to force the save and restore of +; a condition without calling another function. We then set up subsequent calls +; in tail position. +define void @test_tail_call(i32* %ptr) nounwind optsize { +; X32-LABEL: test_tail_call: +; X32: # %bb.0: # %entry +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: incl (%eax) +; X32-NEXT: setne %al +; X32-NEXT: incb a +; X32-NEXT: sete d +; X32-NEXT: testb %al, %al +; X32-NEXT: jne external_b # TAILCALL +; X32-NEXT: # %bb.1: # %then +; X32-NEXT: jmp external_a # TAILCALL +; +; X64-LABEL: test_tail_call: +; X64: # %bb.0: # %entry +; X64-NEXT: incl (%rdi) +; X64-NEXT: setne %al +; X64-NEXT: incb {{.*}}(%rip) +; X64-NEXT: sete {{.*}}(%rip) +; X64-NEXT: testb %al, %al +; X64-NEXT: jne external_b # TAILCALL +; X64-NEXT: # %bb.1: # %then +; X64-NEXT: jmp external_a # TAILCALL +entry: + %val = load i32, i32* %ptr + %inc = add i32 %val, 1 + store i32 %inc, i32* %ptr + %cmp = icmp eq i32 %inc, 0 + %aval = load volatile i8, i8* @a + %inc2 = add i8 %aval, 1 + store volatile i8 %inc2, i8* @a + %cmp2 = icmp eq i8 %inc2, 0 + %conv5 = zext i1 %cmp2 to i8 + store i8 %conv5, i8* @d + br i1 %cmp, label %then, label %else + +then: + tail call void @external_a() + ret void + +else: + tail call void @external_b() + ret void +} + +; Test a function that gets special select lowering into CFG with copied EFLAGS +; threaded across the CFG. This requires our EFLAGS copy rewriting to handle +; cross-block rewrites in at least some narrow cases. +define void @PR37100(i8 %arg1, i16 %arg2, i64 %arg3, i8 %arg4, i8* %ptr1, i32* %ptr2) { +; X32-LABEL: PR37100: +; X32: # %bb.0: # %bb +; X32-NEXT: pushl %ebp +; X32-NEXT: .cfi_def_cfa_offset 8 +; X32-NEXT: pushl %ebx +; X32-NEXT: .cfi_def_cfa_offset 12 +; X32-NEXT: pushl %edi +; X32-NEXT: .cfi_def_cfa_offset 16 +; X32-NEXT: pushl %esi +; X32-NEXT: .cfi_def_cfa_offset 20 +; X32-NEXT: .cfi_offset %esi, -20 +; X32-NEXT: .cfi_offset %edi, -16 +; X32-NEXT: .cfi_offset %ebx, -12 +; X32-NEXT: .cfi_offset %ebp, -8 +; X32-NEXT: movl {{[0-9]+}}(%esp), %esi +; X32-NEXT: movl {{[0-9]+}}(%esp), %edi +; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx +; X32-NEXT: movb {{[0-9]+}}(%esp), %ch +; X32-NEXT: movb {{[0-9]+}}(%esp), %cl +; X32-NEXT: jmp .LBB3_1 +; X32-NEXT: .p2align 4, 0x90 +; X32-NEXT: .LBB3_5: # %bb1 +; X32-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X32-NEXT: xorl %eax, %eax +; X32-NEXT: xorl %edx, %edx +; X32-NEXT: idivl %ebp +; X32-NEXT: .LBB3_1: # %bb1 +; X32-NEXT: # =>This Inner Loop Header: Depth=1 +; X32-NEXT: movsbl %cl, %eax +; X32-NEXT: movl %eax, %edx +; X32-NEXT: sarl $31, %edx +; X32-NEXT: cmpl %eax, %esi +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: sbbl %edx, %eax +; X32-NEXT: setl %al +; X32-NEXT: setl %dl +; X32-NEXT: movzbl %dl, %ebp +; X32-NEXT: negl %ebp +; X32-NEXT: testb %al, %al +; X32-NEXT: jne .LBB3_3 +; X32-NEXT: # %bb.2: # %bb1 +; X32-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X32-NEXT: movb %ch, %cl +; X32-NEXT: .LBB3_3: # %bb1 +; X32-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X32-NEXT: movb %cl, (%ebx) +; X32-NEXT: movl (%edi), %edx +; X32-NEXT: testb %al, %al +; X32-NEXT: jne .LBB3_5 +; X32-NEXT: # %bb.4: # %bb1 +; X32-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X32-NEXT: movl %edx, %ebp +; X32-NEXT: jmp .LBB3_5 +; +; X64-LABEL: PR37100: +; X64: # %bb.0: # %bb +; X64-NEXT: movq %rdx, %r10 +; X64-NEXT: jmp .LBB3_1 +; X64-NEXT: .p2align 4, 0x90 +; X64-NEXT: .LBB3_5: # %bb1 +; X64-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X64-NEXT: xorl %eax, %eax +; X64-NEXT: xorl %edx, %edx +; X64-NEXT: idivl %esi +; X64-NEXT: .LBB3_1: # %bb1 +; X64-NEXT: # =>This Inner Loop Header: Depth=1 +; X64-NEXT: movsbq %dil, %rax +; X64-NEXT: xorl %esi, %esi +; X64-NEXT: cmpq %rax, %r10 +; X64-NEXT: setl %sil +; X64-NEXT: negl %esi +; X64-NEXT: cmpq %rax, %r10 +; X64-NEXT: jl .LBB3_3 +; X64-NEXT: # %bb.2: # %bb1 +; X64-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X64-NEXT: movl %ecx, %edi +; X64-NEXT: .LBB3_3: # %bb1 +; X64-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X64-NEXT: movb %dil, (%r8) +; X64-NEXT: jl .LBB3_5 +; X64-NEXT: # %bb.4: # %bb1 +; X64-NEXT: # in Loop: Header=BB3_1 Depth=1 +; X64-NEXT: movl (%r9), %esi +; X64-NEXT: jmp .LBB3_5 +bb: + br label %bb1 + +bb1: + %tmp = phi i8 [ %tmp8, %bb1 ], [ %arg1, %bb ] + %tmp2 = phi i16 [ %tmp12, %bb1 ], [ %arg2, %bb ] + %tmp3 = icmp sgt i16 %tmp2, 7 + %tmp4 = select i1 %tmp3, i16 %tmp2, i16 7 + %tmp5 = sext i8 %tmp to i64 + %tmp6 = icmp slt i64 %arg3, %tmp5 + %tmp7 = sext i1 %tmp6 to i32 + %tmp8 = select i1 %tmp6, i8 %tmp, i8 %arg4 + store volatile i8 %tmp8, i8* %ptr1 + %tmp9 = load volatile i32, i32* %ptr2 + %tmp10 = select i1 %tmp6, i32 %tmp7, i32 %tmp9 + %tmp11 = srem i32 0, %tmp10 + %tmp12 = trunc i32 %tmp11 to i16 + br label %bb1 +} + +; Use a particular instruction pattern in order to lower to the post-RA pseudo +; used to lower SETB into an SBB pattern in order to make sure that kind of +; usage of a copied EFLAGS continues to work. +define void @PR37431(i32* %arg1, i8* %arg2, i8* %arg3) { +; X32-LABEL: PR37431: +; X32: # %bb.0: # %entry +; X32-NEXT: pushl %esi +; X32-NEXT: .cfi_def_cfa_offset 8 +; X32-NEXT: .cfi_offset %esi, -8 +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: movl (%eax), %eax +; X32-NEXT: movl %eax, %ecx +; X32-NEXT: sarl $31, %ecx +; X32-NEXT: cmpl %eax, %eax +; X32-NEXT: sbbl %ecx, %eax +; X32-NEXT: setb %al +; X32-NEXT: sbbb %cl, %cl +; X32-NEXT: movl {{[0-9]+}}(%esp), %esi +; X32-NEXT: movl {{[0-9]+}}(%esp), %edx +; X32-NEXT: movb %cl, (%edx) +; X32-NEXT: movzbl %al, %eax +; X32-NEXT: xorl %ecx, %ecx +; X32-NEXT: subl %eax, %ecx +; X32-NEXT: xorl %eax, %eax +; X32-NEXT: xorl %edx, %edx +; X32-NEXT: idivl %ecx +; X32-NEXT: movb %dl, (%esi) +; X32-NEXT: popl %esi +; X32-NEXT: retl +; +; X64-LABEL: PR37431: +; X64: # %bb.0: # %entry +; X64-NEXT: movq %rdx, %rcx +; X64-NEXT: movslq (%rdi), %rax +; X64-NEXT: cmpq %rax, %rax +; X64-NEXT: sbbb %dl, %dl +; X64-NEXT: cmpq %rax, %rax +; X64-NEXT: movb %dl, (%rsi) +; X64-NEXT: sbbl %esi, %esi +; X64-NEXT: xorl %eax, %eax +; X64-NEXT: xorl %edx, %edx +; X64-NEXT: idivl %esi +; X64-NEXT: movb %dl, (%rcx) +; X64-NEXT: retq +entry: + %tmp = load i32, i32* %arg1 + %tmp1 = sext i32 %tmp to i64 + %tmp2 = icmp ugt i64 %tmp1, undef + %tmp3 = zext i1 %tmp2 to i8 + %tmp4 = sub i8 0, %tmp3 + store i8 %tmp4, i8* %arg2 + %tmp5 = sext i8 %tmp4 to i32 + %tmp6 = srem i32 0, %tmp5 + %tmp7 = trunc i32 %tmp6 to i8 + store i8 %tmp7, i8* %arg3 + ret void +} diff --git a/external/llvm/test/CodeGen/X86/domain-reassignment-implicit-def.ll b/external/llvm/test/CodeGen/X86/domain-reassignment-implicit-def.ll new file mode 100644 index 0000000000..1716b042d8 --- /dev/null +++ b/external/llvm/test/CodeGen/X86/domain-reassignment-implicit-def.ll @@ -0,0 +1,24 @@ +; RUN: llc -mcpu=skylake-avx512 -mtriple=x86_64-unknown-linux-gnu %s -o - | FileCheck %s + +; Check that the X86 Domain Reassignment pass doesn't drop IMPLICIT_DEF nodes, +; which would later cause crashes (e.g. in LiveVariables) - see PR37430 +define void @domain_reassignment_implicit_def(i1 %cond, i8 *%mem, float %arg) { +; CHECK: vxorps %xmm1, %xmm1, %xmm1 +; CHECK: vcmpneqss %xmm1, %xmm0, %k0 +; CHECK: kmovb %k0, (%rsi) +top: + br i1 %cond, label %L19, label %L15 + +L15: ; preds = %top + %tmp47 = fcmp une float 0.000000e+00, %arg + %tmp48 = zext i1 %tmp47 to i8 + br label %L21 + +L19: ; preds = %top + br label %L21 + +L21: ; preds = %L19, %L15 + %.sroa.0.0 = phi i8 [ undef, %L19 ], [ %tmp48, %L15 ] + store i8 %.sroa.0.0, i8* %mem, align 1 + ret void +} diff --git a/external/llvm/test/CodeGen/X86/domain-reassignment-test.ll b/external/llvm/test/CodeGen/X86/domain-reassignment-test.ll new file mode 100644 index 0000000000..2ff5aea960 --- /dev/null +++ b/external/llvm/test/CodeGen/X86/domain-reassignment-test.ll @@ -0,0 +1,37 @@ +; RUN: llc -mcpu=skylake-avx512 -mtriple=x86_64-unknown-linux-gnu %s -o - | FileCheck %s +; RUN: llc -mcpu=skylake-avx512 -mtriple=x86_64-unknown-linux-gnu %s -o - | llvm-mc -triple=x86_64-unknown-linux-gnu -mcpu=skylake-avx512 + +; Check that the X86 domain reassignment pass doesn't introduce an illegal +; test instruction. See PR37396 +define void @japi1_foo2_34617() { +pass2: + br label %if5 + +L174: + %tmp = icmp sgt <2 x i64> undef, zeroinitializer + %tmp1 = icmp sle <2 x i64> undef, undef + %tmp2 = and <2 x i1> %tmp, %tmp1 + %tmp3 = extractelement <2 x i1> %tmp2, i32 0 + %tmp4 = extractelement <2 x i1> %tmp2, i32 1 + %tmp106 = and i1 %tmp4, %tmp3 + %tmp107 = zext i1 %tmp106 to i8 + %tmp108 = and i8 %tmp122, %tmp107 + %tmp109 = icmp eq i8 %tmp108, 0 +; CHECK-NOT: testb {{%k[0-7]}} + br i1 %tmp109, label %L188, label %L190 + +if5: + %b.055 = phi i8 [ 1, %pass2 ], [ %tmp122, %if5 ] + %tmp118 = icmp sgt i64 undef, 0 + %tmp119 = icmp sle i64 undef, undef + %tmp120 = and i1 %tmp118, %tmp119 + %tmp121 = zext i1 %tmp120 to i8 + %tmp122 = and i8 %b.055, %tmp121 + br i1 undef, label %L174, label %if5 + +L188: + unreachable + +L190: + ret void +} diff --git a/external/llvm/test/CodeGen/X86/eflags-copy-expansion.mir b/external/llvm/test/CodeGen/X86/eflags-copy-expansion.mir deleted file mode 100644 index 11d4c81b92..0000000000 --- a/external/llvm/test/CodeGen/X86/eflags-copy-expansion.mir +++ /dev/null @@ -1,64 +0,0 @@ -# RUN: llc -run-pass postrapseudos -mtriple=i386-apple-macosx -o - %s | FileCheck %s - -# Verify that we correctly save and restore eax when copying eflags, -# even when only a smaller alias of eax is used. We used to check only -# eax and not its aliases. -# PR27624. - ---- | - target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" - - define void @foo() { - entry: - br label %false - false: - ret void - } - -... - ---- -name: foo -tracksRegLiveness: true -liveins: - - { reg: '%edi' } -body: | - bb.0.entry: - liveins: %edi - NOOP implicit-def %al - - ; The bug was triggered only when LivePhysReg is used, which - ; happens only when the heuristic for the liveness computation - ; failed. The liveness computation heuristic looks at 10 instructions - ; before and after the copy. Make sure we do not reach the definition of - ; AL in 10 instructions, otherwise the heuristic will see that it is live. - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - NOOP - ; Save AL. - ; CHECK: PUSH32r killed %eax - - ; Copy edi into EFLAGS - ; CHECK-NEXT: %eax = MOV32rr %edi - ; CHECK-NEXT: %al = ADD8ri %al, 127, implicit-def %eflags - ; CHECK-NEXT: SAHF implicit-def %eflags, implicit %ah - %eflags = COPY %edi - - ; Restore AL. - ; CHECK-NEXT: %eax = POP32r - bb.1.false: - liveins: %al - NOOP implicit %al - RETQ - -... diff --git a/external/llvm/test/CodeGen/X86/fast-isel-shift.ll b/external/llvm/test/CodeGen/X86/fast-isel-shift.ll index 5d416e1826..e9f01035b5 100644 --- a/external/llvm/test/CodeGen/X86/fast-isel-shift.ll +++ b/external/llvm/test/CodeGen/X86/fast-isel-shift.ll @@ -381,3 +381,15 @@ define i64 @ashr_imm4_i64(i64 %a) { %c = ashr i64 %a, 4 ret i64 %c } + +; Make sure we don't crash on out of bounds i8 shifts. +define i8 @PR36731(i8 %a) { +; CHECK-LABEL: PR36731: +; CHECK: ## %bb.0: +; CHECK-NEXT: movb $255, %cl +; CHECK-NEXT: shlb %cl, %dil +; CHECK-NEXT: movl %edi, %eax +; CHECK-NEXT: retq + %b = shl i8 %a, -1 + ret i8 %b +} diff --git a/external/llvm/test/CodeGen/X86/flags-copy-lowering.mir b/external/llvm/test/CodeGen/X86/flags-copy-lowering.mir new file mode 100644 index 0000000000..3d8a4ed3c7 --- /dev/null +++ b/external/llvm/test/CodeGen/X86/flags-copy-lowering.mir @@ -0,0 +1,555 @@ +# RUN: llc -run-pass x86-flags-copy-lowering -verify-machineinstrs -o - %s | FileCheck %s +# +# Lower various interesting copy patterns of EFLAGS without using LAHF/SAHF. + +--- | + target triple = "x86_64-unknown-unknown" + + declare void @foo() + + define i32 @test_branch(i64 %a, i64 %b) { + entry: + call void @foo() + ret i32 0 + } + + define i32 @test_branch_fallthrough(i64 %a, i64 %b) { + entry: + call void @foo() + ret i32 0 + } + + define void @test_setcc(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_cmov(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_adc(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_sbb(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_adcx(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_adox(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_rcl(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_rcr(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } + + define void @test_setb_c(i64 %a, i64 %b) { + entry: + call void @foo() + ret void + } +... +--- +name: test_branch +# CHECK-LABEL: name: test_branch +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + successors: %bb.1, %bb.2, %bb.3 + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + CMP64rr %0, %1, implicit-def %eflags + %2:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[A_REG:[^:]*]]:gr8 = SETAr implicit %eflags + ; CHECK-NEXT: %[[B_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %2 + JA_1 %bb.1, implicit %eflags + JB_1 %bb.2, implicit %eflags + JMP_1 %bb.3 + ; CHECK-NOT: %eflags = + ; + ; CHECK: TEST8rr %[[A_REG]], %[[A_REG]], implicit-def %eflags + ; CHECK-NEXT: JNE_1 %bb.1, implicit killed %eflags + ; CHECK-SAME: {{$[[:space:]]}} + ; CHECK-NEXT: bb.4: + ; CHECK-NEXT: successors: {{.*$}} + ; CHECK-SAME: {{$[[:space:]]}} + ; CHECK-NEXT: TEST8rr %[[B_REG]], %[[B_REG]], implicit-def %eflags + ; CHECK-NEXT: JNE_1 %bb.2, implicit killed %eflags + ; CHECK-NEXT: JMP_1 %bb.3 + + bb.1: + %3:gr32 = MOV32ri64 42 + %eax = COPY %3 + RET 0, %eax + + bb.2: + %4:gr32 = MOV32ri64 43 + %eax = COPY %4 + RET 0, %eax + + bb.3: + %5:gr32 = MOV32r0 implicit-def dead %eflags + %eax = COPY %5 + RET 0, %eax + +... +--- +name: test_branch_fallthrough +# CHECK-LABEL: name: test_branch_fallthrough +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + successors: %bb.1, %bb.2, %bb.3 + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + CMP64rr %0, %1, implicit-def %eflags + %2:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[A_REG:[^:]*]]:gr8 = SETAr implicit %eflags + ; CHECK-NEXT: %[[B_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %2 + JA_1 %bb.2, implicit %eflags + JB_1 %bb.3, implicit %eflags + ; CHECK-NOT: %eflags = + ; + ; CHECK: TEST8rr %[[A_REG]], %[[A_REG]], implicit-def %eflags + ; CHECK-NEXT: JNE_1 %bb.2, implicit killed %eflags + ; CHECK-SAME: {{$[[:space:]]}} + ; CHECK-NEXT: bb.4: + ; CHECK-NEXT: successors: {{.*$}} + ; CHECK-SAME: {{$[[:space:]]}} + ; CHECK-NEXT: TEST8rr %[[B_REG]], %[[B_REG]], implicit-def %eflags + ; CHECK-NEXT: JNE_1 %bb.3, implicit killed %eflags + ; CHECK-SAME: {{$[[:space:]]}} + ; CHECK-NEXT: bb.1: + + bb.1: + %5:gr32 = MOV32r0 implicit-def dead %eflags + %eax = COPY %5 + RET 0, %eax + + bb.2: + %3:gr32 = MOV32ri64 42 + %eax = COPY %3 + RET 0, %eax + + bb.3: + %4:gr32 = MOV32ri64 43 + %eax = COPY %4 + RET 0, %eax + +... +--- +name: test_setcc +# CHECK-LABEL: name: test_setcc +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + CMP64rr %0, %1, implicit-def %eflags + %2:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[A_REG:[^:]*]]:gr8 = SETAr implicit %eflags + ; CHECK-NEXT: %[[B_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NEXT: %[[E_REG:[^:]*]]:gr8 = SETEr implicit %eflags + ; CHECK-NEXT: %[[NE_REG:[^:]*]]:gr8 = SETNEr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %2 + %3:gr8 = SETAr implicit %eflags + %4:gr8 = SETBr implicit %eflags + %5:gr8 = SETEr implicit %eflags + SETNEm %rsp, 1, %noreg, -16, %noreg, implicit killed %eflags + MOV8mr %rsp, 1, %noreg, -16, %noreg, killed %3 + MOV8mr %rsp, 1, %noreg, -16, %noreg, killed %4 + MOV8mr %rsp, 1, %noreg, -16, %noreg, killed %5 + ; CHECK-NOT: %eflags = + ; CHECK-NOT: = SET{{.*}} + ; CHECK: MOV8mr {{.*}}, killed %[[A_REG]] + ; CHECK-CHECK: MOV8mr {{.*}}, killed %[[B_REG]] + ; CHECK-CHECK: MOV8mr {{.*}}, killed %[[E_REG]] + ; CHECK-CHECK: MOV8mr {{.*}}, killed %[[NE_REG]] + + RET 0 + +... +--- +name: test_cmov +# CHECK-LABEL: name: test_cmov +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + CMP64rr %0, %1, implicit-def %eflags + %2:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[A_REG:[^:]*]]:gr8 = SETAr implicit %eflags + ; CHECK-NEXT: %[[B_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NEXT: %[[E_REG:[^:]*]]:gr8 = SETEr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %2 + %3:gr64 = CMOVA64rr %0, %1, implicit %eflags + %4:gr64 = CMOVB64rr %0, %1, implicit %eflags + %5:gr64 = CMOVE64rr %0, %1, implicit %eflags + %6:gr64 = CMOVNE64rr %0, %1, implicit killed %eflags + ; CHECK-NOT: %eflags = + ; CHECK: TEST8rr %[[A_REG]], %[[A_REG]], implicit-def %eflags + ; CHECK-NEXT: %3:gr64 = CMOVNE64rr %0, %1, implicit killed %eflags + ; CHECK-NEXT: TEST8rr %[[B_REG]], %[[B_REG]], implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = CMOVNE64rr %0, %1, implicit killed %eflags + ; CHECK-NEXT: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def %eflags + ; CHECK-NEXT: %5:gr64 = CMOVNE64rr %0, %1, implicit killed %eflags + ; CHECK-NEXT: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def %eflags + ; CHECK-NEXT: %6:gr64 = CMOVE64rr %0, %1, implicit killed %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %3 + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %4 + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %5 + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %6 + + RET 0 + +... +--- +name: test_adc +# CHECK-LABEL: name: test_adc +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = ADD64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr64 = ADC64ri32 %2:gr64, 42, implicit-def %eflags, implicit %eflags + %5:gr64 = ADC64ri32 %4:gr64, 42, implicit-def %eflags, implicit %eflags + ; CHECK-NOT: %eflags = + ; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri %[[CF_REG]], 255, implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = ADC64ri32 %2, 42, implicit-def %eflags, implicit killed %eflags + ; CHECK-NEXT: %5:gr64 = ADC64ri32 %4, 42, implicit-def{{( dead)?}} %eflags, implicit{{( killed)?}} %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %5 + + RET 0 + +... +--- +name: test_sbb +# CHECK-LABEL: name: test_sbb +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = SUB64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY killed %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr64 = SBB64ri32 %2:gr64, 42, implicit-def %eflags, implicit killed %eflags + %5:gr64 = SBB64ri32 %4:gr64, 42, implicit-def dead %eflags, implicit killed %eflags + ; CHECK-NOT: %eflags = + ; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri %[[CF_REG]], 255, implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = SBB64ri32 %2, 42, implicit-def %eflags, implicit killed %eflags + ; CHECK-NEXT: %5:gr64 = SBB64ri32 %4, 42, implicit-def{{( dead)?}} %eflags, implicit{{( killed)?}} %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %5 + + RET 0 + +... +--- +name: test_adcx +# CHECK-LABEL: name: test_adcx +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = ADD64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[E_REG:[^:]*]]:gr8 = SETEr implicit %eflags + ; CHECK-NEXT: %[[CF_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr64 = CMOVE64rr %0, %1, implicit %eflags + %5:gr64 = MOV64ri32 42 + %6:gr64 = ADCX64rr %2, %5, implicit-def %eflags, implicit %eflags + ; CHECK-NOT: %eflags = + ; CHECK: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = CMOVNE64rr %0, %1, implicit killed %eflags + ; CHECK-NEXT: %5:gr64 = MOV64ri32 42 + ; CHECK-NEXT: dead %{{[^:]*}}:gr8 = ADD8ri %[[CF_REG]], 255, implicit-def %eflags + ; CHECK-NEXT: %6:gr64 = ADCX64rr %2, %5, implicit-def{{( dead)?}} %eflags, implicit killed %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %4 + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %6 + + RET 0 + +... +--- +name: test_adox +# CHECK-LABEL: name: test_adox +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = ADD64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[E_REG:[^:]*]]:gr8 = SETEr implicit %eflags + ; CHECK-NEXT: %[[OF_REG:[^:]*]]:gr8 = SETOr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr64 = CMOVE64rr %0, %1, implicit %eflags + %5:gr64 = MOV64ri32 42 + %6:gr64 = ADOX64rr %2, %5, implicit-def %eflags, implicit %eflags + ; CHECK-NOT: %eflags = + ; CHECK: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = CMOVNE64rr %0, %1, implicit killed %eflags + ; CHECK-NEXT: %5:gr64 = MOV64ri32 42 + ; CHECK-NEXT: dead %{{[^:]*}}:gr8 = ADD8ri %[[OF_REG]], 127, implicit-def %eflags + ; CHECK-NEXT: %6:gr64 = ADOX64rr %2, %5, implicit-def{{( dead)?}} %eflags, implicit killed %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %4 + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %6 + + RET 0 + +... +--- +name: test_rcl +# CHECK-LABEL: name: test_rcl +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = ADD64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr64 = RCL64r1 %2:gr64, implicit-def %eflags, implicit %eflags + %5:gr64 = RCL64r1 %4:gr64, implicit-def %eflags, implicit %eflags + ; CHECK-NOT: %eflags = + ; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri %[[CF_REG]], 255, implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = RCL64r1 %2, implicit-def %eflags, implicit killed %eflags + ; CHECK-NEXT: %5:gr64 = RCL64r1 %4, implicit-def{{( dead)?}} %eflags, implicit{{( killed)?}} %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %5 + + RET 0 + +... +--- +name: test_rcr +# CHECK-LABEL: name: test_rcr +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = ADD64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr64 = RCR64r1 %2:gr64, implicit-def %eflags, implicit %eflags + %5:gr64 = RCR64r1 %4:gr64, implicit-def %eflags, implicit %eflags + ; CHECK-NOT: %eflags = + ; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri %[[CF_REG]], 255, implicit-def %eflags + ; CHECK-NEXT: %4:gr64 = RCR64r1 %2, implicit-def %eflags, implicit killed %eflags + ; CHECK-NEXT: %5:gr64 = RCR64r1 %4, implicit-def{{( dead)?}} %eflags, implicit{{( killed)?}} %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %5 + + RET 0 + +... +--- +name: test_setb_c +# CHECK-LABEL: name: test_setb_c +liveins: + - { reg: '%rdi', virtual-reg: '%0' } + - { reg: '%rsi', virtual-reg: '%1' } +body: | + bb.0: + liveins: %rdi, %rsi + + %0:gr64 = COPY %rdi + %1:gr64 = COPY %rsi + %2:gr64 = ADD64rr %0, %1, implicit-def %eflags + %3:gr64 = COPY %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + ; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETBr implicit %eflags + ; CHECK-NOT: COPY{{( killed)?}} %eflags + + ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + CALL64pcrel32 @foo, csr_64, implicit %rsp, implicit %ssp, implicit %rdi, implicit-def %rsp, implicit-def %ssp, implicit-def %eax + ADJCALLSTACKUP64 0, 0, implicit-def dead %rsp, implicit-def dead %eflags, implicit-def dead %ssp, implicit %rsp, implicit %ssp + + %eflags = COPY %3 + %4:gr8 = SETB_C8r implicit-def %eflags, implicit %eflags + MOV8mr %rsp, 1, %noreg, -16, %noreg, killed %4 + ; CHECK-NOT: %eflags = + ; CHECK: %[[ZERO:[^:]*]]:gr32 = MOV32r0 implicit-def %eflags + ; CHECK-NEXT: %[[ZERO_SUBREG:[^:]*]]:gr8 = EXTRACT_SUBREG %[[ZERO]], %subreg.sub_8bit + ; CHECK-NEXT: %[[REPLACEMENT:[^:]*]]:gr8 = SUB8rr %[[ZERO_SUBREG]], %[[CF_REG]] + ; CHECK-NEXT: MOV8mr %rsp, 1, %noreg, -16, %noreg, killed %[[REPLACEMENT]] + + %eflags = COPY %3 + %5:gr16 = SETB_C16r implicit-def %eflags, implicit %eflags + MOV16mr %rsp, 1, %noreg, -16, %noreg, killed %5 + ; CHECK-NOT: %eflags = + ; CHECK: %[[CF_EXT:[^:]*]]:gr32 = MOVZX32rr8 %[[CF_REG]] + ; CHECK-NEXT: %[[CF_TRUNC:[^:]*]]:gr16 = EXTRACT_SUBREG %[[CF_EXT]], %subreg.sub_16bit + ; CHECK-NEXT: %[[ZERO:[^:]*]]:gr32 = MOV32r0 implicit-def %eflags + ; CHECK-NEXT: %[[ZERO_SUBREG:[^:]*]]:gr16 = EXTRACT_SUBREG %[[ZERO]], %subreg.sub_16bit + ; CHECK-NEXT: %[[REPLACEMENT:[^:]*]]:gr16 = SUB16rr %[[ZERO_SUBREG]], %[[CF_TRUNC]] + ; CHECK-NEXT: MOV16mr %rsp, 1, %noreg, -16, %noreg, killed %[[REPLACEMENT]] + + %eflags = COPY %3 + %6:gr32 = SETB_C32r implicit-def %eflags, implicit %eflags + MOV32mr %rsp, 1, %noreg, -16, %noreg, killed %6 + ; CHECK-NOT: %eflags = + ; CHECK: %[[CF_EXT:[^:]*]]:gr32 = MOVZX32rr8 %[[CF_REG]] + ; CHECK-NEXT: %[[ZERO:[^:]*]]:gr32 = MOV32r0 implicit-def %eflags + ; CHECK-NEXT: %[[REPLACEMENT:[^:]*]]:gr32 = SUB32rr %[[ZERO]], %[[CF_EXT]] + ; CHECK-NEXT: MOV32mr %rsp, 1, %noreg, -16, %noreg, killed %[[REPLACEMENT]] + + %eflags = COPY %3 + %7:gr64 = SETB_C64r implicit-def %eflags, implicit %eflags + MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %7 + ; CHECK-NOT: %eflags = + ; CHECK: %[[CF_EXT1:[^:]*]]:gr32 = MOVZX32rr8 %[[CF_REG]] + ; CHECK-NEXT: %[[CF_EXT2:[^:]*]]:gr64 = SUBREG_TO_REG 0, %[[CF_EXT1]], %subreg.sub_32bit + ; CHECK-NEXT: %[[ZERO:[^:]*]]:gr32 = MOV32r0 implicit-def %eflags + ; CHECK-NEXT: %[[ZERO_EXT:[^:]*]]:gr64 = SUBREG_TO_REG 0, %[[ZERO]], %subreg.sub_32bit + ; CHECK-NEXT: %[[REPLACEMENT:[^:]*]]:gr64 = SUB64rr %[[ZERO_EXT]], %[[CF_EXT2]] + ; CHECK-NEXT: MOV64mr %rsp, 1, %noreg, -16, %noreg, killed %[[REPLACEMENT]] + + RET 0 + +... diff --git a/external/llvm/test/CodeGen/X86/ipra-reg-usage.ll b/external/llvm/test/CodeGen/X86/ipra-reg-usage.ll index 50c066de96..e6cf4c0233 100644 --- a/external/llvm/test/CodeGen/X86/ipra-reg-usage.ll +++ b/external/llvm/test/CodeGen/X86/ipra-reg-usage.ll @@ -3,7 +3,7 @@ target triple = "x86_64-unknown-unknown" declare void @bar1() define preserve_allcc void @foo()#0 { -; CHECK: foo Clobbered Registers: %cs %ds %eflags %eip %eiz %es %fpsw %fs %gs %ip %rip %riz %ss %ssp %bnd0 %bnd1 %bnd2 %bnd3 %cr0 %cr1 %cr2 %cr3 %cr4 %cr5 %cr6 %cr7 %cr8 %cr9 %cr10 %cr11 %cr12 %cr13 %cr14 %cr15 %dr0 %dr1 %dr2 %dr3 %dr4 %dr5 %dr6 %dr7 %dr8 %dr9 %dr10 %dr11 %dr12 %dr13 %dr14 %dr15 %fp0 %fp1 %fp2 %fp3 %fp4 %fp5 %fp6 %fp7 %k0 %k1 %k2 %k3 %k4 %k5 %k6 %k7 %mm0 %mm1 %mm2 %mm3 %mm4 %mm5 %mm6 %mm7 %r11 %st0 %st1 %st2 %st3 %st4 %st5 %st6 %st7 %xmm16 %xmm17 %xmm18 %xmm19 %xmm20 %xmm21 %xmm22 %xmm23 %xmm24 %xmm25 %xmm26 %xmm27 %xmm28 %xmm29 %xmm30 %xmm31 %ymm0 %ymm1 %ymm2 %ymm3 %ymm4 %ymm5 %ymm6 %ymm7 %ymm8 %ymm9 %ymm10 %ymm11 %ymm12 %ymm13 %ymm14 %ymm15 %ymm16 %ymm17 %ymm18 %ymm19 %ymm20 %ymm21 %ymm22 %ymm23 %ymm24 %ymm25 %ymm26 %ymm27 %ymm28 %ymm29 %ymm30 %ymm31 %zmm0 %zmm1 %zmm2 %zmm3 %zmm4 %zmm5 %zmm6 %zmm7 %zmm8 %zmm9 %zmm10 %zmm11 %zmm12 %zmm13 %zmm14 %zmm15 %zmm16 %zmm17 %zmm18 %zmm19 %zmm20 %zmm21 %zmm22 %zmm23 %zmm24 %zmm25 %zmm26 %zmm27 %zmm28 %zmm29 %zmm30 %zmm31 %r11b %r11d %r11w +; CHECK: foo Clobbered Registers: %cs %df %ds %eflags %eip %eiz %es %fpsw %fs %gs %ip %rip %riz %ss %ssp %bnd0 %bnd1 %bnd2 %bnd3 %cr0 %cr1 %cr2 %cr3 %cr4 %cr5 %cr6 %cr7 %cr8 %cr9 %cr10 %cr11 %cr12 %cr13 %cr14 %cr15 %dr0 %dr1 %dr2 %dr3 %dr4 %dr5 %dr6 %dr7 %dr8 %dr9 %dr10 %dr11 %dr12 %dr13 %dr14 %dr15 %fp0 %fp1 %fp2 %fp3 %fp4 %fp5 %fp6 %fp7 %k0 %k1 %k2 %k3 %k4 %k5 %k6 %k7 %mm0 %mm1 %mm2 %mm3 %mm4 %mm5 %mm6 %mm7 %r11 %st0 %st1 %st2 %st3 %st4 %st5 %st6 %st7 %xmm16 %xmm17 %xmm18 %xmm19 %xmm20 %xmm21 %xmm22 %xmm23 %xmm24 %xmm25 %xmm26 %xmm27 %xmm28 %xmm29 %xmm30 %xmm31 %ymm0 %ymm1 %ymm2 %ymm3 %ymm4 %ymm5 %ymm6 %ymm7 %ymm8 %ymm9 %ymm10 %ymm11 %ymm12 %ymm13 %ymm14 %ymm15 %ymm16 %ymm17 %ymm18 %ymm19 %ymm20 %ymm21 %ymm22 %ymm23 %ymm24 %ymm25 %ymm26 %ymm27 %ymm28 %ymm29 %ymm30 %ymm31 %zmm0 %zmm1 %zmm2 %zmm3 %zmm4 %zmm5 %zmm6 %zmm7 %zmm8 %zmm9 %zmm10 %zmm11 %zmm12 %zmm13 %zmm14 %zmm15 %zmm16 %zmm17 %zmm18 %zmm19 %zmm20 %zmm21 %zmm22 %zmm23 %zmm24 %zmm25 %zmm26 %zmm27 %zmm28 %zmm29 %zmm30 %zmm31 %r11b %r11d %r11w call void @bar1() call void @bar2() ret void diff --git a/external/llvm/test/CodeGen/X86/mul-i1024.ll.REMOVED.git-id b/external/llvm/test/CodeGen/X86/mul-i1024.ll.REMOVED.git-id index 562b383ca9..c767c2d5cc 100644 --- a/external/llvm/test/CodeGen/X86/mul-i1024.ll.REMOVED.git-id +++ b/external/llvm/test/CodeGen/X86/mul-i1024.ll.REMOVED.git-id @@ -1 +1 @@ -9980042a4ccc8fbd2d076d697f931340813ec909 \ No newline at end of file +16fb112efadb2d79b4ca251491aefd844d079edf \ No newline at end of file diff --git a/external/llvm/test/CodeGen/X86/peephole-na-phys-copy-folding.ll b/external/llvm/test/CodeGen/X86/peephole-na-phys-copy-folding.ll index 66047e3677..023de041dc 100644 --- a/external/llvm/test/CodeGen/X86/peephole-na-phys-copy-folding.ll +++ b/external/llvm/test/CodeGen/X86/peephole-na-phys-copy-folding.ll @@ -1,13 +1,10 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=i386-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK32 -; RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sahf %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK64 - -; TODO: Reenable verify-machineinstrs once the if (!AXDead) // FIXME in -; X86InstrInfo::copyPhysReg() is resolved. +; RUN: llc -mtriple=i386-linux-gnu -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK32 +; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK64 ; The peephole optimizer can elide some physical register copies such as ; EFLAGS. Make sure the flags are used directly, instead of needlessly using -; lahf, when possible. +; saving and restoring specific conditions. @L = external global i32 @M = external global i8 @@ -209,29 +206,22 @@ exit2: define i64 @test_intervening_call(i64* %foo, i64 %bar, i64 %baz) nounwind { ; CHECK32-LABEL: test_intervening_call: ; CHECK32: # %bb.0: # %entry -; CHECK32-NEXT: pushl %ebp -; CHECK32-NEXT: movl %esp, %ebp ; CHECK32-NEXT: pushl %ebx ; CHECK32-NEXT: pushl %esi -; CHECK32-NEXT: movl 12(%ebp), %eax -; CHECK32-NEXT: movl 16(%ebp), %edx -; CHECK32-NEXT: movl 20(%ebp), %ebx -; CHECK32-NEXT: movl 24(%ebp), %ecx -; CHECK32-NEXT: movl 8(%ebp), %esi -; CHECK32-NEXT: lock cmpxchg8b (%esi) ; CHECK32-NEXT: pushl %eax -; CHECK32-NEXT: seto %al -; CHECK32-NEXT: lahf -; CHECK32-NEXT: movl %eax, %esi -; CHECK32-NEXT: popl %eax +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %edx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ebx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %esi +; CHECK32-NEXT: lock cmpxchg8b (%esi) +; CHECK32-NEXT: setne %bl ; CHECK32-NEXT: subl $8, %esp ; CHECK32-NEXT: pushl %edx ; CHECK32-NEXT: pushl %eax ; CHECK32-NEXT: calll bar ; CHECK32-NEXT: addl $16, %esp -; CHECK32-NEXT: movl %esi, %eax -; CHECK32-NEXT: addb $127, %al -; CHECK32-NEXT: sahf +; CHECK32-NEXT: testb %bl, %bl ; CHECK32-NEXT: jne .LBB4_3 ; CHECK32-NEXT: # %bb.1: # %t ; CHECK32-NEXT: movl $42, %eax @@ -240,39 +230,28 @@ define i64 @test_intervening_call(i64* %foo, i64 %bar, i64 %baz) nounwind { ; CHECK32-NEXT: xorl %eax, %eax ; CHECK32-NEXT: .LBB4_2: # %t ; CHECK32-NEXT: xorl %edx, %edx +; CHECK32-NEXT: addl $4, %esp ; CHECK32-NEXT: popl %esi ; CHECK32-NEXT: popl %ebx -; CHECK32-NEXT: popl %ebp ; CHECK32-NEXT: retl ; ; CHECK64-LABEL: test_intervening_call: ; CHECK64: # %bb.0: # %entry -; CHECK64-NEXT: pushq %rbp -; CHECK64-NEXT: movq %rsp, %rbp ; CHECK64-NEXT: pushq %rbx -; CHECK64-NEXT: pushq %rax ; CHECK64-NEXT: movq %rsi, %rax ; CHECK64-NEXT: lock cmpxchgq %rdx, (%rdi) -; CHECK64-NEXT: pushq %rax -; CHECK64-NEXT: seto %al -; CHECK64-NEXT: lahf -; CHECK64-NEXT: movq %rax, %rbx -; CHECK64-NEXT: popq %rax +; CHECK64-NEXT: setne %bl ; CHECK64-NEXT: movq %rax, %rdi ; CHECK64-NEXT: callq bar -; CHECK64-NEXT: movq %rbx, %rax -; CHECK64-NEXT: addb $127, %al -; CHECK64-NEXT: sahf -; CHECK64-NEXT: jne .LBB4_3 +; CHECK64-NEXT: testb %bl, %bl +; CHECK64-NEXT: jne .LBB4_2 ; CHECK64-NEXT: # %bb.1: # %t ; CHECK64-NEXT: movl $42, %eax -; CHECK64-NEXT: jmp .LBB4_2 -; CHECK64-NEXT: .LBB4_3: # %f -; CHECK64-NEXT: xorl %eax, %eax -; CHECK64-NEXT: .LBB4_2: # %t -; CHECK64-NEXT: addq $8, %rsp ; CHECK64-NEXT: popq %rbx -; CHECK64-NEXT: popq %rbp +; CHECK64-NEXT: retq +; CHECK64-NEXT: .LBB4_2: # %f +; CHECK64-NEXT: xorl %eax, %eax +; CHECK64-NEXT: popq %rbx ; CHECK64-NEXT: retq entry: ; cmpxchg sets EFLAGS, call clobbers it, then br uses EFLAGS. @@ -293,32 +272,27 @@ define i64 @test_two_live_flags(i64* %foo0, i64 %bar0, i64 %baz0, i64* %foo1, i6 ; CHECK32-LABEL: test_two_live_flags: ; CHECK32: # %bb.0: # %entry ; CHECK32-NEXT: pushl %ebp -; CHECK32-NEXT: movl %esp, %ebp ; CHECK32-NEXT: pushl %ebx ; CHECK32-NEXT: pushl %edi ; CHECK32-NEXT: pushl %esi -; CHECK32-NEXT: movl 44(%ebp), %edi -; CHECK32-NEXT: movl 12(%ebp), %eax -; CHECK32-NEXT: movl 16(%ebp), %edx -; CHECK32-NEXT: movl 20(%ebp), %ebx -; CHECK32-NEXT: movl 24(%ebp), %ecx -; CHECK32-NEXT: movl 8(%ebp), %esi -; CHECK32-NEXT: lock cmpxchg8b (%esi) -; CHECK32-NEXT: seto %al -; CHECK32-NEXT: lahf -; CHECK32-NEXT: movl %eax, %esi -; CHECK32-NEXT: movl 32(%ebp), %eax -; CHECK32-NEXT: movl 36(%ebp), %edx -; CHECK32-NEXT: movl %edi, %ecx -; CHECK32-NEXT: movl 40(%ebp), %ebx -; CHECK32-NEXT: movl 28(%ebp), %edi -; CHECK32-NEXT: lock cmpxchg8b (%edi) -; CHECK32-NEXT: sete %al ; CHECK32-NEXT: pushl %eax -; CHECK32-NEXT: movl %esi, %eax -; CHECK32-NEXT: addb $127, %al -; CHECK32-NEXT: sahf -; CHECK32-NEXT: popl %eax +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ebp +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %edx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ebx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %esi +; CHECK32-NEXT: lock cmpxchg8b (%esi) +; CHECK32-NEXT: setne {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK32-NEXT: movl %edi, %edx +; CHECK32-NEXT: movl %ebp, %ecx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ebx +; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %esi +; CHECK32-NEXT: lock cmpxchg8b (%esi) +; CHECK32-NEXT: sete %al +; CHECK32-NEXT: cmpb $0, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Reload ; CHECK32-NEXT: jne .LBB5_4 ; CHECK32-NEXT: # %bb.1: # %entry ; CHECK32-NEXT: testb %al, %al @@ -330,6 +304,7 @@ define i64 @test_two_live_flags(i64* %foo0, i64 %bar0, i64 %baz0, i64* %foo1, i6 ; CHECK32-NEXT: xorl %eax, %eax ; CHECK32-NEXT: .LBB5_3: # %t ; CHECK32-NEXT: xorl %edx, %edx +; CHECK32-NEXT: addl $4, %esp ; CHECK32-NEXT: popl %esi ; CHECK32-NEXT: popl %edi ; CHECK32-NEXT: popl %ebx @@ -338,32 +313,22 @@ define i64 @test_two_live_flags(i64* %foo0, i64 %bar0, i64 %baz0, i64* %foo1, i6 ; ; CHECK64-LABEL: test_two_live_flags: ; CHECK64: # %bb.0: # %entry -; CHECK64-NEXT: pushq %rbp -; CHECK64-NEXT: movq %rsp, %rbp ; CHECK64-NEXT: movq %rsi, %rax ; CHECK64-NEXT: lock cmpxchgq %rdx, (%rdi) -; CHECK64-NEXT: seto %al -; CHECK64-NEXT: lahf -; CHECK64-NEXT: movq %rax, %rdx +; CHECK64-NEXT: setne %dl ; CHECK64-NEXT: movq %r8, %rax ; CHECK64-NEXT: lock cmpxchgq %r9, (%rcx) ; CHECK64-NEXT: sete %al -; CHECK64-NEXT: pushq %rax -; CHECK64-NEXT: movq %rdx, %rax -; CHECK64-NEXT: addb $127, %al -; CHECK64-NEXT: sahf -; CHECK64-NEXT: popq %rax +; CHECK64-NEXT: testb %dl, %dl ; CHECK64-NEXT: jne .LBB5_3 ; CHECK64-NEXT: # %bb.1: # %entry ; CHECK64-NEXT: testb %al, %al ; CHECK64-NEXT: je .LBB5_3 ; CHECK64-NEXT: # %bb.2: # %t ; CHECK64-NEXT: movl $42, %eax -; CHECK64-NEXT: popq %rbp ; CHECK64-NEXT: retq ; CHECK64-NEXT: .LBB5_3: # %f ; CHECK64-NEXT: xorl %eax, %eax -; CHECK64-NEXT: popq %rbp ; CHECK64-NEXT: retq entry: %cx0 = cmpxchg i64* %foo0, i64 %bar0, i64 %baz0 seq_cst seq_cst diff --git a/external/llvm/test/CodeGen/X86/pr37264.ll b/external/llvm/test/CodeGen/X86/pr37264.ll new file mode 100644 index 0000000000..8821960d4b --- /dev/null +++ b/external/llvm/test/CodeGen/X86/pr37264.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s -mtriple=x86_64-- + +define void @a() local_unnamed_addr #0 { + ret void +} + +define void @b() local_unnamed_addr #1 { + ret void +} + +attributes #0 = { "target-features"="+avx,+avx2,+avx512bw,+avx512f,+f16c,+fma,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave" } +attributes #1 = { "target-features"="+avx,+avx2,+avx512f,+avx512vl,+f16c,+fma,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave" } diff --git a/external/llvm/test/CodeGen/X86/win64_frame.ll b/external/llvm/test/CodeGen/X86/win64_frame.ll index 34f78ad0ac..c011b4dc60 100644 --- a/external/llvm/test/CodeGen/X86/win64_frame.ll +++ b/external/llvm/test/CodeGen/X86/win64_frame.ll @@ -1,43 +1,85 @@ -; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck %s --check-prefix=CHECK --check-prefix=PUSHF -; RUN: llc < %s -mtriple=x86_64-pc-win32 -mattr=+sahf | FileCheck %s --check-prefix=SAHF +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck %s --check-prefix=ALL --check-prefix=PUSHF +; RUN: llc < %s -mtriple=x86_64-pc-win32 -mattr=+sahf | FileCheck %s --check-prefix=ALL --check-prefix=SAHF define i32 @f1(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5) "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f1: - ; CHECK: movl 48(%rbp), %eax +; ALL-LABEL: f1: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: movq %rsp, %rbp +; ALL-NEXT: .seh_setframe 5, 0 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: movl 48(%rbp), %eax +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc ret i32 %p5 } define void @f2(i32 %p, ...) "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f2: - ; CHECK: .seh_stackalloc 8 - ; CHECK: movq %rsp, %rbp - ; CHECK: .seh_setframe 5, 0 - ; CHECK: movq %rdx, 32(%rbp) - ; CHECK: leaq 32(%rbp), %rax +; ALL-LABEL: f2: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: pushq %rax +; ALL-NEXT: .seh_stackalloc 8 +; ALL-NEXT: movq %rsp, %rbp +; ALL-NEXT: .seh_setframe 5, 0 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: movq %r9, 48(%rbp) +; ALL-NEXT: movq %r8, 40(%rbp) +; ALL-NEXT: movq %rdx, 32(%rbp) +; ALL-NEXT: leaq 32(%rbp), %rax +; ALL-NEXT: movq %rax, (%rbp) +; ALL-NEXT: addq $8, %rsp +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %ap = alloca i8, align 8 call void @llvm.va_start(i8* %ap) ret void } define i8* @f3() "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f3: - ; CHECK: movq %rsp, %rbp - ; CHECK: .seh_setframe 5, 0 - ; CHECK: movq 8(%rbp), %rax +; ALL-LABEL: f3: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: movq %rsp, %rbp +; ALL-NEXT: .seh_setframe 5, 0 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: movq 8(%rbp), %rax +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %ra = call i8* @llvm.returnaddress(i32 0) ret i8* %ra } define i8* @f4() "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f4: - ; CHECK: pushq %rbp - ; CHECK: .seh_pushreg 5 - ; CHECK: subq $304, %rsp - ; CHECK: .seh_stackalloc 304 - ; CHECK: leaq 128(%rsp), %rbp - ; CHECK: .seh_setframe 5, 128 - ; CHECK: .seh_endprologue - ; CHECK: movq 184(%rbp), %rax +; ALL-LABEL: f4: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: subq $304, %rsp # imm = 0x130 +; ALL-NEXT: .seh_stackalloc 304 +; ALL-NEXT: leaq {{[0-9]+}}(%rsp), %rbp +; ALL-NEXT: .seh_setframe 5, 128 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: movq 184(%rbp), %rax +; ALL-NEXT: addq $304, %rsp # imm = 0x130 +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc alloca [300 x i8] %ra = call i8* @llvm.returnaddress(i32 0) ret i8* %ra @@ -46,13 +88,24 @@ define i8* @f4() "no-frame-pointer-elim"="true" { declare void @external(i8*) define void @f5() "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f5: - ; CHECK: subq $336, %rsp - ; CHECK: .seh_stackalloc 336 - ; CHECK: leaq 128(%rsp), %rbp - ; CHECK: .seh_setframe 5, 128 - ; CHECK: leaq -92(%rbp), %rcx - ; CHECK: callq external +; ALL-LABEL: f5: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: subq $336, %rsp # imm = 0x150 +; ALL-NEXT: .seh_stackalloc 336 +; ALL-NEXT: leaq {{[0-9]+}}(%rsp), %rbp +; ALL-NEXT: .seh_setframe 5, 128 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: leaq -92(%rbp), %rcx +; ALL-NEXT: callq external +; ALL-NEXT: nop +; ALL-NEXT: addq $336, %rsp # imm = 0x150 +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %a = alloca [300 x i8] %gep = getelementptr [300 x i8], [300 x i8]* %a, i32 0, i32 0 call void @external(i8* %gep) @@ -60,13 +113,24 @@ define void @f5() "no-frame-pointer-elim"="true" { } define void @f6(i32 %p, ...) "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f6: - ; CHECK: subq $336, %rsp - ; CHECK: .seh_stackalloc 336 - ; CHECK: leaq 128(%rsp), %rbp - ; CHECK: .seh_setframe 5, 128 - ; CHECK: leaq -92(%rbp), %rcx - ; CHECK: callq external +; ALL-LABEL: f6: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: subq $336, %rsp # imm = 0x150 +; ALL-NEXT: .seh_stackalloc 336 +; ALL-NEXT: leaq {{[0-9]+}}(%rsp), %rbp +; ALL-NEXT: .seh_setframe 5, 128 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: leaq -92(%rbp), %rcx +; ALL-NEXT: callq external +; ALL-NEXT: nop +; ALL-NEXT: addq $336, %rsp # imm = 0x150 +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %a = alloca [300 x i8] %gep = getelementptr [300 x i8], [300 x i8]* %a, i32 0, i32 0 call void @external(i8* %gep) @@ -74,130 +138,147 @@ define void @f6(i32 %p, ...) "no-frame-pointer-elim"="true" { } define i32 @f7(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f7: - ; CHECK: pushq %rbp - ; CHECK: .seh_pushreg 5 - ; CHECK: subq $304, %rsp - ; CHECK: .seh_stackalloc 304 - ; CHECK: leaq 128(%rsp), %rbp - ; CHECK: .seh_setframe 5, 128 - ; CHECK: andq $-64, %rsp - ; CHECK: movl 224(%rbp), %eax - ; CHECK: leaq 176(%rbp), %rsp +; ALL-LABEL: f7: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: subq $304, %rsp # imm = 0x130 +; ALL-NEXT: .seh_stackalloc 304 +; ALL-NEXT: leaq {{[0-9]+}}(%rsp), %rbp +; ALL-NEXT: .seh_setframe 5, 128 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: andq $-64, %rsp +; ALL-NEXT: movl 224(%rbp), %eax +; ALL-NEXT: leaq 176(%rbp), %rsp +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc alloca [300 x i8], align 64 ret i32 %e } define i32 @f8(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f8: - ; CHECK: subq $352, %rsp - ; CHECK: .seh_stackalloc 352 - ; CHECK: leaq 128(%rsp), %rbp - ; CHECK: .seh_setframe 5, 128 - +; ALL-LABEL: f8: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: pushq %rsi +; ALL-NEXT: .seh_pushreg 6 +; ALL-NEXT: pushq %rbx +; ALL-NEXT: .seh_pushreg 3 +; ALL-NEXT: subq $352, %rsp # imm = 0x160 +; ALL-NEXT: .seh_stackalloc 352 +; ALL-NEXT: leaq {{[0-9]+}}(%rsp), %rbp +; ALL-NEXT: .seh_setframe 5, 128 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: andq $-64, %rsp +; ALL-NEXT: movq %rsp, %rbx +; ALL-NEXT: movl 288(%rbp), %esi +; ALL-NEXT: movl %ecx, %eax +; ALL-NEXT: leaq 15(,%rax,4), %rcx +; ALL-NEXT: movabsq $34359738352, %rax # imm = 0x7FFFFFFF0 +; ALL-NEXT: andq %rcx, %rax +; ALL-NEXT: callq __chkstk +; ALL-NEXT: subq %rax, %rsp +; ALL-NEXT: subq $32, %rsp +; ALL-NEXT: movq %rbx, %rcx +; ALL-NEXT: callq external +; ALL-NEXT: addq $32, %rsp +; ALL-NEXT: movl %esi, %eax +; ALL-NEXT: leaq 224(%rbp), %rsp +; ALL-NEXT: popq %rbx +; ALL-NEXT: popq %rsi +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %alloca = alloca [300 x i8], align 64 - ; CHECK: andq $-64, %rsp - ; CHECK: movq %rsp, %rbx - alloca i32, i32 %a - ; CHECK: movl %ecx, %eax - ; CHECK: leaq 15(,%rax,4), %rcx - ; CHECK: movabsq $34359738352, %rax - ; CHECK: andq %rcx, %rax - ; CHECK: callq __chkstk - ; CHECK: subq %rax, %rsp - %gep = getelementptr [300 x i8], [300 x i8]* %alloca, i32 0, i32 0 call void @external(i8* %gep) - ; CHECK: subq $32, %rsp - ; CHECK: movq %rbx, %rcx - ; CHECK: callq external - ; CHECK: addq $32, %rsp - ret i32 %e - ; CHECK: movl %esi, %eax - ; CHECK: leaq 224(%rbp), %rsp } define i64 @f9() { +; ALL-LABEL: f9: +; ALL: # %bb.0: # %entry +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: movq %rsp, %rbp +; ALL-NEXT: .seh_setframe 5, 0 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: pushfq +; ALL-NEXT: popq %rax +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc entry: - ; CHECK-LABEL: f9: - ; CHECK: pushq %rbp - ; CHECK: .seh_pushreg 5 - ; CHECK-NEXT: movq %rsp, %rbp - ; CHECK: .seh_setframe 5, 0 - ; CHECK: .seh_endprologue - %call = call i64 @llvm.x86.flags.read.u64() - ; CHECK-NEXT: pushfq - ; CHECK-NEXT: popq %rax - ret i64 %call - ; CHECK-NEXT: popq %rbp - ; CHECK-NEXT: retq } declare i64 @dummy() define i64 @f10(i64* %foo, i64 %bar, i64 %baz) { - ; CHECK-LABEL: f10: - ; CHECK: pushq %rbp - ; CHECK: .seh_pushreg 5 - ; CHECK: pushq %rsi - ; CHECK: .seh_pushreg 6 - ; CHECK: pushq %rdi - ; CHECK: .seh_pushreg 7 - ; CHECK: subq $32, %rsp - ; CHECK: .seh_stackalloc 32 - ; CHECK: leaq 32(%rsp), %rbp - ; CHECK: .seh_setframe 5, 32 - ; CHECK: .seh_endprologue - +; ALL-LABEL: f10: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rsi +; ALL-NEXT: .seh_pushreg 6 +; ALL-NEXT: pushq %rbx +; ALL-NEXT: .seh_pushreg 3 +; ALL-NEXT: subq $40, %rsp +; ALL-NEXT: .seh_stackalloc 40 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: movq %rdx, %rsi +; ALL-NEXT: movq %rsi, %rax +; ALL-NEXT: lock cmpxchgq %r8, (%rcx) +; ALL-NEXT: sete %bl +; ALL-NEXT: callq dummy +; ALL-NEXT: testb %bl, %bl +; ALL-NEXT: cmoveq %rsi, %rax +; ALL-NEXT: addq $40, %rsp +; ALL-NEXT: popq %rbx +; ALL-NEXT: popq %rsi +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %cx = cmpxchg i64* %foo, i64 %bar, i64 %baz seq_cst seq_cst - ; PUSHF: lock cmpxchgq - ; PUSHF-NEXT: pushfq - ; PUSHF-NEXT: popq %[[REG:.*]] - ; SAHF: lock cmpxchgq - ; SAHF-NEXT: seto %al - ; SAHF-NEXT: lahf - %v = extractvalue { i64, i1 } %cx, 0 %p = extractvalue { i64, i1 } %cx, 1 - %call = call i64 @dummy() - ; PUSHF: callq dummy - ; PUSHF-NEXT: pushq %[[REG]] - ; PUSHF-NEXT: popfq - ; SAHF: callq dummy - ; SAHF-NEXT: pushq - ; SAHF: addb $127, %al - ; SAHF-NEXT: sahf - ; SAHF-NEXT: popq - %sel = select i1 %p, i64 %call, i64 %bar - ; CHECK-NEXT: cmovneq - ret i64 %sel - ; CHECK-NEXT: addq $32, %rsp - ; CHECK-NEXT: popq %rdi - ; CHECK-NEXT: popq %rsi - ; CHECK-NEXT: popq %rbp } define i8* @f11() "no-frame-pointer-elim"="true" { - ; CHECK-LABEL: f11: - ; CHECK: pushq %rbp - ; CHECK: movq %rsp, %rbp - ; CHECK: .seh_setframe 5, 0 - ; CHECK: leaq 8(%rbp), %rax +; ALL-LABEL: f11: +; ALL: # %bb.0: +; ALL-NEXT: pushq %rbp +; ALL-NEXT: .seh_pushreg 5 +; ALL-NEXT: movq %rsp, %rbp +; ALL-NEXT: .seh_setframe 5, 0 +; ALL-NEXT: .seh_endprologue +; ALL-NEXT: leaq 8(%rbp), %rax +; ALL-NEXT: popq %rbp +; ALL-NEXT: retq +; ALL-NEXT: .seh_handlerdata +; ALL-NEXT: .text +; ALL-NEXT: .seh_endproc %aora = call i8* @llvm.addressofreturnaddress() ret i8* %aora } define i8* @f12() { - ; CHECK-LABEL: f12: - ; CHECK-NOT: push - ; CHECK: movq %rsp, %rax +; ALL-LABEL: f12: +; ALL: # %bb.0: +; ALL-NEXT: movq %rsp, %rax +; ALL-NEXT: retq %aora = call i8* @llvm.addressofreturnaddress() ret i8* %aora } @@ -205,5 +286,4 @@ define i8* @f12() { declare i8* @llvm.returnaddress(i32) nounwind readnone declare i8* @llvm.addressofreturnaddress() nounwind readnone declare i64 @llvm.x86.flags.read.u64() - declare void @llvm.va_start(i8*) nounwind diff --git a/external/llvm/test/CodeGen/X86/x86-repmov-copy-eflags.ll b/external/llvm/test/CodeGen/X86/x86-repmov-copy-eflags.ll index ad39888572..1c168e8ee3 100644 --- a/external/llvm/test/CodeGen/X86/x86-repmov-copy-eflags.ll +++ b/external/llvm/test/CodeGen/X86/x86-repmov-copy-eflags.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s | FileCheck %s +; RUN: llc -verify-machineinstrs < %s | FileCheck %s target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" target triple = "i686-pc-windows-msvc18.0.0" @@ -39,15 +39,12 @@ declare void @g(%struct.T*) ; CHECK: leal 8(%esp), %esi ; CHECK: decl (%esp) -; CHECK: seto %al -; CHECK: lahf -; CHECK: movl %eax, %edi +; CHECK: setne %[[NE_REG:.*]] ; CHECK: pushl %esi ; CHECK: calll _g ; CHECK: addl $4, %esp -; CHECK: movl %edi, %eax -; CHECK: addb $127, %al -; CHECK: sahf +; CHECK: testb %[[NE_REG]], %[[NE_REG]] +; CHECK: jne attributes #0 = { nounwind optsize } attributes #1 = { argmemonly nounwind } diff --git a/external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/Inputs/ppc64_elf_module_b.s b/external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/Inputs/ppc64_elf_module_b.s new file mode 100644 index 0000000000..f47ddbd413 --- /dev/null +++ b/external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/Inputs/ppc64_elf_module_b.s @@ -0,0 +1,42 @@ +# This module contains a function with its local and global entry points +# exposed. It is used by the ppc64_elf test to verify that functions with +# different TOCs are called via their global entry points. + .text + .abiversion 2 + .file "ppc64_elf_module_b.ll" + .section .rodata.cst4,"aM",@progbits,4 + .p2align 2 # -- Begin function foo +.LCPI0_0: + .long 1093664768 # float 11 + .text + .globl foo + .p2align 4 + .type foo,@function +.Lfunc_toc0: # @foo + .quad .TOC.-foo_gep +foo: +.Lfunc_begin0: + .cfi_startproc + .globl foo_gep +foo_gep: + ld 2, .Lfunc_toc0-foo_gep(12) + add 2, 2, 12 + .globl foo_lep +foo_lep: + .localentry foo, foo_lep-foo_gep +# %bb.0: + addis 3, 2, .LC0@toc@ha + ld 3, .LC0@toc@l(3) + lfsx 1, 0, 3 + blr + .long 0 + .quad 0 +.Lfunc_end0: + .size foo, .Lfunc_end0-.Lfunc_begin0 + .cfi_endproc + # -- End function + .section .toc,"aw",@progbits +.LC0: + .tc .LCPI0_0[TC],.LCPI0_0 + + .section ".note.GNU-stack","",@progbits diff --git a/external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/ppc64_elf.s b/external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/ppc64_elf.s new file mode 100644 index 0000000000..b43c84caf5 --- /dev/null +++ b/external/llvm/test/ExecutionEngine/RuntimeDyld/PowerPC/ppc64_elf.s @@ -0,0 +1,47 @@ +# RUN: rm -rf %t && mkdir -p %t +# RUN: llvm-mc -triple=powerpc64le-unknown-linux-gnu -filetype=obj -o %t/ppc64_elf.o %s +# RUN: llvm-mc -triple=powerpc64le-unknown-linux-gnu -filetype=obj -o %t/ppc64_elf_module_b.o %S/Inputs/ppc64_elf_module_b.s +# RUN: llvm-rtdyld -triple=powerpc64le-unknown-linux-gnu -verify -check=%s %t/ppc64_elf.o %t/ppc64_elf_module_b.o + + .text + .abiversion 2 + .file "Module2.ll" + .globl bar # -- Begin function bar + .p2align 4 + .type bar,@function +.Lfunc_toc0: # @bar + .quad .TOC.-.Lfunc_gep0 +bar: +.Lfunc_begin0: + .cfi_startproc +.Lfunc_gep0: + ld 2, .Lfunc_toc0-.Lfunc_gep0(12) + add 2, 2, 12 +.Lfunc_lep0: + .localentry bar, .Lfunc_lep0-.Lfunc_gep0 +# %bb.0: + mflr 0 + std 0, 16(1) + stdu 1, -32(1) + .cfi_def_cfa_offset 32 + .cfi_offset lr, 16 +# rtdyld-check: (*{4}(stub_addr(ppc64_elf.o, .text, foo) + 0)) [15:0] = foo_gep [63:48] +# rtdyld-check: (*{4}(stub_addr(ppc64_elf.o, .text, foo) + 4)) [15:0] = foo_gep [47:32] +# rtdyld-check: (*{4}(stub_addr(ppc64_elf.o, .text, foo) + 12)) [15:0] = foo_gep [31:16] +# rtdyld-check: (*{4}(stub_addr(ppc64_elf.o, .text, foo) + 16)) [15:0] = foo_gep [15:0] +# rtdyld-check: decode_operand(foo_call, 0) = (stub_addr(ppc64_elf.o, .text, foo) - foo_call) >> 2 +foo_call: + bl foo + nop + addi 1, 1, 32 + ld 0, 16(1) + mtlr 0 + blr + .long 0 + .quad 0 +.Lfunc_end0: + .size bar, .Lfunc_end0-.Lfunc_begin0 + .cfi_endproc + # -- End function + + .section ".note.GNU-stack","",@progbits diff --git a/external/llvm/test/MC/ELF/cfi-large-model.s b/external/llvm/test/MC/ELF/cfi-large-model.s index 790d75eee1..13e64d3f28 100644 --- a/external/llvm/test/MC/ELF/cfi-large-model.s +++ b/external/llvm/test/MC/ELF/cfi-large-model.s @@ -1,26 +1,52 @@ // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu -large-code-model %s \ -// RUN: -o - | llvm-readobj -s -sd | FileCheck %s +// RUN: -o - | llvm-readobj -s -sd | FileCheck --check-prefix=CHECK-X86 %s +// RUN: llvm-mc -filetype=obj -triple powerpc64le-linux-gnu -large-code-model %s \ +// RUN: -o - | llvm-readobj -s -sd | FileCheck --check-prefix=CHECK-PPC %s -// CHECK: Section { -// CHECK: Index: -// CHECK: Name: .eh_frame -// CHECK-NEXT: Type: SHT_X86_64_UNWIND -// CHECK-NEXT: Flags [ -// CHECK-NEXT: SHF_ALLOC -// CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x0 -// CHECK-NEXT: Offset: 0x40 -// CHECK-NEXT: Size: 56 -// CHECK-NEXT: Link: 0 -// CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 8 -// CHECK-NEXT: EntrySize: 0 -// CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 14000000 00000000 017A5200 01781001 |.........zR..x..| -// CHECK-NEXT: 0010: 1C0C0708 90010000 1C000000 1C000000 |................| -// CHECK-NEXT: 0020: 00000000 00000000 00000000 00000000 |................| -// CHECK-NEXT: 0030: 00000000 00000000 |........| -// CHECK-NEXT: ) +// REQUIRES: x86-registered-target +// REQUIRES: powerpc-registered-target + +// CHECK-X86: Section { +// CHECK-X86: Index: +// CHECK-X86: Name: .eh_frame +// CHECK-X86-NEXT: Type: SHT_X86_64_UNWIND +// CHECK-X86-NEXT: Flags [ +// CHECK-X86-NEXT: SHF_ALLOC +// CHECK-X86-NEXT: ] +// CHECK-X86-NEXT: Address: 0x0 +// CHECK-X86-NEXT: Offset: 0x40 +// CHECK-X86-NEXT: Size: 56 +// CHECK-X86-NEXT: Link: 0 +// CHECK-X86-NEXT: Info: 0 +// CHECK-X86-NEXT: AddressAlignment: 8 +// CHECK-X86-NEXT: EntrySize: 0 +// CHECK-X86-NEXT: SectionData ( +// CHECK-X86-NEXT: 0000: 14000000 00000000 017A5200 01781001 |.........zR..x..| +// CHECK-X86-NEXT: 0010: 1C0C0708 90010000 1C000000 1C000000 |................| +// CHECK-X86-NEXT: 0020: 00000000 00000000 00000000 00000000 |................| +// CHECK-X86-NEXT: 0030: 00000000 00000000 |........| +// CHECK-X86-NEXT: ) + +// CHECK-PPC: Section { +// CHECK-PPC: Index: +// CHECK-PPC: Name: .eh_frame +// CHECK-PPC-NEXT: Type: SHT_PROGBITS +// CHECK-PPC-NEXT: Flags [ +// CHECK-PPC-NEXT: SHF_ALLOC +// CHECK-PPC-NEXT: ] +// CHECK-PPC-NEXT: Address: 0x0 +// CHECK-PPC-NEXT: Offset: 0x40 +// CHECK-PPC-NEXT: Size: 48 +// CHECK-PPC-NEXT: Link: 0 +// CHECK-PPC-NEXT: Info: 0 +// CHECK-PPC-NEXT: AddressAlignment: 8 +// CHECK-PPC-NEXT: EntrySize: 0 +// CHECK-PPC-NEXT: SectionData ( +// CHECK-PPC-NEXT: 0000: 10000000 00000000 017A5200 04784101 |.........zR..xA.| +// CHECK-PPC-NEXT: 0010: 1C0C0100 18000000 18000000 00000000 |................| +// CHECK-PPC-NEXT: 0020: 00000000 00000000 00000000 00000000 |................| +// CHECK-PPC-NEXT: ) +// CHECK-PPC-NEXT: } f: .cfi_startproc diff --git a/external/llvm/test/MC/Mips/unsupported-relocation.s b/external/llvm/test/MC/Mips/unsupported-relocation.s new file mode 100644 index 0000000000..151a559671 --- /dev/null +++ b/external/llvm/test/MC/Mips/unsupported-relocation.s @@ -0,0 +1,13 @@ +# RUN: not llvm-mc -triple mips-unknown-linux -filetype=obj %s 2>%t +# RUN: FileCheck %s < %t + +# Check that we emit an error for unsupported relocations instead of crashing. + + .globl x + + .data +foo: + .byte x + .byte x+1 + +# CHECK: LLVM ERROR: MIPS does not support one byte relocations diff --git a/external/llvm/test/Transforms/DeadArgElim/musttail-caller.ll b/external/llvm/test/Transforms/DeadArgElim/musttail-caller.ll new file mode 100644 index 0000000000..981326bba0 --- /dev/null +++ b/external/llvm/test/Transforms/DeadArgElim/musttail-caller.ll @@ -0,0 +1,16 @@ +; RUN: opt -deadargelim -S < %s | FileCheck %s +; PR36441 +; Dead arguments should not be removed in presence of `musttail` calls. + +; CHECK-LABEL: define internal void @test(i32 %a, i32 %b) +; CHECK: musttail call void @foo(i32 %a, i32 0) +; FIXME: we should replace those with `undef`s +define internal void @test(i32 %a, i32 %b) { + musttail call void @foo(i32 %a, i32 0) + ret void +} + +; CHECK-LABEL: define internal void @foo(i32 %a, i32 %b) +define internal void @foo(i32 %a, i32 %b) { + ret void +} diff --git a/external/llvm/test/Transforms/InstCombine/gep-addrspace.ll b/external/llvm/test/Transforms/InstCombine/gep-addrspace.ll index aa46ea6713..4a4951dee7 100644 --- a/external/llvm/test/Transforms/InstCombine/gep-addrspace.ll +++ b/external/llvm/test/Transforms/InstCombine/gep-addrspace.ll @@ -32,3 +32,22 @@ entry: ret void } +declare void @escape_alloca(i16*) + +; check that addrspacecast is not ignored (leading to an assertion failure) +; when trying to mark a GEP as inbounds +define { i8, i8 } @inbounds_after_addrspacecast() { +top: +; CHECK-LABEL: @inbounds_after_addrspacecast + %0 = alloca i16, align 2 + call void @escape_alloca(i16* %0) + %tmpcast = bitcast i16* %0 to [2 x i8]* +; CHECK: addrspacecast [2 x i8]* %tmpcast to [2 x i8] addrspace(11)* + %1 = addrspacecast [2 x i8]* %tmpcast to [2 x i8] addrspace(11)* +; CHECK: getelementptr [2 x i8], [2 x i8] addrspace(11)* %1, i64 0, i64 1 + %2 = getelementptr [2 x i8], [2 x i8] addrspace(11)* %1, i64 0, i64 1 +; CHECK: addrspace(11) + %3 = load i8, i8 addrspace(11)* %2, align 1 + %.fca.1.insert = insertvalue { i8, i8 } zeroinitializer, i8 %3, 1 + ret { i8, i8 } %.fca.1.insert +} diff --git a/external/llvm/test/Transforms/JumpThreading/header-succ.ll b/external/llvm/test/Transforms/JumpThreading/header-succ.ll new file mode 100644 index 0000000000..859d44cff2 --- /dev/null +++ b/external/llvm/test/Transforms/JumpThreading/header-succ.ll @@ -0,0 +1,99 @@ +; RUN: opt -S -jump-threading < %s | FileCheck %s + +; Check that the heuristic for avoiding accidental introduction of irreducible +; loops doesn't also prevent us from threading simple constructs where this +; isn't a problem. + +declare void @opaque_body() + +define void @jump_threading_loopheader() { +; CHECK-LABEL: @jump_threading_loopheader +top: + br label %entry + +entry: + %ind = phi i32 [0, %top], [%nextind, %latch] + %nextind = add i32 %ind, 1 + %cmp = icmp ule i32 %ind, 10 +; CHECK: br i1 %cmp, label %latch, label %exit + br i1 %cmp, label %body, label %latch + +body: + call void @opaque_body() +; CHECK: br label %entry + br label %latch + +latch: + %cond = phi i2 [1, %entry], [2, %body] + switch i2 %cond, label %unreach [ + i2 2, label %entry + i2 1, label %exit + ] + +unreach: + unreachable + +exit: + ret void +} + +; We also need to check the opposite order of the branches, in the switch +; instruction because jump-threading relies on that to decide which edge to +; try to thread first. +define void @jump_threading_loopheader2() { +; CHECK-LABEL: @jump_threading_loopheader2 +top: + br label %entry + +entry: + %ind = phi i32 [0, %top], [%nextind, %latch] + %nextind = add i32 %ind, 1 + %cmp = icmp ule i32 %ind, 10 +; CHECK: br i1 %cmp, label %exit, label %latch + br i1 %cmp, label %body, label %latch + +body: + call void @opaque_body() +; CHECK: br label %entry + br label %latch + +latch: + %cond = phi i2 [1, %entry], [2, %body] + switch i2 %cond, label %unreach [ + i2 1, label %entry + i2 2, label %exit + ] + +unreach: + unreachable + +exit: + ret void +} + +; Check if we can handle undef branch condition. +define void @jump_threading_loopheader3() { +; CHECK-LABEL: @jump_threading_loopheader3 +top: + br label %entry + +entry: + %ind = phi i32 [0, %top], [%nextind, %latch] + %nextind = add i32 %ind, 1 + %cmp = icmp ule i32 %ind, 10 +; CHECK: br i1 %cmp, label %latch, label %exit + br i1 %cmp, label %body, label %latch + +body: + call void @opaque_body() +; CHECK: br label %entry + br label %latch + +latch: + %phi = phi i32 [undef, %entry], [0, %body] + %cmp1 = icmp eq i32 %phi, 0 + br i1 %cmp1, label %entry, label %exit + +exit: + ret void +} diff --git a/external/llvm/test/Transforms/MergeFunc/inline-asm.ll b/external/llvm/test/Transforms/MergeFunc/inline-asm.ll new file mode 100644 index 0000000000..370d3c56f0 --- /dev/null +++ b/external/llvm/test/Transforms/MergeFunc/inline-asm.ll @@ -0,0 +1,53 @@ +; RUN: opt -mergefunc -S < %s | FileCheck %s + +; CHECK-LABEL: @int_ptr_arg_different +; CHECK-NEXT: call void asm + +; CHECK-LABEL: @int_ptr_arg_same +; CHECK-NEXT: %2 = bitcast i32* %0 to float* +; CHECK-NEXT: tail call void @float_ptr_arg_same(float* %2) + +; CHECK-LABEL: @int_ptr_null +; CHECK-NEXT: tail call void @float_ptr_null() + +; Used to satisfy minimum size limit +declare void @stuff() + +; Can be merged +define void @float_ptr_null() { + call void asm "nop", "r"(float* null) + call void @stuff() + ret void +} + +define void @int_ptr_null() { + call void asm "nop", "r"(i32* null) + call void @stuff() + ret void +} + +; Can be merged (uses same argument differing by pointer type) +define void @float_ptr_arg_same(float*) { + call void asm "nop", "r"(float* %0) + call void @stuff() + ret void +} + +define void @int_ptr_arg_same(i32*) { + call void asm "nop", "r"(i32* %0) + call void @stuff() + ret void +} + +; Can not be merged (uses different arguments) +define void @float_ptr_arg_different(float*, float*) { + call void asm "nop", "r"(float* %0) + call void @stuff() + ret void +} + +define void @int_ptr_arg_different(i32*, i32*) { + call void asm "nop", "r"(i32* %1) + call void @stuff() + ret void +} diff --git a/external/llvm/test/Transforms/MergeFunc/weak-small.ll b/external/llvm/test/Transforms/MergeFunc/weak-small.ll new file mode 100644 index 0000000000..64f1083174 --- /dev/null +++ b/external/llvm/test/Transforms/MergeFunc/weak-small.ll @@ -0,0 +1,16 @@ +; RUN: opt -mergefunc -S < %s | FileCheck %s + +; Weak functions too small for merging to be profitable + +; CHECK: define weak i32 @foo(i8*, i32) +; CHECK-NEXT: ret i32 %1 +; CHECK: define weak i32 @bar(i8*, i32) +; CHECK-NEXT: ret i32 %1 + +define weak i32 @foo(i8*, i32) #0 { + ret i32 %1 +} + +define weak i32 @bar(i8*, i32) #0 { + ret i32 %1 +} diff --git a/external/llvm/tools/llvm-config/CMakeLists.txt b/external/llvm/tools/llvm-config/CMakeLists.txt index 335c8c3fbb..f59402ac4b 100644 --- a/external/llvm/tools/llvm-config/CMakeLists.txt +++ b/external/llvm/tools/llvm-config/CMakeLists.txt @@ -65,18 +65,17 @@ endif() # Add the dependency on the generation step. add_file_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.cpp ${BUILDVARIABLES_OBJPATH}) -if(CMAKE_CROSSCOMPILING) - set(${project}_LLVM_CONFIG_EXE "${LLVM_NATIVE_BUILD}/bin/llvm-config") - set(${project}_LLVM_CONFIG_EXE ${${project}_LLVM_CONFIG_EXE} PARENT_SCOPE) +if(CMAKE_CROSSCOMPILING AND NOT LLVM_CONFIG_PATH) + set(LLVM_CONFIG_PATH "${LLVM_NATIVE_BUILD}/bin/llvm-config" CACHE STRING "") - add_custom_command(OUTPUT "${${project}_LLVM_CONFIG_EXE}" + add_custom_command(OUTPUT "${LLVM_CONFIG_PATH}" COMMAND ${CMAKE_COMMAND} --build . --target llvm-config --config $ DEPENDS ${LLVM_NATIVE_BUILD}/CMakeCache.txt WORKING_DIRECTORY ${LLVM_NATIVE_BUILD} COMMENT "Building native llvm-config..." USES_TERMINAL) - add_custom_target(${project}NativeLLVMConfig DEPENDS ${${project}_LLVM_CONFIG_EXE}) - add_dependencies(${project}NativeLLVMConfig CONFIGURE_LLVM_NATIVE) + add_custom_target(NativeLLVMConfig DEPENDS ${LLVM_CONFIG_PATH}) + add_dependencies(NativeLLVMConfig CONFIGURE_LLVM_NATIVE) - add_dependencies(llvm-config ${project}NativeLLVMConfig) -endif(CMAKE_CROSSCOMPILING) + add_dependencies(llvm-config NativeLLVMConfig) +endif() diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ExpectedExceptionData.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ExpectedExceptionData.cs index cf92ff4ff9..097d6e5449 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ExpectedExceptionData.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ExpectedExceptionData.cs @@ -30,16 +30,19 @@ namespace NUnit.Framework.Api /// ExpectedExceptionData is a struct used within the framework /// to encapsulate information about an expected exception. ///
+ [System.Serializable] public struct ExpectedExceptionData { #region Fields + [System.NonSerialized] private Type expectedExceptionType; private string expectedExceptionName; private string expectedMessage; private MessageMatch matchType; private string userMessage; private string handlerName; + [System.NonSerialized] private MethodInfo exceptionHandler; #endregion diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ResultState.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ResultState.cs index 9b0a7d516d..b152f8ac5e 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ResultState.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Api/ResultState.cs @@ -30,6 +30,7 @@ namespace NUnit.Framework.Api /// skipped or was inconclusive. The Label provides a more /// detailed breakdown for use by client runners. ///
+ [System.Serializable] public class ResultState { private readonly TestStatus status; @@ -135,5 +136,14 @@ namespace NUnit.Framework.Api string s = status.ToString(); return label == null || label.Length == 0 ? s : string.Format("{0}:{1}", s, label); } + + public override bool Equals (object o) + { + if (!(o is ResultState that)) + return false; + + return that.status.Equals(this.status) + && that.label.Equals (this.label); + } } } diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Attributes/ExpectedExceptionAttribute.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Attributes/ExpectedExceptionAttribute.cs index 790cd1ce7a..fef199f171 100755 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Attributes/ExpectedExceptionAttribute.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Attributes/ExpectedExceptionAttribute.cs @@ -140,6 +140,7 @@ namespace NUnit.Framework /// a success result only if the expected exception is thrown. /// Otherwise, an appropriate failure result is returned. /// + [System.Serializable] public class ExpectedExceptionDecorator : ICommandDecorator { private ExpectedExceptionData exceptionData; diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/ParameterSet.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/ParameterSet.cs index 68277ebebc..72d1151c4f 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/ParameterSet.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/ParameterSet.cs @@ -31,6 +31,7 @@ namespace NUnit.Framework.Internal /// other selected parameters needed for constructing /// a parameterized test case. /// + [System.Serializable] public class ParameterSet : ITestCaseData, IApplyToTest { #region Instance Fields diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/PropertyBag.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/PropertyBag.cs index 75579577db..2cbc77d0c8 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/PropertyBag.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/PropertyBag.cs @@ -15,6 +15,7 @@ namespace NUnit.Framework.Internal /// may be of any type. Null values are not permitted, since /// a null entry represents the absence of the key. /// + [System.Serializable] public class PropertyBag : IPropertyBag { #if CLR_2_0 || CLR_4_0 diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestCaseResult.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestCaseResult.cs index 481180277f..b0d4054075 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestCaseResult.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestCaseResult.cs @@ -6,6 +6,7 @@ namespace NUnit.Framework.Internal /// /// Represents the result of running a single test case. /// + [System.Serializable] public class TestCaseResult : TestResult { /// diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestResult.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestResult.cs index 4958f01b17..4a8ea2eb46 100755 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestResult.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestResult.cs @@ -30,6 +30,7 @@ namespace NUnit.Framework.Internal /// /// The TestResult class represents the result of a test. /// + [System.Serializable] public abstract class TestResult : ITestResult { #region Fields diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestSuiteResult.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestSuiteResult.cs index 6c09a318ea..2f38bd502d 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestSuiteResult.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Results/TestSuiteResult.cs @@ -6,6 +6,7 @@ namespace NUnit.Framework.Internal /// /// Represents the result of running a test suite /// + [System.Serializable] public class TestSuiteResult : TestResult { private int passCount = 0; diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedFixtureSuite.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedFixtureSuite.cs index d9257992d1..b4157a0b38 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedFixtureSuite.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedFixtureSuite.cs @@ -29,8 +29,10 @@ namespace NUnit.Framework.Internal /// ParameterizedFixtureSuite serves as a container for the set of test /// fixtures created from a given Type using various parameters. /// + [System.Serializable] public class ParameterizedFixtureSuite : TestSuite { + [System.NonSerialized] private Type type; /// diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedMethodSuite.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedMethodSuite.cs index 444fbe3ac0..0f59b81ac4 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedMethodSuite.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/ParameterizedMethodSuite.cs @@ -30,10 +30,13 @@ namespace NUnit.Framework.Internal /// ParameterizedMethodSuite holds a collection of individual /// TestMethods with their arguments applied. /// + [System.Serializable] public class ParameterizedMethodSuite : TestSuite { + [System.NonSerialized] private MethodInfo _method; private bool _isTheory; + private bool _isGenericMethod; /// /// Construct from a MethodInfo @@ -44,6 +47,9 @@ namespace NUnit.Framework.Internal { _method = method; _isTheory = method.IsDefined(typeof(TheoryAttribute), true); +#if CLR_2_0 || CLR_4_0 + _isGenericMethod = method.ContainsGenericParameters; +#endif this.maintainTestOrder = true; } @@ -66,10 +72,8 @@ namespace NUnit.Framework.Internal if (_isTheory) return "Theory"; -#if CLR_2_0 || CLR_4_0 - if (this.Method.ContainsGenericParameters) + if (_isGenericMethod) return "GenericMethod"; -#endif return "ParameterizedMethod"; } diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/Test.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/Test.cs index 7009c4f1ab..957aab3b06 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/Test.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/Test.cs @@ -32,6 +32,7 @@ namespace NUnit.Framework.Internal /// /// The Test abstract class represents a test within the framework. /// + [System.Serializable] public abstract class Test : ITest, IComparable { #region Fields @@ -66,6 +67,7 @@ namespace NUnit.Framework.Internal /// /// The System.Type of the fixture for this test, if there is one /// + [System.NonSerialized] private Type fixtureType; /// @@ -76,11 +78,13 @@ namespace NUnit.Framework.Internal /// /// The SetUp methods. /// + [System.NonSerialized] protected MethodInfo[] setUpMethods; /// /// The teardown methods /// + [System.NonSerialized] protected MethodInfo[] tearDownMethods; #endregion diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestAssembly.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestAssembly.cs index b50ec7dddf..95bd25030e 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestAssembly.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestAssembly.cs @@ -30,6 +30,7 @@ namespace NUnit.Framework.Internal /// TestAssembly is a TestSuite that represents the execution /// of tests in a managed assembly. /// + [System.Serializable] public class TestAssembly : TestSuite { /// diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestFixture.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestFixture.cs index d5c6d73605..958eb573de 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestFixture.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestFixture.cs @@ -31,6 +31,7 @@ namespace NUnit.Framework.Internal /// TestFixture is a surrogate for a user test fixture class, /// containing one or more tests. /// + [System.Serializable] public class TestFixture : TestSuite { #region Constructors diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestMethod.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestMethod.cs index b6bbbdf30d..b7535caa05 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestMethod.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestMethod.cs @@ -38,6 +38,7 @@ namespace NUnit.Framework.Internal /// the Test interface might make it easier to process exceptions /// in an object that aggregates a TestMethod in the future. /// + [System.Serializable] public class TestMethod : Test { #region Fields @@ -45,6 +46,7 @@ namespace NUnit.Framework.Internal /// /// The test method /// + [System.NonSerialized] internal MethodInfo method; /// diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestSuite.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestSuite.cs index be1b78f5e4..84d3d55459 100755 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestSuite.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Internal/Tests/TestSuite.cs @@ -37,6 +37,7 @@ namespace NUnit.Framework.Internal /// /// TestSuite represents a composite test, which contains other tests. /// + [System.Serializable] public class TestSuite : Test { #region Fields diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/ObjectList.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/ObjectList.cs index 3ba6f0e0de..a7ff4eedae 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/ObjectList.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/ObjectList.cs @@ -32,6 +32,7 @@ namespace NUnit /// these classes but only implements what is needed within the framework. /// #if CLR_2_0 || CLR_4_0 + [System.Serializable] public class ObjectList : System.Collections.Generic.List { /// diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/CommandLineOptions.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/CommandLineOptions.cs index edf1445b91..9d479508ac 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/CommandLineOptions.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/CommandLineOptions.cs @@ -54,6 +54,10 @@ namespace NUnitLite.Runner private string outFile; private string includeCategory; private string excludeCategory; + private string android; + private string ios; + private string webassembly; + private string remote; private bool error = false; @@ -171,6 +175,50 @@ namespace NUnitLite.Runner } } + /// + /// Gets the android app to run the tests from + /// + public string Android + { + get + { + return android; + } + } + + /// + /// Gets the iOS app to run the tests from + /// + public string iOS + { + get + { + return ios; + } + } + + /// + /// Gets the WebAssembly process to run the tests from + /// + public string WebAssembly + { + get + { + return webassembly; + } + } + + /// + /// Gets the Remote process to run the tests from + /// + public string Remote + { + get + { + return remote; + } + } + /// /// Gets a flag indicating whether each test should /// be labeled in the output. @@ -349,6 +397,18 @@ namespace NUnitLite.Runner InvalidOption(option); } break; + case "android": + android = val; + break; + case "ios": + ios = val; + break; + case "webassembly": + webassembly = val; + break; + case "remote": + remote = val; + break; default: InvalidOption(option); break; diff --git a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/TextUI.cs b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/TextUI.cs index 8709c0945b..1baa07a832 100644 --- a/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/TextUI.cs +++ b/external/nunit-lite/NUnitLite-1.0.0/src/framework/Runner/TextUI.cs @@ -60,7 +60,7 @@ namespace NUnitLite.Runner private ITestAssemblyRunner runner; - private FinallyDelegate finallyDelegate; + private FinallyDelegate finallyDelegate = new FinallyDelegate(); public bool Failure; @@ -86,17 +86,36 @@ namespace NUnitLite.Runner { // Set the default writer - may be overridden by the args specified this.writer = writer; - this.finallyDelegate = new FinallyDelegate(); - this.runner = new NUnitLiteTestAssemblyRunner(new NUnitLiteTestAssemblyBuilder(), this.finallyDelegate); this.listener = listener; } - void TopLevelHandler(object sender, UnhandledExceptionEventArgs e) - { - // Make sure that the test harness knows this exception was thrown - if (this.finallyDelegate != null) - this.finallyDelegate.HandleUnhandledExc(e.ExceptionObject as Exception); - } + void TopLevelHandler(object sender, UnhandledExceptionEventArgs e) + { + // Make sure that the test harness knows this exception was thrown + this.finallyDelegate.HandleUnhandledExc(e.ExceptionObject as Exception); + } + + ITestAssemblyRunner DefaultRunner () + { + return new NUnitLiteTestAssemblyRunner(new NUnitLiteTestAssemblyBuilder(), this.finallyDelegate);; + } + +#if MONODROID_TOOLS + ITestAssemblyRunner AndroidRunner (string app) + { + return new Xamarin.AndroidTestAssemblyRunner(app); + } +#elif MONOTOUCH_TOOLS + ITestAssemblyRunner iOSRunner (string app) + { + throw new NotImplementedException (); + } +#elif WASM_TOOLS + ITestAssemblyRunner WebAssemblyRunner (string app) + { + throw new NotImplementedException (); + } +#endif #endregion @@ -112,6 +131,36 @@ namespace NUnitLite.Runner this.commandLineOptions = new CommandLineOptions(); commandLineOptions.Parse(args); + if (runner == null) { +#if MONODROID_TOOLS + if (!string.IsNullOrEmpty (commandLineOptions.Android)) { + runner = AndroidRunner (commandLineOptions.Android); + } else if (!string.IsNullOrEmpty (commandLineOptions.Remote) && commandLineOptions.Remote.StartsWith ("android:")) { + Xamarin.AndroidRemoteRunner.App = commandLineOptions.Remote.Substring (8); + runner = DefaultRunner (); + } else +#elif MONOTOUCH_TOOLS + if (!string.IsNullOrEmpty (commandLineOptions.iOS)) { + runner = iOSRunner (commandLineOptions.iOS); + } else if (!string.IsNullOrEmpty (commandLineOptions.Remote) && commandLineOptions.Remote.StartsWith ("ios:")) { + // Xamarin.iOSRemoteRunner.App = commandLineOptions.Remote.Substring (4); + // runner = DefaultRunner (); + throw new NotImplementedException (); + } else +#elif WASM_TOOLS + if (!string.IsNullOrEmpty (commandLineOptions.WebAssembly)) { + runner = WebAssemblyRunner (commandLineOptions.WebAssembly); + } else if (!string.IsNullOrEmpty (commandLineOptions.Remote) && commandLineOptions.Remote.StartsWith ("wasm:")) { + // Xamarin.WebAssemblyRemoteRunner.App = commandLineOptions.Remote.Substring (5); + // runner = DefaultRunner (); + throw new NotImplementedException (); + } else +#endif + { + runner = DefaultRunner (); + } + } + if (commandLineOptions.OutFile != null) this.writer = new StreamWriter(commandLineOptions.OutFile); @@ -312,7 +361,7 @@ namespace NUnitLite.Runner string resultFile = commandLineOptions.ResultFile; string resultFormat = commandLineOptions.ResultFormat; - this.Failure = (result.ResultState == ResultState.Failure); + this.Failure = (result.ResultState.Equals(ResultState.Failure) || result.ResultState.Equals(ResultState.Error)); if (resultFile != null || commandLineOptions.ResultFormat != null) { diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CSharp.Core.targets b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CSharp.Core.targets similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CSharp.Core.targets rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CSharp.Core.targets diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.Scripting.dll similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.Scripting.dll diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.dll.REMOVED.git-id diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.amd64.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.amd64.dll.REMOVED.git-id new file mode 100644 index 0000000000..e411fd0f35 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.amd64.dll.REMOVED.git-id @@ -0,0 +1 @@ +e376a20352bb547c881ad93a9529ad3fedd5fae9 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.x86.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.x86.dll.REMOVED.git-id new file mode 100644 index 0000000000..5bfe674ea2 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.DiaSymReader.Native.x86.dll.REMOVED.git-id @@ -0,0 +1 @@ +5ebef7fe292eaf725025142a43f8f667700cf003 \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Managed.Core.targets b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Managed.Core.targets similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Managed.Core.targets rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Managed.Core.targets diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.VisualBasic.Core.targets b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.VisualBasic.Core.targets similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.VisualBasic.Core.targets rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.VisualBasic.Core.targets diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Roslyn.Compilers.Extension.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Roslyn.Compilers.Extension.dll new file mode 100755 index 0000000000000000000000000000000000000000..d79b72bfd045a38c8c8725ead06e20a06ed6bca0 GIT binary patch literal 28024 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 literal 0 HcmV?d00001 diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Buffers.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Buffers.dll new file mode 100755 index 0000000000000000000000000000000000000000..b6d9c7782d275b83f4d0883f9bfb2d65fc5c9e9f GIT binary patch literal 27992 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%0DV%GL-7lfv$jZq+l3F9+zd% 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 literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Collections.Immutable.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Collections.Immutable.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Collections.Immutable.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Collections.Immutable.dll.REMOVED.git-id diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Memory.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Memory.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Memory.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Memory.dll.REMOVED.git-id diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Numerics.Vectors.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Numerics.Vectors.dll.REMOVED.git-id new file mode 100644 index 0000000000..06dc54564a --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Numerics.Vectors.dll.REMOVED.git-id @@ -0,0 +1 @@ +ce46d5be85cdee1a3c0ef5bc22c8e1772d0d0d98 \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Reflection.Metadata.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Reflection.Metadata.dll.REMOVED.git-id similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Reflection.Metadata.dll.REMOVED.git-id rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Reflection.Metadata.dll.REMOVED.git-id diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Runtime.CompilerServices.Unsafe.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Runtime.CompilerServices.Unsafe.dll similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Runtime.CompilerServices.Unsafe.dll rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Runtime.CompilerServices.Unsafe.dll diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Text.Encoding.CodePages.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Text.Encoding.CodePages.dll.REMOVED.git-id new file mode 100644 index 0000000000..de61fbee4d --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Text.Encoding.CodePages.dll.REMOVED.git-id @@ -0,0 +1 @@ +d0f7adf9ece445759892e6848e1aad45189be58e \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Threading.Tasks.Extensions.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Threading.Tasks.Extensions.dll similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/System.Threading.Tasks.Extensions.dll rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Threading.Tasks.Extensions.dll diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe.config similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe.config rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe.config diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.exe rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe.config similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.exe.config rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe.config diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.rsp b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.rsp similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.rsp rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.rsp diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.exe rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe.config similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.exe.config rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe.config diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.rsp b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.rsp similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.rsp rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.rsp diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.exe rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe.config similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.exe.config rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe.config diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.rsp b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.rsp similarity index 100% rename from mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.rsp rename to external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.rsp diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id index fa9490d13c..c75d7bdb9b 100644 --- a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id @@ -1 +1 @@ -b22c1001f96026227bfeb8765492c71397b2a250 \ No newline at end of file +aeff3ad988e25fea8dc3561277a0ceab064f8fc7 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll index 434b4afa55e968e447b24b2c0a06a8cf56248198..d052cdc15b48bca477938c8320b92d9619984651 100755 GIT binary patch delta 9483 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 Q?Rnb?WMbW%e{At zt024e{R|R=(WodSAOc1c4g4SoSU`!XuNZ%*G5#<{B}$CZ8Zq&kebhqWZ04NvotZOd zX3pF>+ZMW`O(21|m4E^rZM9>Ie2uvUvd~sc?giBaVi8{Z2K257{2<-FVwHDY8ss~kqDnL*{8i>~*mLn%d_JVz2{wxqTn3{Kve#P#jmsSpIZ9&~d-AB3;cMEVW8|H1AKJ__1?E{tDu zXn-5|IE))|qkz+kcff%cXJEF?bQzXlby2<>eDe&v8rU)euL8DShHW!2?=L|Fiu!E8 z&KdY7;L;iLM-b2=UI5-8unT+%8n_*Yhegc%L;Jg+FiJhGH5A>lm}8bKuVw! zf5ha z__^0wdUl_$KloB}^`=>$E`0o`dv@DnPi-lE4QDsYptfwP@aWUsO%_W2%vq4Zo)9@pRH3X>5|4qRoxrropDL9F9bq zBTMAwSW9zbbZK)q*0L18B`xw|DBrft5=!faoUrEyUw3a!j}nCdt^Qf@Vq-)WVnF8jJY@|lL0ZkoKVsbENN}H05p{fPtST1r1y)UYl z_$hNRb2#%(=6GhJ_9yrGfkWFr>$?5e|G!blT}N1zIn^!vSZ@Yn=TB?Jztc( z{pGG-E0ecw<-9LB1%n#i0TsLLepqLeQ6SDHqEo4 zdR-^k%v8&-$DJY`IBd!(S#PslLz_huBtcB0nn|?5f)x}cu5DE$SQON<8*w(R0~u_@ z8Fb(Cqy4M`7a05nP^?+H77#TOY23v747Ws^k#ndsTDK;Dxb@bOm2^y+3!S3;Mpu5 MlapKtem}_bAE{sJ0{{R3 literal 0 HcmV?d00001 diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Roslyn.Compilers.Extension.pkgdef b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/Roslyn.Compilers.Extension.pkgdef new file mode 100755 index 0000000000000000000000000000000000000000..2861040c40ff948ee00cf3335a6002247e6e5019 GIT binary patch literal 2244 zcmeH}U279j5QgVk@IOe%rCE~QP0b1c(|mwvu(U-H{&n@4Id0R$ zv`8p;Bg>vWXU?4Yc;}sy{QU7rs&Xnh&r04%CTrFsIgwZrnK4d~6-aL6LQ<(q6InxA z5=xCRX7`9$z+Pmtm@$$U$RcD7PWg-hx<|Y|=fBHmc`8rjm9(WIT|9r0OPR_XTgx5K z71ON9YgwSPL^qK$)B9>;fW?a0smcdzETqS{v>eXlBf96(mm&Urau~Ai$~*Gy^LXgK zMG-JME6(d)T6V@8b6oefQ&dF$I*{MaX?eU4fuxa2h?vEAMBB9ZGGcBS7kwg4n1wun%_1bJF?GyWGjiwZwo~OYcik*28LmWF+xXWA>MkX+hA2^M^A6iTo9{f;8;JzS7IC~@Hxh} z2Y0TJ&WXsQgS9JXysis1qYjZPbJs|xye0oGId>n6owvVba)PBz$GEfGT~qqZEza#8 zbo#FU%0ARv@@`+2=hf=FnND~wM-RD~%liK3 SWcfd0my?H}y3IlTAMp#4&|`!E literal 0 HcmV?d00001 diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe index 46a80f814e05c3e9afdaa8e3f30c8778a22a792f..e9570ff3da0fadd505b31b78669c475b278e345d 100755 GIT binary patch delta 32539 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̾Y;ABM45 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 delta 32692 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%0AFG^p)WJP&>+Y}+w0WlvaU|ANmEcOSmlLrfCxVTG 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 A)&Kwi delta 19832 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%0D{{x*@gk7+yteuHCr(6Vk!9|rN32CV? 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 diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csi.exe index dc8e396b545d103f9232fca058ea58bf9ae84858..c5c518bc95b642d6c45b8b9ce1df63e59a3a9f7d 100755 GIT binary patch delta 1765 zcmX|B3pkWn7(V|$?gld^qEy33*BSpm7fcvKluIUxZZ7T27?rgnG__h8Y%6p#e!>%N zk(6#vjj**stt^YwPT31B<)Oy2Ms31&+cVkS?>yh-yzlp&|3BY3&zZ=W$SBA)$V=N- ztUBU=h*TF`(USA3-&`!-vH(~Qpa=mtLRcX44ZR=|L5QgGQRt78}{bWA}c50nr znIUDbBp;Cje70GJ?vBu(7~fEfY| zWpZZZM)oZWC4(hc2wBdn3~c|6C+{)z^_6 zk^1PCwnAW@;OzeH)QcASj8#_twKf(myw&0m`t#x+=jeOZTf-U$NN5-eV}GcQ1+ei2 z6g@R7u)%-^bqQ1r`n8d=H-4RS zqgtCz&kJR^&Mv99-ujrXaty$QUEz91D2 z8TbNLCxSFUCv-NBh=ZDHJ3)dwG^GOouPxk$nmSL1s4(L~hh#dfTE4DW$12}BI^g-s zo@W1!b3dIoSYdtF!2ZPjD-`lVwaVe3C4J=PVcVcf4;5uTh2id7GVQ_>GkV#6n-2pr z)r=!_9wm4yLX?d1CGxAn0h=j7n5p3YG|#q)9`sePBKApKr?mM-Ay4A?&C69a>&oKO zjUEN)e##PUII}k|S=sKsL$++^rnD)u;;y&y;p+DI)eFEaCXd$?p!)_wq$Es zYhq5Go2fvw+3bo#Z*bzt%$_^njB!uvzJ0yjy!`a85|RCw^3>;=z~O<##mmlKaevmA zRF&HmkU|Oa>9HA^YQ8IPd@){J9CP*6`p0gP`~FW7LwvZu`}W_q{A{tZ!0CpMc7fHc zobCJ2xAz`XH;C$+U7mjMbuXHpOHJt?D?`n&r`jSDbm-~pl(UJVXU1(Im&+NQe??2H zt1XTdEkl1jkPw1K;6&!iY_IsSz)ix9`&$D;#+dgyyvI`pcTU>8+1bVT!FOcsBHN>= zQMAHoy=K^s#>Q|y#=+UR2baUUnm*=+ae}IF30*DaL z`OYvEMF3_74T`!fMUjt~@u!%Y3qeCL$k|~+&gg=A&j6h4#Ez1^nOFQKi#EGB`7 zYYOYGYcm<9VAr|wi_2p^mOqcYxWwK&JmbU;-Al&goXOz2ewNpTstWnunWTm4jw{)c z*zw)5$$lf2E`PUQ4qO)zQDT0;FXu>U_o6w@UFTeHU-xN-_&lZL0 zR;H2tkUCeFM)jsn$stsS} zK3`k@r(*l$p8D|0iWcr(?gNn`f|gFNT68GbJAFLK^>jxuE!L4k+kM<#ky-Cj^sGYo z)o^sc^1jv9l)?>*a5>V83|^3k5@ClzRnOT?%qyU44$(uCcs z?V){FP}`{yx1TY3`|iuEhHW{L=EFe?pSFBm+u!35esdCEmAWA6W0HKJGGFK~n0>6k EKXt&8IsgCw delta 1741 zcmX|B3s6%>6y2AQ075V!lA>Ti0jY$9m*j;c@(~cnPohu>U-3hD0Z|GCYD+6MfS5rG zN_ePbbVN%^1%xU=Qw0&RMG%WZ5hJY>Ek#sX`G|;=+6{Di-|TsJ&pCT%XZOyI?jPM> zly7$9yYdQ6fg`d-Q|U!I^{u9F1??RdfDiy90DvNbhB#0HAR{N@7@kBl;*LZSIS`A8 zN+c2y5D1C6xXl^>OSk|5fNEN3ie?S~*#r-9(T9>O5aa`WH2DCD*-7Stt$<<11@UvZ z2Q1OQq-ZI0zkvg)qo?H@sv;Zb&Ne2SyFs3vbnbOVf*D%XYwwW_zQwuOuMj{Je>=WO`#;1 zy9Glifrnp0H%apW4;e7waEHSPH6xKmccG^YRVkwgw}8qs*w>+{js&5ji}?SM_n!Sn z!rG*WWNn$@ANFp2R!+9N*L+D62AXnb%`z6eQ&+|iVPl(OM>m5V5CHFyY;w#;HleZg zqT+xIUL+E&w!4u5g2!}08i{ZwLG}j=i5E;4I~1UR3wS^Rkq^A#hXR4#Y0)M`i2=@> zFi&$#0$@WU4#Y6WffB?45lDc49#Fu6K^B7^1@tIju{hW{81$iVCWM?4=B8Q+aE8Jf zBB=6-E;}E@Sx;k)k}aJ9fb9w7tM!Z}FA)uDUhJ6WJkk>E^--Po;N1%HI@fDavRu~_ zZr#1F#TGNF`yK@=L-iWRJR9e%$THI2&bIX>hcdrb`0|HijoPXFj%cmzhC4@N?zi3` zglwtmw$GaG>62$$B)8t5Y%;%`TCRDQv$`ySSk=%TUcPoD#z3f2>ULEIInpq@QOcu@ zUDkg5tH=9Xcg~D&b6{$JNzClV0w=QDmacBzMky`RF_?8%CSIu;lCYr=~AEEwuIjC^uqR-!!u0r>6*Pn22E6j5v- zMT&`R&s^WY4b{W)@s{fwik*#APkC;uXuSbvUzkSUmdq^tY~3yrHMYa`T3M4llaKNw zsF3H4@_9T=$i>8By+7wEZH2nE2wiT!@PC=dLoqbwe?o-L5rovo!4+Cb2tXG=Ad$#4 z67mi;pUWA?AV~oO`Sx_;u+L@{EB=SH@EtWHhQj{(mc@PQ&&r}2(<`4n;E;o#$*X8= zMo9OsPk#N~{}O6d7QU4IQarVN8#du6@;K2TO`r8Y|D3+>O2gUNq5kEQ4vbm1zNr(o zOWlWV?p>@^_s{xjH>||BZyk92=ff0sTG(5P%?|Gz#(^|hM5f?%W36GDk8C2Md>=c9 z7-Qdrd$N*e@xvA4of(JZGB>Bpe22!8Ma00Wv2}q&wBI9@cHLms?@vf6({^F(tPjuh z-_xBbrBnZzWmH)|s@mHjMQKz^5A}NW6b(VFD8MWi0lM3`)`#0;UXvfRR$cqsr6{DW zIPoSN($@w%>i#Wm)~sBT0E9Tbg|rf4;j@^6^EM!?Dbn zzx>A5s?#^CbTqGTC?ltQCuO8nhqF`9rASZQdBjCS`f3gDzY;oa8Vq|no__g`Y@o?C z+RAo(mio(8V;SoOnu4L!N|BCG1=`8Nst3sAR^=>Px# diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/vbc.exe index bd89d41669379ea35839efdb5c29b780f53a6370..3fa99a790f23d94b9798523d5029049410f0d21f 100755 GIT binary patch delta 19473 zcma)k2Ygh;_W#_ncWXA;-DEe(Zjw#EsU)FBq=a5XdPjO_4_rv3CBP;GDFRBoNJpC3 zrHCl85=EK~^q~}`C}05;o+83i_J;AsP??ssW9}Qj&{k%R(N?CmDtOsqWM*jwka`mq#lJxinY%O-Y-_49kcE4y z639m6ESddORr^y)>YYQ((p*5lA43Z?0A>lmFN;!|519G7I13)iZjV|3GRLhp#7(@d zL?FJUjerN>h((kF;b3IOOKKBsiX7!2EjiGX@b*3DrP`&DNaRg2Y$8*NP8feq7vw!?KY$aJAx{~ za3_}_ohPf9LW@O3@0I|1v{;RSuDBTk4*-@R11GE9fGO&OfN6?~HWsx9z-f<7RC@w3 z1$q$=32W);4m&M+GR>F;0WqWbexN(^WP_v(fFZ`Tfl69hA1Kd;DLM7FvXzG17mU(= z0D=AhtN6-W+|(5h&J4)3fbBsV}hV+FBtuOC_8fC zK%}K)5qbU)=p|DrugE)Vi33byOzBV%$gg3zd2FZcX-c-DsKY_IZKs(jGvvFKWjAH^ zJT1=TNf`m5IuamT6f+fd6zQs?0X-_xGAlD)RL5uoOk0Gp+MlLz!Z@witO^sf$IUsw z-{$xQbFT0YEz+V2le89=T;XADqD9S~3>%0Rqa;tp9TmhOmaHe|r$AKl1~94QGoszv zUQ1GV3Ak!0K#u6n#M-=O8JUg|S~ja1V#GC-a$@j0pp;J|eGfqCbgj(VLMYSrSo4R> z0AooR0;4x`7&2MuOz=|mwgHF;r^bPD!rg&cbQ1%!>E;Q{(QiThR-xZ2aZ~4N?QMl| zu|Tt<_yYZ}1!q;Ow6(V6d>9gBbsqE*k`jgm9wlT*2+1r{=W_#6U;**11H`}r?H8MG zD78v;&!JVdKClolf~lBlq^s0&P@QKw7N>ss4Pq1L9%l2&z0JuA1^lYEp)srm}ed=;q*Ql#>rNa_^roZTfn zrCqnDHeCUJnYt3t!o+er)}VWWdqQ9pse8zE#bZ4ko90omBUw%x(%jb5HYKn|>lyAz zLsbzNi)FDbn1R;&Tv2U<2023JJ(kvLkB27;>$Dx=85Zt@N0Lj|Yu|;ZJD-M0>*;W^ zY2oW}gXW89nY0n?GEqfIQnIZj#TZ&C_fizgv6y8kut}R0;q~96mSZh>s$Pw21vYDM zL^QK+Ca-OJ!@vgZuZY5A?u1mblR`$5S&CAr%#MU*Q7UQHsGa1#_ATX-C0ZXQ%nMtjt_01U` z^>v`UQ;9V}r&OqpgyV>yZ`r6*mejx=Qm+9hS%mi74~x!x6Ur>U7ZD3pPNT1Ip?m8@ED9{B|K z(oab=24|`TKzLK&*zhcYBihr^(Ml?zZ)k5vdwpe?WWJO0VDS2l&DeniDgUSTYjh(F zP>rDh_Kb;4Jcf3bIVj+=`Xx}2)}STu6@c}07}n>P+WeTjUdM@f0)T6BEH_r-y1CYp zrww)WMpj+4&!gawh0FqX=}Fux$b9CYIdnXzXazi~^ps|b&CS=#e0IK~;`zdo?Nv&; zC`hxX5GFpS`X~@JWKwK&OzBhF*w|DYWtPU~1W{rvn^Qf~=G160@C^}sYjM;XA68w{lO24xEJ~jZ;Rq@$vD2bD%jH_!d}ZuKFErf%7_kf$)pk zI&W46%^h4*SJZ`Ib83wGJ>;Qd2sxu?-&Jp{LNQQxYZ1O^p|6(VYm)ms7xG}CYJYwp34L}B>zFGlWSw*gTf8%Vtjh?Fz9~mFcd}$sLuv>;1AF)o71M= zB*f~ps<*VfgwDdBT3JH>$iIjg?hIFN6JmGT)jLePkkDRWT9!Z2BM2Blq?mAfc2D#z z&cdw7Mpe{C`5OzZwAKCwb{bFGbK8mK)Y={3<2F0Z`nV~k z826E+P8fGga)a>^Xk@aU&R5(GTw?hsG|9%S(w#pueC@JOOlTb9ECgJ3;82eydZ_Bz z2o<lviR&F)QMj_Toyi`o`a{WgBT42cl1fUU$BEYN0L9bh6nQwUc-B|6 zeko1sqd6W8z%^=5r^EB7hzV8VDs8MMTlE)0^hs&8tUX7+fQyr+ZAL-cobqGVfUMS*r~4IsE79IeZzLpWzoZw$*6YW+3=YH8HKZR7q@C7WZH)IVQ`9ISMO&bD zt4sQ+d?2aXw`z9YK|~I_8(`f&iB0iUL^5*)mU%fe>o!F^MgiAaW)ui(wJ90dPQG4f zLC~;hc#5_?qiNjTVa=goNqkshIWk#xtLd7QnPQ?qiKeA%wFa3X4Bx`TA5V| zD=Lrk`&LxLh00knDMTk;|7=dIH$5h8LJIwq@mqW zeH6M>QK4P(H0*goCj+sZdcEg4Uv~hHboXo9bA0|5|Cf32bBaWdR+JO3nR6rSt4&=` zT5fJMrn6(NA8=f*|DLKqD&nm9fT#*j=Z>kHQ{rIVYt9CtImHUQJEw%#&1s(oISoF- z1R2HhwO|Jx=IO~%J;Hb%)n^A0riOuL+KvYPth&gN_@2o9N5!ClwG!Rhro1>UI?q+V zKAu9OQ1K|q4ZAml>md1$5K@;ELfF##7t8THjL9WUv7C2bAKAa@-h)k$`V&psi+Smp zcc<|lA5KT>dk>A8_8va^VcNg*DBiyOd*jV5&BC#Y;@vC%!Mb=8hvL00KM$4WO#a{2 z2vIJ_0y#uJ6Rfz@HirecE?X8GD>r2U5c6K8Dzbl|-oJkzU4J)6!Z2OBo3ivVfT zUTSGngx6jVG-}|f-x+CIXk(;(#G^ggsACRoj8h|7arFdkP7aN1>XULwtV_CO3VlTP3gy)~kD z-42l-MkOb^9Yu#CC4jAzblUXp(nioXS*Cs5IJ#v!Fq7xty9C_-NCV#ck&^Kbk1d5A z_B>8)lkte2+_yK29zg{Mc*nk-u}w1-^j^1?)Fdr&Bgg_=C~<5rE*x4ITJhc6k9$vT ze3KTz^$xJ{QCOddE^!Jw#-Ts_XJ0sb8AViKW#PS@3X22Z!p4N3iC5U$5pIvdZif?G z%JH{2ew@QcIHwWEZ`&V*&4k2hQ3@;MmamA@qU>#X`6?Og!zpGLIe(KtxHa;34CZnqIXXC&I3=+glMzM9oT{*-Fyi!q<_)&Ri|7W~j%ey; z3j(gN>6R{WMu7|1w2CZazxaIK}3#<0hY_&<67PU)Q8cV6S#7zw*@s1nw(TJYDHVa!3N1AUZ zk?Azv!7w9f{vi?k#z!zBk~%nHq0R(MkdsBm{OohGn+X)HS7S(Lc2tmNl*|&xZFb)XiZ`L@dkWb6Ln?O)?qXir_n$>LH`0yn8oqHHQa0D}k~~=An*s zQ;g>$#uj!Yi3TuLm=;8+*ZI!GyIFfb33~WRuqTBaisOm7fty?Hp_DW_h<}}j@i||6 zg!gBz(*x6IVY!GOE#+S%f>cf_@Q|8{HBfYyni{E7RKOzGt(f4M_?h@N$4>g}EBQm) zqu9Ki%!Gz-C4OjI56aCdp!zRRMfiF%mdmDdnTe@r7r|P4NM>U>Y$MDTr+jE*u-J;r z@(`>J_HgSa^2wPH9N;qyW)QSI3>j4Xl`N38(WiN14%8`bg(+d!?s z{R@PF+8g)h2%WVH_h$fxw@404c5JgaSh;5>9z*AAty(k=)+B7R^scx9n8x}?y$v|U zbzBnIXk!iVi7BM#p{*{u<*~(0Rmt2Jkeb zX>6DOTfoM!oW=^w)K|M?vj3=(Osop+W{bEOYLL$y&dU~wRm$4{dm4{R5}T(rXzA&^ z6|PI{6%MDtUGO>7!U->rCwM9O8sG$x;52c8D6y1ef>Sws(zifV*yq|4Ej`9hfj4Ad zYOl0R4vJB~At=jIj!RflX*VrR*d1#7vHRxUuyOeO=_Gm2W--vwDDzG-*SywfuaA)hlTY%C^L~2{VMvT z?S$nAlL)r45Nz!rcp{ph9n$~ot2&8dqFde^yE4?Tz>MNHB&%DX=(SM2pIdwQX>Dny znYLoAt3e?u-Ccxp+hm<$25o7PchvQy@2oQ07vkMc{LyM)pM|K%q#vzjb~Z$vjQhD5>D%m(kk}a0K#;N(ywJ6d0`AuS=v|(-9_jUUA3K{HUu2BVzezpwuHK$Ab&~WicU{`dPt#ODz(zSR|*a*lza_XddKLHM^wUY~$^?$z5eDU@xbTeihs2 ze!_+WAph($>~lYFYkrryno^6}v?P@n%UMSGVOdH(R+xJudL0ena2j@V> z=J9c~V?#JqWy(x53hmhF5cPa2Q4>Sdcbs}8L|M4zES+h8R%+g8a9lr3sG02wcK{G!n0cEcHS(5t3%j7*q=C*lHy$JE@2X@$kM5^QN_~3 z>}-hYq&?9tBdf}_ODJUEXN%x9!Ooy`bQXSDY1duP@928WfgKR9m%I}Q(KvDP?QGj>rR{n>0`h&rQv(7tJ0 zt#4#lkUi0$USlrX5u(m$o(@f6ady}|HYATUH1=8a!mtIbmQ(u}P3dBGJVfo&W_IvK zh`t4EJsW_RnMgl&HAQ=-gBo5H8EMv(Bbi?XR(Do-`|%+2FMAX2qP+GvEz2iBpux)g3d!N&hWo zXcDro9qQ;6&T1DzlJ{8CyOOw0-a^ve%i7iP;9D(wfK&TTgToB=TGpLY`xt4~vYvIC z+LTV-Ao1R3L+f~G{Q(=tsTFL2v(WwlTNt7?I$PWKv1dZmL#`rWKl_7I8jCk{vhQaD z@B)}Z-6FZa{V>~cml|vTh+W~7z7jtrH5^4W|0d1aIZSv-i|Op`NNe;Ii)=W>Yoq-%%d4Zb^3EB-l9VFh9J|bUda|BlzlAh@ zje5?0j%DA+`(eAnp0j_;`g3XplH?WpcWe@;^mae7shpyU@{au{wwzOxPKWJ3vwz>C z`7b8%LQuut@!`PxFXrH+K9qm4I8M#yoHoVzp_=KW~*V6PMs50 zCM)bW_Hj#c^PJE)ED6-tA!?)h2FNB-Pqrf&7NZnNkR zwNk6>O8%_pu%@dwNM4D;y56K+g*VN=+Uc29{|KzmO+Q>K#xJ}C)(BgGz<#k3X9J+b zMtkt=%|<8uzxX#INlN-6*T*@CUK6reW`>{UjSix*!gf38@&0{40SAWq?mux7r_5Ck z*T#~eH*w|`SQ;D>S(%COcl?AO24BKKh&qUY=KsYvuuowV&oPNXQaaB^*4G>nA+jXw zRszmdy19r5GDo9-AO8L~|L-~wc=sZANa7C3tOqt01A7ZGpwrcVv0 zAtf4(5E`pK;!bc*WVwJ6D+H8TYwqq7JVHOfMUlN=An7|8fXpozxMdvZEEHqivaU%w z;dMUJ3_(>p)6Emqm1rVFochRI9fu-xG?t>GbM$#V4<~dE;~#OB^8oA>Gv zM`V)}5w7UHocHmZ&>QQ4Ixmx__a+qaB}V-JE7ATl^=_y9{S?QPow!9@spSjXAYT>)PNj{h@jMqh%oXD6L6>|P2GOS zD4Nzfyq^Cv){%e%YQ3}tx4$Ha>5$kmJ}Do^kdm(Y2~w{Pzn8B|?}hbJk?D~h${pH_ zMJustCn{`nt1P@!vS*AA-(gwv#0$;V3Hp7&aSkD2@nKz{3(20G}%^ zWx<_jP|ePX4=23HL=+HKC5J535Q{{ZA>vc%H28#_$BbR z)^DNnu=fXU;a|)w)%tD%daO){k%n81LL@Y;LZWod>=H605nsgQLuWF}koq_hg_}XP zEDG<+1yaqB-c4yJTw^&(Ge8<;p|mlkrBEb2gr}6wl9)V5@PR*>^^|fF#|b^97gH7r z1Em%5YlIjfA}oT9kUW-MLJD&`_5#`*`-E)vV#*O=gtW?aPAHUO!*bb8)-d%4;U>Ff zy&?=0g4FRqp`ZI#fx>uGm?>4IGI5c#GRX*tA6|;pQc+@&FhY3NY=llkqD^eXomJtC*IGtB<{l_47r;EI8uB;8e*I*(gaNtX9_#*3fn22 z3OeS9HB$eW1%T7j9usS&ovvl#Kxu>jDY2&%jM*qw^3M8jLql-Fz93iX-JG& z&KC`Fb~!^l1I~Dn0$v1tr(7hSawf`&GI4?#ym6xZxGfWc<|zsr!6T6`zho+sSBqU@ zJIY1!6eQqGsVAQ59FRUJI|O=MbqMsB>JaGh)FIGgX=nM#gu!x8c})xs2XcWjLZ-MX zh^`@QvfPs|+Di7O(r-`GzB{=TXgDWLHms92NnYi$VUsi+_z0;g zX_~Z1el+ohVJBSt%TO)1ijGp&@zt?Oz7?CQ>=ZNn`N~c?H+iq{4CmK~i=&J}BX%-z zB$n=z(cP37;TwAdQgV?gSS&rj%f$n%8tb(WMo_K1%tj?{R$gN@-rdUE?69&|7{Ycb z2Y?@e&i!1vk4r!1(vLZR2sb^1cQb_1GfRyyDlyk+7HhnXjSi9QIK(4~*eS%rrgp{{ z@x`bIgT@-6Q)(aMKe^GbxzY37=y`6mMxbUfVq1I>Q6pbXdlmZ6q`YH1B#=YnMYG|E z@iK4w8*lq3Z~G^2J4I-0+$+=yTVUakK;u3noJ9AB_yg5yHp(EFf>VTOBi`&IODDtM z&!RI-qxo1z^U;jvqZ!RdvxM`{$#;Z+X%T`y&9quvYTkv6srAh=O%cxt^8sfex0mp? zOL*HQye;V~$S~5Re0qk%2sW_`+vR(~WD`av?Gt{KS7Od)@(dV{a$%P#!;ua0$oRKS z<3*R@eZYr3#{pXzzA>GXFAIt0n|uKahR?KJ0}qJv+}f-`{`<0+>d0jc*-Oq`)|{OH zY|DNF?2141$Ys6pdODX4W*q@XvBv=a!C@)WT-uRAEhDPf3`?y@aGzMtCcCxF!Oc)9 zXW*B71pOQ)bJ&{0;T(?Qu!_SEI6P}u%$|0A$8n}CX8(5i0lP#dD`clN@E0T7>bQwG z!#Nbp)T!UhbvPVuuF`G}P8~SU-8yVBQ=*0gc8%HySRHj1@OTt+EN1a;f7BMT!r?{^ z{rGM849i{)nTPP!99D3+m&5bkm$d0aYV)()x9yCLv)uxGz%1fRR<}<9{J~G0+%yaD z+EjvnacI}ZKlIo5RGgH03F$a1^$}75`vFg91AwQqLBKQEaNrqiB=9UY0eBXh2s|6# zPo@G+2A<1GfakJDfHz>%fHz<>fakL^;Q4G8@Wt9^L%ZX3Ny4zU!WnJUuykRXwixg& zZP&1ef_`UO{W;|*aBt|i7~vBsD#9>8_o*j{XE>L!jc zrHh~8x@k7u5TecL;{E1bYlgoYv1{U#ms2B-Bw0rkzj&i#&AYqyzUUpYKvP#Hnm$qd zg5a#UruAIe+gOZ~xU+J+_R>oK=t;6saO#XHvY$C85g2b`Q2xYGIo0Tg6e#|3OY|v5 z(K*RE#p;*9bX3lER8|_u>=X`*C8L0^KLlsx6p{Bj{WT~{#o_BaX6ofTIIR(8|Q zt!WY|IOZB0bIp`8mG}WZ31YOYwZ34YXkwyhk8oBdQc{^5Mk8f{qhb*svR%)Hx%l=O znKd`g=$8>0JN^VfaQMm0+ziCtLG1U66%fKW%<4iW)JIY<>Y}o>q6&&h}SR}pcHn+B~ z&e}dB1+!Z`9*Pl~%5FTBL@XR|{DO;*h2jsJm~sT7Vkh1R+U;>Z0}?3CVASrcQ-VcC zEZ;bT$;9X68iz-z2t@GcwvX^DhlnA$&;wn6M^IaMlq`E+Evn-EVZ5obBwUAPp1?p_@|`5tkPPlgZf)$W5?tyH1kU zI!((7bUW(RFSPbodmmK zC4`#r6$4(oyV7l)C-KQE7Hm8uW%0-{6jZ_?;T*BzcD+LQO;z(7x_#*Sl3XH<|8nOK)o; zC-D1hR7Hf|U}l(wZ%pX3&Y5-LewoMJ6r`z#geu~0fftnP`t7D*vWEJF!aB3R&Pb%u zh&j?bMMwI7lm{cYuNWp`5~Auld`32kCcEDlW^%R;`RlAKG&_a|?UW{bS&`Ru`Y$6> zO>m8Nk~jnUM(i3Rmr=pZG1Px+tU){nRXk7s@o7P86cEA8YcOOk2A^~t1HL>rm~4I- zo`uF+*HLf>HL}?J5@hIuVqrHLFynWv)~W7^G9o$KAq6N4;6AVCcU^uPE}LQ9h1UAa z)lbGff!t?6<*KN`kTBk*4zZ$USH;G0f)XVwD1q9~o7~u{@W+g1GnE-$ok-G6R1~^5 zHlpS~B-%v~6$>$6`W`7MP9G#xGwia0l}h5JTuj>&#GUxuowGwY1&AX}BEar^34%KI?_ zVPiavD$bD=d!4kKow7=M_?b+aS~KzuaRX*S<#h~qMxv-jFqzgrg+XVi|JwyVNWJAf zK42vaSV#JxXfZG&Tp5mdAbs*_uavP%whm`>lAvnS8c76qtb9G|I4?-A@ycA;Lf53h z>p}%ynnb%1>$($?p6(Cej{0xsBrVMrb~}ET#TO7(0IY}CZCiW;h-a<{L5gQ$tUhHS zCeBe}G|pclwv`{X9b4VPPVK*Vnhi%WVJ zmrN@z+4aY>Lj-kXUO{oesK$9C3dR(SC>}9#WaE*IiW`q^);Moelg1-PH*11_jhYoV z)MhBN1`o=lb18H_>mF$Ir)VUXo?ZG=e-Ac;Fb-CA#6N;P6iJ#Xs z$F_F&snc)Wy6?;fzr-(1t^F?7zNm57u!3=4#q8X^qtlG0_@aZcOC_!+n9!|<2)rGx zSs&xtMiTua;D#5{cp74CFJybSY4NWlMMSGVeYF1JK&Qv9U7fuC(Z&|7$16<>LQGSa z5EHh;*A02zy5(4#KU$^jn-l(tZj)dJ;r{AGx9I&uJNils&Hwsd&A#p7C>zpl*;zOt zk(&OQrB!chpa^&e-lLVaf7=A%Yb}3!GXCcteYb1UeJo77v^^P5%=vg{O|S`mahu1Q z?MmL!O$g@WmkT7&**PS@Biu;b3s^C(QLHiW5x~aa8Ufx2NJoM@60byyaUYEqq%#VJ z8$(KTlhD-&_hQx%ZZ^aB3IZ!)rTACOCZRRnb1}d6%g#i>x6ASBRjE2pHt*$s+sp26 zvCHxLFG6*m@yR_?{23#XHqJPE>fMbML+)!+{(E?fB@KQWKVaV2p6j-Bf9=ZUpLSL6 znP>M~cVEABd)Sz>$)gS)b{(E5zdSQ7>t88fbq}mrF|4Az`M*}zey}_%U4qbU{eS@DOV~$r%{dtMw@O^D= z^sYI!yI`|p)r?P*eTOzLu%DUtu2(%Rj%MVL@I&6OdZhL#zI~b@fM`g3IIc z&Mz2reaE;xzveyJtyiy{sckRj_ZgZ}vF+P6^DA19s16}XHT{rGk>EpuvM`8)Y!LwG5pOLul=)2?I$w_{W1LIOHDrstjaDMx47o93p=K?-}yoO7nN_$ z-#+%Cs_QeZ2a?`8mR*p0y{#zW$FN)G3f{cAf+sIdk^18Owp)(e@Or(s z|9kEGKXJ<}UO3Ti`O(wQt@izpG-7?GHL2IU%L|i6b_py!Uez+^^X`YFE;X*pzYh*x z{e9iWWBo6Gv2MF_y=&R`Pd!#Pcf#+>hNLx}y8iZocNR=781m@6hd!-6@`QU=EB7g1 z_RsS(dW?LhZ0Hvy?<9|Wd9yg;)LUZ4^hd5VoH~E2z0apJcJ>-PX2ECcs`DNTUwWV0 z*+D(mb>5xX?%jRgKXUTz#6}-4D?QfoX84LT-!{qGU$wTg_~6c6j?WT}|D8_P4y9{j zzjQlh z583;w@8sIl(V2PPzb300EnIy94LeLZq_rH9! z(el?eJo`db*YlUPjG3E07=Q5LP48MRe7pK=#qO8d%L^;FdKP7DUy}5*cTxWLPxXE8 zs;#UlHK+RrU4nDFJn&`3MB{V#{+*Y%OFbHvzq_V9Yta0*zWx*5 zWy2nDetErJ$HCvuX;L*-8+alctirt&avQ@*V#_K6Y&= z$~~TwSGh`i;>)U_=%QNwUrRkNN%l9}@Z%`QH2tY^F8>w~wBiyOP)pyBol zht7V}|EKZ0o^9LaxouB3X70c+n9BZ>$d@)Ufh4`qnzLF%&v<2VfKvU*^zUeE83iz86B9= z;nTMkZP=6e_5WFM>$EL#>_$`9$sbPn{lK0lM~{8+{K0o7&Z}^q zZ+zOb__t;1OK-$J*Y~4Or_=;e(=Qxb_~xV2nvYs|e)FaIedD)nT{G&3=YM}|Pv7T% zN>@7j!fRSQIQ>uW_eH0Kt9`m{xzO^vTLT7FE#EZOQ}oC@^VQL_A9=8B_!Ithyizju EKOX%KCIA2c delta 19566 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 E2fxcQwg3PC diff --git a/ikvm-native/Makefile.in b/ikvm-native/Makefile.in index 1586cab59b..045b4a0330 100644 --- a/ikvm-native/Makefile.in +++ b/ikvm-native/Makefile.in @@ -234,6 +234,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -364,8 +366,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/llvm/Makefile.in b/llvm/Makefile.in index 6d7afd7641..a2097630ff 100644 --- a/llvm/Makefile.in +++ b/llvm/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE := $(or $(CMAKE),$(shell which cmake)) +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -646,11 +650,9 @@ abs_top_srcdir ?= $(abspath $(CURDIR)/..) LLVM_BUILD ?= $(abspath $(abs_top_srcdir)/llvm/build) LLVM_PREFIX ?= $(abspath $(abs_top_srcdir)/llvm/usr) -$(LLVM_BUILD) $(LLVM_PREFIX): - mkdir -p $@ - # -DLLVM_ENABLE_LIBXML2=Off is needed because xml2 is not used and it breaks 32-bit builds on 64-bit Linux hosts -$(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/llvm/CMakeLists.txt | $(LLVM_BUILD) $(LLVM_PREFIX) +$(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/llvm/CMakeLists.txt + mkdir -p $(LLVM_BUILD) $(LLVM_PREFIX) cd $(LLVM_BUILD) && $(CMAKE) \ $(if $(NINJA),-G Ninja) \ -DCMAKE_INSTALL_PREFIX="$(LLVM_PREFIX)" \ @@ -666,7 +668,7 @@ $(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/ll -DLLVM_ENABLE_LIBXML2=Off \ -DHAVE_FUTIMENS=0 \ $(LLVM_CMAKE_ARGS) \ - $(abs_top_srcdir)/external/llvm + $(dir $<) .PHONY: configure-llvm configure-llvm: $(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile) @@ -679,7 +681,7 @@ build-llvm: configure-llvm DESTDIR="" $(if $(NINJA),$(NINJA),$(MAKE)) -C $(LLVM_BUILD) .PHONY: install-llvm -install-llvm: build-llvm | $(LLVM_PREFIX) +install-llvm: build-llvm DESTDIR="" $(if $(NINJA),$(NINJA),$(MAKE)) -C $(LLVM_BUILD) install .PHONY: download-llvm diff --git a/llvm/build.mk b/llvm/build.mk index 0a0b59fddc..25e45f7217 100644 --- a/llvm/build.mk +++ b/llvm/build.mk @@ -12,14 +12,12 @@ LLVM_DOWNLOAD_LOCATION = "http://xamjenkinsartifact.blob.core.windows.net/build- CMAKE := $(or $(CMAKE),$(shell which cmake)) NINJA := $(shell which ninja) -$(LLVM_BUILD) $(LLVM_PREFIX): - mkdir -p $@ - EXTRA_LLVM_ARGS = $(if $(filter $(LLVM_TARGET),wasm32), -DLLVM_BUILD_32_BITS=On -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="WebAssembly",) \ $(if $(STATIC_GCC_LIBS),-DCMAKE_EXE_LINKER_FLAGS="-static") # -DLLVM_ENABLE_LIBXML2=Off is needed because xml2 is not used and it breaks 32-bit builds on 64-bit Linux hosts -$(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/llvm/CMakeLists.txt | $(LLVM_BUILD) $(LLVM_PREFIX) +$(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/llvm/CMakeLists.txt + mkdir -p $(LLVM_BUILD) $(LLVM_PREFIX) cd $(LLVM_BUILD) && $(CMAKE) \ $(if $(NINJA),-G Ninja) \ -DCMAKE_INSTALL_PREFIX="$(LLVM_PREFIX)" \ @@ -35,7 +33,7 @@ $(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/ll -DLLVM_ENABLE_LIBXML2=Off \ -DHAVE_FUTIMENS=0 \ $(LLVM_CMAKE_ARGS) \ - $(abs_top_srcdir)/external/llvm + $(dir $<) .PHONY: configure-llvm configure-llvm: $(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile) @@ -48,7 +46,7 @@ build-llvm: configure-llvm DESTDIR="" $(if $(NINJA),$(NINJA),$(MAKE)) -C $(LLVM_BUILD) .PHONY: install-llvm -install-llvm: build-llvm | $(LLVM_PREFIX) +install-llvm: build-llvm DESTDIR="" $(if $(NINJA),$(NINJA),$(MAKE)) -C $(LLVM_BUILD) install .PHONY: download-llvm diff --git a/m4/Makefile.in b/m4/Makefile.in index 92ded6896c..f6bb7061d0 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -156,6 +156,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -286,8 +288,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/man/Makefile.in b/man/Makefile.in index 6d1f2f8900..6d7c681c8e 100644 --- a/man/Makefile.in +++ b/man/Makefile.in @@ -188,6 +188,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -318,8 +320,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/man/mono.1 b/man/mono.1 index 9bbf294b41..37f786073c 100644 --- a/man/mono.1 +++ b/man/mono.1 @@ -216,17 +216,35 @@ options. This feature is experimental. .TP .I llvmopts=[options] Use this option to add more flags to the built-in set of flags passed to the -LLVM optimizer. The list of possible flags that can be passed can be -obtained by calling the bundled +LLVM optimizer. When you invoke the +.I mono +command with the +.I --aot=llvm +it displays the current list of flags that are being passed to the .I opt -program that comes with Mono. +command. +.I The list of possible flags that can be passed can be +obtained by calling the bundled +.I opt +program that comes with Mono, and calling it like this: +.nf + + opt --help + +.fi + .TP .I llvmllc=[options] Use this option to add more flags to the built-in set of flags passed to the LLVM static compiler (llc). The list of possible flags that can be passed can be obtained by calling the bundled .I llc -program that comes with Mono. +program that comes with Mono, and calling it like this: +.nf + + llc --help + +.fi .TP .I llvm-outfile=[filename] Gives the path for the temporary LLVM bitcode file created during AOT. @@ -249,6 +267,9 @@ Print the architecture the AOT in this copy of Mono targets and quit. Generates all required wrappers, so that it is possible to run --interpreter without any code generation at runtime. This option only makes sense with \fBmscorlib.dll\fR. Embedders can set +.TP +.I depfile=[filename] +Outputs a gcc -M style dependency file. .nf mono_jit_set_aot_mode (MONO_AOT_MODE_INTERP); @@ -638,6 +659,9 @@ mscorlib and assemblies located on the global assembly cache. \fB-V\fR, \fB--version\fR Prints JIT version information (system configuration, release number and branch names if available). +.TP +\fB--version=number\fR +Print version number only. .SH DEVELOPMENT OPTIONS diff --git a/mcs/build/common/Consts.cs b/mcs/build/common/Consts.cs index 09946146d7..847ec5c2dd 100644 --- a/mcs/build/common/Consts.cs +++ b/mcs/build/common/Consts.cs @@ -30,7 +30,7 @@ static partial class Consts { - public const string MonoCorlibVersion = "d0aa6798-834d-11e9-b38a-3b0d70487d01"; + public const string MonoCorlibVersion = "62731146-81CF-4D61-826D-9A8DDED14432"; } #if !NETCORE @@ -41,7 +41,7 @@ static partial class Consts // Use these assembly version constants to make code more maintainable. // - public const string MonoVersion = "6.0.0.316"; + public const string MonoVersion = "6.4.0.137"; public const string MonoCompany = "Mono development team"; public const string MonoProduct = "Mono Common Language Infrastructure"; public const string MonoCopyright = "(c) Various Mono authors"; diff --git a/mcs/build/common/SR.cs b/mcs/build/common/SR.cs index a1e9cb0c1a..80416a5899 100644 --- a/mcs/build/common/SR.cs +++ b/mcs/build/common/SR.cs @@ -41,6 +41,11 @@ static partial class SR return string.Format (CultureInfo.InvariantCulture, resourceFormat, p1, p2); } + internal static string Format(CultureInfo ci, string resourceFormat, object p1, object p2) + { + return string.Format (ci, resourceFormat, p1, p2); + } + internal static string Format(string resourceFormat, object p1, object p2, object p3) { return string.Format (CultureInfo.InvariantCulture, resourceFormat, p1, p2, p3); diff --git a/mcs/build/common/basic-profile-check.cs b/mcs/build/common/basic-profile-check.cs index 6fe2fe7ccf..f4ac1302dd 100644 --- a/mcs/build/common/basic-profile-check.cs +++ b/mcs/build/common/basic-profile-check.cs @@ -41,9 +41,9 @@ class X Version min_mono_version; #if __MonoCS__ - min_mono_version = new Version (5, 19); + min_mono_version = new Version (6, 2); #else - min_mono_version = new Version (5, 10); + min_mono_version = new Version (6, 2); #endif if (version < min_mono_version) diff --git a/mcs/build/deps/linux_net_4_x_System.Data.Linq_test.dll.sources b/mcs/build/deps/linux_net_4_x_System.Data.Linq_test.dll.sources index a9ebddc29d..8d9b312b1d 100644 --- a/mcs/build/deps/linux_net_4_x_System.Data.Linq_test.dll.sources +++ b/mcs/build/deps/linux_net_4_x_System.Data.Linq_test.dll.sources @@ -1,9 +1,10 @@ +../test-helpers/NunitHelpers.cs +Test/BinaryTest.cs +Test/DataContextTest.cs +Test/EntitySetTest.cs +Test/NullProvider.cs +Test/PeopleTable.cs +Test/Providers/DataContextTestBase.cs +Test/SqlServer/MsSqlDataContextTest.cs +Test/TableTest.cs Test/dummy.cs -src/DbLinq.SqlServer/Test/MsSqlDataContextTest.cs -src/DbLinq/Test/BinaryTest.cs -src/DbLinq/Test/DataContextTest.cs -src/DbLinq/Test/EntitySetTest.cs -src/DbLinq/Test/NullProvider.cs -src/DbLinq/Test/PeopleTable.cs -src/DbLinq/Test/Providers/DataContextTestBase.cs -src/DbLinq/Test/TableTest.cs diff --git a/mcs/build/deps/linux_net_4_x_corlib_test.dll.sources b/mcs/build/deps/linux_net_4_x_corlib_test.dll.sources index bd31591ebf..12118d39f5 100644 --- a/mcs/build/deps/linux_net_4_x_corlib_test.dll.sources +++ b/mcs/build/deps/linux_net_4_x_corlib_test.dll.sources @@ -1,3 +1,4 @@ +../../../external/corert/src/System.Private.CoreLib/src/System/Globalization/GlobalizationMode.cs ../../../mono/mini/TestHelpers.cs ../test-helpers/NunitHelpers.cs ../test-helpers/TestResourceHelper.cs @@ -548,3 +549,4 @@ Test/System/UIntPtrTest.cs Test/System/ValueTypeTest.cs Test/System/VersionTest.cs Test/System/WeakReferenceTest.cs +corefx/GlobalizationMode.cs diff --git a/mcs/build/profiles/build.make b/mcs/build/profiles/build.make index efa20c1fa7..b1c9a410e1 100644 --- a/mcs/build/profiles/build.make +++ b/mcs/build/profiles/build.make @@ -147,8 +147,8 @@ export VBCS_LOCATION start-compiler-server: echo Attempting to start compiler server... - ./build/start-compiler-server.sh '$(realpath $(topdir))' '$(realpath $(topdir)/build)/compiler-server.log' '$(COMPILER_SERVER_PIPENAME)' + $(topdir)/build/start-compiler-server.sh '$(realpath $(topdir))' '$(realpath $(topdir)/build)/compiler-server.log' '$(COMPILER_SERVER_PIPENAME)' else start-compiler-server: -endif \ No newline at end of file +endif diff --git a/mcs/build/profiles/net_4_x.make b/mcs/build/profiles/net_4_x.make index 90967d156f..16f8eb528d 100644 --- a/mcs/build/profiles/net_4_x.make +++ b/mcs/build/profiles/net_4_x.make @@ -24,13 +24,4 @@ ENFORCE_LIBRARY_WARN_AS_ERROR = yes ifdef PLATFORM_MACOS MONO_FEATURE_APPLETLS=1 ENABLE_GSS=1 -SOCKETSHTTPHANDLER=1 -endif - -ifdef PLATFORM_LINUX -SOCKETSHTTPHANDLER=1 -endif - -ifdef PLATFORM_UNIX -SOCKETSHTTPHANDLER=1 endif diff --git a/mcs/build/tests.make b/mcs/build/tests.make index 4b25a0e751..de0fbb44b3 100644 --- a/mcs/build/tests.make +++ b/mcs/build/tests.make @@ -41,19 +41,15 @@ $(topdir)/../external/corefx/src/CoreFx.Private.TestUtilities/src/System/Diagnos $(topdir)/../external/corefx/src/Common/src/System/PasteArguments.cs \ $(topdir)/../external/corefx/src/Common/src/System/PasteArguments.Unix.cs -ifeq ($(PROFILE),monodroid) +ifdef MOBILE_PROFILE xunit_src += $(topdir)/../mcs/class/test-helpers/RemoteExecutorTestBase.Mobile.cs else -ifeq ($(PROFILE),monotouch_tv) -xunit_src += $(topdir)/../mcs/class/test-helpers/RemoteExecutorTestBase.Mobile.cs -else -ifeq ($(PROFILE),monotouch_watch) +ifeq ($(PROFILE), xammac_net_4_5) xunit_src += $(topdir)/../mcs/class/test-helpers/RemoteExecutorTestBase.Mobile.cs else xunit_src += $(topdir)/../mcs/class/test-helpers/RemoteExecutorTestBase.Mono.cs $(topdir)/../external/corefx/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.Process.cs endif endif -endif endif # ($(USE_XTEST_REMOTE_EXECUTOR), YES) @@ -62,13 +58,25 @@ xunit_class_deps := xunit_libs_ref = $(patsubst %,-r:$(topdir)/../external/xunit-binaries/%.dll,$(xunit_core)) xunit_libs_ref += $(patsubst %,-r:$(topdir)/class/lib/$(PROFILE)/Facades/%.dll,$(xunit_deps)) -xunit_libs_dep = $(xunit_class_deps:%=$(topdir)/class/lib/$(PROFILE)/$(PARENT_PROFILE)%.dll) +xunit_libs_dep = $(xunit_class_deps:%=$(topdir)/class/lib/$(PROFILE)/%.dll) xunit_libs_ref += $(xunit_libs_dep:%=-r:%) -TEST_LIB_MCS_FLAGS = $(patsubst %,-r:$(topdir)/class/lib/$(PROFILE)/%.dll,$(TEST_LIB_REFS) $(DEFAULT_REFERENCES)) +TEST_LIB_REFS_ALL = $(TEST_LIB_REFS) $(DEFAULT_REFERENCES) + +ifdef TARGET_NET_REFERENCE +# System*, mscorlib references come from the TARGET_NET_REFERENCE dir, others from the profile dir +TEST_LIB_REFS_MONO = $(call _FILTER_OUT,System,$(call _FILTER_OUT,mscorlib,$(TEST_LIB_REFS_ALL))) +TEST_LIB_REFS_SYSTEM = $(filter-out $(TEST_LIB_REFS_MONO),$(TEST_LIB_REFS_ALL)) + +TEST_LIB_MCS_FLAGS = $(patsubst %,-r:$(topdir)/../external/binary-reference-assemblies/$(TARGET_NET_REFERENCE)/%.dll,$(TEST_LIB_REFS_SYSTEM)) +TEST_LIB_MCS_FLAGS += $(patsubst %,-r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/%.dll,$(TEST_LIB_REFS_MONO)) +else +TEST_LIB_MCS_FLAGS = $(patsubst %,-r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/%.dll,$(TEST_LIB_REFS_ALL)) +endif + XTEST_LIB_MCS_FLAGS = $(patsubst %,-r:$(topdir)/class/lib/$(PROFILE)/%.dll,$(XTEST_LIB_REFS) $(DEFAULT_REFERENCES)) -test_nunit_dep = $(test_nunit_lib:%=$(topdir)/class/lib/$(PROFILE)/$(PARENT_PROFILE)%) +test_nunit_dep = $(test_nunit_lib:%=$(topdir)/class/lib/$(PROFILE)/%) test_nunit_ref = $(test_nunit_dep:%=-r:%) tests_CLEAN_FILES += TestResult*.xml @@ -92,7 +100,8 @@ endif tests_CLEAN_FILES += $(test_lib_output) $(test_lib_output:$(ASSEMBLY_EXT)=.pdb) xtest_sourcefile_base = $(PROFILE_PLATFORM)_$(PROFILE)_$(ASSEMBLY:$(ASSEMBLY_EXT)=_xtest.dll.sources) -xtest_sourcefile_base_excludes = $(PROFILE)_$(ASSEMBLY:$(ASSEMBLY_EXT)=_xtest.dll.exclude.sources) +xtest_sourcefile_base_excludes_full = $(PROFILE_PLATFORM)_$(PROFILE)_$(ASSEMBLY:$(ASSEMBLY_EXT)=_xtest.dll.exclude.sources) +xtest_sourcefile_base_excludes = $(xtest_sourcefile_base_excludes_full:_%=%) xunit_test_lib = $(PROFILE)_$(ASSEMBLY:$(ASSEMBLY_EXT)=_xunit-test.dll) xtest_lib_output = $(test_lib_dir)/$(xunit_test_lib) @@ -119,9 +128,7 @@ $(test_nunit_dep): $(topdir)/build/deps/nunit-$(PROFILE).stamp @if test -f $@; then :; else rm -f $<; $(MAKE) $<; fi $(topdir)/build/deps/nunit-$(PROFILE).stamp: -ifndef PARENT_PROFILE cd ${topdir}/tools/nunit-lite && $(MAKE) -endif echo "stamp" >$@ tests_CLEAN_FILES += $(topdir)/build/deps/nunit-$(PROFILE).stamp @@ -343,7 +350,6 @@ $(test_lib_dir)/Xunit.NetCore.Extensions.dll: $(topdir)/build/tests.make $(topdi $(test_lib_dir)/xunit.execution.dotnet.dll: $(topdir)/build/tests.make $(topdir)/../external/xunit-binaries/xunit.execution.dotnet.dll | $(test_lib_dir) @cp -f $(topdir)/../external/xunit-binaries/xunit.execution.dotnet.dll $@ -# cp -rf is a HACK for xunit runner to require xunit.execution.dOTNET.dll file in local folder on .net only run-xunit-test-lib: xunit-test-local ok=:; \ PATH="$(TEST_RUNTIME_WRAPPERS_PATH):$(PATH)" REMOTE_EXECUTOR="$(XTEST_REMOTE_EXECUTOR_ABSPATH)" $(TEST_RUNTIME) $(TEST_RUNTIME_FLAGS) $(XTEST_COVERAGE_FLAGS) $(AOT_RUN_FLAGS) $(XTEST_HARNESS) $(xtest_lib_output) $(XTEST_HARNESS_FLAGS) -notrait $(subst $(space), -notrait ,$(XTEST_NOTRAITS)) || ok=false; \ diff --git a/mcs/class/Facades/System.ComponentModel.Primitives/TypeForwarders.cs b/mcs/class/Facades/System.ComponentModel.Primitives/TypeForwarders.cs index 710df4ecd2..1a001af80c 100644 --- a/mcs/class/Facades/System.ComponentModel.Primitives/TypeForwarders.cs +++ b/mcs/class/Facades/System.ComponentModel.Primitives/TypeForwarders.cs @@ -33,6 +33,7 @@ [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.IComponent))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.IContainer))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISite))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ISupportInitialize))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.ImmutableObjectAttribute))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.InitializationEventAttribute))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.LocalizableAttribute))] diff --git a/mcs/class/Facades/System.ComponentModel.TypeConverter/TypeForwarders.cs b/mcs/class/Facades/System.ComponentModel.TypeConverter/TypeForwarders.cs index 12d2434bfc..5a788e1af0 100644 --- a/mcs/class/Facades/System.ComponentModel.TypeConverter/TypeForwarders.cs +++ b/mcs/class/Facades/System.ComponentModel.TypeConverter/TypeForwarders.cs @@ -76,6 +76,8 @@ [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.UInt16Converter))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.UInt32Converter))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.UInt64Converter))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ComponentModel.Container))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.UriTypeConverter))] + diff --git a/mcs/class/Facades/System.Reflection.DispatchProxy/Makefile b/mcs/class/Facades/System.Reflection.DispatchProxy/Makefile index 3c949251b9..0d407febc1 100644 --- a/mcs/class/Facades/System.Reflection.DispatchProxy/Makefile +++ b/mcs/class/Facades/System.Reflection.DispatchProxy/Makefile @@ -11,7 +11,7 @@ LIBRARY = System.Reflection.DispatchProxy.dll KEYFILE = ../../msfinal.pub SIGN_FLAGS = /delaysign /nowarn:1616,1699 -LIB_REFS = System +LIB_REFS = System System.Core LIB_MCS_FLAGS = $(SIGN_FLAGS) /unsafe NO_TEST = yes diff --git a/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection.DispatchProxy.dll.sources b/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection.DispatchProxy.dll.sources index ef77ad0ee5..6d141ac174 100644 --- a/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection.DispatchProxy.dll.sources +++ b/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection.DispatchProxy.dll.sources @@ -1,3 +1,2 @@ -../../../build/common/MonoTODOAttribute.cs AssemblyInfo.cs -System.Reflection/DispatchProxy.cs +TypeForwarders.cs diff --git a/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection/DispatchProxy.cs b/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection/DispatchProxy.cs deleted file mode 100644 index 540e525b42..0000000000 --- a/mcs/class/Facades/System.Reflection.DispatchProxy/System.Reflection/DispatchProxy.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// DispatchProxy.cs -// -// Author: -// Alexander Köplinger (alexander.koeplinger@xamarin.com) -// -// (C) 2016 Xamarin, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Reflection -{ - public abstract class DispatchProxy - { - [MonoTODO] - protected DispatchProxy() - { - throw new NotImplementedException (); - } - - [MonoTODO] - public static T Create () where TProxy : DispatchProxy - { - throw new NotImplementedException (); - } - - [MonoTODO] - protected abstract object Invoke (MethodInfo targetMethod, object[] args); - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ITable.Extended.cs b/mcs/class/Facades/System.Reflection.DispatchProxy/TypeForwarders.cs similarity index 72% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ITable.Extended.cs rename to mcs/class/Facades/System.Reflection.DispatchProxy/TypeForwarders.cs index 01fca4f8a2..088e351618 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ITable.Extended.cs +++ b/mcs/class/Facades/System.Reflection.DispatchProxy/TypeForwarders.cs @@ -1,37 +1,23 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -namespace DbLinq.Data.Linq -{ - partial interface ITable - { - /// - /// Cancels the delete on submit. - /// - /// The entity. - void CancelDeleteOnSubmit(object entity); - } -} +// +// Copyright (c) 2019 Microsoft +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.DispatchProxy))] diff --git a/mcs/class/Facades/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.dll.sources b/mcs/class/Facades/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.dll.sources index 5b412c4de3..719628dc7c 100644 --- a/mcs/class/Facades/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.dll.sources +++ b/mcs/class/Facades/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.dll.sources @@ -1,6 +1,2 @@ TypeForwarders.cs AssemblyInfo.cs - -corefx/SR.cs -../../../../external/corefx/src/System.Reflection.TypeExtensions/src/System/Reflection/Requires.cs -../../../../external/corefx/src/System.Reflection.TypeExtensions/src/System/Reflection/TypeExtensions.cs diff --git a/mcs/class/Facades/System.Reflection.TypeExtensions/TypeForwarders.cs b/mcs/class/Facades/System.Reflection.TypeExtensions/TypeForwarders.cs index 757cd13035..561595b170 100644 --- a/mcs/class/Facades/System.Reflection.TypeExtensions/TypeForwarders.cs +++ b/mcs/class/Facades/System.Reflection.TypeExtensions/TypeForwarders.cs @@ -20,5 +20,11 @@ // THE SOFTWARE. // +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.AssemblyExtensions))] [assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.BindingFlags))] - +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.EventInfoExtensions))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MemberInfoExtensions))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.MethodInfoExtensions))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.ModuleExtensions))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.PropertyInfoExtensions))] +[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Reflection.TypeExtensions))] diff --git a/mcs/class/Facades/System.Reflection.TypeExtensions/corefx/SR.cs b/mcs/class/Facades/System.Reflection.TypeExtensions/corefx/SR.cs deleted file mode 100644 index 8bdd2cb804..0000000000 --- a/mcs/class/Facades/System.Reflection.TypeExtensions/corefx/SR.cs +++ /dev/null @@ -1,8 +0,0 @@ -// -// This file was generated by resx2sr tool -// - -partial class SR -{ - public const string NoMetadataTokenAvailable = "There is no metadata token available for the given member."; -} diff --git a/mcs/class/Facades/netstandard/AssemblyInfo.cs b/mcs/class/Facades/netstandard/AssemblyInfo.cs index 031c3e8a1b..898941d520 100644 --- a/mcs/class/Facades/netstandard/AssemblyInfo.cs +++ b/mcs/class/Facades/netstandard/AssemblyInfo.cs @@ -30,6 +30,6 @@ using System.Runtime.CompilerServices; [assembly: AssemblyCompany ("Mono development team")] [assembly: AssemblyProduct ("Mono Common Language Infrastructure")] [assembly: AssemblyCopyright ("(c) Various Mono authors")] -[assembly: AssemblyVersion ("2.0.0.0")] -[assembly: AssemblyInformationalVersion ("2.0.0.0")] -[assembly: AssemblyFileVersion ("2.0.0.0")] +[assembly: AssemblyVersion ("2.1.0.0")] +[assembly: AssemblyInformationalVersion ("2.1.0.0")] +[assembly: AssemblyFileVersion ("2.1.0.0")] diff --git a/mcs/class/Facades/netstandard/Stubs.build.cs.REMOVED.git-id b/mcs/class/Facades/netstandard/Stubs.build.cs.REMOVED.git-id index 0e77777563..423db94f02 100644 --- a/mcs/class/Facades/netstandard/Stubs.build.cs.REMOVED.git-id +++ b/mcs/class/Facades/netstandard/Stubs.build.cs.REMOVED.git-id @@ -1 +1 @@ -8533f7d365c30d5e5f6b42b717fafbdba994aad4 \ No newline at end of file +6682277b38d4af097e1f315ef0a7eaf9080a6481 \ No newline at end of file diff --git a/mcs/class/Facades/netstandard/TypeForwarders.cs.REMOVED.git-id b/mcs/class/Facades/netstandard/TypeForwarders.cs.REMOVED.git-id index 9d157c45db..9bc0fa2415 100644 --- a/mcs/class/Facades/netstandard/TypeForwarders.cs.REMOVED.git-id +++ b/mcs/class/Facades/netstandard/TypeForwarders.cs.REMOVED.git-id @@ -1 +1 @@ -59b3dcecc32112251e24265fd95f9355b25a037d \ No newline at end of file +8342a6a8454aecca51da2612b8d0ab24295206bd \ No newline at end of file diff --git a/mcs/class/Facades/subdirs.make b/mcs/class/Facades/subdirs.make index 698f80470a..e2dd767fe3 100644 --- a/mcs/class/Facades/subdirs.make +++ b/mcs/class/Facades/subdirs.make @@ -81,6 +81,9 @@ wasm_PARALLEL_SUBDIRS = $(common_SUBDIRS) $(mobile_only_SUBDIRS) testing_aot_full_SUBDIRS = $(common_DEPS_SUBDIRS) System.Drawing.Common testing_aot_full_PARALLEL_SUBDIRS = $(common_SUBDIRS) $(mobile_only_SUBDIRS) +testing_aot_full_interp_SUBDIRS = $(common_DEPS_SUBDIRS) System.Drawing.Common +testing_aot_full_interp_PARALLEL_SUBDIRS = $(common_SUBDIRS) $(mobile_only_SUBDIRS) + testing_aot_hybrid_SUBDIRS = $(common_DEPS_SUBDIRS) System.Drawing.Common testing_aot_hybrid_PARALLEL_SUBDIRS = $(common_SUBDIRS) $(mobile_only_SUBDIRS) diff --git a/mcs/class/I18N/CJK/GB18030Source.cs b/mcs/class/I18N/CJK/GB18030Source.cs index c2fe31f440..2634a8015a 100644 --- a/mcs/class/I18N/CJK/GB18030Source.cs +++ b/mcs/class/I18N/CJK/GB18030Source.cs @@ -187,8 +187,10 @@ namespace I18N.CJK startIgnore = m.GEnd + 1; } } -// return ToUcsRaw ((int) (linear - gbxBase)); - throw new SystemException (String.Format ("GB18030 INTERNAL ERROR (should not happen): GBX {0:x02} {1:x02} {2:x02} {3:x02}", b1, b2, b3, b4)); + + // All 4 bytes look valid but we didn't find any appropriate range. + // So just return negative result for it. + return -4; } public static long FromUCSSurrogate (int cp) @@ -212,7 +214,9 @@ namespace I18N.CJK startIgnore = m.UEnd + 1; } } - throw new SystemException (String.Format ("GB18030 INTERNAL ERROR (should not happen): UCS {0:x06}", cp)); + + // Consider it as invalid character + return -1; } static long FromGBXRaw ( diff --git a/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs b/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs index e2a2547851..e8a3b63cfb 100644 --- a/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs +++ b/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs @@ -597,5 +597,13 @@ namespace MonoTests.I18N.CJK } #endregion + + [Test] + public void Bug13144 () + { + var encoding = Encoding.GetEncoding ("GB18030"); + var str = encoding.GetString (new byte[] { 0x84, 0x32, 0x81, 0x30 }); + Assert.AreEqual ("?", str); + } } } diff --git a/mcs/class/Makefile b/mcs/class/Makefile index cc87908d6b..f6da26ed5f 100644 --- a/mcs/class/Makefile +++ b/mcs/class/Makefile @@ -111,13 +111,18 @@ monodroid_dirs_parallel := \ Mono.CompilerServices.SymbolWriter \ Mono.Btls.Interface \ Mono.Posix \ - Mono.CSharp + Mono.CSharp \ + Mono.Debugger.Soft \ + Mono.Runtime.Tests monodroid_tools_dirs_parallel := \ Mono.Cecil \ + Mono.Cecil.Mdb \ Mono.CompilerServices.SymbolWriter \ ICSharpCode.SharpZipLib \ - monodoc + monodoc \ + Mono.Debugger.Soft \ + Mono.Profiler.Log monotouch_tools_dirs_parallel := \ Mono.Cecil \ diff --git a/mcs/class/Microsoft.Build.Tasks/Makefile b/mcs/class/Microsoft.Build.Tasks/Makefile index a2f6f7c7b5..c481ebbd62 100644 --- a/mcs/class/Microsoft.Build.Tasks/Makefile +++ b/mcs/class/Microsoft.Build.Tasks/Makefile @@ -41,7 +41,7 @@ endif EXTRA_DISTFILES = $(filter-out Test/resources/test.dll, $(TEST_RESOURCE_FILES)) Test/resources/test.dll: Test/resources/test.cs - $(CSCOMPILE) -r:$(topdir)/class/lib/$(PROFILE)/mscorlib.dll -target:library /out:$@ $< + $(CSCOMPILE) -r:$(topdir)/class/lib/$(PROFILE)/$(PARENT_PROFILE)mscorlib.dll -target:library /out:$@ $< clean-test-resources: rm -f Test/resources/test.dll diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs index 42b7da6f23..9a5044e447 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs @@ -29,6 +29,8 @@ using System; using System.IO; using System.Xml; using System.Linq; +using System.Collections.Generic; +using System.Runtime.Versioning; namespace Microsoft.Build.Utilities { @@ -270,5 +272,26 @@ namespace Microsoft.Build.Utilities return Path.Combine (lib_mono_dir, "xbuild", toolsVersion, "bin"); } #endif + + // These have no meaning in mono except to exist, so return empty lists for each. + public static IList GetPathToReferenceAssemblies(string targetFrameworkIdentifier, string targetFrameworkVersion, string targetFrameworkProfile) + { + return new List(); + } + + public static IList GetPathToReferenceAssemblies(FrameworkName frameworkName) + { + return new List(); + } + + public static IList GetPathToReferenceAssemblies(string targetFrameworkRootPath, FrameworkName frameworkName) + { + return new List(); + } + + public static IList GetSupportedTargetFrameworks() + { + throw new NotImplementedException(); + } } } diff --git a/mcs/class/Mono.CSharp/Test/Evaluator/ExpressionsTest.cs b/mcs/class/Mono.CSharp/Test/Evaluator/ExpressionsTest.cs index 054e164aee..9bfd3a1493 100644 --- a/mcs/class/Mono.CSharp/Test/Evaluator/ExpressionsTest.cs +++ b/mcs/class/Mono.CSharp/Test/Evaluator/ExpressionsTest.cs @@ -177,6 +177,7 @@ namespace MonoTests.EvaluatorTest } [Test] + [Category("AndroidSdksNotWorking")] public void DynamicStatement () { Evaluator.Run ("dynamic d = 1;"); diff --git a/mcs/class/Mono.Cecil/Makefile b/mcs/class/Mono.Cecil/Makefile index 4fe84c6fae..f5b4d2ce35 100644 --- a/mcs/class/Mono.Cecil/Makefile +++ b/mcs/class/Mono.Cecil/Makefile @@ -14,7 +14,7 @@ TARGET_NET_REFERENCE = $(BOOTSTRAP_BIN_PROFILE) LIBRARY_USE_INTERMEDIATE_FILE = 1 endif -LIB_MCS_FLAGS = -d:NET_4_0 +LIB_MCS_FLAGS = -d:NET_4_0 -unsafe NO_TEST = yes diff --git a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteCommand.cs b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteCommand.cs index 3e12cae6c2..0f36e526cc 100644 --- a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteCommand.cs +++ b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteCommand.cs @@ -503,6 +503,9 @@ namespace Mono.Data.Sqlite if (_cnn.State != ConnectionState.Open) throw new InvalidOperationException("Database is not open"); + if (string.IsNullOrWhiteSpace (CommandText)) + throw new ArgumentException ("Empty SQL statement"); + // If the version of the connection has changed, clear out any previous commands before starting if (_cnn._version != _version) { diff --git a/mcs/class/Mono.Data.Sqlite/Test/SqliteDataReaderTest.cs b/mcs/class/Mono.Data.Sqlite/Test/SqliteDataReaderTest.cs index 99d4d0bd76..a77236d8b5 100644 --- a/mcs/class/Mono.Data.Sqlite/Test/SqliteDataReaderTest.cs +++ b/mcs/class/Mono.Data.Sqlite/Test/SqliteDataReaderTest.cs @@ -41,45 +41,104 @@ using MonoTests.Helpers; namespace MonoTests.Mono.Data.Sqlite { - [TestFixture] - public class SqliteDataReaderTest - { - readonly static string _uri = TestResourceHelper.GetFullPathOfResource("Test/test.db"); - readonly static string _connectionString = "URI=file://" + _uri + ", version=3"; - SqliteConnection _conn = new SqliteConnection (); + [TestFixture] + public class SqliteDataReaderTest + { + readonly static string _uri = TestResourceHelper.GetFullPathOfResource("Test/test.db"); + readonly static string _connectionString = "URI=file://" + _uri + ", version=3"; + SqliteConnection _conn = new SqliteConnection (); - [TestFixtureSetUp] - public void FixtureSetUp () - { - if (! File.Exists (_uri) || new FileInfo (_uri).Length == 0) { - // ignore all tests - Assert.Ignore ("#000 ignoring all fixtures. No database present"); - } - } - - - [Test] - [Category ("NotWorking")] - public void GetSchemaTableTest () - { - _conn.ConnectionString = _connectionString; - SqliteDataReader reader = null; - using (_conn) { - _conn.Open (); - SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand (); - cmd.CommandText = "select * from test"; - reader = cmd.ExecuteReader (); - try { - DataTable dt = reader.GetSchemaTable (); - Assert.IsNotNull (dt, "#GS1 should return valid table"); - Assert.IsTrue (dt.Rows.Count > 0, "#GS2 should return with rows ;-)"); - } finally { - if (reader != null && !reader.IsClosed) - reader.Close (); - _conn.Close (); - } - } - } + [TestFixtureSetUp] + public void FixtureSetUp () + { + if (! File.Exists (_uri) || new FileInfo (_uri).Length == 0) { + // ignore all tests + Assert.Ignore ("#000 ignoring all fixtures. No database present"); + } + } + + [Test] + public void EmptyStatementThrowsAgrumentException () + { + _conn.ConnectionString = _connectionString; + SqliteDataReader reader = null; + using (_conn) { + _conn.Open (); + SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand (); + cmd.CommandText = string.Empty; + try { + reader = cmd.ExecuteReader (); + Assert.Fail (); + } catch (ArgumentException ex){ + // expected this one + } catch (Exception ex) { + Assert.Fail (); + } + } + } + + [Test] + public void NullStatementThrowsAgrumentException () + { + _conn.ConnectionString = _connectionString; + SqliteDataReader reader = null; + using (_conn) { + _conn.Open (); + SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand (); + cmd.CommandText = null; + try { + reader = cmd.ExecuteReader (); + Assert.Fail (); + } catch (ArgumentException ex){ + // expected this one + } catch (Exception ex) { + Assert.Fail (); + } + } + } + + [Test] + public void WhitespaceOnlyStatementThrowsAgrumentException () + { + _conn.ConnectionString = _connectionString; + SqliteDataReader reader = null; + using (_conn) { + _conn.Open (); + SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand (); + cmd.CommandText = " "; + try { + reader = cmd.ExecuteReader (); + Assert.Fail (); + } catch (ArgumentException ex){ + // expected this one + } catch (Exception ex) { + Assert.Fail (); + } + } + } + + [Test] + [Category ("NotWorking")] + public void GetSchemaTableTest () + { + _conn.ConnectionString = _connectionString; + SqliteDataReader reader = null; + using (_conn) { + _conn.Open (); + SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand (); + cmd.CommandText = "select * from test"; + reader = cmd.ExecuteReader (); + try { + DataTable dt = reader.GetSchemaTable (); + Assert.IsNotNull (dt, "#GS1 should return valid table"); + Assert.IsTrue (dt.Rows.Count > 0, "#GS2 should return with rows ;-)"); + } finally { + if (reader != null && !reader.IsClosed) + reader.Close (); + _conn.Close (); + } + } + } [Test] public void TypeOfNullInResultTest () @@ -301,5 +360,5 @@ namespace MonoTests.Mono.Data.Sqlite } } } - } + } } diff --git a/mcs/class/Mono.Debugger.Soft/Makefile b/mcs/class/Mono.Debugger.Soft/Makefile index b1dda8bcb5..e5b67d2b9b 100644 --- a/mcs/class/Mono.Debugger.Soft/Makefile +++ b/mcs/class/Mono.Debugger.Soft/Makefile @@ -10,17 +10,14 @@ KEYFILE = $(LIBRARY_SNK) TEST_LIB_REFS = Mono.Cecil System System.Core -VALID_TEST_PROFILE := $(filter net_4_x, $(PROFILE)) - -ifdef VALID_TEST_PROFILE - +ifneq ($(filter monodroid monotouch monotouch_tv monotouch_watch wasm net_4_x,$(PROFILE)),) test-local: build-dtest +endif -else - +ifneq ($(filter monodroid monotouch monotouch_tv monotouch_watch wasm,$(PROFILE)),) +NO_INSTALL=1 +NO_BUILD=1 NO_TEST=1 -check: - endif test_output_dir=$(topdir)/class/lib/$(PROFILE)/tests diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/AssemblyMirror.cs b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/AssemblyMirror.cs index 41b5e1c62e..081f96044e 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/AssemblyMirror.cs +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/AssemblyMirror.cs @@ -21,6 +21,7 @@ namespace Mono.Debugger.Soft byte[] metadata_blob; bool? isDynamic; byte[] pdb_blob; + bool? has_debug_info; Dictionary typeCacheIgnoreCase = new Dictionary (StringComparer.InvariantCultureIgnoreCase); Dictionary typeCache = new Dictionary (); Dictionary tokenTypeCache = new Dictionary (); @@ -222,5 +223,17 @@ namespace Mono.Debugger.Soft } return vm.GetMethod (methodId); } - } + + public bool HasDebugInfo { + get { + if (has_debug_info.HasValue) + return has_debug_info.Value; + + vm.CheckProtocolVersion (2, 51); + + has_debug_info = vm.conn.Assembly_HasDebugInfo (id); + return has_debug_info.Value; + } + } + } } diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs index c98a6c37c5..75e647374c 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs @@ -427,7 +427,7 @@ namespace Mono.Debugger.Soft * with newer runtimes, and vice versa. */ internal const int MAJOR_VERSION = 2; - internal const int MINOR_VERSION = 50; + internal const int MINOR_VERSION = 51; enum WPSuspendPolicy { NONE = 0, @@ -548,7 +548,8 @@ namespace Mono.Debugger.Soft GET_IS_DYNAMIC = 9, GET_PDB_BLOB = 10, GET_TYPE_FROM_TOKEN = 11, - GET_METHOD_FROM_TOKEN = 12 + GET_METHOD_FROM_TOKEN = 12, + HAS_DEBUG_INFO = 13, } enum CmdModule { @@ -1618,8 +1619,8 @@ namespace Mono.Debugger.Soft /* Wait for the reply packet */ while (true) { lock (reply_packets_monitor) { - if (reply_packets.ContainsKey (packetId)) { - byte[] reply = reply_packets [packetId]; + byte[] reply; + if (reply_packets.TryGetValue (packetId, out reply)) { reply_packets.Remove (packetId); PacketReader r = new PacketReader (this, reply); @@ -2226,6 +2227,10 @@ namespace Mono.Debugger.Soft return SendReceive (CommandSet.ASSEMBLY, (int)CmdAssembly.GET_METHOD_FROM_TOKEN, new PacketWriter ().WriteId (id).WriteInt ((int)token)).ReadId (); } + internal bool Assembly_HasDebugInfo (long id) { + return SendReceive (CommandSet.ASSEMBLY, (int)CmdAssembly.HAS_DEBUG_INFO, new PacketWriter ().WriteId (id)).ReadBool (); + } + /* * TYPE */ diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs index caa732000a..0bd77256a1 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs @@ -109,6 +109,21 @@ namespace Mono.Debugger.Soft } } + public EventSet GetNextEventSet (int timeoutInMilliseconds) { + lock (queue_monitor) { + if (queue.Count == 0) { + if (!Monitor.Wait (queue_monitor, timeoutInMilliseconds)) { + return null; + } + } + + current_es = null; + current_es_index = 0; + + return (EventSet)queue.Dequeue (); + } + } + [Obsolete ("Use GetNextEventSet () instead")] public T GetNextEvent () where T : Event { return GetNextEvent () as T; @@ -135,8 +150,8 @@ namespace Mono.Debugger.Soft } public void Detach () { - conn.VM_Dispose (); conn.Close (); + conn.VM_Dispose (); notify_vm_event (EventType.VMDisconnect, SuspendPolicy.None, 0, 0, null, 0); } diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest-excfilter.il b/mcs/class/Mono.Debugger.Soft/Test/dtest-excfilter.il index 43f15d0023..9c91598f45 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest-excfilter.il +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest-excfilter.il @@ -5,13 +5,13 @@ } .assembly 'dtest-lib' { } -.class public auto ansi ExceptionFilterTest +.class public auto ansi Tests extends [mscorlib]System.Object { - .method public static void Main () cil managed + .method public static void Main (string[] args) cil managed { .entrypoint - call void class ExceptionFilterTest::Test () + call void class Tests::Test () ret } @@ -35,11 +35,11 @@ leave end } filter { castclass [mscorlib]System.Exception - call int32 class ExceptionFilterTest::Filter([mscorlib]System.Exception) + call int32 class Tests::Filter([mscorlib]System.Exception) endfilter } { castclass [mscorlib]System.Exception - call void class ExceptionFilterTest::Handler([mscorlib]System.Exception) + call void class Tests::Handler([mscorlib]System.Exception) leave end } diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs.REMOVED.git-id b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs.REMOVED.git-id index 452c13889c..096d8d9a50 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs.REMOVED.git-id +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs.REMOVED.git-id @@ -1 +1 @@ -6ac1934d3bf36a8694c80b93904eb5ddf2895af3 \ No newline at end of file +1f394d53c53a481ed108fe1e55be458a7fb03923 \ No newline at end of file diff --git a/mcs/class/Mono.Profiler.Log/Makefile b/mcs/class/Mono.Profiler.Log/Makefile index 3791df0d6a..e4658d01d1 100644 --- a/mcs/class/Mono.Profiler.Log/Makefile +++ b/mcs/class/Mono.Profiler.Log/Makefile @@ -7,7 +7,9 @@ LIBRARY_WARN_AS_ERROR = yes KEYFILE = $(LIBRARY_SNK) LIB_REFS = System System.Core -LIB_MCS_FLAGS = /unsafe /publicsign /nowarn:0618 +LIB_MCS_FLAGS = /unsafe /publicsign /nowarn:0618 -D:MONO_DATACONVERTER_STATIC_METHOD + +ifeq (net_4_x,$(PROFILE)) XTEST_LIB_REFS = System System.Core Facades/System.Threading.Tasks @@ -17,12 +19,18 @@ $(topdir)/class/lib/$(PROFILE_DIRECTORY)/tests/log-profiler-test.exe: Test/log-p mkdir -p $(dir $@) $(CSCOMPILE) $(PLATFORM_DEBUG_FLAGS) /unsafe $(if $(MCS_MODE),,/warnaserror) /r:$(build_libdir)/mscorlib.dll /r:$(build_lib) /out:$@ $< -EXTRA_DISTFILES = \ - Test/log-profiler-test.cs - CLEAN_FILES = \ $(topdir)/class/lib/$(PROFILE_DIRECTORY)/tests/log-profiler-test.exe \ $(topdir)/class/lib/$(PROFILE_DIRECTORY)/tests/log-profiler-test.exe.mdb \ $(topdir)/class/lib/$(PROFILE_DIRECTORY)/tests/log-profiler-test.pdb +else + +NO_TEST = yes + +endif + +EXTRA_DISTFILES = \ + Test/log-profiler-test.cs + include ../../build/library.make diff --git a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileData.cs b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileData.cs new file mode 100644 index 0000000000..bcb93a7466 --- /dev/null +++ b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileData.cs @@ -0,0 +1,16 @@ +namespace Mono.Profiler.Aot +{ + public sealed class ProfileData + { + public ProfileData (ModuleRecord[] modules, TypeRecord[] types, MethodRecord[] methods) + { + this.Modules = modules; + this.Types = types; + this.Methods = methods; + } + + public ModuleRecord[] Modules { get; private set; } + public TypeRecord[] Types { get; private set; } + public MethodRecord[] Methods { get; private set; } + } +} \ No newline at end of file diff --git a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileReader.cs b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileReader.cs new file mode 100644 index 0000000000..b52e20395e --- /dev/null +++ b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/ProfileReader.cs @@ -0,0 +1,166 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; + +namespace Mono.Profiler.Aot +{ + // + // Read the contents of a .aotprofile created by the AOT profiler + // See mono-profiler-aot.h for a description of the file format + // + public sealed class ProfileReader + { + enum RecordType + { + NONE = 0, + IMAGE = 1, + TYPE = 2, + GINST = 3, + METHOD = 4 + } + + enum MonoTypeEnum + { + MONO_TYPE_CLASS = 0x12, + } + + const string MAGIC = "AOTPROFILE"; + const int MAJOR_VERSION = 1; + const int MINOR_VERSION = 0; + + DataConverter conv; + byte[] data; + int pos; + + public ProfileReader () + { + conv = DataConverter.LittleEndian; + } + + int ReadByte () + { + int res = data [pos]; + pos ++; + return res; + } + + int ReadInt () + { + int res = conv.GetInt32 (data, pos); + pos += 4; + return res; + } + + string ReadString () + { + int len = ReadInt (); + var res = new string (Encoding.UTF8.GetChars (data, pos, len)); + pos += len; + return res; + } + + public ProfileData ReadAllData (Stream stream) + { + byte[] buf = new byte [16]; + int len = stream.Read (buf, 0, MAGIC.Length); + if (len != MAGIC.Length) + throw new IOException ("Input file is too small."); + var magic = new String (Encoding.UTF8.GetChars (buf, 0, MAGIC.Length)); + if (magic != MAGIC) + throw new IOException ("Input file is not a AOT profiler output file."); + + // Profile files are not expected to be large, so reading them is ok + len = (int)stream.Length - MAGIC.Length; + data = new byte [len]; + pos = 0; + int count = stream.Read (data, 0, len); + if (count != len) + throw new IOException ("Can't read profile file."); + + int version = ReadInt (); + int expected_version = (MAJOR_VERSION << 16) | MINOR_VERSION; + if (version != expected_version) + throw new IOException (String.Format ("Expected file version 0x{0:x}, got 0x{1:x}.", expected_version, version)); + + var modules = new List (); + var types = new List (); + var methods = new List (); + + Dictionary records = new Dictionary (); + + while (true) { + RecordType rtype = (RecordType)data [pos]; + pos ++; + if (rtype == RecordType.NONE) + break; + int id = ReadInt (); + switch (rtype) { + case RecordType.IMAGE: { + string name = ReadString (); + string mvid = ReadString (); + var module = new ModuleRecord (id, name, mvid); + records [id] = module; + modules.Add (module); + break; + } + case RecordType.GINST: { + int argc = ReadInt (); + + TypeRecord[] tr = new TypeRecord [argc]; + for (int i = 0; i < argc; ++i) { + int type_id = ReadInt (); + tr [i] = (TypeRecord)records [type_id]; + } + var ginst = new GenericInstRecord (id, tr); + records [id] = ginst; + break; + } + case RecordType.TYPE: { + MonoTypeEnum ttype = (MonoTypeEnum)ReadByte (); + + switch (ttype) { + case MonoTypeEnum.MONO_TYPE_CLASS: { + int image_id = ReadInt (); + int ginst_id = ReadInt (); + string name = ReadString (); + + GenericInstRecord inst = null; + if (ginst_id != -1) + inst = (GenericInstRecord)records [ginst_id]; + + var module = (ModuleRecord)records [image_id]; + var type = new TypeRecord (id, module, name, inst); + types.Add (type); + records [id] = type; + break; + } + default: + throw new NotImplementedException (); + } + break; + } + case RecordType.METHOD: { + int class_id = ReadInt (); + int ginst_id = ReadInt (); + int param_count = ReadInt (); + string name = ReadString (); + string sig = ReadString (); + + var type = (TypeRecord)records [class_id]; + GenericInstRecord ginst = ginst_id != -1 ? (GenericInstRecord)records [ginst_id] : null; + var method = new MethodRecord (id, type, ginst, name, sig, param_count); + methods.Add (method); + records [id] = method; + break; + } + default: + throw new NotImplementedException (rtype.ToString ()); + } + } + + return new ProfileData (modules.ToArray (), types.ToArray (), methods.ToArray ()); + } + } + +} \ No newline at end of file diff --git a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/Records.cs b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/Records.cs new file mode 100644 index 0000000000..458c94236f --- /dev/null +++ b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Aot/Records.cs @@ -0,0 +1,101 @@ +namespace Mono.Profiler.Aot +{ + // + // Represents the contents of an .aotprofile file created by the + // AOT profiler + // + public class ProfileRecord + { + public ProfileRecord (int id) + { + Id = id; + } + + public int Id { + get; set; + } + } + + public class ModuleRecord : ProfileRecord + { + public ModuleRecord (int id, string name, string mvid) : base (id) + { + Name = name; + Mvid = mvid; + } + + public string Name { + get; set; + } + + public string Mvid { + get; set; + } + } + + public class GenericInstRecord : ProfileRecord + { + public GenericInstRecord (int id, TypeRecord[] types) : base (id) + { + Types = types; + } + + public TypeRecord[] Types { + get; set; + } + } + + public class TypeRecord : ProfileRecord + { + public TypeRecord (int id, ModuleRecord module, string name, GenericInstRecord ginst) : base (id) + { + Module = module; + Name = name; + GenericInst = ginst; + } + + public ModuleRecord Module { + get; set; + } + + public string Name { + get; set; + } + + public GenericInstRecord GenericInst { + get; set; + } + } + + public class MethodRecord : ProfileRecord + { + public MethodRecord (int id, TypeRecord type, GenericInstRecord ginst, string name, string sig, int param_count) : base (id) + { + Type = type; + GenericInst = ginst; + Name = name; + Signature = sig; + ParamCount = param_count; + } + + public TypeRecord Type { + get; set; + } + + public GenericInstRecord GenericInst { + get; set; + } + + public string Name { + get; set; + } + + public string Signature { + get; set; + } + + public int ParamCount { + get; set; + } + } +} diff --git a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log.dll.sources b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log.dll.sources index 27b58318f2..1ba1aeaaeb 100644 --- a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log.dll.sources +++ b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log.dll.sources @@ -1,6 +1,7 @@ Assembly/AssemblyInfo.cs ../../build/common/Consts.cs -../../build/common/Locale.cs +../corlib/Mono/DataConverter.cs + Mono.Profiler.Log/LogBufferHeader.cs Mono.Profiler.Log/LogEnums.cs Mono.Profiler.Log/LogEvent.cs @@ -12,3 +13,6 @@ Mono.Profiler.Log/LogProfiler.cs Mono.Profiler.Log/LogReader.cs Mono.Profiler.Log/LogStream.cs Mono.Profiler.Log/LogStreamHeader.cs +Mono.Profiler.Aot/ProfileData.cs +Mono.Profiler.Aot/ProfileReader.cs +Mono.Profiler.Aot/Records.cs diff --git a/mcs/class/Mono.Runtime.Tests/Mono.Runtime.Tests_test.dll.sources b/mcs/class/Mono.Runtime.Tests/Mono.Runtime.Tests_test.dll.sources index 022dc9bee1..2dbf3de56e 100644 --- a/mcs/class/Mono.Runtime.Tests/Mono.Runtime.Tests_test.dll.sources +++ b/mcs/class/Mono.Runtime.Tests/Mono.Runtime.Tests_test.dll.sources @@ -1,15 +1,15 @@ JitTests.cs ../../../../mono/mini/TestDriver.cs + ../../../../mono/mini/basic.cs -../../../../mono/mini/basic-calls.cs -../../../../mono/mini/basic-long.cs -../../../../mono/mini/bench.cs +../../../../mono/mini/basic-calls.cs +../../../../mono/mini/basic-long.cs +../../../../mono/mini/bench.cs ../../../../mono/mini/builtin-types.cs -../../../../mono/mini/objects.cs +../../../../mono/mini/objects.cs ../../../../mono/mini/arrays.cs ../../../../mono/mini/basic-float.cs ../../../../mono/mini/basic-math.cs -../../../../mono/mini/basic.cs ../../../../mono/mini/exceptions.cs ../../../../mono/mini/devirtualization.cs ../../../../mono/mini/generics.cs @@ -18,6 +18,3 @@ JitTests.cs ../../../../mono/mini/aot-tests.cs ../../../../mono/mini/gc-test.cs ../../../../mono/mini/gshared.cs - - - diff --git a/mcs/class/Mono.Runtime.Tests/Test/JitTests.cs b/mcs/class/Mono.Runtime.Tests/Test/JitTests.cs index e490e9ab09..6fe4f270ee 100644 --- a/mcs/class/Mono.Runtime.Tests/Test/JitTests.cs +++ b/mcs/class/Mono.Runtime.Tests/Test/JitTests.cs @@ -9,7 +9,13 @@ namespace MonoTests.Runtime { [TestFixture] public class JitTests { - static string[] args = new string[] { "--exclude", "!FULLAOT", "--verbose" }; +#if MONOTOUCH + static string[] args = new string[] { "--verbose", "--exclude", "!FULLAOT" }; +#elif MONODROID + static string[] args = new string[] { "--verbose" }; +#else + static string[] args = new string[] { "--verbose", "--exclude", "!FULLAOT" }; +#endif [Test] public void Basic () { diff --git a/mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs b/mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs index 3f06114dd0..b0571bcf8c 100644 --- a/mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs +++ b/mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs @@ -77,6 +77,24 @@ namespace Mono.Security.Cryptography { return null; } +#if INSIDE_CORLIB + static internal bool TryImportCapiPrivateKeyBlob (byte[] blob, int offset) + { + try { + var rsap = GetParametersFromCapiPrivateKeyBlob (blob, offset); + // Since we are only checking whether this throws an exception and + // not actually returning the `RSA` object, we can use `RSAManaged` + // here because that's what the `RSACryptoServiceProvider` implementation + // does internally. + var rsa = new RSAManaged (); + rsa.ImportParameters (rsap); + return true; + } catch (CryptographicException) { + return false; + } + } +#endif + // convert the key from PRIVATEKEYBLOB to RSA // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/Security/private_key_blobs.asp // e.g. SNK files, PVK files @@ -86,6 +104,38 @@ namespace Mono.Security.Cryptography { } static public RSA FromCapiPrivateKeyBlob (byte[] blob, int offset) + { + RSAParameters rsap = GetParametersFromCapiPrivateKeyBlob (blob, offset); + +#if INSIDE_CORLIB && MOBILE + RSA rsa = RSA.Create (); + rsa.ImportParameters (rsap); +#else + RSA rsa = null; + try { + rsa = RSA.Create (); + rsa.ImportParameters (rsap); + } + catch (CryptographicException ce) { + // this may cause problem when this code is run under + // the SYSTEM identity on Windows (e.g. ASP.NET). See + // http://bugzilla.ximian.com/show_bug.cgi?id=77559 + try { + CspParameters csp = new CspParameters (); + csp.Flags = CspProviderFlags.UseMachineKeyStore; + rsa = new RSACryptoServiceProvider (csp); + rsa.ImportParameters (rsap); + } + catch { + // rethrow original, not the later, exception if this fails + throw ce; + } + } +#endif + return rsa; + } + + static RSAParameters GetParametersFromCapiPrivateKeyBlob (byte[] blob, int offset) { if (blob == null) throw new ArgumentNullException ("blob"); @@ -161,37 +211,10 @@ namespace Mono.Security.Cryptography { Buffer.BlockCopy (blob, pos, rsap.D, 0, byteLen); Array.Reverse (rsap.D); } - } - catch (Exception e) { + return rsap; + } catch (Exception e) { throw new CryptographicException ("Invalid blob.", e); } - -#if INSIDE_CORLIB && MOBILE - RSA rsa = RSA.Create (); - rsa.ImportParameters (rsap); -#else - RSA rsa = null; - try { - rsa = RSA.Create (); - rsa.ImportParameters (rsap); - } - catch (CryptographicException ce) { - // this may cause problem when this code is run under - // the SYSTEM identity on Windows (e.g. ASP.NET). See - // http://bugzilla.ximian.com/show_bug.cgi?id=77559 - try { - CspParameters csp = new CspParameters (); - csp.Flags = CspProviderFlags.UseMachineKeyStore; - rsa = new RSACryptoServiceProvider (csp); - rsa.ImportParameters (rsap); - } - catch { - // rethrow original, not the later, exception if this fails - throw ce; - } - } -#endif - return rsa; } static public DSA FromCapiPrivateKeyBlobDSA (byte[] blob) @@ -405,12 +428,60 @@ namespace Mono.Security.Cryptography { return blob; } +#if INSIDE_CORLIB + static internal bool TryImportCapiPublicKeyBlob (byte[] blob, int offset) + { + try { + var rsap = GetParametersFromCapiPublicKeyBlob (blob, offset); + // Since we are only checking whether this throws an exception and + // not actually returning the `RSA` object, we can use `RSAManaged` + // here because that's what the `RSACryptoServiceProvider` implementation + // does internally. + var rsa = new RSAManaged (); + rsa.ImportParameters (rsap); + return true; + } catch (CryptographicException) { + return false; + } + } +#endif + static public RSA FromCapiPublicKeyBlob (byte[] blob) { return FromCapiPublicKeyBlob (blob, 0); } static public RSA FromCapiPublicKeyBlob (byte[] blob, int offset) + { + var rsap = GetParametersFromCapiPublicKeyBlob (blob, offset); + + try { +#if INSIDE_CORLIB && MOBILE + RSA rsa = RSA.Create (); + rsa.ImportParameters (rsap); +#else + RSA rsa = null; + try { + rsa = RSA.Create (); + rsa.ImportParameters (rsap); + } + catch (CryptographicException) { + // this may cause problem when this code is run under + // the SYSTEM identity on Windows (e.g. ASP.NET). See + // http://bugzilla.ximian.com/show_bug.cgi?id=77559 + CspParameters csp = new CspParameters (); + csp.Flags = CspProviderFlags.UseMachineKeyStore; + rsa = new RSACryptoServiceProvider (csp); + rsa.ImportParameters (rsap); + } +#endif + return rsa; + } catch (Exception e) { + throw new CryptographicException ("Invalid blob.", e); + } + } + + static RSAParameters GetParametersFromCapiPublicKeyBlob (byte[] blob, int offset) { if (blob == null) throw new ArgumentNullException ("blob"); @@ -444,28 +515,8 @@ namespace Mono.Security.Cryptography { rsap.Modulus = new byte [byteLen]; Buffer.BlockCopy (blob, pos, rsap.Modulus, 0, byteLen); Array.Reverse (rsap.Modulus); -#if INSIDE_CORLIB && MOBILE - RSA rsa = RSA.Create (); - rsa.ImportParameters (rsap); -#else - RSA rsa = null; - try { - rsa = RSA.Create (); - rsa.ImportParameters (rsap); - } - catch (CryptographicException) { - // this may cause problem when this code is run under - // the SYSTEM identity on Windows (e.g. ASP.NET). See - // http://bugzilla.ximian.com/show_bug.cgi?id=77559 - CspParameters csp = new CspParameters (); - csp.Flags = CspProviderFlags.UseMachineKeyStore; - rsa = new RSACryptoServiceProvider (csp); - rsa.ImportParameters (rsap); - } -#endif - return rsa; - } - catch (Exception e) { + return rsap; + } catch (Exception e) { throw new CryptographicException ("Invalid blob.", e); } } diff --git a/mcs/class/Mono.Security/Mono.Security/StrongName.cs b/mcs/class/Mono.Security/Mono.Security/StrongName.cs index b7c1f0483e..dbc0b1f8f0 100644 --- a/mcs/class/Mono.Security/Mono.Security/StrongName.cs +++ b/mcs/class/Mono.Security/Mono.Security/StrongName.cs @@ -239,7 +239,7 @@ namespace Mono.Security { byte[] publicKey = PublicKey; if (publicKey == null) return null; - HashAlgorithm ha = HashAlgorithm.Create (TokenAlgorithm); + HashAlgorithm ha = GetHashAlgorithm (TokenAlgorithm); byte[] hash = ha.ComputeHash (publicKey); // we need the last 8 bytes in reverse order keyToken = new byte [8]; @@ -250,6 +250,22 @@ namespace Mono.Security { } } + static HashAlgorithm GetHashAlgorithm (string algorithm) + { +#if FULL_AOT_RUNTIME + switch (algorithm.ToUpper (CultureInfo.InvariantCulture)) { + case "SHA1": + return new SHA1CryptoServiceProvider (); + case "MD5": + return new MD5CryptoServiceProvider (); + default: + throw new ArgumentException ("Unsupported hash algorithm for token"); + } +#else + return HashAlgorithm.Create (algorithm); +#endif + } + public string TokenAlgorithm { get { if (tokenAlgorithm == null) diff --git a/mcs/class/Mono.Security/Test/Mono.Security.Cryptography/KeyPairPersistenceTest.cs b/mcs/class/Mono.Security/Test/Mono.Security.Cryptography/KeyPairPersistenceTest.cs index d8050dbde7..cfeb15f8e1 100644 --- a/mcs/class/Mono.Security/Test/Mono.Security.Cryptography/KeyPairPersistenceTest.cs +++ b/mcs/class/Mono.Security/Test/Mono.Security.Cryptography/KeyPairPersistenceTest.cs @@ -180,7 +180,7 @@ namespace MonoTests.Mono.Security.Cryptography { } catch (CryptographicException ce) { // not everyone can write to the machine store - if (!(ce.InnerException is UnauthorizedAccessException) && !(ce.InnerException is IOException)) + if (!(ce.InnerException is UnauthorizedAccessException) && !(ce.InnerException is IOException ioe && ioe.HResult == 30 /* Read-only file system */)) throw; Assert.Ignore ("Access denied to key containers files."); } @@ -208,7 +208,7 @@ namespace MonoTests.Mono.Security.Cryptography { } catch (CryptographicException ce) { // not everyone can write to the machine store - if (!(ce.InnerException is UnauthorizedAccessException) && !(ce.InnerException is IOException)) + if (!(ce.InnerException is UnauthorizedAccessException) && !(ce.InnerException is IOException ioe && ioe.HResult == 30 /* Read-only file system */)) throw; Assert.Ignore ("Access denied to key containers files."); } diff --git a/mcs/class/PEAPI/Metadata.cs.REMOVED.git-id b/mcs/class/PEAPI/Metadata.cs.REMOVED.git-id index eee79a008e..d6d502279d 100644 --- a/mcs/class/PEAPI/Metadata.cs.REMOVED.git-id +++ b/mcs/class/PEAPI/Metadata.cs.REMOVED.git-id @@ -1 +1 @@ -6b92e594bff376f9ea32467717abf3ff35beff07 \ No newline at end of file +222ece4633ae80aea9d99ef4526b5a75372aa725 \ No newline at end of file diff --git a/mcs/class/System.Core/System.Security.Cryptography.X509Certificates/ECDsaCertificateExtensions.cs b/mcs/class/System.Core/System.Security.Cryptography.X509Certificates/ECDsaCertificateExtensions.cs index aa5da449d7..6b2c35b2ec 100644 --- a/mcs/class/System.Core/System.Security.Cryptography.X509Certificates/ECDsaCertificateExtensions.cs +++ b/mcs/class/System.Core/System.Security.Cryptography.X509Certificates/ECDsaCertificateExtensions.cs @@ -41,5 +41,11 @@ namespace System.Security.Cryptography.X509Certificates { throw new NotImplementedException (); } + + [MonoTODO] + public static X509Certificate2 CopyWithPrivateKey(this X509Certificate2 certificate, ECDsa privateKey) + { + throw new NotImplementedException (); + } } } diff --git a/mcs/class/System.Core/Test/System.Linq/EnumerableFixture.cs b/mcs/class/System.Core/Test/System.Linq/EnumerableFixture.cs index 67d1a5df1f..b11be9b07b 100644 --- a/mcs/class/System.Core/Test/System.Linq/EnumerableFixture.cs +++ b/mcs/class/System.Core/Test/System.Linq/EnumerableFixture.cs @@ -500,6 +500,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void Distinct_MixedCaseStringsWithCaseIgnoringComparer_YieldsFirstCaseOfEachDistinctStringInSourceOrder () { var source = Read ("Foo Bar BAZ BaR baz FOo".Split ()); @@ -610,6 +611,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void Except_SecondArgComparerArg_ComparerIsUsed () { var first = Read ("albert", "john", "simon"); @@ -773,6 +775,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void GroupBy_KeySelectorArgComparerArg_KeysThatDifferInCasingNonCaseSensitiveStringComparer_CorrectGrouping () { var persons = Read (Person.CreatePersonsWithNamesUsingMixedCase ()); @@ -834,6 +837,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void GroupBy_KeySelectorArgElementSelectorArgComparerArg_ValidArguments_CorrectGroupingAndProcessing () { var persons = Read (Person.CreatePersonsWithNamesUsingMixedCase ()); @@ -873,6 +877,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void GroupBy_KeySelectorArgResultSelectorArgComparerArg_ValidArguments_CorrectGroupingAndTransforming () { var persons = Read (Person.CreatePersonsWithNamesUsingMixedCase ()); @@ -891,6 +896,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void GroupBy_KeySelectorArgElementSelectorArgResultSelectorArgComparerArg_ValidArguments_CorrectGroupingAndTransforming () { var persons = Read (Person.CreatePersonsWithNamesUsingMixedCase ()); @@ -947,6 +953,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void GroupJoin_InnerArgOuterKeySelectorArgInnerKeySelectorArgResultSelectorArgComparerArg_ValidArguments_CorrectGroupingAndJoining () { var persons = Read (Person.CreatePersons ()); @@ -1005,6 +1012,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void Intersect_MixedStringsAndCaseInsensitiveComparer_YieldsCommonSetFromFirstSource () { var first = Read ("Heinrich", "Hubert", "Thomas"); @@ -1058,6 +1066,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void Join_InnerArgOuterKeySelectorArgInnerKeySelectorArgResultSelectorArgComparerArg_PetOwnersNamesCasingIsInconsistent_CaseInsensitiveJoinIsPerformed () { var persons = Read (Person.CreatePersons ()); @@ -2080,6 +2089,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void Union_SecondArgComparerArg_UpperCaseAndLowerCaseStrings_PassedComparerIsUsed () { var source = Read ("A", "B", "C", "D", "E", "F"); diff --git a/mcs/class/System.Core/Test/System.Linq/EnumerableTest.cs b/mcs/class/System.Core/Test/System.Linq/EnumerableTest.cs index 36abf46cac..72c0a9c020 100644 --- a/mcs/class/System.Core/Test/System.Linq/EnumerableTest.cs +++ b/mcs/class/System.Core/Test/System.Linq/EnumerableTest.cs @@ -536,6 +536,7 @@ namespace MonoTests.System.Linq { } [Test] + [Category ("ManagedCollator")] public void TestOrderByIdDescendingThenByNameAscending () { var q = from d in CreateData () diff --git a/mcs/class/System.Core/Test/System.Linq/ParallelEnumerableTests.cs b/mcs/class/System.Core/Test/System.Linq/ParallelEnumerableTests.cs index 5d76629eda..f62bcd5161 100644 --- a/mcs/class/System.Core/Test/System.Linq/ParallelEnumerableTests.cs +++ b/mcs/class/System.Core/Test/System.Linq/ParallelEnumerableTests.cs @@ -525,6 +525,7 @@ namespace MonoTests.System.Linq } [Test] + [Category ("ManagedCollator")] public void TestOrderByIdDescendingThenByNameAscending () { ParallelTestHelper.Repeat (() => { diff --git a/mcs/class/System.Core/common_System.Core.dll.sources b/mcs/class/System.Core/common_System.Core.dll.sources index e2399223ee..0a8d10c7ab 100644 --- a/mcs/class/System.Core/common_System.Core.dll.sources +++ b/mcs/class/System.Core/common_System.Core.dll.sources @@ -75,6 +75,7 @@ corefx/SR.missing.cs ../referencesource/System.Core/System/Security/Cryptography/ECKeyXmlFormat.cs ../referencesource/System.Core/System/Security/Cryptography/NCryptNative.cs ../referencesource/System.Core/System/Security/Cryptography/RsaCng.cs +../referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs ../referencesource/System.Core/System/threading/ReaderWriterLockSlim/ReaderWriterLockSlim.cs @@ -294,3 +295,11 @@ System.Security.Cryptography/SHA512CryptoServiceProvider.cs ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/DelegateHelpers.Generated.cs ../../../external/corefx/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/IncrementalHash.net46.cs + +../../../external/corefx/src/System.Net.Sockets/src/System/Net/Sockets/UnixDomainSocketEndPoint.cs +../../../external/corefx/src/System.Net.Sockets/src/System/Net/Sockets/UnixDomainSocketEndPoint.Unix.cs +../../../external/corefx/src/Common/src/Interop/Unix/System.Native/Interop.GetDomainSocketSizes.cs +../../../external/corefx/src/Common/src/Interop/Unix/Interop.Libraries.cs + +../../../external/corefx/src/System.Reflection.DispatchProxy/src/System/Reflection/DispatchProxyGenerator.cs +../../../external/corefx/src/System.Reflection.DispatchProxy/src/System/Reflection/DispatchProxy.cs diff --git a/mcs/class/System.Core/corefx/SR.missing.cs b/mcs/class/System.Core/corefx/SR.missing.cs index 4f17492f5e..067be4a77a 100644 --- a/mcs/class/System.Core/corefx/SR.missing.cs +++ b/mcs/class/System.Core/corefx/SR.missing.cs @@ -5,4 +5,11 @@ partial class SR public const string InvalidOperation_ViewIsNull = "The underlying MemoryMappedView object is null."; public const string ArgumentOutOfRange_InvalidPipeAccessRights = "Invalid PipeAccessRights flag."; public const string ArgumentOutOfRange_AdditionalAccessLimited = "additionalAccessRights is limited to the PipeAccessRights.ChangePermissions, PipeAccessRights.TakeOwnership, and PipeAccessRights.AccessSystemSecurity flags when creating NamedPipeServerStreams."; + public const string InterfaceType_Must_Be_Interface = "The type '{0}' must be an interface, not a class."; + public const string BaseType_Cannot_Be_Sealed = "The base type '{0}' cannot be sealed."; + public const string BaseType_Cannot_Be_Abstract = "The base type '{0}' cannot be abstract."; + public const string BaseType_Must_Have_Default_Ctor = "The base type '{0}' must have a public parameterless constructor."; + public const string Cryptography_Cert_AlreadyHasPrivateKey = "The certificate already has an associated private key."; + public const string Cryptography_PrivateKey_WrongAlgorithm = "The provided key does not match the public key algorithm for this certificate."; + public const string Cryptography_PrivateKey_DoesNotMatch = "The provided key does not match the public key for this certificate."; } \ No newline at end of file diff --git a/mcs/class/System.Core/monodroid_System.Core.dll.sources b/mcs/class/System.Core/monodroid_System.Core.dll.sources index ab0bb1c137..4a5d3e1393 100644 --- a/mcs/class/System.Core/monodroid_System.Core.dll.sources +++ b/mcs/class/System.Core/monodroid_System.Core.dll.sources @@ -1,6 +1,6 @@ #include common_System.Core.dll.sources #include dynamic_System.Core.dll.sources -#include pipes_pns.sources +#include unix_net_4_x_System.Core.dll.sources System.Security.Cryptography/AesCryptoServiceProvider.cs System.Security.Cryptography/AesTransform.cs diff --git a/mcs/class/System.Core/monotouch_System.Core_xtest.dll.exclude.sources b/mcs/class/System.Core/monotouch_System.Core_xtest.dll.exclude.sources index 5c3f1c5f8a..3b5d8bcda8 100644 --- a/mcs/class/System.Core/monotouch_System.Core_xtest.dll.exclude.sources +++ b/mcs/class/System.Core/monotouch_System.Core_xtest.dll.exclude.sources @@ -1 +1,7 @@ ../../../external/corefx/src/System.Linq.Expressions/tests/Dynamic/InvokeMemberBindingTests.cs +../../../external/corefx/src/System.IO.Pipes/tests/AnonymousPipeTests/AnonymousPipeTest.CreateClient.cs +../../../external/corefx/src/System.IO.Pipes/tests/AnonymousPipeTests/AnonymousPipeTest.CreateServer.cs +../../../external/corefx/src/System.IO.Pipes/tests/AnonymousPipeTests/AnonymousPipeTest.Read.cs +../../../external/corefx/src/System.IO.Pipes/tests/AnonymousPipeTests/AnonymousPipeTest.Specific.cs +../../../external/corefx/src/System.IO.Pipes/tests/AnonymousPipeTests/AnonymousPipeTest.Write.cs +../../../external/corefx/src/System.IO.Pipes/tests/AnonymousPipeTests/AnonymousPipeTestBase.cs diff --git a/mcs/class/System.Core/net_4_x_System.Core.dll.sources b/mcs/class/System.Core/net_4_x_System.Core.dll.sources index f5ab93d5a9..8d2d10f5b3 100644 --- a/mcs/class/System.Core/net_4_x_System.Core.dll.sources +++ b/mcs/class/System.Core/net_4_x_System.Core.dll.sources @@ -10,6 +10,5 @@ System.Security.Cryptography/SHA384Cng.cs System.Security.Cryptography/SHA512Cng.cs ../referencesource/System.Core/System/Security/Cryptography/AesManaged.cs -../referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs ../referencesource/System.Core/System/threading/ReaderWriterLockSlim/LockRecursionException.cs diff --git a/mcs/class/System.Core/win32_net_4_x_System.Core.dll.exclude.sources b/mcs/class/System.Core/win32_net_4_x_System.Core.dll.exclude.sources new file mode 100644 index 0000000000..0577e221b3 --- /dev/null +++ b/mcs/class/System.Core/win32_net_4_x_System.Core.dll.exclude.sources @@ -0,0 +1,3 @@ +../../../external/corefx/src/System.Net.Sockets/src/System/Net/Sockets/UnixDomainSocketEndPoint.Unix.cs +../../../external/corefx/src/Common/src/Interop/Unix/System.Native/Interop.GetDomainSocketSizes.cs +../../../external/corefx/src/Common/src/Interop/Unix/Interop.Libraries.cs diff --git a/mcs/class/System.Core/win32_net_4_x_System.Core.dll.sources b/mcs/class/System.Core/win32_net_4_x_System.Core.dll.sources index f9ca119639..d3c3a8a5fd 100644 --- a/mcs/class/System.Core/win32_net_4_x_System.Core.dll.sources +++ b/mcs/class/System.Core/win32_net_4_x_System.Core.dll.sources @@ -37,6 +37,9 @@ System.IO.Pipes/AnonymousPipeServerStream.Windows.cs ../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RevertToSelf.cs ../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.ImpersonateNamedPipeClient.cs +../../../external/corefx/src/System.Net.Sockets/src/System/Net/Sockets/UnixDomainSocketEndPoint.cs +../../../external/corefx/src/System.Net.Sockets/src/System/Net/Sockets/UnixDomainSocketEndPoint.Windows.cs + ../../../external/corefx/src/System.IO.Pipes/src/Microsoft/Win32/SafeHandles/SafePipeHandle.Windows.cs ../../../external/corefx/src/System.IO.Pipes/src/System/IO/Pipes/AnonymousPipeServerStream.Windows.cs ../../../external/corefx/src/System.IO.Pipes/src/System/IO/Pipes/ConnectionCompletionSource.cs diff --git a/mcs/class/System.Core/winaot_System.Core_test.dll.exclude.sources b/mcs/class/System.Core/winaot_System.Core_test.dll.exclude.sources new file mode 100644 index 0000000000..f98bf051be --- /dev/null +++ b/mcs/class/System.Core/winaot_System.Core_test.dll.exclude.sources @@ -0,0 +1 @@ +System.IO.Pipes/PipeSecurityTest.cs diff --git a/mcs/class/System.Core/winaot_System.Core_test.dll.sources b/mcs/class/System.Core/winaot_System.Core_test.dll.sources new file mode 100644 index 0000000000..33e2a10584 --- /dev/null +++ b/mcs/class/System.Core/winaot_System.Core_test.dll.sources @@ -0,0 +1 @@ +#include System.Core_test.dll.sources diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Assembly/AssemblyInfo.cs b/mcs/class/System.Data.Linq/Assembly/AssemblyInfo.cs similarity index 54% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Assembly/AssemblyInfo.cs rename to mcs/class/System.Data.Linq/Assembly/AssemblyInfo.cs index 16668d8ba8..9554cfd7fe 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Assembly/AssemblyInfo.cs +++ b/mcs/class/System.Data.Linq/Assembly/AssemblyInfo.cs @@ -1,88 +1,51 @@ -// -// AssemblyInfo.cs -// -// Author: -// Atsushi Enomoto -// Marek Safar -// -// Copyright (C) 2008 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Reflection; -using System.Resources; -using System.Security; -using System.Diagnostics; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about the System.Data.Linq assembly -// v3.5 Assembly - -[assembly: AssemblyTitle ("System.Data.Linq.dll")] -[assembly: AssemblyDescription ("System.Data.Linq.dll")] -[assembly: AssemblyDefaultAlias ("System.Data.Linq.dll")] - -#if MONO_DEPLOY -[assembly: AssemblyCompany (Consts.MonoCompany)] -[assembly: AssemblyProduct (Consts.MonoProduct)] -[assembly: AssemblyCopyright (Consts.MonoCopyright)] -[assembly: AssemblyVersion (Consts.FxVersion)] -[assembly: SatelliteContractVersion (Consts.FxVersion)] -[assembly: AssemblyInformationalVersion (Consts.FxFileVersion)] -[assembly: AssemblyFileVersion (Consts.FxFileVersion)] - -[assembly: NeutralResourcesLanguage ("en-US")] -[assembly: CLSCompliant (true)] -[assembly: AssemblyDelaySign (true)] -#endif - -[assembly: ComVisible (false)] -[assembly: AllowPartiallyTrustedCallers] -[assembly: DbLinqAttribute] - -// DbMetal needs access to the DbLinq internals -[assembly: InternalsVisibleTo("sqlmetal, PublicKey=" + -"0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" + -"83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" + -"fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" + -"962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" + -"2309259f")] - -// As do the sqlmetal NUnit tests... -[assembly: InternalsVisibleTo("sqlmetal_test_net_2_0, PublicKey=" + -"0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" + -"83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" + -"fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" + -"962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" + -"2309259f")] - -[assembly: InternalsVisibleTo("sqlmetal_test_net_4_0, PublicKey=" + -"0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" + -"83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" + -"fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" + -"962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" + -"2309259f")] - +// +// AssemblyInfo.cs +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Reflection; +using System.Resources; +using System.Security; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle ("System.Data.Linq.dll")] +[assembly: AssemblyDescription ("System.Data.Linq.dll")] +[assembly: AssemblyDefaultAlias ("System.Data.Linq.dll")] + +[assembly: AssemblyCompany (Consts.MonoCompany)] +[assembly: AssemblyProduct (Consts.MonoProduct)] +[assembly: AssemblyCopyright (Consts.MonoCopyright)] +[assembly: AssemblyVersion (Consts.FxVersion)] +[assembly: SatelliteContractVersion (Consts.FxVersion)] +[assembly: AssemblyInformationalVersion (Consts.FxFileVersion)] +[assembly: AssemblyFileVersion (Consts.FxFileVersion)] + +[assembly: NeutralResourcesLanguage ("en-US")] +[assembly: CLSCompliant (true)] +[assembly: AssemblyDelaySign (true)] + +[assembly: ComVisible (false)] +[assembly: AllowPartiallyTrustedCallers] + +[assembly: SecurityCritical] diff --git a/mcs/class/System.Data.Linq/Makefile b/mcs/class/System.Data.Linq/Makefile index b55cdb9e3c..0d34e7ef44 100644 --- a/mcs/class/System.Data.Linq/Makefile +++ b/mcs/class/System.Data.Linq/Makefile @@ -3,41 +3,13 @@ SUBDIRS = include ../../build/rules.make LIBRARY = System.Data.Linq.dll -LIB_REFS = System System.Core System.Xml System.Data System.Runtime.Serialization +LIB_REFS = System System.Core System.Xml System.Xml.Linq System.Data System.Runtime.Serialization System.Transactions KEYFILE = ../ecma.pub -LIB_MCS_FLAGS = \ - /resource:./src/DbLinq/Schema/Dbml/DbmlSchema.xsd,DbLinq.Schema.Dbml.DbmlSchema.xsd \ - /d:MONO_STRICT /d:MONO_DEPLOY -warn:1 +LIB_MCS_FLAGS = -d:ILGEN -TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) +TEST_MCS_FLAGS = -d:MONO_STRICT +TEST_LIB_REFS = System System.Core System.Data System.Xml -EXTRA_DISTFILES = src/DbLinq/Schema/Dbml/DbmlSchema.xsd +TXT_RESOURCE_STRINGS = ../referencesource/System.Data.Linq/System.Data.Linq.txt include ../../build/library.make - -dist-local: dist-default dist-DbLinq - -dist-DbLinq: - find src -name '*.cs' -o -name '*.snk' -o -name '*.xml' -o -name '*.txt' > .files ; \ - tar cTf .files - | (cd $(distdir); tar xf -) ; \ - rm .files - -RSYNC_EXCLUDES = \ - --exclude '*.cache' \ - --exclude '*.csproj.*.txt' \ - --exclude '*.dll' \ - --exclude '*.exe' \ - --exclude '*.force' \ - --exclude '*.pdb' \ - --exclude '*.pidb' \ - --exclude '*.suo' \ - --exclude '*.user' \ - --exclude '*.userprefs' \ - --exclude '*.usertasks' \ - --exclude '.svn' - -update-dblinq: - rsync -avz $(RSYNC_EXCLUDES) $$HOME/Development/mono-HEAD/dblinq2007/src/ src/ - rsync -avz $(RSYNC_EXCLUDES) $$HOME/Development/mono-HEAD/dblinq2007/tests/ tests/ - rsync -avz $(RSYNC_EXCLUDES) $$HOME/Development/mono-HEAD/dblinq2007/examples/ examples/ - diff --git a/mcs/class/System.Data.Linq/ReferenceSources/Error.cs b/mcs/class/System.Data.Linq/ReferenceSources/Error.cs new file mode 100644 index 0000000000..3f0eb3710d --- /dev/null +++ b/mcs/class/System.Data.Linq/ReferenceSources/Error.cs @@ -0,0 +1,1576 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Text; + +namespace System.Data.Linq +{ + // this class is somehow generated in referencesource, manually created an equivalent for now + // TODO: we need to make sure we throw the proper exception for each method + internal class Error + { + public static Exception VbLikeDoesNotSupportMultipleCharacterRanges() + { + return new Exception (SR.VbLikeDoesNotSupportMultipleCharacterRanges); + } + public static Exception VbLikeUnclosedBracket() + { + return new Exception (SR.VbLikeUnclosedBracket); + } + public static Exception UnrecognizedProviderMode(object p0) + { + return new Exception (SR.Format (SR.UnrecognizedProviderMode, p0)); + } + public static Exception CompiledQueryCannotReturnType(object p0) + { + return new Exception (SR.Format (SR.CompiledQueryCannotReturnType, p0)); + } + public static Exception ArgumentEmpty(object p0) + { + return new Exception (SR.Format (SR.ArgumentEmpty, p0)); + } + public static Exception ProviderCannotBeUsedAfterDispose() + { + return new Exception (SR.ProviderCannotBeUsedAfterDispose); + } + public static Exception ArgumentTypeMismatch(object p0) + { + return new Exception (SR.Format (SR.ArgumentTypeMismatch, p0)); + } + public static Exception ContextNotInitialized() + { + return new Exception (SR.ContextNotInitialized); + } + public static Exception CouldNotDetermineSqlType(object p0) + { + return new Exception (SR.Format (SR.CouldNotDetermineSqlType, p0)); + } + public static Exception CouldNotDetermineDbGeneratedSqlType(object p0) + { + return new Exception (SR.Format (SR.CouldNotDetermineDbGeneratedSqlType, p0)); + } + public static Exception CouldNotDetermineCatalogName() + { + return new Exception (SR.CouldNotDetermineCatalogName); + } + public static Exception CreateDatabaseFailedBecauseOfClassWithNoMembers(object p0) + { + return new Exception (SR.Format (SR.CreateDatabaseFailedBecauseOfClassWithNoMembers, p0)); + } + public static Exception CreateDatabaseFailedBecauseOfContextWithNoTables(object p0) + { + return new Exception (SR.Format (SR.CreateDatabaseFailedBecauseOfContextWithNoTables, p0)); + } + public static Exception CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists(object p0) + { + return new Exception (SR.Format (SR.CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists, p0)); + } + public static Exception DistributedTransactionsAreNotAllowed() + { + return new Exception (SR.DistributedTransactionsAreNotAllowed); + } + public static Exception InvalidConnectionArgument(object p0) + { + return new Exception (SR.Format (SR.InvalidConnectionArgument, p0)); + } + public static Exception CannotEnumerateResultsMoreThanOnce() + { + return new Exception (SR.CannotEnumerateResultsMoreThanOnce); + } + public static Exception IifReturnTypesMustBeEqual(object p0, object p1) + { + return new Exception (SR.Format (SR.IifReturnTypesMustBeEqual, p0, p1)); + } + public static Exception MethodNotMappedToStoredProcedure(object p0) + { + return new Exception (SR.Format (SR.MethodNotMappedToStoredProcedure, p0)); + } + public static Exception ResultTypeNotMappedToFunction(object p0, object p1) + { + return new Exception (SR.Format (SR.ResultTypeNotMappedToFunction, p0, p1)); + } + public static Exception ToStringOnlySupportedForPrimitiveTypes() + { + return new Exception (SR.ToStringOnlySupportedForPrimitiveTypes); + } + public static Exception TransactionDoesNotMatchConnection() + { + return new Exception (SR.TransactionDoesNotMatchConnection); + } + public static Exception UnexpectedTypeCode(object p0) + { + return new Exception (SR.Format (SR.UnexpectedTypeCode, p0)); + } + public static Exception UnsupportedDateTimeConstructorForm() + { + return new Exception (SR.UnsupportedDateTimeConstructorForm); + } + public static Exception UnsupportedDateTimeOffsetConstructorForm() + { + return new Exception (SR.UnsupportedDateTimeOffsetConstructorForm); + } + public static Exception UnsupportedStringConstructorForm() + { + return new Exception (SR.UnsupportedStringConstructorForm); + } + public static Exception UnsupportedTimeSpanConstructorForm() + { + return new Exception (SR.UnsupportedTimeSpanConstructorForm); + } + public static Exception UnsupportedTypeConstructorForm(object p0) + { + return new Exception (SR.Format (SR.UnsupportedTypeConstructorForm, p0)); + } + public static Exception WrongNumberOfValuesInCollectionArgument(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.WrongNumberOfValuesInCollectionArgument, p0, p1, p2)); + } + public static Exception MemberCannotBeTranslated(object p0, object p1) + { + return new Exception (SR.Format (SR.MemberCannotBeTranslated, p0, p1)); + } + public static Exception NonConstantExpressionsNotSupportedFor(object p0) + { + return new Exception (SR.Format (SR.NonConstantExpressionsNotSupportedFor, p0)); + } + public static Exception MathRoundNotSupported() + { + return new Exception (SR.MathRoundNotSupported); + } + public static Exception SqlMethodOnlyForSql(object p0) + { + return new Exception (SR.Format (SR.SqlMethodOnlyForSql, p0)); + } + public static Exception NonConstantExpressionsNotSupportedForRounding() + { + return new Exception (SR.NonConstantExpressionsNotSupportedForRounding); + } + public static Exception CompiledQueryAgainstMultipleShapesNotSupported() + { + return new Exception (SR.CompiledQueryAgainstMultipleShapesNotSupported); + } + public static Exception IndexOfWithStringComparisonArgNotSupported() + { + return new Exception (SR.IndexOfWithStringComparisonArgNotSupported); + } + public static Exception LastIndexOfWithStringComparisonArgNotSupported() + { + return new Exception (SR.LastIndexOfWithStringComparisonArgNotSupported); + } + public static Exception ConvertToCharFromBoolNotSupported() + { + return new Exception (SR.ConvertToCharFromBoolNotSupported); + } + public static Exception ConvertToDateTimeOnlyForDateTimeOrString() + { + return new Exception (SR.ConvertToDateTimeOnlyForDateTimeOrString); + } + public static Exception SkipIsValidOnlyOverOrderedQueries() + { + return new Exception (SR.SkipIsValidOnlyOverOrderedQueries); + } + public static Exception SkipRequiresSingleTableQueryWithPKs() + { + return new Exception (SR.SkipRequiresSingleTableQueryWithPKs); + } + public static Exception NoMethodInTypeMatchingArguments(object p0) + { + return new Exception (SR.Format (SR.NoMethodInTypeMatchingArguments, p0)); + } + public static Exception CannotConvertToEntityRef(object p0) + { + return new Exception (SR.Format (SR.CannotConvertToEntityRef, p0)); + } + public static Exception ExpressionNotDeferredQuerySource() + { + return new Exception (SR.ExpressionNotDeferredQuerySource); + } + public static Exception DeferredMemberWrongType() + { + return new Exception (SR.DeferredMemberWrongType); + } + public static Exception ArgumentWrongType(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.ArgumentWrongType, p0, p1, p2)); + } + public static Exception ArgumentWrongValue(object p0) + { + return new Exception (SR.Format (SR.ArgumentWrongValue, p0)); + } + public static Exception BadProjectionInSelect() + { + return new Exception (SR.BadProjectionInSelect); + } + public static Exception InvalidReturnFromSproc(object p0) + { + return new Exception (SR.Format (SR.InvalidReturnFromSproc, p0)); + } + public static Exception WrongDataContext() + { + return new Exception (SR.WrongDataContext); + } + public static Exception BinaryOperatorNotRecognized(object p0) + { + return new Exception (SR.Format (SR.BinaryOperatorNotRecognized, p0)); + } + public static Exception CannotAggregateType(object p0) + { + return new Exception (SR.Format (SR.CannotAggregateType, p0)); + } + public static Exception CannotCompareItemsAssociatedWithDifferentTable() + { + return new Exception (SR.CannotCompareItemsAssociatedWithDifferentTable); + } + public static Exception CannotDeleteTypesOf(object p0) + { + return new Exception (SR.Format (SR.CannotDeleteTypesOf, p0)); + } + public static Exception ClassLiteralsNotAllowed(object p0) + { + return new Exception (SR.Format (SR.ClassLiteralsNotAllowed, p0)); + } + public static Exception ClientCaseShouldNotHold(object p0) + { + return new Exception (SR.Format (SR.ClientCaseShouldNotHold, p0)); + } + public static Exception ClrBoolDoesNotAgreeWithSqlType(object p0) + { + return new Exception (SR.Format (SR.ClrBoolDoesNotAgreeWithSqlType, p0)); + } + public static Exception ColumnCannotReferToItself() + { + return new Exception (SR.ColumnCannotReferToItself); + } + public static Exception ColumnClrTypeDoesNotAgreeWithExpressionsClrType() + { + return new Exception (SR.ColumnClrTypeDoesNotAgreeWithExpressionsClrType); + } + public static Exception ColumnIsDefinedInMultiplePlaces(object p0) + { + return new Exception (SR.Format (SR.ColumnIsDefinedInMultiplePlaces, p0)); + } + public static Exception ColumnIsNotAccessibleThroughGroupBy(object p0) + { + return new Exception (SR.Format (SR.ColumnIsNotAccessibleThroughGroupBy, p0)); + } + public static Exception ColumnIsNotAccessibleThroughDistinct(object p0) + { + return new Exception (SR.Format (SR.ColumnIsNotAccessibleThroughDistinct, p0)); + } + public static Exception ColumnReferencedIsNotInScope(object p0) + { + return new Exception (SR.Format (SR.ColumnReferencedIsNotInScope, p0)); + } + public static Exception ConstructedArraysNotSupported() + { + return new Exception (SR.ConstructedArraysNotSupported); + } + public static Exception ParametersCannotBeSequences() + { + return new Exception (SR.ParametersCannotBeSequences); + } + public static Exception CapturedValuesCannotBeSequences() + { + return new Exception (SR.CapturedValuesCannotBeSequences); + } + public static Exception IQueryableCannotReturnSelfReferencingConstantExpression() + { + return new Exception (SR.IQueryableCannotReturnSelfReferencingConstantExpression); + } + public static Exception CouldNotAssignSequence(object p0, object p1) + { + return new Exception (SR.Format (SR.CouldNotAssignSequence, p0, p1)); + } + public static Exception CouldNotTranslateExpressionForReading(object p0) + { + return new Exception (SR.Format (SR.CouldNotTranslateExpressionForReading, p0)); + } + public static Exception CouldNotGetClrType() + { + return new Exception (SR.CouldNotGetClrType); + } + public static Exception CouldNotGetSqlType() + { + return new Exception (SR.CouldNotGetSqlType); + } + public static Exception CouldNotHandleAliasRef(object p0) + { + return new Exception (SR.Format (SR.CouldNotHandleAliasRef, p0)); + } + public static Exception DidNotExpectAs(object p0) + { + return new Exception (SR.Format (SR.DidNotExpectAs, p0)); + } + public static Exception DidNotExpectTypeBinding() + { + return new Exception (SR.DidNotExpectTypeBinding); + } + public static Exception DidNotExpectTypeChange(object p0, object p1) + { + return new Exception (SR.Format (SR.DidNotExpectTypeChange, p0, p1)); + } + public static Exception EmptyCaseNotSupported() + { + return new Exception (SR.EmptyCaseNotSupported); + } + public static Exception ExpectedNoObjectType() + { + return new Exception (SR.ExpectedNoObjectType); + } + public static Exception ExpectedBitFoundPredicate() + { + return new Exception (SR.ExpectedBitFoundPredicate); + } + public static Exception ExpectedClrTypesToAgree(object p0, object p1) + { + return new Exception (SR.Format (SR.ExpectedClrTypesToAgree, p0, p1)); + } + public static Exception ExpectedPredicateFoundBit() + { + return new Exception (SR.ExpectedPredicateFoundBit); + } + public static Exception ExpectedQueryableArgument(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.ExpectedQueryableArgument, p0, p1, p2)); + } + public static Exception InvalidGroupByExpressionType(object p0) + { + return new Exception (SR.Format (SR.InvalidGroupByExpressionType, p0)); + } + public static Exception InvalidGroupByExpression() + { + return new Exception (SR.InvalidGroupByExpression); + } + public static Exception InvalidOrderByExpression(object p0) + { + return new Exception (SR.Format (SR.InvalidOrderByExpression, p0)); + } + public static Exception Impossible() + { + return new Exception (SR.Impossible); + } + public static Exception InfiniteDescent() + { + return new Exception (SR.InfiniteDescent); + } + public static Exception InvalidFormatNode(object p0) + { + return new Exception (SR.Format (SR.InvalidFormatNode, p0)); + } + public static Exception InvalidReferenceToRemovedAliasDuringDeflation() + { + return new Exception (SR.InvalidReferenceToRemovedAliasDuringDeflation); + } + public static Exception InvalidSequenceOperatorCall(object p0) + { + return new Exception (SR.Format (SR.InvalidSequenceOperatorCall, p0)); + } + public static Exception ParameterNotInScope(object p0) + { + return new Exception (SR.Format (SR.ParameterNotInScope, p0)); + } + public static Exception MemberAccessIllegal(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.MemberAccessIllegal, p0, p1, p2)); + } + public static Exception MemberCouldNotBeTranslated(object p0, object p1) + { + return new Exception (SR.Format (SR.MemberCouldNotBeTranslated, p0, p1)); + } + public static Exception MemberNotPartOfProjection(object p0, object p1) + { + return new Exception (SR.Format (SR.MemberNotPartOfProjection, p0, p1)); + } + public static Exception MethodHasNoSupportConversionToSql(object p0) + { + return new Exception (SR.Format (SR.MethodHasNoSupportConversionToSql, p0)); + } + public static Exception MethodFormHasNoSupportConversionToSql(object p0, object p1) + { + return new Exception (SR.Format (SR.MethodFormHasNoSupportConversionToSql, p0, p1)); + } + public static Exception UnableToBindUnmappedMember(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.UnableToBindUnmappedMember, p0, p1, p2)); + } + public static Exception QueryOperatorNotSupported(object p0) + { + return new Exception (SR.Format (SR.QueryOperatorNotSupported, p0)); + } + public static Exception QueryOperatorOverloadNotSupported(object p0) + { + return new Exception (SR.Format (SR.QueryOperatorOverloadNotSupported, p0)); + } + public static Exception ReaderUsedAfterDispose() + { + return new Exception (SR.ReaderUsedAfterDispose); + } + public static Exception RequiredColumnDoesNotExist(object p0) + { + return new Exception (SR.Format (SR.RequiredColumnDoesNotExist, p0)); + } + public static Exception SimpleCaseShouldNotHold(object p0) + { + return new Exception (SR.Format (SR.SimpleCaseShouldNotHold, p0)); + } + public static Exception TypeBinaryOperatorNotRecognized() + { + return new Exception (SR.TypeBinaryOperatorNotRecognized); + } + public static Exception UnexpectedNode(object p0) + { + return new Exception (SR.Format (SR.UnexpectedNode, p0)); + } + public static Exception UnexpectedFloatingColumn() + { + return new Exception (SR.UnexpectedFloatingColumn); + } + public static Exception UnexpectedSharedExpression() + { + return new Exception (SR.UnexpectedSharedExpression); + } + public static Exception UnexpectedSharedExpressionReference() + { + return new Exception (SR.UnexpectedSharedExpressionReference); + } + public static Exception UnhandledBindingType(object p0) + { + return new Exception (SR.Format (SR.UnhandledBindingType, p0)); + } + public static Exception UnhandledStringTypeComparison() + { + return new Exception (SR.UnhandledStringTypeComparison); + } + public static Exception UnhandledMemberAccess(object p0, object p1) + { + return new Exception (SR.Format (SR.UnhandledMemberAccess, p0, p1)); + } + public static Exception UnmappedDataMember(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.UnmappedDataMember, p0, p1, p2)); + } + public static Exception UnrecognizedExpressionNode(object p0) + { + return new Exception (SR.Format (SR.UnrecognizedExpressionNode, p0)); + } + public static Exception ValueHasNoLiteralInSql(object p0) + { + return new Exception (SR.Format (SR.ValueHasNoLiteralInSql, p0)); + } + public static Exception UnionIncompatibleConstruction() + { + return new Exception (SR.UnionIncompatibleConstruction); + } + public static Exception UnionDifferentMembers() + { + return new Exception (SR.UnionDifferentMembers); + } + public static Exception UnionDifferentMemberOrder() + { + return new Exception (SR.UnionDifferentMemberOrder); + } + public static Exception UnionOfIncompatibleDynamicTypes() + { + return new Exception (SR.UnionOfIncompatibleDynamicTypes); + } + public static Exception UnionWithHierarchy() + { + return new Exception (SR.UnionWithHierarchy); + } + public static Exception UnhandledExpressionType(object p0) + { + return new Exception (SR.Format (SR.UnhandledExpressionType, p0)); + } + public static Exception IntersectNotSupportedForHierarchicalTypes() + { + return new Exception (SR.IntersectNotSupportedForHierarchicalTypes); + } + public static Exception ExceptNotSupportedForHierarchicalTypes() + { + return new Exception (SR.ExceptNotSupportedForHierarchicalTypes); + } + public static Exception NonCountAggregateFunctionsAreNotValidOnProjections(object p0) + { + return new Exception (SR.Format (SR.NonCountAggregateFunctionsAreNotValidOnProjections, p0)); + } + public static Exception GroupingNotSupportedAsOrderCriterion() + { + return new Exception (SR.GroupingNotSupportedAsOrderCriterion); + } + public static Exception SelectManyDoesNotSupportStrings() + { + return new Exception (SR.SelectManyDoesNotSupportStrings); + } + public static Exception SequenceOperatorsNotSupportedForType(object p0) + { + return new Exception (SR.Format (SR.SequenceOperatorsNotSupportedForType, p0)); + } + public static Exception SkipNotSupportedForSequenceTypes() + { + return new Exception (SR.SkipNotSupportedForSequenceTypes); + } + public static Exception ComparisonNotSupportedForType(object p0) + { + return new Exception (SR.Format (SR.ComparisonNotSupportedForType, p0)); + } + public static Exception QueryOnLocalCollectionNotSupported() + { + return new Exception (SR.QueryOnLocalCollectionNotSupported); + } + public static Exception UnsupportedNodeType(object p0) + { + return new Exception (SR.Format (SR.UnsupportedNodeType, p0)); + } + public static Exception TypeColumnWithUnhandledSource() + { + return new Exception (SR.TypeColumnWithUnhandledSource); + } + public static Exception GeneralCollectionMaterializationNotSupported() + { + return new Exception (SR.GeneralCollectionMaterializationNotSupported); + } + public static Exception TypeCannotBeOrdered(object p0) + { + return new Exception (SR.Format (SR.TypeCannotBeOrdered, p0)); + } + public static Exception InvalidMethodExecution(object p0) + { + return new Exception (SR.Format (SR.InvalidMethodExecution, p0)); + } + public static Exception SprocsCannotBeComposed() + { + return new Exception (SR.SprocsCannotBeComposed); + } + public static Exception InsertItemMustBeConstant() + { + return new Exception (SR.InsertItemMustBeConstant); + } + public static Exception UpdateItemMustBeConstant() + { + return new Exception (SR.UpdateItemMustBeConstant); + } + public static Exception CouldNotConvertToPropertyOrField(object p0) + { + return new Exception (SR.Format (SR.CouldNotConvertToPropertyOrField, p0)); + } + public static Exception BadParameterType(object p0) + { + return new Exception (SR.Format (SR.BadParameterType, p0)); + } + public static Exception CannotAssignToMember(object p0) + { + return new Exception (SR.Format (SR.CannotAssignToMember, p0)); + } + public static Exception MappedTypeMustHaveDefaultConstructor(object p0) + { + return new Exception (SR.Format (SR.MappedTypeMustHaveDefaultConstructor, p0)); + } + public static Exception UnsafeStringConversion(object p0, object p1) + { + return new Exception (SR.Format (SR.UnsafeStringConversion, p0, p1)); + } + public static Exception CannotAssignNull(object p0) + { + return new Exception (SR.Format (SR.CannotAssignNull, p0)); + } + public static Exception ProviderNotInstalled(object p0, object p1) + { + return new Exception (SR.Format (SR.ProviderNotInstalled, p0, p1)); + } + public static Exception InvalidProviderType(object p0) + { + return new Exception (SR.Format (SR.InvalidProviderType, p0)); + } + public static Exception InvalidDbGeneratedType(object p0) + { + return new Exception (SR.Format (SR.InvalidDbGeneratedType, p0)); + } + public static Exception DatabaseDeleteThroughContext() + { + return new Exception (SR.DatabaseDeleteThroughContext); + } + public static Exception CannotMaterializeEntityType(object p0) + { + return new Exception (SR.Format (SR.CannotMaterializeEntityType, p0)); + } + public static Exception CannotMaterializeList(object p0) + { + return new Exception (SR.Format (SR.CannotMaterializeList, p0)); + } + public static Exception CouldNotConvert(object p0, object p1) + { + return new Exception (SR.Format (SR.CouldNotConvert, p0, p1)); + } + public static Exception CannotAddChangeConflicts() + { + return new Exception (SR.CannotAddChangeConflicts); + } + public static Exception CannotRemoveChangeConflicts() + { + return new Exception (SR.CannotRemoveChangeConflicts); + } + public static Exception InconsistentAssociationAndKeyChange(object p0, object p1) + { + return new Exception (SR.Format (SR.InconsistentAssociationAndKeyChange, p0, p1)); + } + public static Exception UnableToDetermineDataContext() + { + return new Exception (SR.UnableToDetermineDataContext); + } + public static Exception ArgumentTypeHasNoIdentityKey(object p0) + { + return new Exception (SR.Format (SR.ArgumentTypeHasNoIdentityKey, p0)); + } + public static Exception CannotRemoveUnattachedEntity() + { + return new Exception (SR.CannotRemoveUnattachedEntity); + } + public static Exception ColumnMappedMoreThanOnce(object p0) + { + return new Exception (SR.Format (SR.ColumnMappedMoreThanOnce, p0)); + } + public static Exception CouldNotAttach() + { + return new Exception (SR.CouldNotAttach); + } + public static Exception CouldNotGetTableForSubtype(object p0, object p1) + { + return new Exception (SR.Format (SR.CouldNotGetTableForSubtype, p0, p1)); + } + public static Exception CouldNotRemoveRelationshipBecauseOneSideCannotBeNull(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.CouldNotRemoveRelationshipBecauseOneSideCannotBeNull, p0, p1, p2)); + } + public static InvalidOperationException EntitySetAlreadyLoaded() + { + return new InvalidOperationException (SR.EntitySetAlreadyLoaded); + } + public static Exception EntitySetModifiedDuringEnumeration() + { + return new Exception (SR.EntitySetModifiedDuringEnumeration); + } + public static Exception ExpectedQueryableArgument(object p0, object p1) + { + return new Exception (SR.Format (SR.ExpectedQueryableArgument, p0, p1)); + } + public static Exception ExpectedUpdateDeleteOrChange() + { + return new Exception (SR.ExpectedUpdateDeleteOrChange); + } + public static Exception KeyIsWrongSize(object p0, object p1) + { + return new Exception (SR.Format (SR.KeyIsWrongSize, p0, p1)); + } + public static Exception KeyValueIsWrongType(object p0, object p1) + { + return new Exception (SR.Format (SR.KeyValueIsWrongType, p0, p1)); + } + public static Exception IdentityChangeNotAllowed(object p0, object p1) + { + return new Exception (SR.Format (SR.IdentityChangeNotAllowed, p0, p1)); + } + public static Exception DbGeneratedChangeNotAllowed(object p0, object p1) + { + return new Exception (SR.Format (SR.DbGeneratedChangeNotAllowed, p0, p1)); + } + public static Exception ModifyDuringAddOrRemove() + { + return new Exception (SR.ModifyDuringAddOrRemove); + } + public static Exception ProviderDoesNotImplementRequiredInterface(object p0, object p1) + { + return new Exception (SR.Format (SR.ProviderDoesNotImplementRequiredInterface, p0, p1)); + } + public static Exception ProviderTypeNull() + { + return new Exception (SR.ProviderTypeNull); + } + public static Exception TypeCouldNotBeAdded(object p0) + { + return new Exception (SR.Format (SR.TypeCouldNotBeAdded, p0)); + } + public static Exception TypeCouldNotBeRemoved(object p0) + { + return new Exception (SR.Format (SR.TypeCouldNotBeRemoved, p0)); + } + public static Exception TypeCouldNotBeTracked(object p0) + { + return new Exception (SR.Format (SR.TypeCouldNotBeTracked, p0)); + } + public static Exception TypeIsNotEntity(object p0) + { + return new Exception (SR.Format (SR.TypeIsNotEntity, p0)); + } + public static Exception UnrecognizedRefreshObject() + { + return new Exception (SR.UnrecognizedRefreshObject); + } + public static Exception ObjectTrackingRequired() + { + return new Exception (SR.ObjectTrackingRequired); + } + public static Exception OptionsCannotBeModifiedAfterQuery() + { + return new Exception (SR.OptionsCannotBeModifiedAfterQuery); + } + public static Exception DeferredLoadingRequiresObjectTracking() + { + return new Exception (SR.DeferredLoadingRequiresObjectTracking); + } + public static Exception SubqueryDoesNotSupportOperator(object p0) + { + return new Exception (SR.Format (SR.SubqueryDoesNotSupportOperator, p0)); + } + public static Exception SubqueryNotSupportedOn(object p0) + { + return new Exception (SR.Format (SR.SubqueryNotSupportedOn, p0)); + } + public static Exception SubqueryNotSupportedOnType(object p0, object p1) + { + return new Exception (SR.Format (SR.SubqueryNotSupportedOnType, p0, p1)); + } + public static Exception SubqueryNotAllowedAfterFreeze() + { + return new Exception (SR.SubqueryNotAllowedAfterFreeze); + } + public static Exception IncludeNotAllowedAfterFreeze() + { + return new Exception (SR.IncludeNotAllowedAfterFreeze); + } + public static Exception LoadOptionsChangeNotAllowedAfterQuery() + { + return new Exception (SR.LoadOptionsChangeNotAllowedAfterQuery); + } + public static Exception IncludeCycleNotAllowed() + { + return new Exception (SR.IncludeCycleNotAllowed); + } + public static Exception SubqueryMustBeSequence() + { + return new Exception (SR.SubqueryMustBeSequence); + } + public static Exception RefreshOfDeletedObject() + { + return new Exception (SR.RefreshOfDeletedObject); + } + public static Exception RefreshOfNewObject() + { + return new Exception (SR.RefreshOfNewObject); + } + public static Exception CannotChangeInheritanceType(object p0, object p1, object p2, object p3) + { + return new Exception (SR.Format (SR.CannotChangeInheritanceType, p0, p1, p2, p3)); + } + public static Exception DataContextCannotBeUsedAfterDispose() + { + return new Exception (SR.DataContextCannotBeUsedAfterDispose); + } + public static InvalidOperationException TypeIsNotMarkedAsTable(object p0) + { + return new InvalidOperationException (SR.Format (SR.TypeIsNotMarkedAsTable, p0)); + } + public static Exception NonEntityAssociationMapping(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.NonEntityAssociationMapping, p0, p1, p2)); + } + public static Exception CannotPerformCUDOnReadOnlyTable(object p0) + { + return new Exception (SR.Format (SR.CannotPerformCUDOnReadOnlyTable, p0)); + } + public static Exception CycleDetected() + { + return new Exception (SR.CycleDetected); + } + public static Exception CantAddAlreadyExistingItem() + { + return new Exception (SR.CantAddAlreadyExistingItem); + } + public static Exception InsertAutoSyncFailure() + { + return new Exception (SR.InsertAutoSyncFailure); + } + public static Exception EntitySetDataBindingWithAbstractBaseClass(object p0) + { + return new Exception (SR.Format (SR.EntitySetDataBindingWithAbstractBaseClass, p0)); + } + public static Exception EntitySetDataBindingWithNonPublicDefaultConstructor(object p0) + { + return new Exception (SR.Format (SR.EntitySetDataBindingWithNonPublicDefaultConstructor, p0)); + } + public static Exception InvalidLoadOptionsLoadMemberSpecification() + { + return new Exception (SR.InvalidLoadOptionsLoadMemberSpecification); + } + public static Exception EntityIsTheWrongType() + { + return new Exception (SR.EntityIsTheWrongType); + } + public static Exception OriginalEntityIsWrongType() + { + return new Exception (SR.OriginalEntityIsWrongType); + } + public static Exception CannotAttachAlreadyExistingEntity() + { + return new Exception (SR.CannotAttachAlreadyExistingEntity); + } + public static Exception CannotAttachAsModifiedWithoutOriginalState() + { + return new Exception (SR.CannotAttachAsModifiedWithoutOriginalState); + } + public static Exception CannotPerformOperationDuringSubmitChanges() + { + return new Exception (SR.CannotPerformOperationDuringSubmitChanges); + } + public static Exception CannotPerformOperationOutsideSubmitChanges() + { + return new Exception (SR.CannotPerformOperationOutsideSubmitChanges); + } + public static Exception CannotPerformOperationForUntrackedObject() + { + return new Exception (SR.CannotPerformOperationForUntrackedObject); + } + public static Exception CannotAttachAddNonNewEntities() + { + return new Exception (SR.CannotAttachAddNonNewEntities); + } + public static Exception QueryWasCompiledForDifferentMappingSource() + { + return new Exception (SR.QueryWasCompiledForDifferentMappingSource); + } + + public static Exception InvalidFieldInfo(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.InvalidFieldInfo, p0, p1, p2)); + } + public static Exception CouldNotCreateAccessorToProperty(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.CouldNotCreateAccessorToProperty, p0, p1, p2)); + } + public static Exception UnableToAssignValueToReadonlyProperty(object p0) + { + return new Exception (SR.Format (SR.UnableToAssignValueToReadonlyProperty, p0)); + } + public static Exception LinkAlreadyLoaded() + { + return new Exception (SR.LinkAlreadyLoaded); + } + public static Exception EntityRefAlreadyLoaded() + { + return new Exception (SR.EntityRefAlreadyLoaded); + } + public static Exception NoDiscriminatorFound(object p0) + { + return new Exception (SR.Format (SR.NoDiscriminatorFound, p0)); + } + public static Exception InheritanceTypeDoesNotDeriveFromRoot(object p0, object p1) + { + return new Exception (SR.Format (SR.InheritanceTypeDoesNotDeriveFromRoot, p0, p1)); + } + public static Exception AbstractClassAssignInheritanceDiscriminator(object p0) + { + return new Exception (SR.Format (SR.AbstractClassAssignInheritanceDiscriminator, p0)); + } + public static Exception CannotGetInheritanceDefaultFromNonInheritanceClass() + { + return new Exception (SR.CannotGetInheritanceDefaultFromNonInheritanceClass); + } + public static Exception InheritanceCodeMayNotBeNull() + { + return new Exception (SR.InheritanceCodeMayNotBeNull); + } + public static Exception InheritanceTypeHasMultipleDiscriminators(object p0) + { + return new Exception (SR.Format (SR.InheritanceTypeHasMultipleDiscriminators, p0)); + } + public static Exception InheritanceCodeUsedForMultipleTypes(object p0) + { + return new Exception (SR.Format (SR.InheritanceCodeUsedForMultipleTypes, p0)); + } + public static Exception InheritanceTypeHasMultipleDefaults(object p0) + { + return new Exception (SR.Format (SR.InheritanceTypeHasMultipleDefaults, p0)); + } + public static Exception InheritanceHierarchyDoesNotDefineDefault(object p0) + { + return new Exception (SR.Format (SR.InheritanceHierarchyDoesNotDefineDefault, p0)); + } + public static Exception InheritanceSubTypeIsAlsoRoot(object p0) + { + return new Exception (SR.Format (SR.InheritanceSubTypeIsAlsoRoot, p0)); + } + public static Exception NonInheritanceClassHasDiscriminator(object p0) + { + return new Exception (SR.Format (SR.NonInheritanceClassHasDiscriminator, p0)); + } + public static Exception MemberMappedMoreThanOnce(object p0) + { + return new Exception (SR.Format (SR.MemberMappedMoreThanOnce, p0)); + } + public static Exception BadStorageProperty(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.BadStorageProperty, p0, p1, p2)); + } + public static Exception IncorrectAutoSyncSpecification(object p0) + { + return new Exception (SR.Format (SR.IncorrectAutoSyncSpecification, p0)); + } + public static Exception UnhandledDeferredStorageType(object p0) + { + return new Exception (SR.Format (SR.UnhandledDeferredStorageType, p0)); + } + public static Exception BadKeyMember(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.BadKeyMember, p0, p1, p2)); + } + public static Exception ProviderTypeNotFound(object p0) + { + return new Exception (SR.Format (SR.ProviderTypeNotFound, p0)); + } + public static Exception MethodCannotBeFound(object p0) + { + return new Exception (SR.Format (SR.MethodCannotBeFound, p0)); + } + public static Exception UnableToResolveRootForType(object p0) + { + return new Exception (SR.Format (SR.UnableToResolveRootForType, p0)); + } + public static Exception MappingForTableUndefined(object p0) + { + return new Exception (SR.Format (SR.MappingForTableUndefined, p0)); + } + public static Exception CouldNotFindTypeFromMapping(object p0) + { + return new Exception (SR.Format (SR.CouldNotFindTypeFromMapping, p0)); + } + public static Exception TwoMembersMarkedAsPrimaryKeyAndDBGenerated(object p0, object p1) + { + return new Exception (SR.Format (SR.TwoMembersMarkedAsPrimaryKeyAndDBGenerated, p0, p1)); + } + public static Exception TwoMembersMarkedAsRowVersion(object p0, object p1) + { + return new Exception (SR.Format (SR.TwoMembersMarkedAsRowVersion, p0, p1)); + } + public static Exception TwoMembersMarkedAsInheritanceDiscriminator(object p0, object p1) + { + return new Exception (SR.Format (SR.TwoMembersMarkedAsInheritanceDiscriminator, p0, p1)); + } + public static Exception CouldNotFindRuntimeTypeForMapping(object p0) + { + return new Exception (SR.Format (SR.CouldNotFindRuntimeTypeForMapping, p0)); + } + public static Exception UnexpectedNull(object p0) + { + return new Exception (SR.Format (SR.UnexpectedNull, p0)); + } + public static Exception CouldNotFindElementTypeInModel(object p0) + { + return new Exception (SR.Format (SR.CouldNotFindElementTypeInModel, p0)); + } + public static Exception BadFunctionTypeInMethodMapping(object p0) + { + return new Exception (SR.Format (SR.BadFunctionTypeInMethodMapping, p0)); + } + public static Exception IncorrectNumberOfParametersMappedForMethod(object p0) + { + return new Exception (SR.Format (SR.IncorrectNumberOfParametersMappedForMethod, p0)); + } + public static Exception CouldNotFindRequiredAttribute(object p0, object p1) + { + return new Exception (SR.Format (SR.CouldNotFindRequiredAttribute, p0, p1)); + } + public static Exception InvalidDeleteOnNullSpecification(object p0) + { + return new Exception (SR.Format (SR.InvalidDeleteOnNullSpecification, p0)); + } + public static Exception MappedMemberHadNoCorrespondingMemberInType(object p0, object p1) + { + return new Exception (SR.Format (SR.MappedMemberHadNoCorrespondingMemberInType, p0, p1)); + } + public static Exception UnrecognizedAttribute(object p0) + { + return new Exception (SR.Format (SR.UnrecognizedAttribute, p0)); + } + public static Exception UnrecognizedElement(object p0) + { + return new Exception (SR.Format (SR.UnrecognizedElement, p0)); + } + public static Exception TooManyResultTypesDeclaredForFunction(object p0) + { + return new Exception (SR.Format (SR.TooManyResultTypesDeclaredForFunction, p0)); + } + public static Exception NoResultTypesDeclaredForFunction(object p0) + { + return new Exception (SR.Format (SR.NoResultTypesDeclaredForFunction, p0)); + } + public static Exception UnexpectedElement(object p0, object p1) + { + return new Exception (SR.Format (SR.UnexpectedElement, p0, p1)); + } + public static Exception ExpectedEmptyElement(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.ExpectedEmptyElement, p0, p1, p2)); + } + public static Exception DatabaseNodeNotFound(object p0) + { + return new Exception (SR.Format (SR.DatabaseNodeNotFound, p0)); + } + public static Exception DiscriminatorClrTypeNotSupported(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.DiscriminatorClrTypeNotSupported, p0, p1, p2)); + } + public static Exception IdentityClrTypeNotSupported(object p0, object p1, object p2) + { + return new Exception (SR.Format (SR.IdentityClrTypeNotSupported, p0, p1, p2)); + } + public static Exception PrimaryKeyInSubTypeNotSupported(object p0, object p1) + { + return new Exception (SR.Format (SR.PrimaryKeyInSubTypeNotSupported, p0, p1)); + } + public static Exception MismatchedThisKeyOtherKey(object p0, object p1) + { + return new Exception (SR.Format (SR.MismatchedThisKeyOtherKey, p0, p1)); + } + public static Exception InvalidUseOfGenericMethodAsMappedFunction(object p0) + { + return new Exception (SR.Format (SR.InvalidUseOfGenericMethodAsMappedFunction, p0)); + } + public static Exception MappingOfInterfacesMemberIsNotSupported(object p0, object p1) + { + return new Exception (SR.Format (SR.MappingOfInterfacesMemberIsNotSupported, p0, p1)); + } + public static Exception UnmappedClassMember(object p0, object p1) + { + return new Exception (SR.Format (SR.UnmappedClassMember, p0, p1)); + } + + // common + public static Exception ArgumentNull(string paramName) + { + return new ArgumentNullException (paramName); + } + public static Exception ArgumentOutOfRange(string paramName) + { + return new ArgumentOutOfRangeException (paramName); + } + public static Exception NotImplemented() + { + return new NotImplementedException (); + } + public static Exception NotSupported() + { + return new NotSupportedException (); + } + } +} + +namespace System.Data.Linq.SqlClient +{ + // in the generated class in referencesource this seems to be in two different namespaces, we just forward to the other + internal partial class Error + { + public static Exception ArgumentNull(string paramName) + { + return System.Data.Linq.Error.ArgumentNull(paramName); + } + public static Exception ArgumentOutOfRange(string paramName) + { + return System.Data.Linq.Error.ArgumentOutOfRange(paramName); + } + public static Exception ArgumentWrongType(object p0, object p1, object p2) + { + return System.Data.Linq.Error.ArgumentWrongType(p0, p1, p2); + } + public static Exception ArgumentTypeMismatch(object p0) + { + return System.Data.Linq.Error.ArgumentTypeMismatch(p0); + } + public static Exception ArgumentWrongValue(object p0) + { + return System.Data.Linq.Error.ArgumentWrongValue(p0); + } + public static Exception BadParameterType(object p0) + { + return System.Data.Linq.Error.BadParameterType(p0); + } + public static Exception BadProjectionInSelect() + { + return System.Data.Linq.Error.BadProjectionInSelect(); + } + public static Exception BinaryOperatorNotRecognized(object p0) + { + return System.Data.Linq.Error.BinaryOperatorNotRecognized(p0); + } + public static Exception CannotAggregateType(object p0) + { + return System.Data.Linq.Error.CannotAggregateType(p0); + } + public static Exception CannotAssignNull(object p0) + { + return System.Data.Linq.Error.CannotAssignNull(p0); + } + public static Exception CannotAssignToMember(object p0) + { + return System.Data.Linq.Error.CannotAssignToMember(p0); + } + public static Exception CannotCompareItemsAssociatedWithDifferentTable() + { + return System.Data.Linq.Error.CannotCompareItemsAssociatedWithDifferentTable(); + } + public static Exception CannotConvertToEntityRef(object p0) + { + return System.Data.Linq.Error.CannotConvertToEntityRef(p0); + } + public static Exception CannotEnumerateResultsMoreThanOnce() + { + return System.Data.Linq.Error.CannotEnumerateResultsMoreThanOnce(); + } + public static Exception CannotMaterializeEntityType(object p0) + { + return System.Data.Linq.Error.CannotMaterializeEntityType(p0); + } + public static Exception CannotMaterializeList(object p0) + { + return System.Data.Linq.Error.CannotMaterializeList(p0); + } + public static Exception CapturedValuesCannotBeSequences() + { + return System.Data.Linq.Error.CapturedValuesCannotBeSequences(); + } + public static Exception ClassLiteralsNotAllowed(object p0) + { + return System.Data.Linq.Error.ClassLiteralsNotAllowed(p0); + } + public static Exception ColumnCannotReferToItself() + { + return System.Data.Linq.Error.ColumnCannotReferToItself(); + } + public static Exception ColumnClrTypeDoesNotAgreeWithExpressionsClrType() + { + return System.Data.Linq.Error.ColumnClrTypeDoesNotAgreeWithExpressionsClrType(); + } + public static Exception ColumnIsDefinedInMultiplePlaces(object p0) + { + return System.Data.Linq.Error.ColumnIsDefinedInMultiplePlaces(p0); + } + public static Exception ColumnIsNotAccessibleThroughDistinct(object p0) + { + return System.Data.Linq.Error.ColumnIsNotAccessibleThroughDistinct(p0); + } + public static Exception ColumnIsNotAccessibleThroughGroupBy(object p0) + { + return System.Data.Linq.Error.ColumnIsNotAccessibleThroughGroupBy(p0); + } + public static Exception ColumnReferencedIsNotInScope(object p0) + { + return System.Data.Linq.Error.ColumnReferencedIsNotInScope(p0); + } + public static Exception ComparisonNotSupportedForType(object p0) + { + return System.Data.Linq.Error.ComparisonNotSupportedForType(p0); + } + public static Exception CompiledQueryAgainstMultipleShapesNotSupported() + { + return System.Data.Linq.Error.CompiledQueryAgainstMultipleShapesNotSupported(); + } + public static Exception ConstructedArraysNotSupported() + { + return System.Data.Linq.Error.ConstructedArraysNotSupported(); + } + public static Exception ContextNotInitialized() + { + return System.Data.Linq.Error.ContextNotInitialized(); + } + public static Exception ConvertToCharFromBoolNotSupported() + { + return System.Data.Linq.Error.ConvertToCharFromBoolNotSupported(); + } + public static Exception ConvertToDateTimeOnlyForDateTimeOrString() + { + return System.Data.Linq.Error.ConvertToDateTimeOnlyForDateTimeOrString(); + } + public static Exception CouldNotConvert(object p0, object p1) + { + return System.Data.Linq.Error.CouldNotConvert(p0, p1); + } + public static Exception CouldNotConvertToPropertyOrField(object p0) + { + return System.Data.Linq.Error.CouldNotConvertToPropertyOrField(p0); + } + public static Exception CouldNotDetermineCatalogName() + { + return System.Data.Linq.Error.CouldNotDetermineCatalogName(); + } + public static Exception CouldNotDetermineDbGeneratedSqlType(object p0) + { + return System.Data.Linq.Error.CouldNotDetermineDbGeneratedSqlType(p0); + } + public static Exception CouldNotDetermineSqlType(object p0) + { + return System.Data.Linq.Error.CouldNotDetermineSqlType(p0); + } + public static Exception CouldNotGetClrType() + { + return System.Data.Linq.Error.CouldNotGetClrType(); + } + public static Exception CouldNotGetSqlType() + { + return System.Data.Linq.Error.CouldNotGetSqlType(); + } + public static Exception CouldNotHandleAliasRef(object p0) + { + return System.Data.Linq.Error.CouldNotHandleAliasRef(p0); + } + public static Exception CouldNotTranslateExpressionForReading(object p0) + { + return System.Data.Linq.Error.CouldNotTranslateExpressionForReading(p0); + } + public static Exception CreateDatabaseFailedBecauseOfClassWithNoMembers(object p0) + { + return System.Data.Linq.Error.CreateDatabaseFailedBecauseOfClassWithNoMembers(p0); + } + public static Exception CreateDatabaseFailedBecauseOfContextWithNoTables(object p0) + { + return System.Data.Linq.Error.CreateDatabaseFailedBecauseOfContextWithNoTables(p0); + } + public static Exception CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists(object p0) + { + return System.Data.Linq.Error.CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists(p0); + } + public static Exception DatabaseDeleteThroughContext() + { + return System.Data.Linq.Error.DatabaseDeleteThroughContext(); + } + public static Exception DeferredMemberWrongType() + { + return System.Data.Linq.Error.DeferredMemberWrongType(); + } + public static Exception DidNotExpectAs(object p0) + { + return System.Data.Linq.Error.DidNotExpectAs(p0); + } + public static Exception DidNotExpectTypeBinding() + { + return System.Data.Linq.Error.DidNotExpectTypeBinding(); + } + public static Exception DidNotExpectTypeChange(object p0, object p1) + { + return System.Data.Linq.Error.DidNotExpectTypeChange(p0, p1); + } + public static Exception EmptyCaseNotSupported() + { + return System.Data.Linq.Error.EmptyCaseNotSupported(); + } + public static Exception ExceptNotSupportedForHierarchicalTypes() + { + return System.Data.Linq.Error.ExceptNotSupportedForHierarchicalTypes(); + } + public static Exception ExpectedBitFoundPredicate() + { + return System.Data.Linq.Error.ExpectedBitFoundPredicate(); + } + public static Exception ExpectedClrTypesToAgree(object p0, object p1) + { + return System.Data.Linq.Error.ExpectedClrTypesToAgree(p0, p1); + } + public static Exception ExpectedPredicateFoundBit() + { + return System.Data.Linq.Error.ExpectedPredicateFoundBit(); + } + public static Exception ExpressionNotDeferredQuerySource() + { + return System.Data.Linq.Error.ExpressionNotDeferredQuerySource(); + } + public static Exception GeneralCollectionMaterializationNotSupported() + { + return System.Data.Linq.Error.GeneralCollectionMaterializationNotSupported(); + } + public static Exception GroupingNotSupportedAsOrderCriterion() + { + return System.Data.Linq.Error.GroupingNotSupportedAsOrderCriterion(); + } + public static Exception IQueryableCannotReturnSelfReferencingConstantExpression() + { + return System.Data.Linq.Error.IQueryableCannotReturnSelfReferencingConstantExpression(); + } + public static Exception IifReturnTypesMustBeEqual(object p0, object p1) + { + return System.Data.Linq.Error.IifReturnTypesMustBeEqual(p0, p1); + } + public static Exception IndexOfWithStringComparisonArgNotSupported() + { + return System.Data.Linq.Error.IndexOfWithStringComparisonArgNotSupported(); + } + public static Exception InsertItemMustBeConstant() + { + return System.Data.Linq.Error.InsertItemMustBeConstant(); + } + public static Exception IntersectNotSupportedForHierarchicalTypes() + { + return System.Data.Linq.Error.IntersectNotSupportedForHierarchicalTypes(); + } + public static Exception InvalidConnectionArgument(object p0) + { + return System.Data.Linq.Error.InvalidConnectionArgument(p0); + } + public static Exception InvalidDbGeneratedType(object p0) + { + return System.Data.Linq.Error.InvalidDbGeneratedType(p0); + } + public static Exception InvalidFormatNode(object p0) + { + return System.Data.Linq.Error.InvalidFormatNode(p0); + } + public static Exception InvalidGroupByExpression() + { + return System.Data.Linq.Error.InvalidGroupByExpression(); + } + public static Exception InvalidGroupByExpressionType(object p0) + { + return System.Data.Linq.Error.InvalidGroupByExpressionType(p0); + } + public static Exception InvalidMethodExecution(object p0) + { + return System.Data.Linq.Error.InvalidMethodExecution(p0); + } + public static Exception InvalidOrderByExpression(object p0) + { + return System.Data.Linq.Error.InvalidOrderByExpression(p0); + } + public static Exception InvalidProviderType(object p0) + { + return System.Data.Linq.Error.InvalidProviderType(p0); + } + public static Exception InvalidReferenceToRemovedAliasDuringDeflation() + { + return System.Data.Linq.Error.InvalidReferenceToRemovedAliasDuringDeflation(); + } + public static Exception InvalidReturnFromSproc(object p0) + { + return System.Data.Linq.Error.InvalidReturnFromSproc(p0); + } + public static Exception InvalidSequenceOperatorCall(object p0) + { + return System.Data.Linq.Error.InvalidSequenceOperatorCall(p0); + } + public static Exception LastIndexOfWithStringComparisonArgNotSupported() + { + return System.Data.Linq.Error.LastIndexOfWithStringComparisonArgNotSupported(); + } + public static Exception MappedTypeMustHaveDefaultConstructor(object p0) + { + return System.Data.Linq.Error.MappedTypeMustHaveDefaultConstructor(p0); + } + public static Exception MathRoundNotSupported() + { + return System.Data.Linq.Error.MathRoundNotSupported(); + } + public static Exception MemberAccessIllegal(object p0, object p1, object p2) + { + return System.Data.Linq.Error.MemberAccessIllegal(p0, p1, p2); + } + public static Exception MemberCannotBeTranslated(object p0, object p1) + { + return System.Data.Linq.Error.MemberCannotBeTranslated(p0, p1); + } + public static Exception MemberNotPartOfProjection(object p0, object p1) + { + return System.Data.Linq.Error.MemberNotPartOfProjection(p0, p1); + } + public static Exception MethodFormHasNoSupportConversionToSql(object p0, object p1) + { + return System.Data.Linq.Error.MethodFormHasNoSupportConversionToSql(p0, p1); + } + public static Exception MethodHasNoSupportConversionToSql(object p0) + { + return System.Data.Linq.Error.MethodHasNoSupportConversionToSql(p0); + } + public static Exception NoMethodInTypeMatchingArguments(object p0) + { + return System.Data.Linq.Error.NoMethodInTypeMatchingArguments(p0); + } + public static Exception NonConstantExpressionsNotSupportedFor(object p0) + { + return System.Data.Linq.Error.NonConstantExpressionsNotSupportedFor(p0); + } + public static Exception NonConstantExpressionsNotSupportedForRounding() + { + return System.Data.Linq.Error.NonConstantExpressionsNotSupportedForRounding(); + } + public static Exception NonCountAggregateFunctionsAreNotValidOnProjections(object p0) + { + return System.Data.Linq.Error.NonCountAggregateFunctionsAreNotValidOnProjections(p0); + } + public static Exception NotSupported() + { + return System.Data.Linq.Error.NotSupported(); + } + public static Exception ParameterNotInScope(object p0) + { + return System.Data.Linq.Error.ParameterNotInScope(p0); + } + public static Exception ParametersCannotBeSequences() + { + return System.Data.Linq.Error.ParametersCannotBeSequences(); + } + public static Exception ProviderCannotBeUsedAfterDispose() + { + return System.Data.Linq.Error.ProviderCannotBeUsedAfterDispose(); + } + public static Exception ProviderNotInstalled(object p0, object p1) + { + return System.Data.Linq.Error.ProviderNotInstalled(p0, p1); + } + public static Exception QueryOnLocalCollectionNotSupported() + { + return System.Data.Linq.Error.QueryOnLocalCollectionNotSupported(); + } + public static Exception QueryOperatorNotSupported(object p0) + { + return System.Data.Linq.Error.QueryOperatorNotSupported(p0); + } + public static Exception QueryOperatorOverloadNotSupported(object p0) + { + return System.Data.Linq.Error.QueryOperatorOverloadNotSupported(p0); + } + public static Exception RequiredColumnDoesNotExist(object p0) + { + return System.Data.Linq.Error.RequiredColumnDoesNotExist(p0); + } + public static Exception SequenceOperatorsNotSupportedForType(object p0) + { + return System.Data.Linq.Error.SequenceOperatorsNotSupportedForType(p0); + } + public static Exception SkipNotSupportedForSequenceTypes() + { + return System.Data.Linq.Error.SkipNotSupportedForSequenceTypes(); + } + public static Exception SkipRequiresSingleTableQueryWithPKs() + { + return System.Data.Linq.Error.SkipRequiresSingleTableQueryWithPKs(); + } + public static Exception SprocsCannotBeComposed() + { + return System.Data.Linq.Error.SprocsCannotBeComposed(); + } + public static Exception SqlMethodOnlyForSql(object p0) + { + return System.Data.Linq.Error.SqlMethodOnlyForSql(p0); + } + public static Exception ToStringOnlySupportedForPrimitiveTypes() + { + return System.Data.Linq.Error.ToStringOnlySupportedForPrimitiveTypes(); + } + public static Exception TransactionDoesNotMatchConnection() + { + return System.Data.Linq.Error.TransactionDoesNotMatchConnection(); + } + public static Exception TypeBinaryOperatorNotRecognized() + { + return System.Data.Linq.Error.TypeBinaryOperatorNotRecognized(); + } + public static Exception TypeCannotBeOrdered(object p0) + { + return System.Data.Linq.Error.TypeCannotBeOrdered(p0); + } + public static Exception UnexpectedFloatingColumn() + { + return System.Data.Linq.Error.UnexpectedFloatingColumn(); + } + public static Exception UnexpectedNode(object p0) + { + return System.Data.Linq.Error.UnexpectedNode(p0); + } + public static Exception UnexpectedSharedExpression() + { + return System.Data.Linq.Error.UnexpectedSharedExpression(); + } + public static Exception UnexpectedSharedExpressionReference() + { + return System.Data.Linq.Error.UnexpectedSharedExpressionReference(); + } + public static Exception UnexpectedTypeCode(object p0) + { + return System.Data.Linq.Error.UnexpectedTypeCode(p0); + } + public static Exception UnhandledBindingType(object p0) + { + return System.Data.Linq.Error.UnhandledBindingType(p0); + } + public static Exception UnhandledExpressionType(object p0) + { + return System.Data.Linq.Error.UnhandledExpressionType(p0); + } + public static Exception UnhandledStringTypeComparison() + { + return System.Data.Linq.Error.UnhandledStringTypeComparison(); + } + public static Exception UnionDifferentMemberOrder() + { + return System.Data.Linq.Error.UnionDifferentMemberOrder(); + } + public static Exception UnionDifferentMembers() + { + return System.Data.Linq.Error.UnionDifferentMembers(); + } + public static Exception UnionIncompatibleConstruction() + { + return System.Data.Linq.Error.UnionIncompatibleConstruction(); + } + public static Exception UnionWithHierarchy() + { + return System.Data.Linq.Error.UnionWithHierarchy(); + } + public static Exception UnmappedDataMember(object p0, object p1, object p2) + { + return System.Data.Linq.Error.UnmappedDataMember(p0, p1, p2); + } + public static Exception UnrecognizedExpressionNode(object p0) + { + return System.Data.Linq.Error.UnrecognizedExpressionNode(p0); + } + public static Exception UnsafeStringConversion(object p0, object p1) + { + return System.Data.Linq.Error.UnsafeStringConversion(p0, p1); + } + public static Exception UnsupportedDateTimeConstructorForm() + { + return System.Data.Linq.Error.UnsupportedDateTimeConstructorForm(); + } + public static Exception UnsupportedDateTimeOffsetConstructorForm() + { + return System.Data.Linq.Error.UnsupportedDateTimeOffsetConstructorForm(); + } + public static Exception UnsupportedNodeType(object p0) + { + return System.Data.Linq.Error.UnsupportedNodeType(p0); + } + public static Exception UnsupportedStringConstructorForm() + { + return System.Data.Linq.Error.UnsupportedStringConstructorForm(); + } + public static Exception UnsupportedTimeSpanConstructorForm() + { + return System.Data.Linq.Error.UnsupportedTimeSpanConstructorForm(); + } + public static Exception UpdateItemMustBeConstant() + { + return System.Data.Linq.Error.UpdateItemMustBeConstant(); + } + public static Exception ValueHasNoLiteralInSql(object p0) + { + return System.Data.Linq.Error.ValueHasNoLiteralInSql(p0); + } + public static Exception VbLikeDoesNotSupportMultipleCharacterRanges() + { + return System.Data.Linq.Error.VbLikeDoesNotSupportMultipleCharacterRanges(); + } + public static Exception VbLikeUnclosedBracket() + { + return System.Data.Linq.Error.VbLikeUnclosedBracket(); + } + public static Exception WrongDataContext() + { + return System.Data.Linq.Error.WrongDataContext(); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/ReferenceSources/SR.cs b/mcs/class/System.Data.Linq/ReferenceSources/SR.cs new file mode 100644 index 0000000000..baf820ee6d --- /dev/null +++ b/mcs/class/System.Data.Linq/ReferenceSources/SR.cs @@ -0,0 +1,283 @@ +// +// This file was generated by txt2sr tool +// + +partial class SR +{ + public const string OwningTeam = "DLinq"; + public const string CannotAddChangeConflicts = "Cannot add change conflicts. They are added automatically during SubmitChanges."; + public const string CannotRemoveChangeConflicts = "Cannot remove change conflicts."; + public const string InconsistentAssociationAndKeyChange = "The member '{0}' was changed to be inconsistent with the association member '{1}'."; + public const string UnableToDetermineDataContext = "Unable to determine DataContext for compiled query execution."; + public const string ArgumentTypeHasNoIdentityKey = "The type '{0}' has no identity key."; + public const string CouldNotConvert = "Could not convert from type '{0}' to type '{1}'."; + public const string CannotRemoveUnattachedEntity = "Cannot remove an entity that has not been attached."; + public const string ColumnMappedMoreThanOnce = "Mapping Problem: The database column '{0}' is mapped more than once."; + public const string CouldNotAttach = "Item already exists in data context."; + public const string CouldNotGetTableForSubtype = "Could not retrieve a Table for inheritance subtype '{0}', try Table of {1} instead."; + public const string CouldNotRemoveRelationshipBecauseOneSideCannotBeNull = "An attempt was made to remove a relationship between a {0} and a {1}. However, one of the relationship's foreign keys ({2}) cannot be set to null."; + public const string EntitySetAlreadyLoaded = "The EntitySet is already loaded and the source cannot be changed."; + public const string EntitySetModifiedDuringEnumeration = "EntitySet was modified during enumeration."; + public const string ExpectedQueryableArgument = "Argument {0} does not implement {1}."; + public const string ExpectedUpdateDeleteOrChange = "Expected update, delete, or change."; + public const string KeyIsWrongSize = "Key is the wrong size. Expected {0}. Actual {1}."; + public const string KeyValueIsWrongType = "Key value is the wrong type. Expected assignable from {0}. Actual {1}."; + public const string IdentityChangeNotAllowed = "Value of member '{0}' of an object of type '{1}' changed.\r\nA member defining the identity of the object cannot be changed.\r\nConsider adding a new object with new identity and deleting the existing one instead."; + public const string DbGeneratedChangeNotAllowed = "Value of member '{0}' of an object of type '{1}' changed.\r\nA member that is computed or generated by the database cannot be changed."; + public const string ModifyDuringAddOrRemove = "Could not modify EntitySet."; + public const string ProviderDoesNotImplementRequiredInterface = "Specified provider type '{0}' does not implement '{1}'."; + public const string ProviderTypeNull = "Non-null provider type expected."; + public const string TypeCouldNotBeAdded = "Instance of type '{0}' could not be added. This type is not part of the mapped type system."; + public const string TypeCouldNotBeRemoved = "Instance of type '{0}' could not be removed. This type is not part of the mapped type system."; + public const string TypeCouldNotBeTracked = "Instance of type '{0}' could not be tracked. This type is not part of the mapped type system."; + public const string TypeIsNotEntity = "The type '{0}' is not an entity."; + public const string UnrecognizedRefreshObject = "An object specified for refresh is not recognized."; + public const string UnhandledExpressionType = "Unhandled Expression Type: {0}"; + public const string UnhandledBindingType = "Unhandled Binding Type: {0}"; + public const string ObjectTrackingRequired = "Object tracking is not enabled for the current data context instance."; + public const string OptionsCannotBeModifiedAfterQuery = "Data context options cannot be modified after results have been returned from a query."; + public const string DeferredLoadingRequiresObjectTracking = "Deferred loading requires that object tracking is also enabled."; + public const string SubqueryDoesNotSupportOperator = "The operator '{0}' is not supported in Subquery."; + public const string SubqueryNotSupportedOn = "Subquery is not supported on '{0}'."; + public const string SubqueryNotSupportedOnType = "Subquery is not supported on '{0}' of type '{1}'."; + public const string SubqueryNotAllowedAfterFreeze = "SetSubquery is not allowed after freeze or attach to DataContext."; + public const string IncludeNotAllowedAfterFreeze = "LoadWith is not allowed after freeze or attach to DataContext."; + public const string LoadOptionsChangeNotAllowedAfterQuery = "Setting load options is not allowed after results have been returned from a query."; + public const string IncludeCycleNotAllowed = "Cycles not allowed in LoadOptions LoadWith type graph."; + public const string SubqueryMustBeSequence = "Subquery must be a sequence expression."; + public const string RefreshOfDeletedObject = "Unable to refresh the specified object. The object no longer exists in the database."; + public const string RefreshOfNewObject = "An object specified for refresh is pending insert and cannot be refreshed."; + public const string CannotChangeInheritanceType = "Not allowed: Inheritance discriminator change from '{0}' to '{1}' would change type from '{2}' to '{3}'."; + public const string DataContextCannotBeUsedAfterDispose = "DataContext accessed after Dispose."; + public const string TypeIsNotMarkedAsTable = "The type '{0}' is not mapped as a Table."; + public const string NonEntityAssociationMapping = "Invalid association mapping for member '{0}.{1}'. '{2}' is not an entity."; + public const string CannotPerformCUDOnReadOnlyTable = "Can't perform Create, Update, or Delete operations on '{0}' because it has no primary key."; + public const string InsertCallbackComment = "--Callback into user code for insert."; + public const string UpdateCallbackComment = "--Callback into user code for update."; + public const string DeleteCallbackComment = "--Callback into user code for delete."; + public const string RowNotFoundOrChanged = "Row not found or changed."; + public const string UpdatesFailedMessage = "{0} of {1} updates failed."; + public const string CycleDetected = "A cycle was detected in the set of changes"; + public const string CantAddAlreadyExistingItem = "Cannot add an entity that already exists."; + public const string CantAddAlreadyExistingKey = "Cannot add an entity with a key that is already in use."; + public const string DatabaseGeneratedAlreadyExistingKey = "The database generated a key that is already in use."; + public const string InsertAutoSyncFailure = "Member AutoSync failure. For members to be AutoSynced after insert, the type must either have an auto-generated identity, or a key that is not modified by the database after insert."; + public const string EntitySetDataBindingWithAbstractBaseClass = "Cannot add an instance of an abstract class to EntitySet<{0}>."; + public const string EntitySetDataBindingWithNonPublicDefaultConstructor = "{0} must have a parameterless constructor when using IBindingList to add new instances."; + public const string InvalidLoadOptionsLoadMemberSpecification = "The expression specified must be of the form p.A, where p is the parameter and A is a property or field member."; + public const string EntityIsTheWrongType = "The entity is not of the correct type."; + public const string OriginalEntityIsWrongType = "The original state instance has the wrong type."; + public const string CannotAttachAlreadyExistingEntity = "Cannot attach an entity that already exists."; + public const string CannotAttachAsModifiedWithoutOriginalState = "An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy."; + public const string CannotPerformOperationDuringSubmitChanges = "The operation cannot be performed during a call to SubmitChanges."; + public const string CannotPerformOperationOutsideSubmitChanges = "The operation can only be performed inside a user override method during a call to SubmitChanges."; + public const string CannotPerformOperationForUntrackedObject = "The operation cannot be performed for the entity because it is not being change tracked."; + public const string CannotAttachAddNonNewEntities = "An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported."; + public const string QueryWasCompiledForDifferentMappingSource = "Query was compiled for a different mapping source than the one associated with the specified DataContext."; + + // manually harvested + public const string AbstractClassAssignInheritanceDiscriminator = "Abstract class '{0}' should not be assigned an inheritance discriminator key."; + public const string ArgumentEmpty = "The string parameter '{0}' was expected to have length greater than zero."; + public const string ArgumentTypeMismatch = "One or more type mismatches in argument '{0}'."; + public const string ArgumentWrongType = "The argument '{0}' was the wrong type. Expected '{1}'. Actual '{2}'."; + public const string ArgumentWrongValue = "The argument '{0}' was the wrong value."; + public const string BadFunctionTypeInMethodMapping = "Mapping Problem: Bad function type in mapping for method '{0}'."; + public const string BadKeyMember = "Could not find key member '{0}' of key '{1}' on type '{2}'. The key may be wrong or the field or property on '{2}' has changed names."; + public const string BadParameterType = "A query parameter cannot be of type '{0}'."; + public const string BadProjectionInSelect = "Bad projection in Select."; + public const string BadStorageProperty = "Bad Storage property: '{0}' on member '{1}.{2}'."; + public const string BinaryOperatorNotRecognized = "Binary operator not recognized: {0}"; + public const string CannotAggregateType = "The type '{0}' is not supported in aggregation operations."; + public const string CannotAssignNull = "The null value cannot be assigned to a member with type {0} which is a non-nullable value type."; + public const string CannotAssignToMember = "Cannot assign value to member '{0}'. It does not define a setter."; + public const string CannotCompareItemsAssociatedWithDifferentTable = "Cannot compare entities associated with different tables."; + public const string CannotConvertToEntityRef = "Cannot convert type '{0}' to EntityRef/Link."; + public const string CannotDeleteTypesOf = "Cannot delete items of type {0}."; + public const string CannotEnumerateResultsMoreThanOnce = "The query results cannot be enumerated more than once."; + public const string CannotGetInheritanceDefaultFromNonInheritanceClass = "Mapping Problem: Cannot get inheritance default from class not mapped into an inheritance hierarchy."; + public const string CannotMaterializeEntityType = "Explicit construction of entity type '{0}' in query is not allowed."; + public const string CannotMaterializeList = "Cannot create a query result of type '{0}'."; + public const string CannotTranslateExpressionToSql = "Cannot translate expression to SQL for this server version."; + public const string CapturedValuesCannotBeSequences = "Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator."; + public const string ClassLiteralsNotAllowed = "Class literals are not allowed: {0}."; + public const string ClientCaseShouldNotHold = "Client case should not hold '{0}'. It should probably have been SqlSimpleCase."; + public const string ClrBoolDoesNotAgreeWithSqlType = "Expected Node with CLR Type of 'bool' to have SQL type of 'Bit' or 'Predicate'. Instead, it was type '{0}'."; + public const string ColumnCannotReferToItself = "Column cannot refer to itself."; + public const string ColumnClrTypeDoesNotAgreeWithExpressionsClrType = "The ClrType of the column did not agree with the ClrType of the expression."; + public const string ColumnIsDefinedInMultiplePlaces = "Column '{0}' is defined in multiple places."; + public const string ColumnIsNotAccessibleThroughDistinct = "Column '{0}' is not accessible through distinct."; + public const string ColumnIsNotAccessibleThroughGroupBy = "Column '{0}' is not accessible through group by."; + public const string ColumnReferencedIsNotInScope = "Column referenced is not in scope: '{0}'."; + public const string ComparisonNotSupportedForType = "Comparison operators not supported for type '{0}'."; + public const string CompiledQueryAgainstMultipleShapesNotSupported = "Compiled queries across DataContexts with different LoadOptions not supported."; + public const string CompiledQueryCannotReturnType = "A compiled query cannot return type '{0}'."; + public const string ConstructedArraysNotSupported = "Constructed arrays are only supported for Contains."; + public const string ContextNotInitialized = "SqlContext is not initialized."; + public const string ConvertToCharFromBoolNotSupported = "There is no supported conversion from a Boolean to a Character type."; + public const string ConvertToDateTimeOnlyForDateTimeOrString = "Only DateTimes or strings can be converted to DateTime."; + public const string CouldNotAssignSequence = "Could not assign sequence of {0} to type {1}."; + public const string CouldNotConvertToPropertyOrField = "MemberInfo '{0}' had no corresponding field or property."; + public const string CouldNotCreateAccessorToProperty = "Could not create PropertyAccessor<{0},{1}> to {2}."; + public const string CouldNotDetermineCatalogName = "Unable to determine catalog name."; + public const string CouldNotDetermineDbGeneratedSqlType = "Unable to determine SQL type for '{0}' that can also be generated by the server."; + public const string CouldNotDetermineSqlType = "Unable to determine SQL type for '{0}'."; + public const string CouldNotFindElementTypeInModel = "Mapping Problem: Could not find element type in model for '{0}'."; + public const string CouldNotFindRequiredAttribute = "Mapping Problem: Could not find required attribute '{0}': {1}."; + public const string CouldNotFindRuntimeTypeForMapping = "Mapping Problem: Cannot find runtime type for type mapping '{0}'."; + public const string CouldNotFindTypeFromMapping = "Mapping Problem: Cannot find type '{0}' from mapping."; + public const string CouldNotGetClrType = "Could not get the ClrType."; + public const string CouldNotGetSqlType = "Could not get the SqlType."; + public const string CouldNotHandleAliasRef = "Could not handle alias ref of {0}."; + public const string CouldNotTranslateExpressionForReading = "Could not translate expression '{0}' into SQL and could not treat it as a local expression."; + public const string CreateDatabaseFailedBecauseOfClassWithNoMembers = "Unable to create database because mapped class '{0}' has zero members."; + public const string CreateDatabaseFailedBecauseOfContextWithNoTables = "Unable to create database because data context '{0}' has no tables."; + public const string CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists = "Unable to create database because the database '{0}' already exists."; + public const string DatabaseDeleteThroughContext = "Operation not allowed after DeleteDatabase call."; + public const string DatabaseNodeNotFound = "Database node not found. Is the mapping namespace ({0}) correctly specified?"; + public const string DeferredMemberWrongType = "Deferred member not one of EntitySet, EntityRef, or Link."; + public const string DidNotExpectAs = "Did not expect 'as' operator in '{0}'."; + public const string DidNotExpectTypeBinding = "Did not expect type binding back. This should result in a type case not a simple case."; + public const string DidNotExpectTypeChange = "Did not expect operation to change result type. Original type was '{0}' new type is '{1}'."; + public const string DiscriminatorClrTypeNotSupported = "Discriminator '{0}.{1}' may not be type '{2}'."; + public const string DistributedTransactionsAreNotAllowed = "Distributed transactions are not allowed."; + public const string EmptyCaseNotSupported = "Empty case is not supported."; + public const string EntityRefAlreadyLoaded = "The EntityRef is already loaded and the source cannot be changed."; + public const string ExceptNotSupportedForHierarchicalTypes = "Except is not supported for hierarchical result types."; + public const string ExpectedBitFoundPredicate = "Expected a Bit here but found a Predicate."; + public const string ExpectedClrTypesToAgree = "Expected ClrTypes to agree. One was '{0}' the other was '{1}'."; + public const string ExpectedEmptyElement = "Element '{0}' must be empty, but contains a node of type {1} named '{2}'."; + public const string ExpectedNoObjectType = "Expected no ObjectType nodes to remain."; + public const string ExpectedPredicateFoundBit = "Expected a Predicate here but found a Bit."; + public const string ExpressionNotDeferredQuerySource = "Expression is not a deferred query source."; + public const string GeneralCollectionMaterializationNotSupported = "General collection materialization is not supported."; + public const string GroupingNotSupportedAsOrderCriterion = "A grouping cannot be used as an order criterion; you may want to use its key instead."; + public const string IQueryableCannotReturnSelfReferencingConstantExpression = "An IQueryable that returns a self-referencing Constant expression is not supported."; + public const string IdentityClrTypeNotSupported = "Invalid type mapping for Identity member '{0}.{1}'. Type '{2}' is not supported for identity members."; + public const string IifReturnTypesMustBeEqual = "The IIF method returns two separate types: {0}, {1}. Translation to SQL does not support different return types."; + public const string Impossible = "Should not have reached this point."; + public const string IncorrectAutoSyncSpecification = "Incorrect AutoSync specification for member '{0}'."; + public const string IncorrectNumberOfParametersMappedForMethod = "Mapping Problem: Incorrect number of parameters mapped for method '{0}'."; + public const string IndexOfWithStringComparisonArgNotSupported = "The translation of String.IndexOf to SQL does not support versions with a StringComparison argument."; + public const string InfiniteDescent = "Descent limit exceeded."; + public const string InheritanceCodeMayNotBeNull = "Inheritance code value may not be null."; + public const string InheritanceCodeUsedForMultipleTypes = "The inheritance code '{0}' is used for multiple types."; + public const string InheritanceHierarchyDoesNotDefineDefault = "The inheritance hierarchy rooted at '{0}' does not define a default."; + public const string InheritanceSubTypeIsAlsoRoot = "The inheritance subtype '{0}' is also declared as a root type."; + public const string InheritanceTypeDoesNotDeriveFromRoot = "Inheritance type '{0}' does not derive from inheritance root type '{1}'."; + public const string InheritanceTypeHasMultipleDefaults = "The inheritance type '{0}' has multiple defaults."; + public const string InheritanceTypeHasMultipleDiscriminators = "The inherited type '{0}' cannot have multiple discriminator key values."; + public const string InsertItemMustBeConstant = "The item of an Insert must be a constant value expression."; + public const string IntersectNotSupportedForHierarchicalTypes = "Intersect is not supported for hierarchical result types."; + public const string InvalidConnectionArgument = "'{0}' must be string, SqlConnection, SqlCeConnection, SqlTransaction, or SqlCeTransaction."; + public const string InvalidDbGeneratedType = "The primary key column of type '{0}' cannot be generated by the server."; + public const string InvalidDeleteOnNullSpecification = "Invalid DeleteOnNull specification for member '{0}'. DeleteOnNull can only be true for singleton association members mapped to non-nullable foreign key columns."; + public const string InvalidFieldInfo = "Could not create FieldAccessor<{0},{1}> from FieldInfo '{2}'."; + public const string InvalidFormatNode = "Could not format node '{0}' for execution as SQL."; + public const string InvalidGroupByExpression = "The group by operation contains an expression that cannot be translated."; + public const string InvalidGroupByExpressionType = "A group by expression can only contain non-constant scalars that are comparable by the server. The expression with type '{0}' is not comparable."; + public const string InvalidMethodExecution = "The method '{0}' is not mapped as a stored procedure or user-defined function."; + public const string InvalidOrderByExpression = "An order by expression can only contain non-constant scalars that are order comparable by the server. The expression with type '{0}' is not order comparable."; + public const string InvalidProviderType = "The specified type '{0}' is not a valid provider type."; + public const string InvalidReferenceToRemovedAliasDuringDeflation = "Reference to removed alias discovered during deflation."; + public const string InvalidReturnFromSproc = "'{0}' is not a valid return type for a mapped stored procedure method."; + public const string InvalidSequenceOperatorCall = "Sequence operator call is only valid for Sequence, Queryable, or DataQueryExtensions not for '{0}'."; + public const string InvalidUseOfGenericMethodAsMappedFunction = "Invalid use of generic method '{0}' as mapped function."; + public const string LastIndexOfWithStringComparisonArgNotSupported = "The translation of String.LastIndexOf to SQL does not support versions with a StringComparison argument."; + public const string LenOfTextOrNTextNotSupported = "Translation would contain LEN of Text or NText arguments: {0}"; + public const string LinkAlreadyLoaded = "The Link is already loaded and the source cannot be changed."; + public const string LogAttemptingToDeleteDatabase = "Attempting to delete the database '{0}'."; + public const string LogGeneralInfoMessage = "{0}: {1}."; + public const string LogStoredProcedureExecution = "Execute stored procedure: {0}({1})."; + public const string MappedMemberHadNoCorrespondingMemberInType = "The column or association '{0}' in the mapping had no corresponding member in type '{1}'. Mapping members from above root type is not supported."; + public const string MappedTypeMustHaveDefaultConstructor = "The type '{0}' must declare a default (parameterless) constructor in order to be constructed during mapping."; + public const string MappingForTableUndefined = "Mapping Problem: Mapping for table '{0}' is not defined."; + public const string MappingOfInterfacesMemberIsNotSupported = "The mapping of interface member {0}.{1} is not supported."; + public const string MathRoundNotSupported = "For translation to SQL, the Math.Round method needs a MidpointRounding parameter. Use 'AwayFromZero' to specify the SQL function ROUND."; + public const string MaxSizeNotSupported = "Translation would contain an out parameter of type Text, NText, or Image: {0}"; + public const string MemberAccessIllegal = "Member access '{0}' of '{1}' not legal on type '{2}."; + public const string MemberCannotBeTranslated = "The member '{0}.{1}' has no supported translation to SQL."; + public const string MemberCouldNotBeTranslated = "Member '{0}.{1}' could not be translated."; + public const string MemberMappedMoreThanOnce = "The member '{0}' is mapped more than once."; + public const string MemberNotPartOfProjection = "Binding error: Member '{0}.{1}' not found in projection."; + public const string MethodCannotBeFound = "Method '{0}' cannot be found."; + public const string MethodFormHasNoSupportConversionToSql = "The method '{0}' has a translation to SQL, but the overload '{1}' does not."; + public const string MethodHasNoSupportConversionToSql = "Method '{0}' has no supported translation to SQL."; + public const string MethodNotMappedToStoredProcedure = "The method specified ({0}) is not mapped to a stored procedure."; + public const string MismatchedThisKeyOtherKey = "The number of ThisKey columns is different from the number of OtherKey columns for the association property '{0}' in the type '{1}'."; + public const string NoDiscriminatorFound = "The inheritance type '{0}' does not declare a discriminator column."; + public const string NoMethodInTypeMatchingArguments = "No method in type '{0}' matching arguments."; + public const string NoResultTypesDeclaredForFunction = "No result types declared for function '{0}' that returns IMultipleResults."; + public const string NonConstantExpressionsNotSupportedFor = "Only arguments that can be evaluated on the client are supported for the {0} method."; + public const string NonConstantExpressionsNotSupportedForRounding = "Only arguments that can be evaluated on the client are supported for the MidpointRounding argument in Math.Round."; + public const string NonCountAggregateFunctionsAreNotValidOnProjections = "Parameterless aggregate operator '{0}' is not supported over projections."; + public const string NonInheritanceClassHasDiscriminator = "The inheritance type '{0}' has a discriminator but is not part of a mapped inheritance hierarchy."; + public const string ParameterNotInScope = "The parameter '{0}' is not in scope."; + public const string ParametersCannotBeSequences = "Parameters cannot be sequences."; + public const string PrimaryKeyInSubTypeNotSupported = "The subtype '{0}' cannot contain the primary key member '{1}'."; + public const string ProviderCannotBeUsedAfterDispose = "Provider cannot be accessed after Dispose."; + public const string ProviderNotInstalled = "Cannot open '{0}'. Provider '{1}' not installed."; + public const string ProviderTypeNotFound = "Specified provider type '{0}' not found."; + public const string QueryOnLocalCollectionNotSupported = "Queries with local collections are not supported."; + public const string QueryOperatorNotSupported = "The query operator '{0}' is not supported."; + public const string QueryOperatorOverloadNotSupported = "Unsupported overload used for query operator '{0}'."; + public const string ReaderUsedAfterDispose = "Reader used after dispose."; + public const string RequiredColumnDoesNotExist = "The required column '{0}' does not exist in the results."; + public const string ResultTypeNotMappedToFunction = "Result type '{0}' is not mapped to function '{1}'."; + public const string SelectManyDoesNotSupportStrings = "SelectMany does not support strings."; + public const string SequenceOperatorsNotSupportedForType = "Sequence operators not supported for type '{0}'."; + public const string SimpleCaseShouldNotHold = "Simple case should not hold '{0}' should probably have been SqlClientCase."; + public const string SkipIsValidOnlyOverOrderedQueries = "The Skip operator is valid only over ordered queries."; + public const string SkipNotSupportedForSequenceTypes = "The Skip operator is not supported for sequences containing sequences (with the exception of IGrouping under SQL Server 2005)."; + public const string SkipRequiresSingleTableQueryWithPKs = "This provider supports Skip only over ordered queries returning entities or projections that contain all identity columns, where the query is a single-table (non-join) query, or is a Distinct, Except, Intersect, or Union (not Concat) operation."; + public const string SourceExpressionAnnotation = "Source Expression: {0}"; + public const string SprocsCannotBeComposed = "Stored procedures cannot be used inside queries."; + public const string SqlMethodOnlyForSql = "Method '{0}' cannot be used on the client; it is only for translation to SQL."; + public const string TextNTextAndImageCannotOccurInDistinct = "Translation would contain an expression of type Text, NText, or Image in a SELECT DISTINCT clause: {0}"; + public const string TextNTextAndImageCannotOccurInUnion = "Translation would contain an expression of type Text, NText, or Image in a SELECT within a UNION: {0}"; + public const string ToStringOnlySupportedForPrimitiveTypes = "Method ToString can only be translated to SQL for primitive types."; + public const string TooManyResultTypesDeclaredForFunction = "More than one result type declared for function '{0}' that does not return IMultipleResults."; + public const string TransactionDoesNotMatchConnection = "Transaction does not match connection."; + public const string TwoMembersMarkedAsInheritanceDiscriminator = "Members '{0}' and '{1}' both marked as inheritance discriminator."; + public const string TwoMembersMarkedAsPrimaryKeyAndDBGenerated = "Members '{0}' and '{1}' both marked as IsPrimaryKey and IsDbGenerated."; + public const string TwoMembersMarkedAsRowVersion = "Members '{0}' and '{1}' both marked as row version."; + public const string TypeBinaryOperatorNotRecognized = "Type Binary operator not recognized."; + public const string TypeCannotBeOrdered = "Cannot order by type '{0}'."; + public const string TypeColumnWithUnhandledSource = "Type column with unhandled source"; + public const string UnableToAssignValueToReadonlyProperty = "Unable to assign value to read only property '{0}'."; + public const string UnableToBindUnmappedMember = "Binding error: Member '{0}.{1}' is not a mapped member of '{2}'."; + public const string UnableToResolveRootForType = "Mapping Problem: Unable to resolve root for type '{0}'."; + public const string UnexpectedElement = "Expected element '{0}', but found '{1}'."; + public const string UnexpectedFloatingColumn = "Column declaration found outside row or table declaration."; + public const string UnexpectedNode = "Unexpected node: {0}"; + public const string UnexpectedNull = "Unexpected null '{0}'."; + public const string UnexpectedSharedExpression = "Unexpected shared-expression found."; + public const string UnexpectedSharedExpressionReference = "Unexpected shared-expression reference found."; + public const string UnexpectedTypeCode = "Unexpected type code: {0}"; + public const string UnhandledDeferredStorageType = "Unhandled deferred storage type: {0}."; + public const string UnhandledMemberAccess = "Member '{0}' on node type '{1}' does not have a known translation to SQL."; + public const string UnhandledStringTypeComparison = "SQL Server does not handle comparison of NText, Text, Xml, or Image data types."; + public const string UnionDifferentMemberOrder = "Types in Union or Concat have members assigned in different order."; + public const string UnionDifferentMembers = "Types in Union or Concat have different members assigned."; + public const string UnionIncompatibleConstruction = "Types in Union or Concat are constructed incompatibly."; + public const string UnionOfIncompatibleDynamicTypes = "Sources of type GetType or typeof are incompatible for Union-like operation."; + public const string UnionWithHierarchy = "Types in Union or Concat cannot be constructed with hierarchy."; + public const string UnmappedClassMember = "Class member {0}.{1} is unmapped."; + public const string UnmappedDataMember = "Data member '{0}' of type '{1}' is not part of the mapping for type '{2}'. Is the member above the root of an inheritance hierarchy?"; + public const string UnrecognizedAttribute = "Unrecognized attribute '{0}' in mapping file."; + public const string UnrecognizedElement = "Unrecognized element '{0}' in mapping file."; + public const string UnrecognizedExpressionNode = "Unrecognized expression node: {0}"; + public const string UnrecognizedProviderMode = "'{0}' is not a valid provider mode."; + public const string UnsafeStringConversion = "Unsafe string conversion from {0} to {1} may lead to implicit truncation. Try reshaping the string explicitly with a Substring operation."; + public const string UnsupportedDateTimeConstructorForm = "DateTime constructor form is not supported."; + public const string UnsupportedDateTimeOffsetConstructorForm = "DateTimeOffset constructor form is not supported."; + public const string UnsupportedNodeType = "The node type '{0}' is not supported."; + public const string UnsupportedStringConstructorForm = "String constructor form is not supported."; + public const string UnsupportedTimeSpanConstructorForm = "TimeSpan constructor form is not supported."; + public const string UnsupportedTypeConstructorForm = "Constructor for server type '{0}' is not supported."; + public const string UpdateItemMustBeConstant = "The item of an Update must be a constant value expression."; + public const string ValueHasNoLiteralInSql = "Value has no literal in SQL: {0}"; + public const string VbLikeDoesNotSupportMultipleCharacterRanges = "Cannot translate multiple character ranges in the pattern argument."; + public const string VbLikeUnclosedBracket = "Pattern contains unclosed bracket."; + public const string WrongDataContext = "The query contains references to items defined on a different data context."; + public const string WrongNumberOfValuesInCollectionArgument = "Wrong number of values in '{0}'. Expected {1}. Actually {2}."; +} diff --git a/mcs/class/System.Data.Linq/ReferenceSources/Strings.cs b/mcs/class/System.Data.Linq/ReferenceSources/Strings.cs new file mode 100644 index 0000000000..34c1c68781 --- /dev/null +++ b/mcs/class/System.Data.Linq/ReferenceSources/Strings.cs @@ -0,0 +1,317 @@ +namespace System.Data.Linq +{ + internal static class Strings + { + internal static string OwningTeam { + get { return SR.OwningTeam; } + } + + internal static string CannotAddChangeConflicts { + get { return SR.CannotAddChangeConflicts; } + } + + internal static string CannotRemoveChangeConflicts { + get { return SR.CannotRemoveChangeConflicts; } + } + + internal static string InconsistentAssociationAndKeyChange (object p0, object p1) { + return SR.Format (SR.InconsistentAssociationAndKeyChange, p0, p1); + } + + internal static string UnableToDetermineDataContext { + get { return SR.UnableToDetermineDataContext; } + } + + internal static string ArgumentTypeHasNoIdentityKey (object p0) { + return SR.Format (SR.ArgumentTypeHasNoIdentityKey, p0); + } + + internal static string CouldNotConvert (object p0, object p1) { + return SR.Format (SR.CouldNotConvert, p0, p1); + } + + internal static string CannotRemoveUnattachedEntity { + get { return SR.CannotRemoveUnattachedEntity; } + } + + internal static string ColumnMappedMoreThanOnce (object p0) { + return SR.Format (SR.ColumnMappedMoreThanOnce, p0); + } + + internal static string CouldNotAttach { + get { return SR.CouldNotAttach; } + } + + internal static string CouldNotGetTableForSubtype (object p0, object p1) { + return SR.Format (SR.CouldNotGetTableForSubtype, p0, p1); + } + + internal static string CouldNotRemoveRelationshipBecauseOneSideCannotBeNull (object p0, object p1, object p2) { + return SR.Format (SR.CouldNotRemoveRelationshipBecauseOneSideCannotBeNull, p0, p1, p2); + } + + internal static string EntitySetAlreadyLoaded { + get { return SR.EntitySetAlreadyLoaded; } + } + + internal static string EntitySetModifiedDuringEnumeration { + get { return SR.EntitySetModifiedDuringEnumeration; } + } + + internal static string ExpectedQueryableArgument (object p0, object p1) { + return SR.Format (SR.ExpectedQueryableArgument, p0, p1); + } + + internal static string ExpectedUpdateDeleteOrChange { + get { return SR.ExpectedUpdateDeleteOrChange; } + } + + internal static string KeyIsWrongSize (object p0, object p1) { + return SR.Format (SR.KeyIsWrongSize, p0, p1); + } + + internal static string KeyValueIsWrongType (object p0, object p1) { + return SR.Format (SR.KeyValueIsWrongType, p0, p1); + } + + internal static string IdentityChangeNotAllowed (object p0, object p1) { + return SR.Format (SR.IdentityChangeNotAllowed, p0, p1); + } + + internal static string DbGeneratedChangeNotAllowed (object p0, object p1) { + return SR.Format (SR.DbGeneratedChangeNotAllowed, p0, p1); + } + + internal static string ModifyDuringAddOrRemove { + get { return SR.ModifyDuringAddOrRemove; } + } + + internal static string ProviderDoesNotImplementRequiredInterface (object p0, object p1) { + return SR.Format (SR.ProviderDoesNotImplementRequiredInterface, p0, p1); + } + + internal static string ProviderTypeNull { + get { return SR.ProviderTypeNull; } + } + + internal static string TypeCouldNotBeAdded (object p0) { + return SR.Format (SR.TypeCouldNotBeAdded, p0); + } + + internal static string TypeCouldNotBeRemoved (object p0) { + return SR.Format (SR.TypeCouldNotBeRemoved, p0); + } + + internal static string TypeCouldNotBeTracked (object p0) { + return SR.Format (SR.TypeCouldNotBeTracked, p0); + } + + internal static string TypeIsNotEntity (object p0) { + return SR.Format (SR.TypeIsNotEntity, p0); + } + + internal static string UnrecognizedRefreshObject { + get { return SR.UnrecognizedRefreshObject; } + } + + internal static string UnhandledExpressionType (object p0) { + return SR.Format (SR.UnhandledExpressionType, p0); + } + + internal static string UnhandledBindingType (object p0) { + return SR.Format (SR.UnhandledBindingType, p0); + } + + internal static string ObjectTrackingRequired { + get { return SR.ObjectTrackingRequired; } + } + + internal static string OptionsCannotBeModifiedAfterQuery { + get { return SR.OptionsCannotBeModifiedAfterQuery; } + } + + internal static string DeferredLoadingRequiresObjectTracking { + get { return SR.DeferredLoadingRequiresObjectTracking; } + } + + internal static string SubqueryDoesNotSupportOperator (object p0) { + return SR.Format (SR.SubqueryDoesNotSupportOperator, p0); + } + + internal static string SubqueryNotSupportedOn (object p0) { + return SR.Format (SR.SubqueryNotSupportedOn, p0); + } + + internal static string SubqueryNotSupportedOnType (object p0, object p1) { + return SR.Format (SR.SubqueryNotSupportedOnType, p0, p1); + } + + internal static string SubqueryNotAllowedAfterFreeze { + get { return SR.SubqueryNotAllowedAfterFreeze; } + } + + internal static string IncludeNotAllowedAfterFreeze { + get{ return SR.IncludeNotAllowedAfterFreeze; } + } + + internal static string LoadOptionsChangeNotAllowedAfterQuery { + get { return SR.LoadOptionsChangeNotAllowedAfterQuery; } + } + + internal static string IncludeCycleNotAllowed { + get { return SR.IncludeCycleNotAllowed; } + } + + internal static string SubqueryMustBeSequence { + get { return SR.SubqueryMustBeSequence; } + } + + internal static string RefreshOfDeletedObject { + get { return SR.RefreshOfDeletedObject; } + } + + internal static string RefreshOfNewObject { + get { return SR.RefreshOfNewObject; } + } + + internal static string CannotChangeInheritanceType (object p0, object p1, object p2, object p3) { + return SR.Format (SR.CannotChangeInheritanceType, p0, p1, p2, p3); + } + + internal static string DataContextCannotBeUsedAfterDispose { + get { return SR.DataContextCannotBeUsedAfterDispose; } + } + + internal static string TypeIsNotMarkedAsTable (object p0) { + return SR.Format (SR.TypeIsNotMarkedAsTable, p0); + } + + internal static string NonEntityAssociationMapping (object p0, object p1, object p2) { + return SR.Format (SR.NonEntityAssociationMapping, p0, p1, p2); + } + + internal static string CannotPerformCUDOnReadOnlyTable (object p0) { + return SR.Format (SR.CannotPerformCUDOnReadOnlyTable, p0); + } + + internal static string InsertCallbackComment { + get { return SR.InsertCallbackComment; } + } + + internal static string UpdateCallbackComment { + get { return SR.UpdateCallbackComment; } + } + + internal static string DeleteCallbackComment { + get { return SR.DeleteCallbackComment; } + } + + internal static string RowNotFoundOrChanged { + get { return SR.RowNotFoundOrChanged; } + } + + internal static string UpdatesFailedMessage (object p0, object p1) { + return SR.Format (SR.UpdatesFailedMessage, p0, p1); + } + + internal static string CycleDetected { + get { return SR.CycleDetected; } + } + + internal static string CantAddAlreadyExistingItem { + get { return SR.CantAddAlreadyExistingItem; } + } + + internal static string CantAddAlreadyExistingKey { + get { return SR.CantAddAlreadyExistingKey; } + } + + internal static string DatabaseGeneratedAlreadyExistingKey { + get { return SR.DatabaseGeneratedAlreadyExistingKey; } + } + + internal static string InsertAutoSyncFailure { + get { return SR.InsertAutoSyncFailure; } + } + + internal static string EntitySetDataBindingWithAbstractBaseClass (object p0) { + return SR.Format (SR.EntitySetDataBindingWithAbstractBaseClass, p0); + } + + internal static string EntitySetDataBindingWithNonPublicDefaultConstructor (object p0) { + return SR.Format (SR.EntitySetDataBindingWithNonPublicDefaultConstructor, p0); + } + + internal static string TextNTextAndImageCannotOccurInDistinct (object p0) { + return SR.Format (SR.TextNTextAndImageCannotOccurInDistinct, p0); + } + + internal static string TextNTextAndImageCannotOccurInUnion (object p0) { + return SR.Format (SR.TextNTextAndImageCannotOccurInUnion, p0); + } + + internal static string LenOfTextOrNTextNotSupported (object p0) { + return SR.Format (SR.LenOfTextOrNTextNotSupported, p0); + } + + internal static string SourceExpressionAnnotation (object p0) { + return SR.Format (SR.SourceExpressionAnnotation, p0); + } + + internal static string LogGeneralInfoMessage (object p0, object p1) { + return SR.Format (SR.LogGeneralInfoMessage, p0, p1); + } + + internal static string LogAttemptingToDeleteDatabase (object p0) { + return SR.Format (SR.LogAttemptingToDeleteDatabase, p0); + } + + internal static string MaxSizeNotSupported (object p0) { + return SR.Format (SR.MaxSizeNotSupported, p0); + } + + internal static string InvalidLoadOptionsLoadMemberSpecification { + get { return SR.InvalidLoadOptionsLoadMemberSpecification; } + } + + internal static string EntityIsTheWrongType { + get { return SR.EntityIsTheWrongType; } + } + + internal static string OriginalEntityIsWrongType { + get { return SR.OriginalEntityIsWrongType; } + } + + internal static string CannotAttachAlreadyExistingEntity { + get { return SR.CannotAttachAlreadyExistingEntity; } + } + + internal static string CannotAttachAsModifiedWithoutOriginalState { + get { return SR.CannotAttachAsModifiedWithoutOriginalState; } + } + + internal static string CannotPerformOperationDuringSubmitChanges { + get { return SR.CannotPerformOperationDuringSubmitChanges; } + } + + internal static string CannotPerformOperationOutsideSubmitChanges { + get { return SR.CannotPerformOperationOutsideSubmitChanges; } + } + + internal static string CannotPerformOperationForUntrackedObject { + get { return SR.CannotPerformOperationForUntrackedObject; } + } + + internal static string CannotTranslateExpressionToSql { + get { return SR.CannotTranslateExpressionToSql; } + } + + internal static string CannotAttachAddNonNewEntities { + get { return SR.CannotAttachAddNonNewEntities; } + } + + internal static string QueryWasCompiledForDifferentMappingSource { + get { return SR.QueryWasCompiledForDifferentMappingSource; } + } + } +} diff --git a/mcs/class/System.Data.Linq/ReferenceSources/ThisAssembly.cs b/mcs/class/System.Data.Linq/ReferenceSources/ThisAssembly.cs new file mode 100644 index 0000000000..2676eb2d5e --- /dev/null +++ b/mcs/class/System.Data.Linq/ReferenceSources/ThisAssembly.cs @@ -0,0 +1,4 @@ +static class ThisAssembly +{ + public const string InformationalVersion = Consts.FxFileVersion; +} diff --git a/mcs/class/System.Data.Linq/System.Data.Linq.dll.sources b/mcs/class/System.Data.Linq/System.Data.Linq.dll.sources index 242c5b64b1..102a32a2f4 100755 --- a/mcs/class/System.Data.Linq/System.Data.Linq.dll.sources +++ b/mcs/class/System.Data.Linq/System.Data.Linq.dll.sources @@ -1,324 +1,109 @@ ../../build/common/Consts.cs ../../build/common/Locale.cs +../../build/common/SR.cs ../../build/common/MonoTODOAttribute.cs -src/DbLinq.Firebird/FirebirdDataContext.cs -src/DbLinq.Firebird/FirebirdExpressionTranslator.cs -src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs -src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs -src/DbLinq.Firebird/FirebirdSchemaLoader.cs -src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs -src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs -src/DbLinq.Firebird/FirebirdSqlProvider.cs -src/DbLinq.Firebird/FirebirdVendor.cs -src/DbLinq.Ingres/IngresDataContext.cs -src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs -src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs -src/DbLinq.Ingres/IngresSchemaLoader.cs -src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs -src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs -src/DbLinq.Ingres/IngresSqlProvider.cs -src/DbLinq.Ingres/IngresVendor.cs -src/DbLinq.MySql/MySqlDataContext.cs -src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs -src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs -src/DbLinq.MySql/MySqlSchemaLoader.cs -src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs -src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs -src/DbLinq.MySql/MySqlSqlProvider.cs -src/DbLinq.MySql/MySqlVendor.cs -src/DbLinq.Oracle/OracleDataContext.cs -src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs -src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs -src/DbLinq.Oracle/OracleSchemaLoader.cs -src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs -src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs -src/DbLinq.Oracle/OracleSqlProvider.cs -src/DbLinq.Oracle/OracleVendor.cs -src/DbLinq.PostgreSql/PgsqlDataContext.cs -src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs -src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs -src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs -src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs -src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs -src/DbLinq.PostgreSql/PgsqlSqlProvider.cs -src/DbLinq.PostgreSql/PgsqlVendor.cs -src/DbLinq.Sqlite/Schema/DataCommand.cs -src/DbLinq.Sqlite/SqliteDataContext.cs -src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs -src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs -src/DbLinq.Sqlite/SqliteSchemaLoader.cs -src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs -src/DbLinq.Sqlite/SqliteSqlProvider.cs -src/DbLinq.Sqlite/SqliteVendor.cs -src/DbLinq.SqlServer/SqlServerDataContext.cs -src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs -src/DbLinq.SqlServer/SqlServerSchemaLoader.cs -src/DbLinq.SqlServer/SqlServerSqlProvider.cs -src/DbLinq.SqlServer/SqlServerTypeConversions.cs -src/DbLinq.SqlServer/SqlServerVendor.cs -src/DbLinq/Data/Linq/ChangeAction.cs -src/DbLinq/Data/Linq/ChangeSet.cs -src/DbLinq/Data/Linq/Database/IDatabaseContext.cs -src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs -src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs -src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs -src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs -src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs -src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs -src/DbLinq/Data/Linq/DataContext.cs -src/DbLinq/Data/Linq/DataLoadOptions.cs -src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs -src/DbLinq/Data/Linq/EntityRef.cs -src/DbLinq/Data/Linq/EntitySet.cs -src/DbLinq/Data/Linq/Identity/IdentityKey.cs -src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs -src/DbLinq/Data/Linq/Identity/IIdentityReader.cs -src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs -src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs -src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs -src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs -src/DbLinq/Data/Linq/IExecuteResult.cs -src/DbLinq/Data/Linq/IMemberModificationHandler.cs -src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs -src/DbLinq/Data/Linq/Implementation/EntityState.cs -src/DbLinq/Data/Linq/Implementation/EntityTrack.cs -src/DbLinq/Data/Linq/Implementation/EntityTracker.cs -src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs -src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs -src/DbLinq/Data/Linq/Implementation/QueryProvider.cs -src/DbLinq/Data/Linq/Implementation/VendorProvider.cs -src/DbLinq/Data/Linq/ITable.cs -src/DbLinq/Data/Linq/IVendorProvider.cs -src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs -src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs -src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs -src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs -src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs -src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs -src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs -src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs -src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs -src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs -src/DbLinq/Data/Linq/Mapping/MappingContext.cs -src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs -src/DbLinq/Data/Linq/RefreshMode.cs -src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs -src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs -src/DbLinq/Data/Linq/Sql/SqlPart.cs -src/DbLinq/Data/Linq/Sql/SqlStatement.cs -src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs -src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs -src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs -src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs -src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs -src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs -src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs -src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs -src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs -src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs -src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs -src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs -src/DbLinq/Data/Linq/Sugar/BuilderContext.cs -src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs -src/DbLinq/Data/Linq/Sugar/DirectQuery.cs -src/DbLinq/Data/Linq/Sugar/Error.cs -src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs -src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs -src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs -src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs -src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs -src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs -src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs -src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs -src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs -src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs -src/DbLinq/Data/Linq/Sugar/IDataMapper.cs -src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs -src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs -src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs -src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs -src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs -src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs -src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs -src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs -src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs -src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs -src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs -src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs -src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs -src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs -src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs -src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs -src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs -src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs -src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs -src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs -src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs -src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs -src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs -src/DbLinq/Data/Linq/Sugar/IQueryCache.cs -src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs -src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs -src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs -src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs -src/DbLinq/Data/Linq/Sugar/QueryContext.cs -src/DbLinq/Data/Linq/Sugar/SelectQuery.cs -src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs -src/DbLinq/Data/Linq/Table.cs -src/DbLinq/DbLinqToDoAttribute.cs -src/DbLinq/Factory/DbLinqAttribute.cs -src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs -src/DbLinq/Factory/IObjectFactory.cs -src/DbLinq/Factory/ObjectFactory.cs -src/DbLinq/Language/ILanguages.cs -src/DbLinq/Language/ILanguageWords.cs -src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs -src/DbLinq/Language/Implementation/AbstractWords.cs -src/DbLinq/Language/Implementation/Languages.cs -src/DbLinq/Language/Implementation/NoLanguageWords.cs -src/DbLinq/Schema/AssociationName.cs -src/DbLinq/Schema/Case.cs -src/DbLinq/Schema/ColumnName.cs -src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs -src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs -src/DbLinq/Schema/Dbml/Adapter/EnumType.cs -src/DbLinq/Schema/Dbml/Adapter/INamedType.cs -src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs -src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs -src/DbLinq/Schema/Dbml/DatabaseSerializer.cs -src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs -src/DbLinq/Schema/Dbml/DbmlSchema.cs -src/DbLinq/Schema/Dbml/DbmlSerializer.cs -src/DbLinq/Schema/Implementation/NameFormatter.cs -src/DbLinq/Schema/INameFormatter.cs -src/DbLinq/Schema/Name.cs -src/DbLinq/Schema/NameFormat.cs -src/DbLinq/Schema/ParameterName.cs -src/DbLinq/Schema/ProcedureName.cs -src/DbLinq/Schema/SchemaName.cs -src/DbLinq/Schema/TableName.cs -src/DbLinq/Schema/WordsExtraction.cs -src/DbLinq/System.Data.Linq/Assembly/AssemblyInfo.cs -src/DbLinq/System.Data.Linq/Binary.cs -src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs -src/DbLinq/System.Data.Linq/ChangeConflictException.cs -src/DbLinq/System.Data.Linq/CompiledQuery.cs -src/DbLinq/System.Data.Linq/ConflictMode.cs -src/DbLinq/System.Data.Linq/DBConvert.cs -src/DbLinq/System.Data.Linq/DuplicateKeyException.cs -src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs -src/DbLinq/System.Data.Linq/IFunctionResult.cs -src/DbLinq/System.Data.Linq/IMultipleResults.cs -src/DbLinq/System.Data.Linq/ISingleResult.cs -src/DbLinq/System.Data.Linq/Link.cs -src/DbLinq/System.Data.Linq/MemberChangeConflict.cs -src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs -src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs -src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs -src/DbLinq/Util/DataCommand.cs -src/DbLinq/Util/DbmlExtensions.cs -src/DbLinq/Util/ExpressionChainEqualityComparer.cs -src/DbLinq/Util/ExpressionEqualityComparer.cs -src/DbLinq/Util/IDataRecordExtensions.cs -src/DbLinq/Util/IDataTypeExtensions.cs -src/DbLinq/Util/IDbDataParameterExtensions.cs -src/DbLinq/Util/IThreadSafeDictionary.cs -src/DbLinq/Util/LambdaComparer.cs -src/DbLinq/Util/MemberInfoExtensions.cs -src/DbLinq/Util/Output.cs -src/DbLinq/Util/OutputLevel.cs -src/DbLinq/Util/Page.cs -src/DbLinq/Util/Profiler.cs -src/DbLinq/Util/QuotesHelper.cs -src/DbLinq/Util/ReferenceEqualityComparer.cs -src/DbLinq/Util/ReflectionExtensions.cs -src/DbLinq/Util/ReflectionUtility.cs -src/DbLinq/Util/StringExtensions.cs -src/DbLinq/Util/TextWriterExtension.cs -src/DbLinq/Util/ThreadSafeDictionary.cs -src/DbLinq/Util/TypeConvert.cs -src/DbLinq/Util/TypeExtensions.cs -src/DbLinq/Util/TypeLoader.cs -src/DbLinq/Vendor/DbSchemaLoader.cs -src/DbLinq/Vendor/IDataName.cs -src/DbLinq/Vendor/IDataTableColumn.cs -src/DbLinq/Vendor/IDataType.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs -src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs -src/DbLinq/Vendor/Implementation/SqlProvider.cs -src/DbLinq/Vendor/Implementation/Vendor.cs -src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs -src/DbLinq/Vendor/INameAliases.cs -src/DbLinq/Vendor/ISchemaLoader.cs -src/DbLinq/Vendor/ISqlProvider.cs -src/DbLinq/Vendor/IVendor.cs -src/DbLinq/Vendor/VendorAttribute.cs + +Assembly/AssemblyInfo.cs + +ReferenceSources/SR.cs +ReferenceSources/Strings.cs +ReferenceSources/Error.cs +ReferenceSources/ThisAssembly.cs + +../referencesource/System.Data.Linq/ChangeConflicts.cs +../referencesource/System.Data.Linq/ChangeDirector.cs +../referencesource/System.Data.Linq/ChangeProcessor.cs +../referencesource/System.Data.Linq/ChangeTracker.cs +../referencesource/System.Data.Linq/CompiledQuery.cs +../referencesource/System.Data.Linq/DataBindingList.cs +../referencesource/System.Data.Linq/DataContext.cs +../referencesource/System.Data.Linq/DataQuery.cs +../referencesource/System.Data.Linq/DataServices.cs +../referencesource/System.Data.Linq/DataShape.cs +../referencesource/System.Data.Linq/DbConvert.cs +../referencesource/System.Data.Linq/DbmlShared/Mapping.cs +../referencesource/System.Data.Linq/EntitySetDataBindingList.cs +../referencesource/System.Data.Linq/Exceptions.cs +../referencesource/System.Data.Linq/FunctionResults.cs +../referencesource/System.Data.Linq/GlobalSuppressions.cs +../referencesource/System.Data.Linq/IdentityManager.cs +../referencesource/System.Data.Linq/Mapping/Accessors.cs +../referencesource/System.Data.Linq/Mapping/AttributedMetaModel.cs +../referencesource/System.Data.Linq/Mapping/Attributes.cs +../referencesource/System.Data.Linq/Mapping/MappedMetaModel.cs +../referencesource/System.Data.Linq/Mapping/MappingSource.cs +../referencesource/System.Data.Linq/Mapping/MetaModel.cs +../referencesource/System.Data.Linq/Provider/IDataServices.cs +../referencesource/System.Data.Linq/Provider/IProvider.cs +../referencesource/System.Data.Linq/SortableBindingList.cs +../referencesource/System.Data.Linq/SqlClient/Common/DbFormatter.cs +../referencesource/System.Data.Linq/SqlClient/Common/Expressions.cs +../referencesource/System.Data.Linq/SqlClient/Common/IConnectionManager.cs +../referencesource/System.Data.Linq/SqlClient/Common/InheritanceRules.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlFactory.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlNode.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlNodeAnnotation.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlNodeAnnotations.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlNodeTypeOperators.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlServer2KCompatibilityAnnotation.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlServer2KCompatibilityCheck.cs +../referencesource/System.Data.Linq/SqlClient/Common/SqlVisitor.cs +../referencesource/System.Data.Linq/SqlClient/Common/TypeSystem.cs +../referencesource/System.Data.Linq/SqlClient/Common/TypeSystemProvider.cs +../referencesource/System.Data.Linq/SqlClient/Error.cs +../referencesource/System.Data.Linq/SqlClient/OptimizationFlags.cs +../referencesource/System.Data.Linq/SqlClient/PerfTimer.cs +../referencesource/System.Data.Linq/SqlClient/Query/ContainsRowNumberChecker.cs +../referencesource/System.Data.Linq/SqlClient/Query/Funcletizer.cs +../referencesource/System.Data.Linq/SqlClient/Query/LongTypeConverter.cs +../referencesource/System.Data.Linq/SqlClient/Query/MethodCallConverter.cs +../referencesource/System.Data.Linq/SqlClient/Query/QueryConverter.cs +../referencesource/System.Data.Linq/SqlClient/Query/SimpleExpression.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlAggregateChecker.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlAliaser.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlAliasesReferenced.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlBinder.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlBooleanMismatchVisitor.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlBooleanizer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlCaseSimplifier.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlColumnizer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlComparer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlCrossApplyToCrossJoin.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlDeflator.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlDuplicator.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlExpander.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlExpressionNullability.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlFlattener.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlFormatter.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlGatherConsumedAliases.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlGatherProducedAliases.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlIdentifier.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlLiftIndependentRowExpressions.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlLiftWhereClauses.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlMethodCallConverter.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlMethodTransformer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlMultiplexer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlNamer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlOuterApplyReducer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlParameterizer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlRemoveConstantOrderBy.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlReorderer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlResolver.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlRetyper.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlRewriteScalarSubqueries.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlSupersetValidator.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlTopReducer.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlTypeConverter.cs +../referencesource/System.Data.Linq/SqlClient/Query/SqlUnionizer.cs +../referencesource/System.Data.Linq/SqlClient/Query/Translator.cs +../referencesource/System.Data.Linq/SqlClient/Query/TypeSource.cs +../referencesource/System.Data.Linq/SqlClient/Reader/ObjectReader.cs +../referencesource/System.Data.Linq/SqlClient/Reader/ObjectReaderCompiler.cs +../referencesource/System.Data.Linq/SqlClient/SqlBuilder.cs +../referencesource/System.Data.Linq/SqlClient/SqlConnectionManager.cs +../referencesource/System.Data.Linq/SqlClient/SqlMethods.cs +../referencesource/System.Data.Linq/SqlClient/SqlProvider.cs +../referencesource/System.Data.Linq/SqlClient/SqlTypeSystemProvider.cs +../referencesource/System.Data.Linq/SubqueryRules.cs +../referencesource/System.Data.Linq/Types.cs +../referencesource/System.Data.Linq/misc/SecurityUtils.cs diff --git a/mcs/class/System.Data.Linq/System.Data.Linq_test.dll.sources b/mcs/class/System.Data.Linq/System.Data.Linq_test.dll.sources index a0379e1963..e149e2bd3a 100644 --- a/mcs/class/System.Data.Linq/System.Data.Linq_test.dll.sources +++ b/mcs/class/System.Data.Linq/System.Data.Linq_test.dll.sources @@ -1,9 +1,11 @@ +../../test-helpers/NunitHelpers.cs + dummy.cs -../src/DbLinq.SqlServer/Test/MsSqlDataContextTest.cs -../src/DbLinq/Test/BinaryTest.cs -../src/DbLinq/Test/DataContextTest.cs -../src/DbLinq/Test/EntitySetTest.cs -../src/DbLinq/Test/NullProvider.cs -../src/DbLinq/Test/PeopleTable.cs -../src/DbLinq/Test/Providers/DataContextTestBase.cs -../src/DbLinq/Test/TableTest.cs +SqlServer/MsSqlDataContextTest.cs +BinaryTest.cs +DataContextTest.cs +EntitySetTest.cs +NullProvider.cs +PeopleTable.cs +Providers/DataContextTestBase.cs +TableTest.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/BinaryTest.cs b/mcs/class/System.Data.Linq/Test/BinaryTest.cs similarity index 92% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/BinaryTest.cs rename to mcs/class/System.Data.Linq/Test/BinaryTest.cs index 1e54edbdb7..e8b3624de9 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/BinaryTest.cs +++ b/mcs/class/System.Data.Linq/Test/BinaryTest.cs @@ -1,138 +1,136 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Linq; -using System.Text; - -using System.Data.Linq; - -using NUnit.Framework; - -namespace DbLinqTest -{ - [TestFixture] - public class BinaryTest - { - // XXX: oddly, MSDN documents that while ArgumentNullException is - // thrown, that may change in the future. Why would this change? - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Constructor_ValueNull() - { - new Binary(null); - } - - [Test] - public void Constructor() - { - new Binary(Encoding.UTF8.GetBytes("hello!")); - } - - [Test] - public void Equals() - { - Binary a = new Binary(Encoding.UTF8.GetBytes("a")); - Assert.IsFalse(a.Equals((Binary)null)); - Assert.IsFalse(a.Equals((object)null)); - Assert.IsFalse(a.Equals(new Binary(Encoding.UTF8.GetBytes("b")))); - Assert.IsTrue(a.Equals(a)); - Assert.IsTrue(a.Equals(new Binary(Encoding.UTF8.GetBytes("a")))); - } - - [Test] - public void Equality() - { - Binary a = new Binary(Encoding.UTF8.GetBytes("a")); - Binary a2 = new Binary(Encoding.UTF8.GetBytes("a")); - Binary b = new Binary(Encoding.UTF8.GetBytes("b")); - - Assert.IsTrue(a == a); - Assert.IsTrue(a == a2); - Assert.IsFalse(a == null); - Assert.IsFalse(null == a); - Assert.IsFalse(a == b); - Assert.IsFalse(b == a); - - a = null; - b = null; - Assert.IsTrue(a == b); - } - - [Test] - public void Inequality() - { - Binary a = new Binary(Encoding.UTF8.GetBytes("a")); - Binary a2 = new Binary(Encoding.UTF8.GetBytes("a")); - Binary b = new Binary(Encoding.UTF8.GetBytes("b")); - - Assert.IsFalse(a != a); - Assert.IsFalse(a != a2); - Assert.IsTrue(a != null); - Assert.IsTrue(null != a); - Assert.IsTrue(a != b); - Assert.IsTrue(b != a); - - a = null; - b = null; - Assert.IsFalse(a != b); - } - - [Test] - public void GetHashCode() - { - Binary a = new Binary(Encoding.UTF8.GetBytes("a")); - Binary b = new Binary(Encoding.UTF8.GetBytes("a")); - Assert.AreEqual(a.GetHashCode(), b.GetHashCode()); - } - - [Test] - public void Length() - { - byte[] data = Encoding.UTF8.GetBytes("Hello, world!"); - Binary b = new Binary(data); - Assert.AreEqual(data.Length, b.Length); - } - - [Test] - public void ToArray() - { - byte[] data = Encoding.UTF8.GetBytes("is the array copied? Yes."); - Binary b = new Binary(data); - Assert.IsTrue(data.SequenceEqual(b.ToArray())); - - data[0] = (byte) 'I'; - Assert.IsFalse(data.SequenceEqual(b.ToArray())); - } - - [Test] - public new void ToString() - { - byte[] data = new byte[] { 0x1, 0x2, 0x3, 0x4 }; - Binary b = new Binary(data); - Assert.AreEqual('"' + Convert.ToBase64String(data) + '"', b.ToString()); - } - } -} +#region MIT license +// +// MIT license +// +// Copyright (c) 2009 Novell, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#endregion + +using System; +using System.Linq; +using System.Text; + +using System.Data.Linq; + +using NUnit.Framework; + +namespace DbLinqTest +{ + [TestFixture] + public class BinaryTest + { + [Test] + public void Constructor_ValueNull() + { + new Binary(null); + } + + [Test] + public void Constructor() + { + new Binary(Encoding.UTF8.GetBytes("hello!")); + } + + [Test] + public void Equals() + { + Binary a = new Binary(Encoding.UTF8.GetBytes("a")); + Assert.IsFalse(a.Equals((Binary)null)); + Assert.IsFalse(a.Equals((object)null)); + Assert.IsFalse(a.Equals(new Binary(Encoding.UTF8.GetBytes("b")))); + Assert.IsTrue(a.Equals(a)); + Assert.IsTrue(a.Equals(new Binary(Encoding.UTF8.GetBytes("a")))); + } + + [Test] + public void Equality() + { + Binary a = new Binary(Encoding.UTF8.GetBytes("a")); + Binary a2 = new Binary(Encoding.UTF8.GetBytes("a")); + Binary b = new Binary(Encoding.UTF8.GetBytes("b")); + + Assert.IsTrue(a == a); + Assert.IsTrue(a == a2); + Assert.IsFalse(a == null); + Assert.IsFalse(null == a); + Assert.IsFalse(a == b); + Assert.IsFalse(b == a); + + a = null; + b = null; + Assert.IsTrue(a == b); + } + + [Test] + public void Inequality() + { + Binary a = new Binary(Encoding.UTF8.GetBytes("a")); + Binary a2 = new Binary(Encoding.UTF8.GetBytes("a")); + Binary b = new Binary(Encoding.UTF8.GetBytes("b")); + + Assert.IsFalse(a != a); + Assert.IsFalse(a != a2); + Assert.IsTrue(a != null); + Assert.IsTrue(null != a); + Assert.IsTrue(a != b); + Assert.IsTrue(b != a); + + a = null; + b = null; + Assert.IsFalse(a != b); + } + + [Test] + public void GetHashCode() + { + Binary a = new Binary(Encoding.UTF8.GetBytes("a")); + Binary b = new Binary(Encoding.UTF8.GetBytes("a")); + Assert.AreEqual(a.GetHashCode(), b.GetHashCode()); + } + + [Test] + public void Length() + { + byte[] data = Encoding.UTF8.GetBytes("Hello, world!"); + Binary b = new Binary(data); + Assert.AreEqual(data.Length, b.Length); + } + + [Test] + public void ToArray() + { + byte[] data = Encoding.UTF8.GetBytes("is the array copied? Yes."); + Binary b = new Binary(data); + Assert.IsTrue(data.SequenceEqual(b.ToArray())); + + data[0] = (byte) 'I'; + Assert.IsFalse(data.SequenceEqual(b.ToArray())); + } + + [Test] + public new void ToString() + { + byte[] data = new byte[] { 0x1, 0x2, 0x3, 0x4 }; + Binary b = new Binary(data); + Assert.AreEqual('"' + Convert.ToBase64String(data) + '"', b.ToString()); + } + } +} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/DataContextTest.cs b/mcs/class/System.Data.Linq/Test/DataContextTest.cs similarity index 86% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/DataContextTest.cs rename to mcs/class/System.Data.Linq/Test/DataContextTest.cs index 1d63b689a5..331068f125 100755 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/DataContextTest.cs +++ b/mcs/class/System.Data.Linq/Test/DataContextTest.cs @@ -1,266 +1,260 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; -using System.Data.Common; -using System.Data.Linq.Mapping; -using System.Linq; -using System.IO; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using NUnit.Framework; - -using DbLinq.Null; - -namespace DbLinqTest { - - class DummyConnection : IDbConnection - { - public DummyConnection() - { - ConnectionString = ""; - } - - public IDbTransaction BeginTransaction() {return null;} - public IDbTransaction BeginTransaction(IsolationLevel il) {return null;} - public void ChangeDatabase(string databaseName) {} - public void Close() {} - public IDbCommand CreateCommand() {return null;} - public string ConnectionString{get; set;} - public int ConnectionTimeout{get {return 0;}} - public string Database{get {return null;}} - public void Dispose() {} - public void Open() {} - public ConnectionState State{get {return ConnectionState.Closed;}} - } - - [TestFixture] - public class DataContextTest - { - DataContext context; - - [SetUp] - public void SetUp() - { - context = new DataContext(new NullConnection() { ConnectionString = "" }); - } - - [TearDown] - public void TearDown() - { - context = null; - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Ctor_ConnectionStringNull() - { - string connectionString = null; - new DataContext(connectionString); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Ctor_ConnectionNull() - { - IDbConnection connection = null; - new DataContext(connection); - } - - [Test, ExpectedException(typeof(NullReferenceException))] - public void Ctor_ConnectionStringOfConnectionIsNull() - { - IDbConnection connection = new NullConnection() { ConnectionString = null }; - new DataContext(connection); - } - - [Test, ExpectedException(typeof(ArgumentException))] - public void Ctor_ConnectionString_DbLinqConnectionType_Empty() - { - new DataContext("DbLinqConnectionType="); - } - - [Test, ExpectedException(typeof(ArgumentException))] - public void Ctor_ConnectionString_DbLinqConnectionType_Empty2() - { - new DataContext("DbLinqConnectionType=;"); - } - - [Test, ExpectedException(typeof(ArgumentException))] - public void Ctor_ConnectionString_DbLinqConnectionType_Invalid() - { - new DataContext("DbLinqConnectionType=InvalidType, DoesNotExist"); - } - - [Test, ExpectedException(typeof(ArgumentException))] - public void Ctor_ConnectionString_DbLinqProvider_InvalidVendor() - { - new DataContext("DbLinqProvider=ThisVendorDoesNotExist"); - } - - [Test, ExpectedException(typeof(ArgumentException))] - public void Ctor_ConnectionString_DbLinqProvider_InvalidVendorWithDots() - { - new DataContext("DbLinqProvider=DbLinq.Sqlite.dll"); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Ctor_FileOrServerOrConnectionIsNull() - { - MappingSource mapping = new AttributeMappingSource(); - string fileOrServerOrConnection = null; - new DataContext(fileOrServerOrConnection, mapping); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Ctor_MappingIsNull() - { - MappingSource mapping = null; - string fileOrServerOrConnection = null; - new DataContext("", mapping); - } - -#if L2SQL - // DbLinqProvider/etc. obviously aren't removed under L2SQL - [ExpectedException(typeof(ArgumentException))] -#endif - [Test] - public void Ctor_ConnectionString_ExtraParameters_Munging() - { - if (Type.GetType("Mono.Runtime", false) != null) - Assert.Ignore("Mono's System.Data.Linq is expected to remove DbLinq parameters."); - DataContext ctx = new DataContext("Server=localhost;User id=test;Database=test;DbLinqProvider=Sqlite;DbLinqConnectionType=Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite"); - Assert.AreEqual(-1, ctx.Connection.ConnectionString.IndexOf("DbLinqProvider")); - Assert.AreEqual(-1, ctx.Connection.ConnectionString.IndexOf("DbLinqConnectionType")); - } - -#if !L2SQL - [Test, ExpectedException(typeof(NotImplementedException))] - public void Ctor_FileOrServerOrConnectionIsFilename() - { - MappingSource mapping = new AttributeMappingSource(); - string fileOrServerOrConnection = typeof(DataContextTest).Assembly.Location; - new DataContext(fileOrServerOrConnection, mapping); - } - - [Test, ExpectedException(typeof(NotImplementedException))] - public void Ctor_FileOrServerOrConnectionIsServer() - { - MappingSource mapping = new AttributeMappingSource(); - string fileOrServerOrConnection = "ThisIsAssumedToBeAServerName"; - new DataContext(fileOrServerOrConnection, mapping); - } -#endif - - [Test] - public void Connection() - { - IDbConnection connection = new NullConnection() { ConnectionString = "" }; - DataContext dc = new DataContext(connection); - Assert.AreEqual(connection, dc.Connection); - -#if !L2SQL - dc = new DataContext (new DummyConnection()); - Assert.AreEqual(null, dc.Connection); -#endif - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void ExecuteQuery_ElementTypeNull() - { - Type elementType = null; - context.ExecuteQuery(elementType, "command"); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void ExecuteQuery_QueryNull() - { - Type elementType = typeof(Person); - context.ExecuteQuery(elementType, null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void ExecuteQueryTResult_QueryNull() - { - context.ExecuteQuery(null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void GetCommand_QueryNull() - { - IQueryable query = null; - context.GetCommand(query); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void GetTable_TypeNull() - { - context.GetTable(null); - } - - [Test, ExpectedException(typeof(InvalidOperationException))] - public void GetTable_NotSupportedType() - { - context.GetTable(typeof(object)); - } - - [Test, ExpectedException(typeof(InvalidOperationException))] - public void GetTableTEntity_NotSupportedType() - { - context.GetTable(); - } - - [Test] - public void GetTableTEntity() - { - Table table = context.GetTable(); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Translate_ReaderNull() - { - context.Translate(typeof(Person), null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Translate_ElementTypeNull() - { - DbDataReader reader = new NullDataReader(); - context.Translate(null, reader); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void TranslateTResult_ReaderNull() - { - context.Translate(null); - } - } -} - +#region MIT license +// +// MIT license +// +// Copyright (c) 2009 Novell, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#endregion + +using System; +using System.Data; +using System.Data.Common; +using System.Data.Linq.Mapping; +using System.Linq; +using System.IO; + +#if MONO_STRICT +using System.Data.Linq; +#else +using DbLinq.Data.Linq; +#endif + +using NUnit.Framework; + +using DbLinq.Null; + +namespace DbLinqTest { + + class DummyConnection : IDbConnection + { + public DummyConnection() + { + ConnectionString = ""; + } + + public IDbTransaction BeginTransaction() {return null;} + public IDbTransaction BeginTransaction(IsolationLevel il) {return null;} + public void ChangeDatabase(string databaseName) {} + public void Close() {} + public IDbCommand CreateCommand() {return null;} + public string ConnectionString{get; set;} + public int ConnectionTimeout{get {return 0;}} + public string Database{get {return null;}} + public void Dispose() {} + public void Open() {} + public ConnectionState State{get {return ConnectionState.Closed;}} + } + + [TestFixture] + public class DataContextTest + { + DataContext context; + + [SetUp] + public void SetUp() + { + context = new DataContext(new NullConnection() { ConnectionString = "" }); + } + + [TearDown] + public void TearDown() + { + context = null; + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Ctor_ConnectionStringNull() + { + string connectionString = null; + new DataContext(connectionString); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Ctor_ConnectionNull() + { + IDbConnection connection = null; + new DataContext(connection); + } + + [Test, ExpectedException(typeof(NullReferenceException))] + public void Ctor_ConnectionStringOfConnectionIsNull() + { + IDbConnection connection = new NullConnection() { ConnectionString = null }; + new DataContext(connection); + } + + [Test, ExpectedException(typeof(ArgumentException))] + public void Ctor_ConnectionString_DbLinqConnectionType_Empty() + { + new DataContext("DbLinqConnectionType="); + } + + [Test, ExpectedException(typeof(ArgumentException))] + public void Ctor_ConnectionString_DbLinqConnectionType_Empty2() + { + new DataContext("DbLinqConnectionType=;"); + } + + [Test, ExpectedException(typeof(ArgumentException))] + public void Ctor_ConnectionString_DbLinqConnectionType_Invalid() + { + new DataContext("DbLinqConnectionType=InvalidType, DoesNotExist"); + } + + [Test, ExpectedException(typeof(ArgumentException))] + public void Ctor_ConnectionString_DbLinqProvider_InvalidVendor() + { + new DataContext("DbLinqProvider=ThisVendorDoesNotExist"); + } + + [Test, ExpectedException(typeof(ArgumentException))] + public void Ctor_ConnectionString_DbLinqProvider_InvalidVendorWithDots() + { + new DataContext("DbLinqProvider=DbLinq.Sqlite.dll"); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Ctor_FileOrServerOrConnectionIsNull() + { + MappingSource mapping = new AttributeMappingSource(); + string fileOrServerOrConnection = null; + new DataContext(fileOrServerOrConnection, mapping); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Ctor_MappingIsNull() + { + MappingSource mapping = null; + string fileOrServerOrConnection = null; + new DataContext("", mapping); + } + + [Test] + public void Ctor_ConnectionString_ExtraParameters_Munging() + { + var ex = Assert.Throws ( () => new DataContext("Server=localhost;User id=test;Database=test;DbLinqProvider=Sqlite;DbLinqConnectionType=Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite")); + // Keyword not supported: 'dblinqprovider' + Assert.Null(ex.InnerException); + Assert.NotNull(ex.Message); + Assert.True(ex.Message.IndexOf("'dblinqprovider'") != -1); + Assert.Null(ex.ParamName); + } + + [Test] + public void Ctor_FileOrServerOrConnectionIsFilename() + { + MappingSource mapping = new AttributeMappingSource(); + string fileOrServerOrConnection = typeof(DataContextTest).Assembly.Location; + new DataContext(fileOrServerOrConnection, mapping); + } + + [Test] + public void Ctor_FileOrServerOrConnectionIsServer() + { + MappingSource mapping = new AttributeMappingSource(); + string fileOrServerOrConnection = "ThisIsAssumedToBeAServerName"; + new DataContext(fileOrServerOrConnection, mapping); + } + + [Test] + public void Connection() + { + IDbConnection connection = new NullConnection() { ConnectionString = "" }; + DataContext dc = new DataContext(connection); + Assert.AreEqual(connection, dc.Connection); + + var ex = Assert.Throws ( () => new DataContext (new DummyConnection())); + Assert.Null(ex.InnerException); + Assert.NotNull(ex.Message); + Assert.True(ex.Message.IndexOf("'connection'") != -1); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void ExecuteQuery_ElementTypeNull() + { + Type elementType = null; + context.ExecuteQuery(elementType, "command"); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void ExecuteQuery_QueryNull() + { + Type elementType = typeof(Person); + context.ExecuteQuery(elementType, null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void ExecuteQueryTResult_QueryNull() + { + context.ExecuteQuery(null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void GetCommand_QueryNull() + { + IQueryable query = null; + context.GetCommand(query); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void GetTable_TypeNull() + { + context.GetTable(null); + } + + [Test, ExpectedException(typeof(InvalidOperationException))] + public void GetTable_NotSupportedType() + { + context.GetTable(typeof(object)); + } + + [Test, ExpectedException(typeof(InvalidOperationException))] + public void GetTableTEntity_NotSupportedType() + { + context.GetTable(); + } + + [Test] + public void GetTableTEntity() + { + Table table = context.GetTable(); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Translate_ReaderNull() + { + context.Translate(typeof(Person), null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Translate_ElementTypeNull() + { + DbDataReader reader = new NullDataReader(); + context.Translate(null, reader); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void TranslateTResult_ReaderNull() + { + context.Translate(null); + } + } +} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/EntitySetTest.cs b/mcs/class/System.Data.Linq/Test/EntitySetTest.cs similarity index 94% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/EntitySetTest.cs rename to mcs/class/System.Data.Linq/Test/EntitySetTest.cs index 53b694c1f3..3f73149558 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/EntitySetTest.cs +++ b/mcs/class/System.Data.Linq/Test/EntitySetTest.cs @@ -1,438 +1,443 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using NUnit.Framework; - -namespace DbLinqTest -{ - [TestFixture] - public class EntitySetTest - { - [Test] - public void Ctor_OnAddAndOnRemoveCanBeNull() - { - new EntitySet(null, null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Add_EntityNull() - { - var people = new EntitySet(); - people.Add(null); - } - - [Test] - public void Add_IgnoreRepeats() - { - var people = new EntitySet(); - var p = new Person { FirstName = "A", LastName = "B" }; - people.Add(p); - people.Add(p); - Assert.AreEqual(1, people.Count); - } - - [Test, ExpectedException(typeof(InvalidOperationException))] - public void Add_ThenSetSourceIsInvalid() - { - var people = new EntitySet(); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - people.Add(new Person { FirstName = "A", LastName = "B" }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - people.SetSource(new[]{ - new Person { FirstName = "1", LastName = "2" } - }); - } - - [Test] - public void Assign() - { - var people = new EntitySet(); - people.SetSource(new[]{ - new Person { FirstName = "A", LastName = "B" }, - }); - Assert.IsTrue(people.IsDeferred); - people.Load(); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsFalse(people.IsDeferred); - people.Assign(new[]{ - new Person { FirstName = "1", LastName = "2" }, - }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.AreEqual(1, people.Count); - Assert.IsFalse(people.IsDeferred); - } - - [Test, ExpectedException(typeof(InvalidOperationException))] - public void Clear_DoesNotResetSource() - { - var people = new EntitySet(); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - people.Add(new Person { FirstName = "A", LastName = "B" }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - people.Clear(); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - people.SetSource(new[]{ - new Person { FirstName = "1", LastName = "2" }, - }); - } - - [Test] - public void Contains_KillsDeferred() - { - var people = new EntitySet(); - var p = new Person { FirstName = "A", LastName = "B" }; - people.SetSource(new[]{ - p - }); - Assert.IsTrue(people.IsDeferred); - Assert.IsTrue(people.Contains(p)); - Assert.IsFalse(people.IsDeferred); - } - - [Test] - public void HasLoadedOrAssignedValues() - { - var people = new EntitySet(); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - people.SetSource(new[]{ - new Person { FirstName = "A", LastName = "B" }, - }); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - Assert.IsTrue(people.IsDeferred); - people.Load(); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsFalse(people.IsDeferred); - } - - [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] - public void IList_Add_WrongType() - { - var people = new EntitySet(); - System.Collections.IList list = people; - list.Add("WrongType"); - } - - [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] - public void IList_Add_DuplicateItem() - { - var people = new EntitySet(); - var p = new Person { FirstName = "A", LastName = "B" }; - people.Add(p); - System.Collections.IList list = people; - list.Add(p); - } - - [Test] - public void IList_Remove_WrongTypeIsIgnored() - { - var people = new EntitySet(); - System.Collections.IList list = people; - list.Remove("DoesNotExist"); - } - - [Test] - public void IndexOf_KillsDeferred() - { - var people = new EntitySet(); - var p = new Person { FirstName = "A", LastName = "B" }; - people.SetSource(new[]{ - p - }); - Assert.IsTrue(people.IsDeferred); - Assert.AreEqual(0, people.IndexOf(p)); - Assert.IsFalse(people.IsDeferred); - } - - [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] - public void Insert_RepeatValue() - { - var people = new EntitySet(); - var p = new Person { FirstName = "A", LastName = "B" }; - people.Add(p); - people.Insert(0, p); - } - - [Test] - public void Item_IsDeferredSourceLoaded() - { - var people = new EntitySet(); - people.SetSource(new[]{ - new Person { FirstName = "A", LastName = "B" }, - }); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - Assert.IsTrue(people.IsDeferred); - var p = people[0]; - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsFalse(people.IsDeferred); - } - - [Test] - public void ListChanged_NoSource() - { - // When is ListChanged emitted? - // It's not always when you think it would be. - // It depends on whether there's a Source present. - var people = new EntitySet(); - var events = new List (); - people.ListChanged += (o, e) => events.Add(e); - - people.Add(new Person { FirstName = "A", LastName = "B" }); - AssertEqual(events); - - events.Clear(); - people.Clear(); - AssertEqual(events, new ListChangedEventArgs(ListChangedType.Reset, 0, -1)); - - events.Clear(); - people.AddRange(new[]{ - new Person { FirstName = "1", LastName = "2" }, - new Person { FirstName = "<", LastName = ">" }, - }); - AssertEqual(events); - - events.Clear(); - var p = new Person { FirstName = "{", LastName = "}" }; - people.Insert(1, p); - AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1)); - - events.Clear(); - Assert.IsTrue(people.Remove(p)); - AssertEqual(events); - - events.Clear(); - people.RemoveAt(0); - AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1)); - - events.Clear(); - people[0] = p; - AssertEqual(events, - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), - new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1)); - } - - static void AssertEqual(List actual, params ListChangedEventArgs[] expected) - { - Assert.AreEqual(expected.Length, actual.Count); - for (int i = 0; i < expected.Length; ++i) - { - Assert.AreEqual(expected[i].ListChangedType, actual[i].ListChangedType, "ListChangedEventArgs.ListChangedType"); - Assert.AreEqual(expected[i].NewIndex, actual[i].NewIndex, "ListChangedEventArgs.NewIndex"); - Assert.AreEqual(expected[i].OldIndex, actual[i].OldIndex, "ListChangedEventArgs.OldIndex"); - } - } - - [Test] - public void ListChanged_WithSource() - { - // When is ListChanged emitted? - // It's not always when you think it would be. - var people = new EntitySet(); - var events = new List(); - people.ListChanged += (o, e) => events.Add(e); - - // This is also true if Enumerable.Empty() is used here. - people.SetSource(new[]{ - new Person { FirstName = "(", LastName = ")" }, - }); - AssertEqual(events); - Assert.IsTrue(people.IsDeferred); - - // *Initial* Add()/AddRange() is ignored. - people.Add(new Person { FirstName = "A", LastName = "B" }); - people.AddRange(new[]{ - new Person { FirstName = "1", LastName = "2" }, - new Person { FirstName = "<", LastName = ">" }, - }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsTrue(people.IsDeferred); - AssertEqual(events); - - events.Clear(); - people.Clear(); - AssertEqual(events, - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), - new ListChangedEventArgs(ListChangedType.Reset, 0, -1)); - Assert.IsFalse(people.IsDeferred); - - // Add()/AddRange() after a Clear has events. - events.Clear(); - people.Add(new Person { FirstName = "A", LastName = "B" }); - people.AddRange(new[]{ - new Person { FirstName = "1", LastName = "2" }, - new Person { FirstName = "<", LastName = ">" }, - }); - AssertEqual(events, - new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1), - new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1), - new ListChangedEventArgs(ListChangedType.ItemAdded, 2, -1)); - - events.Clear(); - var p = new Person { FirstName = "{", LastName = "}" }; - people.Insert(1, p); - AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1)); - - events.Clear(); - Assert.IsTrue(people.Remove(p)); - AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 1, -1)); - - events.Clear(); - people.RemoveAt(0); - AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1)); - - events.Clear(); - people[0] = p; - AssertEqual(events, - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), - new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1)); - } - - [Test] - public void Remove() - { - var people = new EntitySet(); - var events = new List(); - people.ListChanged += (o, e) => events.Add(e); - - people.SetSource(new[]{ - new Person { FirstName = "(", LastName = ")" }, - }); - Assert.IsTrue(people.IsDeferred); - Assert.IsFalse(people.Remove(null)); - AssertEqual(events); - events.Clear(); - Assert.IsTrue(people.IsDeferred); - - var p = people[0]; - Assert.IsTrue(people.Remove(p)); - Assert.IsFalse(people.IsDeferred); - Assert.AreEqual(0, people.Count); - AssertEqual(events, - new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1)); - } - - [Test] - public void SanityChecking() - { - var people = new EntitySet(); - bool changed = false; - people.ListChanged += (o, e) => { - changed = true; - }; - - Assert.IsFalse(people.HasLoadedOrAssignedValues); - Assert.AreEqual(0, people.Count); - Assert.IsFalse(people.IsDeferred); - - people.Add(new Person { FirstName = "A", LastName = "B" }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.AreEqual(1, people.Count); - Assert.IsFalse(people.IsDeferred); - // WTF?! - Assert.IsFalse(changed); - - changed = false; - people.Add(new Person { FirstName = "1", LastName = "2" }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.AreEqual(2, people.Count); - // WTF?! - Assert.IsFalse(changed); - - - changed = false; - people.RemoveAt(0); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.AreEqual(1, people.Count); - Assert.IsFalse(people.IsDeferred); - Assert.IsTrue(changed); - } - - [Test] - public void SetSource_EntitySourceCanBeNull() - { - var entities = new EntitySet(); - entities.SetSource(null); - } - - [Test] - public void SetSource_HasLoadedOrAssignedValues_Is_False_Until_Enumeration() - { - var people = new EntitySet(); - - Assert.IsFalse(people.HasLoadedOrAssignedValues); - - people.SetSource(new[]{ - new Person { FirstName = "1", LastName = "2" } - }); - - Assert.IsTrue(people.IsDeferred); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - Assert.AreEqual(1, people.Count()); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsFalse(people.IsDeferred); - } - - [Test] - public void SetSource_HasLoadedOrAssignedValues_Is_False_Until_Count() - { - var people = new EntitySet(); - - people.SetSource(new[]{ - new Person { FirstName = "1", LastName = "2" } - }); - - Assert.IsTrue(people.IsDeferred); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - Assert.AreEqual(1, people.Count); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsFalse(people.IsDeferred); - } - - [Test] - public void SetSource_ThenAddIsFine() - { - var people = new EntitySet(); - - Assert.IsFalse(people.HasLoadedOrAssignedValues); - - people.SetSource(new[]{ - new Person { FirstName = "1", LastName = "2" } - }); - Assert.IsTrue(people.IsDeferred); - Assert.IsFalse(people.HasLoadedOrAssignedValues); - people.Add(new Person { FirstName = "A", LastName = "B" }); - Assert.IsTrue(people.HasLoadedOrAssignedValues); - Assert.IsTrue(people.IsDeferred); - Assert.AreEqual(2, people.Count); - } - - [Test] - public void SetSource_ThenSetSourceIsValid() - { - var people = new EntitySet(); - - people.SetSource(new[]{ - new Person { FirstName = "1", LastName = "2" } - }); - - Assert.IsTrue(people.IsDeferred); - - people.SetSource(new[]{ - new Person { FirstName = "A", LastName = "B" } - }); - - Assert.IsTrue(people.IsDeferred); - } - } -} +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; + +#if MONO_STRICT +using System.Data.Linq; +#else +using DbLinq.Data.Linq; +#endif + +using NUnit.Framework; + +namespace DbLinqTest +{ + [TestFixture] + public class EntitySetTest + { + [Test] + public void Ctor_OnAddAndOnRemoveCanBeNull() + { + new EntitySet(null, null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Add_EntityNull() + { + var people = new EntitySet(); + people.Add(null); + } + + [Test] + public void Add_IgnoreRepeats() + { + var people = new EntitySet(); + var p = new Person { FirstName = "A", LastName = "B" }; + people.Add(p); + people.Add(p); + Assert.AreEqual(1, people.Count); + } + + [Test, ExpectedException(typeof(InvalidOperationException))] + public void Add_ThenSetSourceIsInvalid() + { + var people = new EntitySet(); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + people.Add(new Person { FirstName = "A", LastName = "B" }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + people.SetSource(new[]{ + new Person { FirstName = "1", LastName = "2" } + }); + } + + [Test] + public void Assign() + { + var people = new EntitySet(); + people.SetSource(new[]{ + new Person { FirstName = "A", LastName = "B" }, + }); + Assert.IsTrue(people.IsDeferred); + people.Load(); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsFalse(people.IsDeferred); + people.Assign(new[]{ + new Person { FirstName = "1", LastName = "2" }, + }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.AreEqual(1, people.Count); + Assert.IsFalse(people.IsDeferred); + } + + [Test, ExpectedException(typeof(InvalidOperationException))] + public void Clear_DoesNotResetSource() + { + var people = new EntitySet(); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + people.Add(new Person { FirstName = "A", LastName = "B" }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + people.Clear(); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + people.SetSource(new[]{ + new Person { FirstName = "1", LastName = "2" }, + }); + } + + [Test] + public void Contains_KillsDeferred() + { + var people = new EntitySet(); + var p = new Person { FirstName = "A", LastName = "B" }; + people.SetSource(new[]{ + p + }); + Assert.IsTrue(people.IsDeferred); + Assert.IsTrue(people.Contains(p)); + Assert.IsFalse(people.IsDeferred); + } + + [Test] + public void HasLoadedOrAssignedValues() + { + var people = new EntitySet(); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + people.SetSource(new[]{ + new Person { FirstName = "A", LastName = "B" }, + }); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + Assert.IsTrue(people.IsDeferred); + people.Load(); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsFalse(people.IsDeferred); + } + + [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] + public void IList_Add_WrongType() + { + var people = new EntitySet(); + System.Collections.IList list = people; + list.Add("WrongType"); + } + + [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] + public void IList_Add_DuplicateItem() + { + var people = new EntitySet(); + var p = new Person { FirstName = "A", LastName = "B" }; + people.Add(p); + System.Collections.IList list = people; + list.Add(p); + } + + [Test] + public void IList_Remove_WrongTypeIsIgnored() + { + var people = new EntitySet(); + System.Collections.IList list = people; + list.Remove("DoesNotExist"); + } + + [Test] + public void IndexOf_KillsDeferred() + { + var people = new EntitySet(); + var p = new Person { FirstName = "A", LastName = "B" }; + people.SetSource(new[]{ + p + }); + Assert.IsTrue(people.IsDeferred); + Assert.AreEqual(0, people.IndexOf(p)); + Assert.IsFalse(people.IsDeferred); + } + + [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] + public void Insert_RepeatValue() + { + var people = new EntitySet(); + var p = new Person { FirstName = "A", LastName = "B" }; + people.Add(p); + people.Insert(0, p); + } + + [Test] + public void Item_IsDeferredSourceLoaded() + { + var people = new EntitySet(); + people.SetSource(new[]{ + new Person { FirstName = "A", LastName = "B" }, + }); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + Assert.IsTrue(people.IsDeferred); + var p = people[0]; + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsFalse(people.IsDeferred); + } + + [Test] + public void ListChanged_NoSource() + { + // When is ListChanged emitted? + // It's not always when you think it would be. + // It depends on whether there's a Source present. + var people = new EntitySet(); + var events = new List (); + people.ListChanged += (o, e) => events.Add(e); + + people.Add(new Person { FirstName = "A", LastName = "B" }); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1)); + + events.Clear(); + people.Clear(); + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.Reset, 0, -1)); + + events.Clear(); + people.AddRange(new[]{ + new Person { FirstName = "1", LastName = "2" }, + new Person { FirstName = "<", LastName = ">" }, + }); + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1)); + + events.Clear(); + var p = new Person { FirstName = "{", LastName = "}" }; + people.Insert(1, p); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1)); + + events.Clear(); + Assert.IsTrue(people.Remove(p)); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 1, -1)); + + events.Clear(); + people.RemoveAt(0); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1)); + + events.Clear(); + people[0] = p; + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1)); + } + + static void AssertEqual(List actual, params ListChangedEventArgs[] expected) + { + Assert.AreEqual(expected.Length, actual.Count); + for (int i = 0; i < expected.Length; ++i) + { + Assert.AreEqual(expected[i].ListChangedType, actual[i].ListChangedType, "ListChangedEventArgs.ListChangedType"); + Assert.AreEqual(expected[i].NewIndex, actual[i].NewIndex, "ListChangedEventArgs.NewIndex"); + Assert.AreEqual(expected[i].OldIndex, actual[i].OldIndex, "ListChangedEventArgs.OldIndex"); + } + } + + [Test] + public void ListChanged_WithSource() + { + // When is ListChanged emitted? + // It's not always when you think it would be. + var people = new EntitySet(); + var events = new List(); + people.ListChanged += (o, e) => events.Add(e); + + // This is also true if Enumerable.Empty() is used here. + people.SetSource(new[]{ + new Person { FirstName = "(", LastName = ")" }, + }); + AssertEqual(events); + Assert.IsTrue(people.IsDeferred); + + // *Initial* Add()/AddRange() is ignored. + people.Add(new Person { FirstName = "A", LastName = "B" }); + people.AddRange(new[]{ + new Person { FirstName = "1", LastName = "2" }, + new Person { FirstName = "<", LastName = ">" }, + }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsTrue(people.IsDeferred); + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 2, -1)); + + events.Clear(); + people.Clear(); + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.Reset, 0, -1)); + Assert.IsFalse(people.IsDeferred); + + // Add()/AddRange() after a Clear has events. + events.Clear(); + people.Add(new Person { FirstName = "A", LastName = "B" }); + people.AddRange(new[]{ + new Person { FirstName = "1", LastName = "2" }, + new Person { FirstName = "<", LastName = ">" }, + }); + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 2, -1)); + + events.Clear(); + var p = new Person { FirstName = "{", LastName = "}" }; + people.Insert(1, p); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemAdded, 1, -1)); + + events.Clear(); + Assert.IsTrue(people.Remove(p)); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 1, -1)); + + events.Clear(); + people.RemoveAt(0); + AssertEqual(events, new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1)); + + events.Clear(); + people[0] = p; + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1), + new ListChangedEventArgs(ListChangedType.ItemAdded, 0, -1)); + } + + [Test] + public void Remove() + { + var people = new EntitySet(); + var events = new List(); + people.ListChanged += (o, e) => events.Add(e); + + people.SetSource(new[]{ + new Person { FirstName = "(", LastName = ")" }, + }); + Assert.IsTrue(people.IsDeferred); + Assert.IsFalse(people.Remove(null)); + AssertEqual(events); + events.Clear(); + Assert.IsTrue(people.IsDeferred); + + var p = people[0]; + Assert.IsTrue(people.Remove(p)); + Assert.IsFalse(people.IsDeferred); + Assert.AreEqual(0, people.Count); + AssertEqual(events, + new ListChangedEventArgs(ListChangedType.ItemDeleted, 0, -1)); + } + + [Test] + public void SanityChecking() + { + var people = new EntitySet(); + bool changed = false; + people.ListChanged += (o, e) => { + changed = true; + }; + + Assert.IsFalse(people.HasLoadedOrAssignedValues); + Assert.AreEqual(0, people.Count); + Assert.IsFalse(people.IsDeferred); + + people.Add(new Person { FirstName = "A", LastName = "B" }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.AreEqual(1, people.Count); + Assert.IsFalse(people.IsDeferred); + Assert.IsTrue(changed); + + changed = false; + people.Add(new Person { FirstName = "1", LastName = "2" }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.AreEqual(2, people.Count); + Assert.IsTrue(changed); + + + changed = false; + people.RemoveAt(0); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.AreEqual(1, people.Count); + Assert.IsFalse(people.IsDeferred); + Assert.IsTrue(changed); + } + + [Test] + public void SetSource_EntitySourceCanBeNull() + { + var entities = new EntitySet(); + entities.SetSource(null); + } + + [Test] + public void SetSource_HasLoadedOrAssignedValues_Is_False_Until_Enumeration() + { + var people = new EntitySet(); + + Assert.IsFalse(people.HasLoadedOrAssignedValues); + + people.SetSource(new[]{ + new Person { FirstName = "1", LastName = "2" } + }); + + Assert.IsTrue(people.IsDeferred); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + Assert.AreEqual(1, people.Count()); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsFalse(people.IsDeferred); + } + + [Test] + public void SetSource_HasLoadedOrAssignedValues_Is_False_Until_Count() + { + var people = new EntitySet(); + + people.SetSource(new[]{ + new Person { FirstName = "1", LastName = "2" } + }); + + Assert.IsTrue(people.IsDeferred); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + Assert.AreEqual(1, people.Count); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsFalse(people.IsDeferred); + } + + [Test] + public void SetSource_ThenAddIsFine() + { + var people = new EntitySet(); + + Assert.IsFalse(people.HasLoadedOrAssignedValues); + + people.SetSource(new[]{ + new Person { FirstName = "1", LastName = "2" } + }); + Assert.IsTrue(people.IsDeferred); + Assert.IsFalse(people.HasLoadedOrAssignedValues); + people.Add(new Person { FirstName = "A", LastName = "B" }); + Assert.IsTrue(people.HasLoadedOrAssignedValues); + Assert.IsTrue(people.IsDeferred); + Assert.AreEqual(2, people.Count); + } + + [Test] + public void SetSource_ThenSetSourceIsValid() + { + var people = new EntitySet(); + + people.SetSource(new[]{ + new Person { FirstName = "1", LastName = "2" } + }); + + Assert.IsTrue(people.IsDeferred); + + people.SetSource(new[]{ + new Person { FirstName = "A", LastName = "B" } + }); + + Assert.IsTrue(people.IsDeferred); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/NullProvider.cs b/mcs/class/System.Data.Linq/Test/NullProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/NullProvider.cs rename to mcs/class/System.Data.Linq/Test/NullProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/PeopleTable.cs b/mcs/class/System.Data.Linq/Test/PeopleTable.cs similarity index 96% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/PeopleTable.cs rename to mcs/class/System.Data.Linq/Test/PeopleTable.cs index 9e06c5856d..dc3f5c04cf 100755 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/PeopleTable.cs +++ b/mcs/class/System.Data.Linq/Test/PeopleTable.cs @@ -1,63 +1,63 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; -using System.Data.Common; -// using System.Data.Linq; -using System.Data.Linq.Mapping; -using System.Linq; -using System.IO; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using NUnit.Framework; - -using DbLinq.Null; - -namespace DbLinqTest { - - [Table(Name="people")] - class BadPerson - { - public string FirstName {get; set;} - public string LastName {get; set;} - } - - [Table(Name="people")] - class Person - { - [Column(Name="first_name")] - public string FirstName {get; set;} - [Column(Name="last_name")] - public string LastName {get; set;} - } -} - +#region MIT license +// +// MIT license +// +// Copyright (c) 2009 Novell, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#endregion + +using System; +using System.Data; +using System.Data.Common; +// using System.Data.Linq; +using System.Data.Linq.Mapping; +using System.Linq; +using System.IO; + +#if MONO_STRICT +using System.Data.Linq; +#else +using DbLinq.Data.Linq; +#endif + +using NUnit.Framework; + +using DbLinq.Null; + +namespace DbLinqTest { + + [Table(Name="people")] + class BadPerson + { + public string FirstName {get; set;} + public string LastName {get; set;} + } + + [Table(Name="people")] + class Person + { + [Column(Name="first_name")] + public string FirstName {get; set;} + [Column(Name="last_name")] + public string LastName {get; set;} + } +} + diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContextTestBase.cs b/mcs/class/System.Data.Linq/Test/Providers/DataContextTestBase.cs similarity index 96% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContextTestBase.cs rename to mcs/class/System.Data.Linq/Test/Providers/DataContextTestBase.cs index b4e4484d79..1083b3cb2a 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContextTestBase.cs +++ b/mcs/class/System.Data.Linq/Test/Providers/DataContextTestBase.cs @@ -1,158 +1,158 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; -using System.Data.Common; -// using System.Data.Linq; -using System.Data.Linq.Mapping; -using System.Linq; -using System.IO; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using NUnit.Framework; - -using DbLinq.Null; - -namespace DbLinqTest { - - public abstract class DataContextTestBase - { - DataContext context; - - protected DataContext Context { - get { return context; } - } - - [SetUp] - public void SetUp() - { - context = CreateDataContext(); - } - - protected abstract DataContext CreateDataContext(); - - [TearDown] - public void TearDown() - { - context = null; - } - - [Test] - public void ExecuteCommand() - { - context.Log = new StringWriter (); - try - { - context.ExecuteCommand("SomeCommand", 1, 2, 3); - } - catch (NotSupportedException) - { - } - catch (Exception e) - { - Assert.Fail("# ExecuteCommand: Got exception {0}", e.ToString()); - } - Console.WriteLine ("# ExecuteCommand: Log={0}", context.Log); - } - - [Test] - public void ExecuteQuery() - { - context.Log = new StringWriter (); - try - { - context.ExecuteQuery(typeof(Person), "select * from people", 1, 2, 3); - } - catch (NotSupportedException) - { - } - catch (Exception e) - { - Assert.Fail("# ExecuteQuery: unexpected exception: {0}", e.ToString()); - } - Console.WriteLine ("# ExecuteQuery: Log={0}", context.Log); - } - - [Test] - public void ExecuteQueryTResult() - { - context.Log = new StringWriter (); - try - { - context.ExecuteQuery("select * from people", 1, 2, 3); - } - catch (NotSupportedException) - { - } - catch (Exception) - { - Assert.Fail(); - } - Console.WriteLine ("# ExecuteQueryTResult: Log={0}", context.Log); - } - - [Test] - public void GetChangeSet() - { - // TODO - context.GetChangeSet(); - } - - protected abstract string People(string firstName); - protected abstract string People(string firstName, string lastName); - protected abstract string People(string firstName, string lastName, int skip, int take); - - [Test] - public void GetCommand() - { - var foos = - from p in context.GetTable() - where p.FirstName == "foo" - select p; - var cmd = context.GetCommand(foos); - - Assert.AreEqual(People("foo"), cmd.CommandText); - - foos = foos.Where(p => p.LastName == "bar"); - var cmd2 = context.GetCommand(foos); - - Assert.IsFalse(object.ReferenceEquals(cmd, cmd2)); - - Assert.AreEqual(People("foo", "bar"), cmd2.CommandText); - - foos = foos.Skip(1).Take(2); - cmd = context.GetCommand(foos); - Assert.AreEqual(People("foo", "bar", 1, 2), cmd.CommandText); - } - } -} - +#region MIT license +// +// MIT license +// +// Copyright (c) 2009 Novell, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#endregion + +using System; +using System.Data; +using System.Data.Common; +// using System.Data.Linq; +using System.Data.Linq.Mapping; +using System.Linq; +using System.IO; + +#if MONO_STRICT +using System.Data.Linq; +#else +using DbLinq.Data.Linq; +#endif + +using NUnit.Framework; + +using DbLinq.Null; + +namespace DbLinqTest { + + public abstract class DataContextTestBase + { + DataContext context; + + protected DataContext Context { + get { return context; } + } + + [SetUp] + public void SetUp() + { + context = CreateDataContext(); + } + + protected abstract DataContext CreateDataContext(); + + [TearDown] + public void TearDown() + { + context = null; + } + + [Test] + public void ExecuteCommand() + { + context.Log = new StringWriter (); + try + { + context.ExecuteCommand("SomeCommand", 1, 2, 3); + } + catch (NotSupportedException) + { + } + catch (Exception e) + { + Assert.Fail("# ExecuteCommand: Got exception {0}", e.ToString()); + } + Console.WriteLine ("# ExecuteCommand: Log={0}", context.Log); + } + + [Test] + public void ExecuteQuery() + { + context.Log = new StringWriter (); + try + { + context.ExecuteQuery(typeof(Person), "select * from people", 1, 2, 3); + } + catch (NotSupportedException) + { + } + catch (Exception e) + { + Assert.Fail("# ExecuteQuery: unexpected exception: {0}", e.ToString()); + } + Console.WriteLine ("# ExecuteQuery: Log={0}", context.Log); + } + + [Test] + public void ExecuteQueryTResult() + { + context.Log = new StringWriter (); + try + { + context.ExecuteQuery("select * from people", 1, 2, 3); + } + catch (NotSupportedException) + { + } + catch (Exception) + { + Assert.Fail(); + } + Console.WriteLine ("# ExecuteQueryTResult: Log={0}", context.Log); + } + + [Test] + public void GetChangeSet() + { + // TODO + context.GetChangeSet(); + } + + protected abstract string People(string firstName); + protected abstract string People(string firstName, string lastName); + protected abstract string People(string firstName, string lastName, int skip, int take); + + [Test] + public void GetCommand() + { + var foos = + from p in context.GetTable() + where p.FirstName == "foo" + select p; + var cmd = context.GetCommand(foos); + + Assert.AreEqual(People("foo"), cmd.CommandText); + + foos = foos.Where(p => p.LastName == "bar"); + var cmd2 = context.GetCommand(foos); + + Assert.IsFalse(object.ReferenceEquals(cmd, cmd2)); + + Assert.AreEqual(People("foo", "bar"), cmd2.CommandText); + + foos = foos.Skip(1).Take(2); + cmd = context.GetCommand(foos); + Assert.AreEqual(People("foo", "bar", 1, 2), cmd.CommandText); + } + } +} + diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/MsSqlDataContextTest.cs b/mcs/class/System.Data.Linq/Test/SqlServer/MsSqlDataContextTest.cs similarity index 72% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/MsSqlDataContextTest.cs rename to mcs/class/System.Data.Linq/Test/SqlServer/MsSqlDataContextTest.cs index 79e6a44826..a46be7e1f8 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/MsSqlDataContextTest.cs +++ b/mcs/class/System.Data.Linq/Test/SqlServer/MsSqlDataContextTest.cs @@ -1,126 +1,127 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using System.Reflection; - -#if MONO_STRICT -using System.Data.Linq; -using System.Data.Linq.Mapping; -#else -using DbLinq.Data.Linq; -using DbLinq.Data.Linq.Mapping; -#endif - -using DbLinq.Null; -using NUnit.Framework; - -namespace DbLinqTest { - - [TestFixture] - public class MsSqlDataContextTest : DataContextTestBase - { - static MsSqlDataContextTest() - { -#if !MONO_STRICT - // Make sure this assembly has a ref to DbLinq.SqlServer.dll. - var dummy = new DbLinq.SqlServer.SqlServerSqlProvider(); -#endif - } - - protected override DataContext CreateDataContext() - { - return new DataContext (new NullConnection (), new AttributeMappingSource ()); - } - - protected override string People(string firstName) - { - return string.Format( - "SELECT [first_name], [last_name]{0}" + - "FROM [people]{0}" + - "WHERE ([first_name] = '" + firstName + "')", - Environment.NewLine); ; - } - - protected override string People(string firstName, string lastName) - { - return People(firstName) + " AND ([last_name] = '" + lastName + "')"; - } - - protected override string People(string firstName, string lastName, int skip, int take) - { - return string.Format("SELECT *{0}" + - "FROM ({0}" + - " SELECT [first_name], [last_name]{0}" + - ",{0}" + - " ROW_NUMBER() OVER(ORDER BY [first_name], [last_name]{0}" + - ") AS [__ROW_NUMBER]{0}" + - " FROM [people]{0}" + - "WHERE ([first_name] = '{1}') AND ([last_name] = '{2}') ) AS [t0]{0}" + - "WHERE [__ROW_NUMBER] BETWEEN {3}+1 AND {3}+{4}{0}" + - "ORDER BY [__ROW_NUMBER]", - Environment.NewLine, firstName, lastName, skip, take); - } - - [Test] - public void Count() - { - var oldLog = Context.Log; - var log = new StringWriter(); - try - { - Context.Log = log; - (from p in Context.GetTable() - orderby p.LastName - select p) - .Count(); - } - catch (NotSupportedException) - { - Console.WriteLine("# logfile=\n{0}", log.ToString()); - var expected = string.Format("SELECT COUNT(*){0}" + - "FROM [people]{0}" + - "--", - Environment.NewLine); - Assert.IsTrue(log.ToString().Contains(expected)); - } - catch (Exception e) - { - Assert.Fail("# ExecuteCommand: Got exception {0}", e.ToString()); - } - finally - { - Context.Log = oldLog; - } - } - } -} - +#region MIT license +// +// MIT license +// +// Copyright (c) 2009 Novell, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Reflection; + +#if MONO_STRICT +using System.Data.Linq; +using System.Data.Linq.Mapping; +#else +using DbLinq.Data.Linq; +using DbLinq.Data.Linq.Mapping; +#endif + +using DbLinq.Null; +using NUnit.Framework; + +namespace DbLinqTest { + + [TestFixture] + public class MsSqlDataContextTest : DataContextTestBase + { + static MsSqlDataContextTest() + { +#if !MONO_STRICT + // Make sure this assembly has a ref to DbLinq.SqlServer.dll. + var dummy = new DbLinq.SqlServer.SqlServerSqlProvider(); +#endif + } + + protected override DataContext CreateDataContext() + { + return new DataContext (new NullConnection (), new AttributeMappingSource ()); + } + + protected override string People(string firstName) + { + return string.Format( + "SELECT [t0].[first_name] AS [FirstName], [t0].[last_name] AS [LastName]{0}" + + "FROM [people] AS [t0]{0}" + + "WHERE [t0].[first_name] = @p0", + Environment.NewLine); + } + + protected override string People(string firstName, string lastName) + { + return string.Format( + "SELECT [t0].[first_name] AS [FirstName], [t0].[last_name] AS [LastName]{0}" + + "FROM [people] AS [t0]{0}" + + "WHERE ([t0].[last_name] = @p0) AND ([t0].[first_name] = @p1)", + Environment.NewLine); + } + + protected override string People(string firstName, string lastName, int skip, int take) + { + return string.Format("SELECT [t1].[first_name] AS [FirstName], [t1].[last_name] AS [LastName]{0}" + + "FROM ({0}" + + " SELECT ROW_NUMBER() OVER (ORDER BY [t0].[first_name], [t0].[last_name]) AS [ROW_NUMBER], [t0].[first_name], [t0].[last_name]{0}" + + " FROM [people] AS [t0]{0}" + + " WHERE ([t0].[last_name] = @p0) AND ([t0].[first_name] = @p1){0}" + + " ) AS [t1]{0}" + + "WHERE [t1].[ROW_NUMBER] BETWEEN @p2 + 1 AND @p2 + @p3{0}" + + "ORDER BY [t1].[ROW_NUMBER]", + Environment.NewLine, firstName, lastName, skip, take); + } + + [Test] + public void Count() + { + var oldLog = Context.Log; + var log = new StringWriter(); + try + { + Context.Log = log; + (from p in Context.GetTable() + orderby p.LastName + select p) + .Count(); + } + catch (NotSupportedException) + { + Console.WriteLine("# logfile=\n{0}", log.ToString()); + var expected = string.Format("SELECT COUNT(*) AS [value]{0}" + + "FROM [people] AS [t0]{0}" + + "--", + Environment.NewLine); + StringAssert.Contains (expected, log.ToString()); + } + catch (Exception e) + { + Assert.Fail("# ExecuteCommand: Got exception {0}", e.ToString()); + } + finally + { + Context.Log = oldLog; + } + } + } +} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/TableTest.cs b/mcs/class/System.Data.Linq/Test/TableTest.cs similarity index 96% rename from mcs/class/System.Data.Linq/src/DbLinq/Test/TableTest.cs rename to mcs/class/System.Data.Linq/Test/TableTest.cs index 26ca8b7d6b..18fe6622d9 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/TableTest.cs +++ b/mcs/class/System.Data.Linq/Test/TableTest.cs @@ -1,118 +1,118 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using NUnit.Framework; - -using DbLinq.Null; - -namespace DbLinqTest -{ - [TestFixture] - public class TableTest - { - Table people; - - [SetUp] - public void SetUp() - { - people = new DataContext(new NullConnection() { ConnectionString = "" }) - .GetTable(); - } - - [TearDown] - public void TearDown() - { - people = null; - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void Attach_EntityNull() - { - people.Attach(null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void AttachAll_EntitiesNull() - { - IEnumerable entities = null; - people.AttachAll(entities); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void DeleteAllOnSubmit_EntitiesNull() - { - IEnumerable entities = null; - people.DeleteAllOnSubmit(entities); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void DeleteOnSubmit_EntityNull() - { - people.DeleteOnSubmit(null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void GetModifiedMembers_EntityNull() - { - people.GetModifiedMembers(null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void GetOriginalEntityState_EntityNull() - { - people.GetOriginalEntityState(null); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void InsertAllOnSubmit_EntitiesNull() - { - IEnumerable entities = null; - people.InsertAllOnSubmit(entities); - } - - [Test, ExpectedException(typeof(ArgumentNullException))] - public void InsertOnSubmit_EntityNull() - { - people.InsertOnSubmit(null); - } - - [Test] - public new void ToString() - { - Assert.AreEqual("Table(Person)", people.ToString()); - } - } -} +#region MIT license +// +// MIT license +// +// Copyright (c) 2009 Novell, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#endregion + +using System; +using System.Collections.Generic; +using System.Linq; + +#if MONO_STRICT +using System.Data.Linq; +#else +using DbLinq.Data.Linq; +#endif + +using NUnit.Framework; + +using DbLinq.Null; + +namespace DbLinqTest +{ + [TestFixture] + public class TableTest + { + Table people; + + [SetUp] + public void SetUp() + { + people = new DataContext(new NullConnection() { ConnectionString = "" }) + .GetTable(); + } + + [TearDown] + public void TearDown() + { + people = null; + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void Attach_EntityNull() + { + people.Attach(null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void AttachAll_EntitiesNull() + { + IEnumerable entities = null; + people.AttachAll(entities); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void DeleteAllOnSubmit_EntitiesNull() + { + IEnumerable entities = null; + people.DeleteAllOnSubmit(entities); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void DeleteOnSubmit_EntityNull() + { + people.DeleteOnSubmit(null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void GetModifiedMembers_EntityNull() + { + people.GetModifiedMembers(null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void GetOriginalEntityState_EntityNull() + { + people.GetOriginalEntityState(null); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void InsertAllOnSubmit_EntitiesNull() + { + IEnumerable entities = null; + people.InsertAllOnSubmit(entities); + } + + [Test, ExpectedException(typeof(ArgumentNullException))] + public void InsertOnSubmit_EntityNull() + { + people.InsertOnSubmit(null); + } + + [Test] + public new void ToString() + { + Assert.AreEqual("Table(Person)", people.ToString()); + } + } +} diff --git a/mcs/class/System.Data.Linq/src/Build Northwind parameters.txt b/mcs/class/System.Data.Linq/src/Build Northwind parameters.txt deleted file mode 100644 index 3965efd93f..0000000000 --- a/mcs/class/System.Data.Linq/src/Build Northwind parameters.txt +++ /dev/null @@ -1,7 +0,0 @@ -# note that databaserver can be specified in %DbLinqServer%, and is localhost by default (if not specified) -#/code=..\examples\DbLinq.FbSql.Example\nwind\Northwind.cs /provider=Firebird /database="c:\program files\Firebird\Firebird_2_1\examples\nwind\Northwind.FDB" -/code=..\examples\DbLinq.SQLite.Example\nwind\Northwind.cs /provider=Sqlite /conn="data source=Northwind.db3" -/code=..\examples\DbLinq.Ora.Example\nwind\Northwind.cs /provider=Oracle /user=Northwind -/code=..\examples\DbLinq.Pgsql.Example\nwind\Northwind.cs /provider=PostgreSQL -#/code=..\examples\DbLinq.Ingres.Example\nwind\Northwind.cs /provider=Ingres -/code=..\examples\DbLinq.MySql.Example\nwind\Northwind.cs /provider=MySQL diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.Firebird/Properties/AssemblyInfo.cs deleted file mode 100644 index a80098686f..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.Firebird")] -[assembly: AssemblyDescription("DbLinq Firebird SQL vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7ad419fa-9b5c-46d6-8567-ac33f6b69833")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.Firebird/Test/TestBase.cs deleted file mode 100755 index 2d5c7f010c..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/Test/TestBase.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.InvariantCulture; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new FirebirdSql.Data.FirebirdClient.FbCommand(sql, (FirebirdSql.Data.FirebirdClient.FbConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new FirebirdSql.Data.FirebirdClient.FbConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.Firebird.FirebirdVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.Ingres/Properties/AssemblyInfo.cs deleted file mode 100644 index 770b7b0a56..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.PostgreSql")] -[assembly: AssemblyDescription("DbLinq PostgreSQL vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d393f4ff-9bb6-42ad-bb84-d207115f48b1")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.Ingres/Test/TestBase.cs deleted file mode 100755 index 5e2d875d04..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/Test/TestBase.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.Ordinal; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new Ingres.Client.IngresCommand(sql, (Ingres.Client.IngresConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new Ingres.Client.IngresConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.Ingres.IngresVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.MySql/Properties/AssemblyInfo.cs deleted file mode 100644 index 2d1afcc56e..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.MySql/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.MySql")] -[assembly: AssemblyDescription("DbLinq MySQL vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c8c37bc2-84ee-41b0-893e-02b4375eabbe")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.MySql/Test/TestBase.cs deleted file mode 100755 index 7dd790ccc9..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.MySql/Test/TestBase.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.InvariantCulture; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new MySql.Data.MySqlClient.MySqlCommand(sql, (MySql.Data.MySqlClient.MySqlConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new MySql.Data.MySqlClient.MySqlConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.MySql.MySqlVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Properties/AssemblyInfo.cs deleted file mode 100644 index 505b7c151f..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.Oracle")] -[assembly: AssemblyDescription("DbLinq Oracle vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e1f0992f-a414-4479-905e-96c5d51b8cb6")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase.cs deleted file mode 100755 index 36f8d10427..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.Ordinal; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new System.Data.OracleClient.OracleCommand(sql, (System.Data.OracleClient.OracleConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new System.Data.OracleClient.OracleConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.Oracle.OracleVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase_odp.cs b/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase_odp.cs deleted file mode 100755 index a8e75c96a8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/Test/TestBase_odp.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.Ordinal; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new Oracle.DataAccess.Client.OracleCommand(sql, (Oracle.DataAccess.Client.OracleConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new Oracle.DataAccess.Client.OracleConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.Oracle.OracleVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Properties/AssemblyInfo.cs deleted file mode 100644 index 770b7b0a56..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.PostgreSql")] -[assembly: AssemblyDescription("DbLinq PostgreSQL vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d393f4ff-9bb6-42ad-bb84-d207115f48b1")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Test/TestBase.cs deleted file mode 100755 index 9ffaa6b95d..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/Test/TestBase.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.Ordinal; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new Npgsql.NpgsqlCommand(sql, (Npgsql.NpgsqlConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new Npgsql.NpgsqlConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.PostgreSql.PgsqlVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Properties/AssemblyInfo.cs deleted file mode 100644 index 8a1049d42e..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.SqlServer")] -[assembly: AssemblyDescription("DbLinq SQL server vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("55bd884f-8aa6-4dbb-8d29-2d8e879e5f0b")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/TestBase.cs deleted file mode 100755 index 7e52270fc0..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/Test/TestBase.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - public const StringComparison stringComparisonType = StringComparison.InvariantCulture; - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new System.Data.SqlClient.SqlCommand(sql, (System.Data.SqlClient.SqlConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new System.Data.SqlClient.SqlConnection(connectionString); - } - -#if !MONO_STRICT - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.SqlServer.SqlServerVendor(); - } -#endif - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Properties/AssemblyInfo.cs deleted file mode 100644 index 2b949b11c4..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq.Sqlite")] -[assembly: AssemblyDescription("DbLinq SQLite vendor implementation")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9a57ce12-ad10-479f-b181-eb267c8e6c19")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/DirectDataContext.cs b/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/DirectDataContext.cs deleted file mode 100755 index 54554b3c74..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/DirectDataContext.cs +++ /dev/null @@ -1,62 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Linq; - -using Mono.Data.Sqlite; - -using nwind; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using NUnit.Framework; - -namespace Test_NUnit_Sqlite -{ - [TestFixture] - public class DirectDataContextTest - { - [Test] - public void CreateDataContext() - { - string connectionString = "DbLinqProvider=Sqlite;" + - "DbLinqConnectionType=Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite;" + - "Data Source=Northwind.db3"; - var dc = new DataContext(connectionString); - Assert.AreEqual(typeof(SqliteConnection), dc.Connection.GetType()); - - var dcq = from p in dc.GetTable() where p.ProductName == "Chai" select p.ProductID; - var cmd = dc.GetCommand(dcq); - var dcc = dcq.ToList().Count; - Assert.AreEqual(dcc, 1); - } - } -} \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase.cs deleted file mode 100755 index 64631dbf4e..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase.cs +++ /dev/null @@ -1,63 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; -using System.Data.SQLite; -using System.IO; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - static bool doRecreate = true; - public const StringComparison stringComparisonType = StringComparison.Ordinal; - - static partial void CheckRecreateSqlite () - { - if (doRecreate) { - File.Copy ("../tests/Northwind.db3", "Northwind.db3", true); - doRecreate = false; - } - } - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new SQLiteCommand(sql, (SQLiteConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new SQLiteConnection(connectionString); - } - - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.Sqlite.SqliteVendor(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase_mono.cs b/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase_mono.cs deleted file mode 100755 index bec2070fa1..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Test/TestBase_mono.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne, Pascal Craponne, Pascal Craponne, Pascal Craponne, Pascal Craponne, Pascal Craponne, Pascal Craponne, Pascal Craponne -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; -using Mono.Data.Sqlite; -using System.IO; - -namespace Test_NUnit -{ - public abstract partial class TestBase - { - static bool doRecreate = true; - public const StringComparison stringComparisonType = StringComparison.Ordinal; - - static partial void CheckRecreateSqlite () - { - if (doRecreate) { - File.Copy ("../tests/Northwind.db3", "Northwind.db3", true); - doRecreate = false; - } - } - - public static IDbCommand CreateCommand (string sql, IDbConnection conn) - { - return new SqliteCommand(sql, (SqliteConnection) conn); - } - - public static IDbConnection CreateConnection (string connectionString) - { - return new SqliteConnection(connectionString); - } - -#if !MONO_STRICT - public DbLinq.Vendor.IVendor CreateVendor() - { - return new DbLinq.Sqlite.SqliteVendor(); - } -#endif - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataContext.Extended.cs b/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataContext.Extended.cs deleted file mode 100644 index 9663c32c51..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataContext.Extended.cs +++ /dev/null @@ -1,84 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Diagnostics; -using DbLinq.Data.Linq.Database; -using DbLinq.Data.Linq.Mapping; -using System.Data.Linq.Mapping; -using System.Data; -using DbLinq.Vendor; -using System.Data.Linq; -using DbLinq.Data.Linq.Database.Implementation; -using DbLinq.Util; - -namespace DbLinq.Data.Linq -{ - partial class DataContext - { - public virtual MappingContext MappingContext { get { return _MappingContext; } set { _MappingContext = value; } } - - public DataContext(IDatabaseContext databaseContext, MappingSource mappingSource, IVendor vendor) - { - Profiler.At("START DataContext(IDatabaseContext, MappingSource, IVendor)"); - Init(databaseContext, mappingSource, vendor); - Profiler.At("END DataContext(IDatabaseContext, MappingSource, IVendor)"); - } - - public DataContext(IDbConnection dbConnection, MappingSource mappingSource, IVendor vendor) - : this(new DatabaseContext(dbConnection), mappingSource, vendor) - { - } - - public DataContext(IDatabaseContext databaseContext, IVendor vendor) - : this(databaseContext, null, vendor) - { - } - - public DataContext(IDbConnection dbConnection, IVendor vendor) - : this(new DatabaseContext(dbConnection), vendor) - { - } - - [Obsolete("Please use the other GetTable() methods")] - public Table GetTable(string tableName) where T : class - { - return GetTable(typeof(T)) as Table; - } - - /// - /// Calls method. - /// - /// The context. - /// The method. - /// The SQL params. - /// - protected IExecuteResult ExecuteMethodCall(DataContext context, System.Reflection.MethodInfo method, params object[] sqlParams) - { - return _ExecuteMethodCall(context, method, sqlParams); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ReadMe.txt b/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ReadMe.txt deleted file mode 100644 index 62b571fa55..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ReadMe.txt +++ /dev/null @@ -1 +0,0 @@ -DbLinq.Data.Linq folder contains Linq to SQL compliant interfaces and classes, plus their extensions (format to be defined) diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Notes.txt b/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Notes.txt deleted file mode 100644 index 862bf9a3ff..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Notes.txt +++ /dev/null @@ -1,25 +0,0 @@ - -Piece = query expression part - -Query expressions language identification - 1. Specific language patterns identification (VB string compare) ---> ExpressionLanguageParser - 2. Constant reduction ---> ExpressionOptimizer - -# Query expressions query identification ---> ExpressionDispatcher - - 1. Key methods (where, select...) identification and inner expressions dispatching (top-level method is handled specifically) - 2. Non-operation expressions deduction - * Table (--> TableExpression) - * Column (--> ColumnExpression) - * Input parameter (--> ParameterExpression) - * Meta-table (a class containing table aliases) (--> MetaTableExpression) - ---> DataMapper ---> ExpressionQuery ---> ExpressionRegistrar // no other idea at the moment - -Generate SQL (Sugar + Database IVendor) ---> Query diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Table.Extended.cs b/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Table.Extended.cs deleted file mode 100644 index 6790688147..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Table.Extended.cs +++ /dev/null @@ -1,86 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System.Collections.Generic; -using System.Linq; - -namespace DbLinq.Data.Linq -{ - /// - /// T may be eg. class Employee or string - the output - /// - /// The type of the entity. - partial class Table - { - /// - /// Cancels the delete on submit. - /// - /// The entity. - public void CancelDeleteOnSubmit(TEntity entity) - { - Context.UnregisterDelete(entity); - } - - /// - /// Cancels the delete on submit. - /// - /// The entity. - void ITable.CancelDeleteOnSubmit(object entity) - { - Context.UnregisterDelete(entity); - } - - /// - /// Gets or sets the page size of the bulk insert. - /// - /// The size of the bulk insert page. - public int BulkInsertPageSize { get; set; } - - /// - /// Performs bulk insert. - /// - /// The entities. - public void BulkInsert(IEnumerable entities) - { - BulkInsert(entities, BulkInsertPageSize); - } - - /// - /// Performs bulk insert. - /// - /// The entities. - /// Size of the page. - public void BulkInsert(IEnumerable entities, int pageSize) - { - using (Context.DatabaseContext.OpenConnection()) - using (var transaction = Context.DatabaseContext.CreateTransaction()) - { - Context.Vendor.BulkInsert(this, entities.ToList(), pageSize, Context.Transaction); - transaction.Commit(); - } - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/MonoTODOAttribute.cs b/mcs/class/System.Data.Linq/src/DbLinq/MonoTODOAttribute.cs deleted file mode 100644 index ed5940bc08..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/MonoTODOAttribute.cs +++ /dev/null @@ -1,120 +0,0 @@ -// -// MonoTODOAttribute.cs -// -// Authors: -// Ravi Pratap (ravi@ximian.com) -// Eyal Alaluf -// -// (C) Ximian, Inc. http://www.ximian.com -// - -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// Copyright (C) 2006 Mainsoft, Inc (http://www.mainsoft.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System { - - [AttributeUsage (AttributeTargets.All, AllowMultiple=true)] - internal class MonoTODOAttribute : Attribute { - - string comment; - - public MonoTODOAttribute () - { - } - - public MonoTODOAttribute (string comment) - { - this.comment = comment; - } - - public virtual string Comment { - get { return comment; } - } - } - - [AttributeUsage (AttributeTargets.All, AllowMultiple=true)] - internal class MonoDocumentationNoteAttribute : MonoTODOAttribute { - - public MonoDocumentationNoteAttribute (string comment) - : base (comment) - { - } - - public override string Comment { - get { return base.Comment; } - } - } - - [AttributeUsage (AttributeTargets.All, AllowMultiple=true)] - internal class MonoExtensionAttribute : MonoTODOAttribute { - - public MonoExtensionAttribute (string comment) - : base (comment) - { - } - - public override string Comment { - get { return base.Comment; } - } - } - - [AttributeUsage (AttributeTargets.All, AllowMultiple=true)] - internal class MonoInternalNoteAttribute : MonoTODOAttribute { - - public MonoInternalNoteAttribute (string comment) - : base (comment) - { - } - - public override string Comment { - get { return base.Comment; } - } - } - - [AttributeUsage (AttributeTargets.All, AllowMultiple=true)] - internal class MonoLimitationAttribute : MonoTODOAttribute { - - public MonoLimitationAttribute (string comment) - : base (comment) - { - } - - public override string Comment { - get { return base.Comment; } - } - } - - [AttributeUsage (AttributeTargets.All, AllowMultiple=true)] - internal class MonoNotSupportedAttribute : MonoTODOAttribute { - - public MonoNotSupportedAttribute (string comment) - : base (comment) - { - } - - public override string Comment { - get { return base.Comment; } - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq/Properties/AssemblyInfo.cs deleted file mode 100644 index af42206118..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,132 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinq")] -[assembly: AssemblyDescription("DbLinq core")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM componenets. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e2381b27-cdb0-401d-9019-f72079b4928d")] - -[assembly: DbLinq] - -// Regarding tests, it is mandatory, since we test internals -[assembly: InternalsVisibleTo("DbLinqTest, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] -[assembly: InternalsVisibleTo("DbLinq_test, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - - -// DbMetal and vendors use DbLinq's internal utilities -// this is not a requirement, but a little help -[assembly: InternalsVisibleTo("DbMetal, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] -[assembly: InternalsVisibleTo("DbMetal_test, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("DbLinq.MySql, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("DbLinq.Oracle, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("DbLinq.PostgreSql, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - - -[assembly: InternalsVisibleTo("DbLinq.Sqlite, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("DbLinq.SqlServer, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("DbLinq.Ingres, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("DbLinq.Firebird, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] - -[assembly: InternalsVisibleTo("sqlmetal, PublicKey=" -+ "0024000004800000940000000602000000240000525341310004000001000100c5753d8c47f400" -+ "83f549016a5711238ac8ec297605abccd3dc4b6d0f280b4764eb2cc58ec4e37831edad7e7a07b8" -+ "fe4a9cbb059374c0cc047aa28839fed7176761813caf6a2ffa0bff9afb50ead56dd3f56186a663" -+ "962a12b830c2a70eb70ec77823eb5750e5bdef9e01d097c30b5c5463c3d07d3472b58e4c02f279" -+ "2309259f")] diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.xsd b/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.xsd deleted file mode 100644 index 1d15b2105b8267e63a53066a7b48e3b7d048d23b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21658 zcmeHP*=`#*6y zY9VLT1wvwJ$RQ8!J$KZ!U_V>MD8^}8CVnVPGinyQKVUOiBc)t-8Uza5lJ z)FrOJN9jae>(ZrKs4MjlwZ282r|JjwrTRi0sIPGCA?|sPyXLrShI=mb_l`PL&(urx z0;N~DI>J?co1)HG_0irQexKp@5?3x!`UJnjGEYpIocp&l%%Ir1qsI}-Ch8-uvGgN; z??c{31{T?OniYmQ99=U#Qr83Ep$@2}g?bK*m6^V&paEQM0L z1-f0sHqzc}Ub3Dhb=TG2f-!22cxLhlW&n({q2^+B^RO$1st5Km3ds2LV0xx|9DI%# zp`@DB;45fqiX3sMJ!M&IO=3CHc1G?nT93delku6{RF)F`{8UHaKJH?jJUTnmoE~ai zL-hy#TK^Z~s;+6cXyRQSl)f*uEDP~%t5Fw&ZBvpl#%Dl+};4!du;)Oe;9JkCzx?E zrc07+Ugpl4Bz{{9%9Y2>AP3GmhG1b;p1dlCmuO*(JX4DO+xncMAE?i1V|j+J<5=B1 zUOJYO_>z?Bu8zvFOZLIe(^@Ud^+I25Jkx`~8{0NkpUZOfVhZ+gO{fF*tUCjhW_oT+ zb~fs>r*2)Kr!$EqaLBXf5iG@)rNLUBHCfD7mUVc$I&Ymqddy3z@{#IVImh5L&*`|V zn^nf?M`_=B{p-2L;>JE!>a{vTbjp{@5<{2?x!&{j zYiH1M-*YgSD;0TH8<=%*#gsiQU^QI-9w=HqSBlz2Hdivb;wq?&v8j1bEMofh8LPW` z9P>SR%)+FI>7zGVnE5_Dh403I(BY|D8Ge3us8QYA#b6<&j34Oh* z(k7CaHTWEj)osUee4R>GmIsv|<$W2&<`gOCHry-R6i3Rn@?&It%pUrPR;P$v+zXXC z-BdgvBCa70kr{LE@=pB>e7k^(I{Oh={9WIwyr(H?^>oJZ45&^pm*9FUcFFjd#eWAWtFAsA&(8JOIjai5;NU5Rmx`U6myJr8+@HRhR8dxW<@<4$cgi?9P)5R?Xa-%?eY-Q9pwSH4w9! zlsNv+3f)PWZRb|*Twmf&i#cx+`k?AstH*+MX6pWa)N7p)wz~%9C$Q{LUZYtNvwN~xp_IFl_GGHygX59#nU@7iYX4MSXzn*h!tD@!%nWu?) zjwH13uxx$2b*CQf>AY&`JKooG(5@NAqVuL}eJQi4w)PX4c`)vA?LO3VESpR@2aB!N z`Lmu_-8^wd%FBFI?c{Jj!GH4HojKh-#Jrl`h8D`_0(j!P>U3jMSp#z!uE>vpji=^$ zW?VY4Y}mF9D(4sET>|IBt!I$y6?YTr&JDR1eZN}omHe7@aia_0dkr0qp-Z0b4Xv{p zS9=k&ZaiVs@NK7hEa6?LVvXZUy|yeC)xD{csccuy zTC7y%dPVz_*z8*JttqCXU5NA2X!y*MJEz!W)IGoNH}owr3@N#~EBiuRE$6tZpHeC7 zPQIsYiz)id&1~i0&Wt?1sydF9xl?uWFXqLhme%tiDXrJfdfW6O_4_yF(zb21nkgx) zH>XzeSWXXfgYr|CoB6J7pT|jSAM&XOI(34Pkl>yW3e?qU+28m%x}#b14v+plMJ65~YuJkYi1%T`92pA)aZ4z42c zsfRQ=;;CV?|6umE(zI%P1ly&>*b^MvGpgKfKKw&%k3=uY#PLw(g5!;=nToMhXR2JE zyTH{hc=`z*?G9d2lAw=qHIH}#U6?o0q-pP+-uIrs)7}6lpB<=Ts?%Zf+NN)2o?>>M z{ila_HFBNkoL07*^|k&6ni=Zdcgo&HV9G<{L7TcN&rzk7lHIaXdQeG@>uc&1(aEgW zZ|~`es=B>4bsWyAcT1Z+=wODA+dJ7_7pL0)T*C^hbA&cEQa*pVTRKS{w|KgS_QBZ) z=U}O -// -// Copyright (C) 2008 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Data.Linq.SqlClient -{ - [MonoTODO] - public sealed class Sql2000Provider : SqlProvider - { - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/AssemblyInfo.cs deleted file mode 100644 index 449c50904f..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinqTest")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DbLinqTest")] -[assembly: AssemblyCopyright("Copyright © 2008")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM componenets. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("52112670-1196-4229-ae51-535cf23869cb")] diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/AttributeMappingSourceTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/AttributeMappingSourceTest.cs deleted file mode 100755 index 64c36881d4..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/AttributeMappingSourceTest.cs +++ /dev/null @@ -1,82 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2009 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Data.SqlClient; -using System.IO; -using System.Linq; -using System.Reflection; - -using System.Data.Linq.Mapping; - -#if MONO_STRICT -using System.Data.Linq; -using AttributeMappingSource = System.Data.Linq.Mapping.AttributeMappingSource; -#else -using DbLinq.Data.Linq; -using AttributeMappingSource = DbLinq.Data.Linq.Mapping.AttributeMappingSource; -#endif - -using DbLinq.Null; -using NUnit.Framework; - -namespace DbLinqTest -{ - [Table(Name = "dbo...FooTable")] - class Foo - { - [Column(Name="Col1")] - public string Column1 { get; set; } - } - - [Database(Name = "MyDB1")] - class MyDataContext2 : DataContext - { - public MyDataContext2() - : base(new SqlConnection("Data Source=localhost")) - { - } - - public Table FooTable { get { return GetTable(); } } - public Table FooFieldTable; - } - - [TestFixture] - public class AttributeMappingSourceTest - { - [Test] - public void CreateModel_GetTables_Has_No_Duplicates() - { - var model = new AttributeMappingSource().GetModel(typeof(MyDataContext2)); - var tables = model.GetTables().ToList(); - Assert.AreEqual(1, tables.Count); - Assert.AreEqual("dbo...FooTable", tables[0].TableName); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/CsvArrayAdapterTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/CsvArrayAdapterTest.cs deleted file mode 100644 index b40cfaa909..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/CsvArrayAdapterTest.cs +++ /dev/null @@ -1,69 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System.Linq; -using DbLinq.Schema.Dbml.Adapter; -using DbLinq.Util; -using NUnit.Framework; - -namespace DbLinqTest -{ - /// - /// Summary description for TypeContextTest - /// - [TestFixture] - public class CsvArrayAdapterTest - { - public class CsvArray - { - public string S; - public ISimpleList A; - - public CsvArray() - { - A = new CsvArrayAdapter(this, "S"); - } - } - - [Test] - public void ArrayTest() - { - var ca = new CsvArray { S = "a,b" }; - var al = ca.A.ToArray(); - Assert.AreEqual(2, al.Count()); - Assert.AreEqual("a", al[0]); - Assert.AreEqual("b", al[1]); - } - - [Test] - public void WriteArrayTest() - { - var ca = new CsvArray { S = "a,b" }; - ca.A.Add("c"); - Assert.AreEqual("a,b,c", ca.S); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/ExpressionEqualityComparerTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/ExpressionEqualityComparerTest.cs deleted file mode 100644 index d175234bac..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/ExpressionEqualityComparerTest.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; -using DbLinq.Util; -using System.Linq.Expressions; -using NUnit.Framework; - -namespace DbLinqTest -{ - /// - ///This is a test class for ExpressionEqualityComparerTest and is intended - ///to contain all ExpressionEqualityComparerTest Unit Tests - /// - [TestFixture] - public class ExpressionEqualityComparerTest - { - private readonly IEqualityComparer equalityComparer = new ExpressionEqualityComparer(); - - private void CheckEquality(Expression a, Expression b) - { - Assert.AreEqual(equalityComparer.GetHashCode(a), equalityComparer.GetHashCode(b)); - Assert.IsTrue(equalityComparer.Equals(a, b)); - } - - private void CheckInequality(Expression a, Expression b) - { - Assert.IsFalse(equalityComparer.Equals(a, b)); - } - - [Test] - public void Equality1Test() - { - CheckEquality(Expression.Add(Expression.Constant(1), Expression.Constant(2)), - Expression.Add(Expression.Constant(1), Expression.Constant(2))); - } - - [Test] - public void Inequality1Test() - { - CheckInequality(Expression.Add(Expression.Constant(1), Expression.Constant(2)), - Expression.Add(Expression.Constant(1), Expression.Constant(3))); - } - - [Test] - public void Equality2Test() - { - CheckEquality(Expression.Condition(Expression.Constant(true), Expression.Constant(1), Expression.Constant(2)), - Expression.Condition(Expression.Constant(true), Expression.Constant(1), Expression.Constant(2))); - } - - [Test] - public void Equality3Test() - { - CheckEquality(Expression.Constant(1), Expression.Constant(1)); - } - - [Test] - public void Equality4Test() - { - CheckEquality(Expression.Constant("1"), Expression.Constant("1")); - } - - [Test] - public void Inequality4Test() - { - CheckInequality(Expression.Constant(1), Expression.Constant("1")); - } - [Test] - public void Inequality5Test() - { - CheckInequality(Expression.Constant(1), null); - } - [Test] - public void Inequality6Test() - { - CheckInequality(null, Expression.Constant("1")); - } - [Test] - public void Inequality7Test() - { - CheckInequality(Expression.Constant(1), Expression.Negate(Expression.Constant(1))); - } - static int F() - { - return 1; - } - - static int G() - { - return 1; - } - - //[TestMethod, Test] - //public void Equality8Test() - //{ - // CheckEquality( - // Expression.Invoke(Expression.Call(GetType().GetMethod("F", BindingFlags.NonPublic | BindingFlags.Static))), - // Expression.Invoke(Expression.Call(GetType().GetMethod("F", BindingFlags.NonPublic | BindingFlags.Static))) - // ); - //} - - //[TestMethod, Test] - //public void Inequality8Test() - //{ - // CheckInequality( - // Expression.Invoke(Expression.Call(GetType().GetMethod("F", BindingFlags.NonPublic | BindingFlags.Static))), - // Expression.Invoke(Expression.Call(GetType().GetMethod("G", BindingFlags.NonPublic | BindingFlags.Static))) - // ); - //} - [Test] - public void Equality9Test() - { - CheckEquality( - Expression.Call(GetType().GetMethod("F", BindingFlags.NonPublic | BindingFlags.Static)), - Expression.Call(GetType().GetMethod("F", BindingFlags.NonPublic | BindingFlags.Static)) - ); - } - - [Test] - public void Inequality9Test() - { - CheckInequality( - Expression.Call(GetType().GetMethod("F", BindingFlags.NonPublic | BindingFlags.Static)), - Expression.Call(GetType().GetMethod("G", BindingFlags.NonPublic | BindingFlags.Static)) - ); - } - - // TODO: finish tests, lazy boy - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/IDataTypeExtensionsTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/IDataTypeExtensionsTest.cs deleted file mode 100644 index 6b3078530c..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/IDataTypeExtensionsTest.cs +++ /dev/null @@ -1,124 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System.Collections.Generic; -using DbLinq.Schema; -using DbLinq.Schema.Dbml; -using DbLinq.Util; -using DbLinq.Vendor; -using DbLinq.Vendor.Implementation; -using NUnit.Framework; - -namespace DbLinqTest -{ - /// - ///This is a test class for SchemaLoaderTest and is intended - ///to contain all SchemaLoaderTest Unit Tests - /// - [TestFixture] - public class IDataTypeExtensionsTest - { - - /// - ///A test for UnpackDbType - /// - [Test] - public void UnpackDbType1Test() - { - string rawType = "int"; - IDataType dataType = new SchemaLoader.DataType(); - dataType.UnpackRawDbType(rawType); - Assert.AreEqual("int", dataType.SqlType); - Assert.AreEqual(null, dataType.Length); - Assert.AreEqual(null, dataType.Precision); - Assert.AreEqual(null, dataType.Scale); - //Assert.AreEqual(null, dataType.Unsigned); // irrelevant - } - - /// - ///A test for UnpackDbType - /// - [Test] - public void UnpackDbType2Test() - { - string rawType = "int(12)"; - IDataType dataType = new SchemaLoader.DataType(); - dataType.UnpackRawDbType(rawType); - Assert.AreEqual("int", dataType.SqlType); - Assert.AreEqual(12, dataType.Length); - Assert.AreEqual(12, dataType.Precision); - Assert.AreEqual(null, dataType.Scale); - //Assert.AreEqual(null, dataType.Unsigned); // irrelevant - } - - /// - ///A test for UnpackDbType - /// - [Test] - public void UnpackDbType3Test() - { - string rawType = "number(15,5)"; - IDataType dataType = new SchemaLoader.DataType(); - dataType.UnpackRawDbType(rawType); - Assert.AreEqual("number", dataType.SqlType); - Assert.AreEqual(15, dataType.Length); - Assert.AreEqual(15, dataType.Precision); - Assert.AreEqual(5, dataType.Scale); - Assert.AreEqual(false, dataType.Unsigned); - } - - /// - ///A test for UnpackDbType - /// - [Test] - public void UnpackDbType4Test() - { - string rawType = "type()"; - IDataType dataType = new SchemaLoader.DataType(); - dataType.UnpackRawDbType(rawType); - Assert.AreEqual("type", dataType.SqlType); - Assert.AreEqual(null, dataType.Length); - Assert.AreEqual(null, dataType.Precision); - Assert.AreEqual(null, dataType.Scale); - } - - /// - ///A test for UnpackDbType - /// - [Test] - public void UnpackDbType5Test() - { - string rawType = "smallint unsigned"; - IDataType dataType = new SchemaLoader.DataType(); - dataType.UnpackRawDbType(rawType); - Assert.AreEqual("smallint", dataType.SqlType); - Assert.AreEqual(null, dataType.Length); - Assert.AreEqual(null, dataType.Precision); - Assert.AreEqual(null, dataType.Scale); - Assert.AreEqual(true, dataType.Unsigned); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Properties/AssemblyInfo.cs deleted file mode 100644 index 449c50904f..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbLinqTest")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DbLinqTest")] -[assembly: AssemblyCopyright("Copyright © 2008")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM componenets. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("52112670-1196-4229-ae51-535cf23869cb")] diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Attach.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Attach.cs deleted file mode 100644 index c0602a9202..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Attach.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; -using System.Data.Linq; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class Attach : TestBase - { - [Test] - public void Attach01() - { - var db1 = CreateDB(); - var employee = new Employee(); - - db1.Employees.Attach(employee); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(NotSupportedException))] - public void Attach02() - { - var db1 = CreateDB(); - var db2 = CreateDB(); - var employee = new Employee(); - - db1.Employees.Attach(employee); - employee.Address = "new address"; - - db2.Employees.Attach(employee); - } - - [Test] - public void AttachAll01() - { - var db1 = CreateDB(); - var employees = new Employee[] { new Employee { EmployeeID = 20 }, new Employee { EmployeeID = 21 } }; - db1.Employees.AttachAll(employees); - } - - [Test] - [ExpectedException(typeof(System.Data.Linq.DuplicateKeyException))] - public void AttachAll02() - { - var db1 = CreateDB(); - var employees = new Employee[] { new Employee { EmployeeID = 20 }, new Employee { EmployeeID = 20 } }; - db1.Employees.AttachAll(employees); - } - - - [Test] - [ExpectedException(typeof(System.Data.Linq.DuplicateKeyException))] - public void AttachAll03() - { - var db1 = CreateDB(); - var employee1 = db1.Employees.First(); - var employees = new Employee[] { new Employee { EmployeeID = employee1.EmployeeID } }; - db1.Employees.AttachAll(employees); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(ChangeConflictException))] - public void NotExistingAttatch() - { - Random rand = new Random(); - - Northwind db = CreateDB(); - var orderDetail = new OrderDetail { OrderID = 0, ProductID = 0 }; - db.OrderDetails.Attach(orderDetail); - - float newDiscount = 15 + (float)rand.NextDouble(); - orderDetail.Discount = newDiscount; - db.SubmitChanges(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/CompositePK_Test.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/CompositePK_Test.cs deleted file mode 100644 index 5d78966200..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/CompositePK_Test.cs +++ /dev/null @@ -1,199 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; -using System.Data.Linq; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class CompositePK_Test : TestBase - { - const short TestQuantity = short.MaxValue; - - protected void cleanup(Northwind db) - { - try - { - // Get the name of the Order Details table properly evaluating the Annotation - string tableName = null;// db.Vendor.GetSqlFieldSafeName("order details"); //eg. "[Order Details]" - foreach (object obj in typeof(OrderDetail).GetCustomAttributes(true)) - { - if (obj is System.Data.Linq.Mapping.TableAttribute) - { - tableName = ((System.Data.Linq.Mapping.TableAttribute)obj).Name; - } - } - string sql = string.Format("DELETE FROM {0} WHERE Quantity={1}", tableName, TestQuantity); - db.ExecuteCommand(sql); - } - catch (Exception) - { - } - } - - [Test] - public void CP1_DeletePreviousRows() - { - //delete any rows from previous testing - Northwind db = CreateDB(); - // PC: this test was wrong, DeleteOnSubmit requires the object to be attached - // (by query result or manually, we chose here the query result) - //var orderDetail = new OrderDetail { OrderID = 3, ProductID = 2 }; - //db.OrderDetails.DeleteOnSubmit(orderDetail); - var toDelete = from o in db.OrderDetails where o.OrderID == 3 && o.ProductID == 2 select o; - db.OrderDetails.DeleteAllOnSubmit(toDelete); - db.SubmitChanges(); - } - - [Test] - public void CP2_UpdateTableWithCompositePK() - { - Northwind db = CreateDB(); - cleanup(db); - - var order = db.Orders.First(); - var product = db.Products.First(); - - var startUnitPrice = 33000; - var endUnitPrice = 34000; - - var orderDetail = new OrderDetail - { - OrderID = order.OrderID, - ProductID = product.ProductID, - Quantity = TestQuantity, - UnitPrice = startUnitPrice - }; - - db.OrderDetails.InsertOnSubmit(orderDetail); - db.SubmitChanges(); - - orderDetail.UnitPrice = endUnitPrice; - db.SubmitChanges(); - - OrderDetail orderDetail2 = (from c in db.OrderDetails - where c.UnitPrice == endUnitPrice - select c).Single(); - - Assert.IsTrue(object.ReferenceEquals(orderDetail, orderDetail2), "Must be same object"); - - Assert.AreEqual(order.OrderID, orderDetail2.OrderID); - Assert.AreEqual(product.ProductID, orderDetail2.ProductID); - Assert.AreEqual(endUnitPrice, orderDetail2.UnitPrice); - - db.OrderDetails.DeleteOnSubmit(orderDetail); - db.SubmitChanges(); - } - - [Test] - public void CP3_DeleteTableWithCompositePK() - { - Northwind db = CreateDB(); - cleanup(db); - int initialCount = db.OrderDetails.Count(); - - var order = db.Orders.First(); - var product = db.Products.First(); - - var orderDetail = new OrderDetail { - OrderID = order.OrderID, - ProductID = product.ProductID, - Quantity = TestQuantity - }; - db.OrderDetails.InsertOnSubmit(orderDetail); - db.SubmitChanges(); - - Assert.AreEqual(db.OrderDetails.Count(), initialCount + 1); - db.OrderDetails.DeleteOnSubmit(orderDetail); - db.SubmitChanges(); - - Assert.AreEqual(db.OrderDetails.Count(), initialCount); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(ChangeConflictException))] - public void CP4_UnchangedColumnShouldNotUpdated() - { - Random rand = new Random(); - - Northwind db = CreateDB(); - var orderDetail = new OrderDetail { OrderID = 1, ProductID=2}; - db.OrderDetails.Attach(orderDetail); - - float newDiscount = 15 + (float)rand.NextDouble(); - orderDetail.Discount = newDiscount; - db.SubmitChanges(); - - //this test is bad conceptually, for this reason last two lines has been commented and now a changeConflictException is expected. - //This is the behaviour in linq2sl. - - //var orderDetail2 = db.OrderDetails.Single(od => od.OrderID == 1); - //Assert.AreEqual((float)orderDetail2.Discount, newDiscount); - } - - [Test(Description = "Check that both keys are used to determine identity")] - public void CP5_Composite_ObjectIdentity() - { - Northwind db = CreateDB(); - - var d = db.OrderDetails.First(); - var q = db.OrderDetails.Where(od => od.ProductID == d.ProductID && od.OrderID == d.OrderID); - OrderDetail row1 = q.Single(); - Assert.IsTrue(object.ReferenceEquals(d, row1)); - } - - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContext.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContext.cs deleted file mode 100644 index f2b6d3ede6..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataContext.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; -using System.Data.Linq; - -#if !MONO_STRICT -using nwind; -#else -using MsNorthwind; -#endif - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class DataContext : TestBase - { - [Test] - public void GetCommand() - { - var db = CreateDB(); - string country = "Spain"; - var cust = db.Customers.Where(c => c.Country == country); - var dbCommand=db.GetCommand(cust); - - - Assert.IsNotNull(dbCommand.CommandText); - AssertHelper.Greater(dbCommand.Parameters.Count, 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataLoadOptions_Test.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataLoadOptions_Test.cs deleted file mode 100644 index 9cc59f9b77..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DataLoadOptions_Test.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -namespace nwind -{ - public partial class Customer - { - public object ExtraneousMethod() - { - return null; - } - } -} - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class DataLoadOptions_Test : TestBase - { - static object ThrowException() - { - throw new ApplicationException(); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadExpression1() - { - new DataLoadOptions().LoadWith(cc => cc.ExtraneousMethod()); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadExpression2() - { - new DataLoadOptions().LoadWith(cc => 1); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadExpression3() - { - new DataLoadOptions().LoadWith(cc => ThrowException()); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadExpression4() - { - new DataLoadOptions().LoadWith(cc => cc.Orders.Select(o => o)); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadExpression5() - { - new DataLoadOptions().LoadWith (o => o.Customer.Orders); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadCycles1() - { - var lo = new DataLoadOptions(); - lo.LoadWith(c => c.Orders); - lo.LoadWith(o => o.Customer); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void LoadWith_BadCycles2() - { - var lo = new DataLoadOptions(); - lo.LoadWith(o => o.Customer); - lo.LoadWith(c => c.Orders); - } - - [Test] - public void LoadWith_Good1() - { - var lo = new DataLoadOptions(); - lo.LoadWith(c => c.Orders); - lo.LoadWith(o => o.Employee); - } - - [Test] - public void LoadWith_Good2() - { - var lo = new DataLoadOptions(); - lo.LoadWith(o => o.Employee); - lo.LoadWith(c => c.Orders); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DynamicLinqTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DynamicLinqTest.cs deleted file mode 100644 index 9bd6aac50f..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/DynamicLinqTest.cs +++ /dev/null @@ -1,337 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using System.Linq.Dynamic; -using Test_NUnit; -using System.Linq.Expressions; -using System.Reflection; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class DynamicLinqTest : TestBase - { - [Test] - public void DL1_Products() - { - Northwind db = CreateDB(); - - var q = db.Products.Where("SupplierID=1 And UnitsInStock>2") - .OrderBy("ProductID"); - var list = q.ToList(); - Assert.IsTrue(list.Count > 0, "Expected results from dynamic query"); - } - - [Test] - public void DL2_ProductCount() - { - Northwind db = CreateDB(); - - int numProducts = db.Products.Where("SupplierID=1").Count(); - Assert.IsTrue(numProducts > 0, "Expected results from dynamic query"); - } - - //note: - //user Sqlite reports problems with DynamicLinq Count() - - //but neither DL2 nor DL3 tests seem to hit the problem. - - [Test] - public void DL3_ProductCount() - { - Northwind db = CreateDB(); - - int numProducts = db.Products.Count(); - Assert.IsTrue(numProducts > 0, "Expected results from dynamic query"); - } - - [Test] - public void DL4_DynamicAssociationProperty() - { - - Northwind db = CreateDB(); - var orders = db.GetTable(); - var res = orders.Select(@"new (OrderID,Customer.ContactName)"); - - List list = new List(); - foreach (var u in res) - list.Add(u); - Assert.IsTrue(list.Count > 0); - } - - #region NestedPropertiesDynamicSelect - - const string obsoleteError=@"Since beta2 in Linq2Sql to project a new entity (ie: select new Order(3)) is forbidden for coherence reasons, so this tests doesn't mimic the Linq2Sql behavior and it is obsolete and should be modified. If you apply such test cases to Linq2Sql you'll get Test_NUnit_MsSql_Strict.DynamicLinqTest.DL5_NestedObjectSelect: - System.NotSupportedException : Explicit construction of entity type 'MsNorthwind.XX' in query is not allowed.\n\nMore Info in: http://linqinaction.net/blogs/roller/archive/2007/11/27/explicit-construction-of-entity-type-in-query-is-not-allowed.aspx"; - [Test(Description = "dynamic version of F16_NestedObjectSelect")] - public void DL5_NestedObjectSelect() - { - Assert.Ignore(obsoleteError); - Northwind db = CreateDB(); - var orders = db.GetTable(); - var res = orders.SelectNested(new string[] { "OrderID", "Customer.ContactName" }); - - List list = res.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void DL6_StaticVersionOfDynamicAssociatonWithExtensionMethodTest(bool bug_in_dynamic_linq) - { - Assert.Ignore(obsoleteError); - - //is this maybe a bug in DynamicLinq? - //from DynamicLinq, we receive this query which has ContactName but misses ContactTitle: - //MTable.CreateQuery: value(Table`1[Order]).Select(o => new Order() {OrderID = o.OrderID, Customer = new Customer() {ContactName = o.Customer.ContactName}}) - - //Also - the non-dynamic version F17_NestedObjectSelect_Ver2 succeeds. - - Northwind db = CreateDB(); - var orders = db.GetTable().ToArray().AsQueryable(); - - var query = from order in orders - //where order.Customer != null - select new Order - { - OrderID = order.OrderID, - Customer = new Customer - { - ContactName = order.Customer.ContactName, - ContactTitle = order.Customer.ContactTitle - } - }; - var list = query.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void DL7_DynamicAssociatonUsingDoubleProjection(bool bug_in_dynamic_linq) - { - Assert.Ignore(obsoleteError); - - //this fails - but not in our code: - //A first chance exception of type 'System.NullReferenceException' occurred in Unknown Module. - //System.Transactions Critical: 0 : http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/UnhandledUnhandled exceptionTest_NUnit_Mysql.vshost.exeSystem.NullReferenceException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Object reference not set to an instance of an object. at lambda_method(ExecutionScope , Order ) - // at System.Linq.Enumerable.&lt;SelectIterator&gt;d__d`2.MoveNext() - // at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) - // at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) - // at Test_NUnit_MySql.DynamicLinqTest.DL7_DynamicAssociatonUsingDoubleProjection() in E:\ggprj\dbLinq\dblinq2007\Tests\Test_NUnit\DynamicLinqTest.cs:line 150 - - Northwind db = CreateDB(); - - // Double projection works in Linq-SQL: - var orders = db.GetTable().ToArray().AsQueryable(); - var query = orders.SelectNested(new string[] { "OrderID", "Customer.ContactName" }); - var list = query.ToList(); - Assert.IsTrue(list.Count > 0); - } - - #endregion - - #region Predicates - - /// - /// Reported by pwy.mail in issue http://code.google.com/p/dblinq2007/issues/detail?id=68 - /// - [Test] - public void DL8_CountTest2() - { - Northwind db = CreateDB(); - Expression> predicate = c => c.City == "Paris"; - int count = db.Customers.Count(predicate); - AssertHelper.Greater(count, 0); // Some databases have more than 1 customer in Paris - } - - /// - /// Reported by pwy.mail in issue http://code.google.com/p/dblinq2007/issues/detail?id=69 - /// - [Test] - public void DL9_PredicateBuilderCount() - { - //2008.May.17: breaks because we are not handling an 'InvocationExpression' in ExpressionTreeParser. - //possibily a tree rewrite is needed. - Northwind db = CreateDB(); - var predicate = PredicateBuilder.True(); - predicate = predicate.And(m => m.City == "Paris"); - int predicateCount = db.Customers.Count(predicate); - int normalCount = db.Customers.Where(c => c.City == "Paris").Count(); - Assert.AreEqual(normalCount, predicateCount); - } - - - /// - /// Reported by pwy.mail in issue http://code.google.com/p/dblinq2007/issues/detail?id=69 - /// - [Test] - public void DL10_PredicateBuilderWhere() - { - Northwind db = CreateDB(); - var predicate = PredicateBuilder.True(); - - predicate = predicate.And(m => m.City == "Paris"); - predicate = predicate.And(n => n.CompanyName == "Around the Horn"); - IList list = db.Customers.AsQueryable().Where(predicate).ToList(); - } - - /// - /// Reported by pwy.mail in issue http://code.google.com/p/dblinq2007/issues/detail?id=73 - /// - [Test] - public void DL11_ThenByDescending() - { - Northwind db = CreateDB(); - var q = db.Products.Where("SupplierID=1 And UnitsInStock>2") - .OrderBy(" ProductName asc,ProductID desc"); - var list = q.ToList(); - Assert.IsTrue(list.Count > 0, "Expected results from dynamic query"); - } - - /// - /// Build predicate expressions dynamically. - /// - static class PredicateBuilder - { - public static Expression> True() { return f => true; } - public static Expression> False() { return f => false; } - } - - // Test patch from: - // http://groups.google.com/group/dblinq/browse_frm/thread/9fa41554044afeaa/4ef1605e020be9fc?lnk=raot#4ef1605e020be9fc - [Test] - public void DL12_Count_Via_Expression() - { - var db = CreateDB(); - IQueryable employees = db.Employees; - var employeeCount = (int) employees.Provider.Execute( - Expression.Call(typeof(Queryable), "Count", - new Type[]{employees.ElementType}, - employees.Expression)); - Assert.AreEqual(9, employeeCount); - } - - } - #endregion - - #region ExtensionMethods - - /// - /// Extension written by Marc Gravell. - /// Traverses nested properties - /// - static class SelectUsingSingleProjection - { - internal static IQueryable SelectNested(this IQueryable source, params string[] propertyNames) - where T : new() - { - Type type = typeof(T); - var sourceItem = Expression.Parameter(type, "t"); - Expression exp = CreateAndInit(type, sourceItem, propertyNames); - return source.Select(Expression.Lambda>(exp, sourceItem)); - } - - static Expression CreateAndInit(Type type, Expression source, string[] propertyNames) - { - if (type == null) throw new ArgumentNullException("type"); - if (source == null) throw new ArgumentNullException("source"); - if (propertyNames == null) throw new ArgumentNullException("propertyNames"); - - var newExpr = Expression.New(type.GetConstructor(Type.EmptyTypes)); - // take "Foo.A", "Bar", "Foo.B" to "Foo" ["A","B"], "Bar" [] - var groupedNames = from name in propertyNames - let dotIndex = name.IndexOf('.') - let primary = dotIndex < 0 ? name : name.Substring(0, dotIndex) - let aux = dotIndex < 0 ? null : name.Substring(dotIndex + 1) - group aux by primary into grouped - select new - { - Primary = grouped.Key, - Aux = grouped.Where(x => x != null).ToArray() - }; - List bindings = new List(); - foreach (var grp in groupedNames) - { - PropertyInfo dest = type.GetProperty(grp.Primary); - Expression value, readFrom = Expression.Property(source, grp.Primary); - if (grp.Aux.Length == 0) - { - value = readFrom; - } - else - { - value = CreateAndInit(dest.PropertyType, readFrom, grp.Aux); - } - bindings.Add(Expression.Bind(dest, value)); - } - return Expression.MemberInit(newExpr, bindings); - } - - - /// - /// Extension method provided by pwy.mail in issue http://code.google.com/p/dblinq2007/issues/detail?id=69 - /// - internal static Expression> Or(this Expression> expr1, - Expression> expr2) - { - var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast()); - return Expression.Lambda> - (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters); - } - - internal static Expression> And(this Expression> expr1, - Expression> expr2) - { - var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast()); - return Expression.Lambda> - (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters); - } - } - #endregion - -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteCommand_Test.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteCommand_Test.cs deleted file mode 100644 index b8a1c728d8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteCommand_Test.cs +++ /dev/null @@ -1,92 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ExecuteCommand_Test : TestBase - { -#if !DEBUG && (MSSQL && L2SQL) - // DataContext.ExecuteScalar() working with 'SELECT COUNT(*)' is a DbLinq extension. - // Exclude from Linq2Sql comparison tests. - [Explicit] -#endif - [Test] - public void A2_ProductsTableHasEntries() - { - Northwind db = CreateDB(); - int result = db.ExecuteCommand("SELECT count(*) FROM \"Products\""); - AssertHelper.Greater(result, 0, "Expecting some rows in Products table, got:" + result); - } - - /// - /// like above, but includes one parameter. - /// -#if !DEBUG && (MSSQL && L2SQL) - // DataContext.ExecuteScalar() working with 'SELECT COUNT(*)' is a DbLinq extension. - // Exclude from Linq2Sql comparison tests. - [Explicit] -#endif - [Test] - public void A3_ProductCount_Param() - { - Northwind db = CreateDB(); - int result = db.ExecuteCommand("SELECT count(*) FROM [Products] WHERE [ProductID]>{0}", 3); - //long iResult = base.ExecuteScalar(sql); - AssertHelper.Greater(result, 0, "Expecting some rows in Products table, got:" + result); - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteQuery_Test.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteQuery_Test.cs deleted file mode 100644 index fac3d615da..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ExecuteQuery_Test.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ExecuteQuery_Test : TestBase - { - [Test] - public void X1_SimpleQuery() - { - var db = CreateDB(); - - IList categories1 = (from c in db.Categories orderby c.CategoryName select c).ToList(); - IList categories2 = db.ExecuteQuery( - @"select - [Description], - [CategoryName], - [Picture], - [CategoryID] - from [Categories] - order by [CategoryName]").ToList(); - - Assert.AreEqual(categories1.Count, categories2.Count); - for (int index = 0; index < categories2.Count; index++) - { - Assert.AreEqual(categories1[index].CategoryID, categories2[index].CategoryID); - Assert.AreEqual(categories1[index].CategoryName, categories2[index].CategoryName); - Assert.AreEqual(categories1[index].Description, categories2[index].Description); - } - } - - [Test] - public void X2_CheckChanges() - { - var db = CreateDB(); - string query = "SELECT * FROM \"Customers\";"; - - var characters = db.ExecuteQuery(query); - var character = characters.First(); - - string beforecountry = character.Country; - character.Country = "Burmuda"; - - AssertHelper.Greater(db.GetChangeSet().Updates.Count, 0); - db.SubmitChanges(); - - var character2 = db.Customers.First(c=>c.CustomerID==character.CustomerID); - Assert.AreEqual(character2.Country, "Burmuda"); - - character2.Country = beforecountry; - db.SubmitChanges(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Internals/ReflectionTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Internals/ReflectionTest.cs deleted file mode 100644 index 50c5e2f0d7..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Internals/ReflectionTest.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; - -namespace Test_NUnit.Internals -{ - [TestFixture] - public class ReflectionTest - { - //there was a bug where intField1 would be listed multiple times in a select statement: - public class Class1 - { - protected int intField1; - public int publicField; - } - public class Class2 : Class1 - { - protected int intField2; - } -#if OBSOLETE - [Test] - public void AttribHelper_NoDuplicateFields() - { - //Andrus pointed out that one of the internal classes that help with reflection - //returns fields in duplicate, which kills SQL SELECT and UPDATEs. - System.Reflection.MemberInfo[] members = DbLinq.Util.AttribHelper.GetMemberFields(typeof(Class2)); - Assert.IsTrue(members.Length == 3); - } - - [Test] - public void AttribHelper_IncludePublicFields() - { - //Andrus pointed out that one of the internal classes that help with reflection - //returns fields in duplicate, which kills SQL SELECT and UPDATEs. - System.Reflection.MemberInfo[] members = DbLinq.Util.AttribHelper.GetMemberFields(typeof(Class1)); - Assert.IsTrue(members.Length == 2); - } -#endif - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Advanced.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Advanced.cs deleted file mode 100644 index dd976666e0..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Advanced.cs +++ /dev/null @@ -1,216 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using NUnit.Framework; -using Test_NUnit; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737920.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class AdvancedTest : TestBase - { -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "This sample builds a query dynamically to return the contact name of each customer.")] - public void LinqToSqlAdvanced01() - { - Northwind db = CreateDB(); - - ParameterExpression param = Expression.Parameter(typeof(Customer), "c"); - Expression selector = Expression.Property(param, typeof(Customer).GetProperty("ContactName")); - var pred = Expression.Lambda(selector, param); - - var custs = db.Customers; - var expr = Expression.Call(typeof(Queryable), "Select" - , new Type[] { typeof(Customer), typeof(string) }, Expression.Constant(custs), pred); - var query = db.Customers.AsQueryable().Provider.CreateQuery(expr); - - var list = query.ToList(); - Assert.IsTrue(list.Count > 0); - } - - //TODO - 2,3,4,5 - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "This sample builds a query dynamically to filter for Customers in London.")] - public void LinqToSqlAdvanced02() - { - Northwind db = CreateDB(); - - var custs = db.Customers; - var param = Expression.Parameter(typeof(Customer), "c"); - var right = Expression.Constant("London"); - var left = Expression.Property(param, typeof(Customer).GetProperty("City")); - var filter = Expression.Equal(left, right); - var pred = Expression.Lambda(filter, param); - - var expr = Expression.Call(typeof(Queryable), "Where", new Type[] { typeof(Customer) }, Expression.Constant(custs), pred); - var query = db.Customers.AsQueryable().Provider.CreateQuery(expr); - - var list = query.ToList(); - Assert.IsTrue(list.Count > 0, "Got London citiens > 0"); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "This sample builds a query dynamically to filter for Customers in London and order them by ContactName.")] - public void LinqToSqlAdvanced03() - { - Northwind db = CreateDB(); - - var param = Expression.Parameter(typeof(Customer), "c"); - - var left = Expression.Property(param, typeof(Customer).GetProperty("City")); - var right = Expression.Constant("London"); - var filter = Expression.Equal(left, right); - var pred = Expression.Lambda(filter, param); - - var selector = Expression.Property(param, typeof(Customer).GetProperty("ContactName")); - IQueryable custs = db.Customers; - var expr = Expression.Call(typeof(Queryable), "Where", new Type[] { typeof(Customer) }, Expression.Constant(custs), pred); - expr = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { typeof(Customer), typeof(String) }, custs.Expression, Expression.Lambda(Expression.Property(param, "ContactName"), param)); - var query = db.Customers.AsQueryable().Provider.CreateQuery(expr); - - var list = query.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "This sample dynamically builds a Union to return a sequence of all countries where either a customer or an employee live.")] - public void LinqToSqlAdvanced04() - { - Northwind db = CreateDB(); - - var custs = db.Customers; - var param1 = Expression.Parameter(typeof(Customer), "e"); - var left1 = Expression.Property(param1, typeof(Customer).GetProperty("City")); - var pred1 = Expression.Lambda(left1, param1); - - var employees = db.Employees; - var param2 = Expression.Parameter(typeof(Employee), "c"); - var left2 = Expression.Property(param2, typeof(Employee).GetProperty("City")); - var pred2 = Expression.Lambda(left2, param2); - - var expr1 = Expression.Call(typeof(Queryable), "Select", new Type[] { typeof(Customer), typeof(String) }, Expression.Constant(custs), pred1); - var expr2 = Expression.Call(typeof(Queryable), "Select", new Type[] { typeof(Employee), typeof(String) }, Expression.Constant(employees), pred2); - - var q1 = db.Customers.AsQueryable().Provider.CreateQuery(expr1); - var q2 = db.Employees.AsQueryable().Provider.CreateQuery(expr2); - - var q3 = q1.Union(q2); - - AssertHelper.Greater(q1.Count(), 0); - Assert.IsTrue(q1.Count() + q2.Count() >= q3.Count()); - - } - - - [Linq101SamplesModified("Replaced Contact by Customer")] - [Test(Description="This sample demonstrates how we insert a new Contact and retrieve the newly assigned ContactID from the database.")] - public void LinqToSqlAdvanced05() - { - Northwind db = CreateDB(); - - //PK Column should be autogenerated - var con = new Category() { CategoryName = "New Era", Description= "(123)-456-7890" }; - db.Categories.InsertOnSubmit(con); - - - db.SubmitChanges(); - - Console.WriteLine(); - Console.WriteLine("The Category of the new record is {0}", con.CategoryID); - - Category customerReloaded=db.Categories.First(c=>c.CategoryID==con.CategoryID); - Assert.AreEqual(customerReloaded.CategoryName, con.CategoryName); - Assert.AreEqual(customerReloaded.Description, con.Description); - - // cleanup - db.Categories.DeleteOnSubmit(con); - db.SubmitChanges(); - } - - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test(Description = "This sample uses orderbyDescending and Take to return the discontinued products of the top 10 most expensive products")] - public void LinqToSqlAdvanced06() - { - Northwind db = CreateDB(); -#if INGRES - var prods = from p in db.Products.OrderByDescending(p=> p.UnitPrice).Take(10) - where p.Discontinued == "Y" select p; -#else - var prods = from p in db.Products.OrderByDescending(p => p.UnitPrice).Take(10) - where !p.Discontinued - select p; -#endif - - var list = prods.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Conversion_Operators.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Conversion_Operators.cs deleted file mode 100644 index 4c6ec1ce07..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Conversion_Operators.cs +++ /dev/null @@ -1,143 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Conversion_Operators : TestBase - { - [Test(Description = "AsEnumerable.This sample uses ToArray so that the client-side IEnumerable(Of T) implementation of where is used, instead of the default Query(Of T) implementation which would be converted to SQL and executed on the server. This is necessary because the where clause references a user-defined client-side method, isValidProduct, which cannot be converted to SQL.")] - public void LinqToSqlConversions01() - { - Northwind db = CreateDB(); - - var q = from p in db.Products.AsEnumerable() - where isValidProduct(p) - select p; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - private bool isValidProduct(Product p) - { - return (p.ProductName.LastIndexOf("C") == 0); - } - - - [Test(Description = "ToArray. This sample uses ToArray to immediately evaluate a query into an array and get the 3rd element.")] - public void LinqToSqlConversions02() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.City == "London" - select c; - - Customer[] list = q.ToArray(); - - Assert.IsFalse(list == null); - Assert.IsTrue(list.Length > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test(Description = "ToList. This sample uses ToList to immediately evaluate a query into a List(Of T).")] - public void LinqToSqlConversions03() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HireDate >= DateTime.Parse("1/1/1994") - select e; - - List qList = q.ToList(); - - Assert.IsFalse(qList == null); - Assert.IsTrue(qList.Count > 0); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Linq101SamplesModified("Strange short to boolean casting, perhaps in the original Northwind Product.Discontinued was a boolean property")] - [Test(Description = "ToDictionary. This sample uses ToDictionary to immediately evaluate a query and a key expression into an Dictionary(Of K, T).")] - public void LinqToSqlConversion04() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.UnitsInStock <= p.ReorderLevel && !Convert.ToBoolean(p.Discontinued) - select p; - - var qDictionary = q.ToDictionary(p => p.ProductID); - - Assert.IsFalse(qDictionary == null); - // PC: on SQLite, this returns nothing. Is the test wrong? - if (qDictionary.Count == 0) - Assert.Ignore("Please check this test validity"); - //Assert.IsTrue(qDictionary.Count > 0); - - foreach (var key in qDictionary.Keys) - { - Console.WriteLine("Key {0}:", key); - Console.WriteLine(); - } - - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Count_Sum_Min_Max_Avg.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Count_Sum_Min_Max_Avg.cs deleted file mode 100644 index fa6abd6156..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Count_Sum_Min_Max_Avg.cs +++ /dev/null @@ -1,271 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737922.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class Count_Sum_Min_Max_Avg : TestBase - { - [Test] - public void LinqToSqlCount01() - { - Northwind db = CreateDB(); - var q = db.Customers.Count(); - - Assert.IsTrue(q > 0, "Expect non-zero count"); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - public void LinqToSqlCount02() - { - Northwind db = CreateDB(); -#if INGRES && !MONO_STRICT - var q = (from p in db.Products where p.Discontinued == "N" select p) - .Count(); -#else - var q = (from p in db.Products where !p.Discontinued select p) - .Count(); -#endif - - Assert.IsTrue(q > 0, "Expect non-zero count"); - } - - [Test(Description = "This sample uses Sum to find the total freight over all Orders.")] - public void LinqToSqlCount03() - { - Northwind db = CreateDB(); - var q = (from o in db.Orders select o.Freight).Sum(); - Assert.IsTrue(q > 0, "Freight sum must be > 0"); - } - - [Test(Description = "This sample uses Sum to find the total number of units on order over all Products.")] - public void LinqToSqlCount04() - { - Northwind db = CreateDB(); - var q = (from p in db.Products select (int)p.UnitsOnOrder.Value).Sum(); - Assert.IsTrue(q > 0, "Freight sum must be > 0"); - } - - [Test(Description = "This sample uses Min to find the lowest unit price of any Product")] - public void LinqToSqlCount05() - { - Northwind db = CreateDB(); - var q = (from p in db.Products select p.UnitsOnOrder).Min(); - Assert.IsTrue(q == 0, "Min UnitsOnOrder must be 0"); - } - - [Test(Description = "This sample uses Min to find the lowest freight of any Order.")] - public void LinqToSqlCount06() - { - Northwind db = CreateDB(); - var q = (from o in db.Orders select o.Freight).Min(); - Assert.IsTrue(q > 0, "Freight sum must be > 0"); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "This sample uses Min to find the Products that have the lowest unit price in each category")] - public void LinqToSqlCount07() - { - #region SHOW_MICROSOFT_GENERATED_SQL - /* - //the one Linq statement below gets translated into 9 SQL statements -SELECT MIN([t0].[UnitPrice]) AS [value], [t0].[CategoryID] -FROM [dbo].[Products] AS [t0] -GROUP BY [t0].[CategoryID] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [1] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [4.5000] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [2] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [10.0000] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [3] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [9.2000] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [4] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [2.5000] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [5] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [7.0000] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [6] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [7.4500] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [7] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [10.0000] - -SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] -FROM [dbo].[Products] AS [t0] -WHERE ([t0].[UnitPrice] = @x2) AND (((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND ([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))) --- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [8] --- @x2: Input Money (Size = 0; Prec = 19; Scale = 4) [6.0000] - */ - #endregion - - Northwind db = CreateDB(); - var categories = (from p in db.Products - group p by p.CategoryID into g - select new - { - CategoryID = g.Key, - CheapestProducts = from p2 in g - where p2.UnitPrice == g.Min(p3 => p3.UnitPrice) - select p2 - }); - - var list = categories.ToList(); - Assert.IsTrue(list.Count > 0, "Expected count > 0"); - } - - [Test(Description = "This sample uses Max to find the latest hire date of any Employee")] - public void LinqToSqlCount08() - { - Northwind db = CreateDB(); - var q = (from e in db.Employees select e.HireDate).Max(); - Assert.IsTrue(q > new DateTime(1990, 1, 1), "Hire date must be > 2000"); - } - - [Test(Description = "This sample uses Max to find the most units in stock of any Product")] - public void LinqToSqlCount09() - { - Northwind db = CreateDB(); - var q = (from p in db.Products select p.UnitsInStock).Max(); - Assert.IsTrue(q > 0, "Max UnitsInStock must be > 0"); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "This sample uses Max to find the Products that have the highest unit price in each category")] - public void LinqToSqlCount10() - { - //Miscrosoft translates this query into multiple SQL statements - Northwind db = CreateDB(); - var q = from p in db.Products - group p by p.CategoryID into g - select new - { - g, - MostExpensiveProducts = from p2 in g - where p2.UnitPrice == g.Max(p3 => p3.UnitPrice) - select p2 - }; - var list = q.ToList(); - Assert.IsTrue(list.Count > 0, "Got most expensive items > 0"); - } - - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "This sample uses Average to find the average freight of all Orders.")] - public void LinqToSqlCount11() - { - Northwind db = CreateDB(); - var q = (from o in db.Orders - select o.Freight).Average(); - - Console.WriteLine(q); - Assert.IsTrue(q > 0, "Avg orders'freight must be > 0"); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "This sample uses Average to find the average unit price of all Products.")] - public void LinqToSqlCount12() - { - Northwind db = CreateDB(); - var q = (from p in db.Products - select p.UnitPrice).Average(); - - Console.WriteLine(q); - - Console.WriteLine(q); - Assert.IsTrue(q > 0, "Avg products'unitPrice must be > 0"); - } - - -#if !INGRES -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "This sample uses Average to find the Products that have unit price higher than the average unit price of the category for each category.")] - public void LinqToSqlCount13() - { - Northwind db = CreateDB(); - var categories = from p in db.Products - group p by p.CategoryID into g - select new - { - g, - ExpensiveProducts = from p2 in g - where (p2.UnitPrice > g.Average(p3 => p3.UnitPrice)) - select p2 - }; - - - var list = categories.ToList(); - Assert.IsTrue(list.Count > 0, "Got categorized products > 0"); - } -#endif - - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/ExsistIn_Any_All.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/ExsistIn_Any_All.cs deleted file mode 100644 index 65a964c1a8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/ExsistIn_Any_All.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class ExsistIn_Any_All : TestBase - { - [Test(Description = "Any - Simple. This sample uses Any to return only Customers that have no Orders.")] - public void LinqToSqlExists01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where !c.Orders.Any() - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - [Linq101SamplesModified("Strange casting, It seems like original northwind discontinued were boolean")] - [Test(Description = "Any - Conditional. This sample uses Any to return only Categories that have at least one Discontinued product.")] - public void LinqToSqlExists02() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders where o.OrderDetails.Any(od => od.Order.Customer.Country == "France") select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "All - Conditional. This sample uses All to return Customers whom all of their orders have been shipped to their own city or whom have no orders.")] - public void LinqToSqlExists03() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.Orders.All(o => o.ShipCity == c.City) - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/GroupBy_Having.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/GroupBy_Having.cs deleted file mode 100644 index 802e00161b..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/GroupBy_Having.cs +++ /dev/null @@ -1,223 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737930.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class GroupBy_Having : TestBase - { -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - Simple. This sample uses group by to partition Products by CategoryID.")] - public void LinqToSqlGroupBy01() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select g; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - -#if !INGRES -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - Max. This sample uses group by and Max to find the maximum unit price for each CategoryID.")] - public void LinqToSqlGroupBy02() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select new { g, MaxPrice = g.Max(p => p.UnitPrice) }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } -#endif - -#if !INGRES -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - Min. This sample uses group by and Min to find the minimum unit price for each CategoryID.")] - public void LinqToSqlGroupBy03() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select new { g, MinPrice = g.Min(p => p.UnitPrice) }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } -#endif - -#if !INGRES -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - Average. This sample uses group by and Average to find the average UnitPrice for each CategoryID.")] - public void LinqToSqlGroupBy04() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select new { g, AveragePrice = g.Average(p => p.UnitPrice) }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } -#endif - -#if !INGRES -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - Sum. This sample uses group by and Sum to find the total UnitPrice for each CategoryID.")] - public void LinqToSqlGroupBy05() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select new { g, TotalPrice = g.Sum(p => p.UnitPrice) }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } -#endif - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - Count. This sample uses group by and Count to find the number of Products in each CategoryID.")] - public void LinqToSqlGroupBy06() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select new { g, NumProducts = g.Count() }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Linq101SamplesModified("Strange short to boolean casting, perhaps in the original Northwind Product.Discontinued was a boolean property")] - [Test(Description = "GroupBy - Count - Conditional. This sample uses group by and Count to find the number of Products in each CategoryID that are discontinued.")] - public void LinqToSqlGroupBy07() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - select new { g, NumProducts = g.Count(p => Convert.ToBoolean(p.Discontinued)) }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupBy - followed by where. This sample uses a where clause after a group by clause to find all categories that have at least 10 products.")] - public void LinqToSqlGroupBy08() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - group p by p.CategoryID into g - where g.Count() >= 10 - select new { g, ProductCount = g.Count() }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Linq101SamplesModified("Strange syntactical strategy. Everybody aggree with this traduction?")] - [Test(Description = "GroupBy - Multiple Columns. This sample uses group by to group products by CategoryID and SupplierID.")] - public void LinqToSqlGroupBy09() - { - Northwind db = CreateDB(); - - var categories = from p in db.Products - let Key = new { p.CategoryID, p.SupplierID } - group p by Key into g - select new { g.Key, g }; - - var list = categories.ToList(); - Assert.IsTrue(list.Count > 0); - } - - -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Linq101SamplesModified("Strange syntactical strategy. Everybody aggree with this traduction?")] - [Test(Description = "GroupBy - Expression. This sample uses group by to return two sequences of products. The first sequence contains products with unit price greater than 10. The second sequence contains products with unit price less than or equal to 10.")] - public void LinqToSqlGroupBy10() - { - Northwind db = CreateDB(); - - var categories = from p in db.Products - let Key = new { Criterion = p.UnitPrice > 10 || p.UnitPrice == null } - group p by Key into g - select g; - - var list = categories.ToList(); - Assert.IsTrue(list.Count > 0); - - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Inheritance.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Inheritance.cs deleted file mode 100644 index 8c1028d686..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Inheritance.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Inheritance : TestBase - { - [Linq101SamplesModified("Original code did a reference to a newdb nortwhind that didn't exist, currently here uses db instead. Besides Contact type didn't exist")] - [Test(Description = "Simple. This sample returns all contacts where the city is London.")] - public void LinqToSqlInheritance01() - { - Northwind db = CreateDB(); - - Assert.Ignore(); - - //var cons = from c in db.Contacts - // select c; - - //var list = cons.ToList(); - //Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("Original code did a reference to a newdb nortwhind that didn't exist, currently here uses db instead. Besides Contact type didn't exist")] - [Test(Description = "OfType. This sample uses OfType to return all customer contacts.")] - public void LinqToSqlInheritance02() - { - Northwind db = CreateDB(); - - Assert.Ignore(); - - //var cons = from c in newDB.Contacts.OfType() - // select c; - - //var list = cons.ToList(); - //Assert.IsTrue(list.Count > 0); - - } - - [Linq101SamplesModified("This test could not be implemented since FullContact is not defined.")] - [Test(Description = "CType. This sample uses CType to return FullContact or null.")] - public void LinqToSqlInheritance04() - { - Northwind db = CreateDB(); - - Assert.Ignore(); - - //var cons = from c in newDB.Contacts - // select (FullContact)c; - - //var list = cons.ToList(); - //Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("This test could not be implemented since CustomerContact is not defined.")] - [Test(Description = "Cast. This sample uses a cast to retrieve customer contacts who live in London.")] - public void LinqToSqlInheritance05() - { - Northwind db = CreateDB(); - - Assert.Ignore(); - - //var cons = from c in newDB.Contacts - // where c.ContactType == "Customer" && (CustomerContact)c.City == "London" - // select c; - - //var list = cons.ToList(); - //Assert.IsTrue(list.Count > 0); - - - } - - [Linq101SamplesModified("Original code did a reference to a newdb nortwhind that didn't exist, currently here uses db instead. Besides Contact type didn't exist")] - [Test(Description = "UseAsDefault. This sample demonstrates that an unknown contact type will be automatically converted to the default contact type.")] - public void LinqToSqlInheritance06() - { - Northwind db = CreateDB(); - - Assert.Ignore(); - - //var contact = new Contact() { ContactType = null, CompanyName = "Unknown Company", City = "London", Phone = "333-444-5555" }; - //db.Contacts.Add(contact); - //db.SubmitChanges(); - - //var con = (from c in db.Contacts - // where c.ContactType == null - // select c).First(); - - - } - - [Linq101SamplesModified("Original code did a reference to a newdb nortwhind that didn't exist, currently here uses db instead. Besides Contact type didn't exist")] - [Test(Description = "Insert New Record. This sample demonstrates how to create a new shipper contact.")] - public void LinqToSqlInheritance07() - { - Northwind db = CreateDB(); - - Assert.Ignore(); - - //var ShipperContacts = from sc in newDB.Contacts.OfType() - // where sc.CompanyName = "Northwind Shipper" - // select sc; - - - //var nsc = new ShipperContact() { CompanyName = "Northwind Shipper", Phone = "(123)-456-7890" }; - //db.Contacts.Add(nsc); - //db.SubmitChanges(); - - - //ShipperContacts = from sc in db.Contacts.OfType() - // where sc.CompanyName == "Northwind Shipper" - // select sc; - - - //newDB.Contacts.Remove(nsc); - //newDB.SubmitChanges(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Insert_Update_Delete.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Insert_Update_Delete.cs deleted file mode 100644 index 0d7948af27..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Insert_Update_Delete.cs +++ /dev/null @@ -1,341 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using NUnit.Framework; -using Test_NUnit; -using Test_NUnit.Linq_101_Samples; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Insert_Update_Delete : TestBase - { - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Test(Description = "Insert - Simple. This sample uses the Add method to add a new Customer to the Customers Table object. The call to SubmitChanges persists this new Customer to the database.")] - public void LinqToSqlInsert01() - { - Northwind db = CreateDB(); - - Customer cust = db.Customers.FirstOrDefault(c => c.CustomerID == "MCSFT"); - if (cust != null) - { - try - { - db.Customers.DeleteOnSubmit(cust); - db.SubmitChanges(); - } - catch - { - Assert.Ignore("Inconclusive: the object already exist. And the couldn't be removed"); - } - } - - var q = from c in db.Customers - where c.Region == "WA" - select c; - - var newCustomer = new Customer - { - CustomerID = "MCSFT", - CompanyName = "Microsoft", - ContactName = "John Doe", - ContactTitle = "Sales Manager", - Address = "1 Microsoft Way", - City = "Redmond", - Region = "WA", - PostalCode = "98052", - Country = "USA", - Phone = "(425) 555-1234", - Fax = null - }; - - db.Customers.InsertOnSubmit(newCustomer); - db.SubmitChanges(); - - var reloadedCustomer = db.Customers.First(c => c.CustomerID == newCustomer.CustomerID); - - Assert.AreEqual(reloadedCustomer.CompanyName, newCustomer.CompanyName); - Assert.AreEqual(reloadedCustomer.ContactName, newCustomer.ContactName); - Assert.AreEqual(reloadedCustomer.ContactTitle, newCustomer.ContactTitle); - Assert.AreEqual(reloadedCustomer.Address, newCustomer.Address); - Assert.AreEqual(reloadedCustomer.City, newCustomer.City); - Assert.AreEqual(reloadedCustomer.Region, newCustomer.Region); - Assert.AreEqual(reloadedCustomer.PostalCode, newCustomer.PostalCode); - Assert.AreEqual(reloadedCustomer.Country, newCustomer.Country); - Assert.AreEqual(reloadedCustomer.Phone, newCustomer.Phone); - Assert.AreEqual(reloadedCustomer.Fax, newCustomer.Fax); - - db.Customers.DeleteOnSubmit(reloadedCustomer); - db.SubmitChanges(); - } - -#if !SQLITE -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Linq101SamplesModified("The original sample didn't compile, db2 Northwind context was used for nothing")] - [Test(Description = "Insert - 1-to-Many. This sample uses the Add method to add a new Category to the Categories table object, and a new Product to the Products Table object with a foreign key relationship to the new Category. The call to SubmitChanges persists these new objects and their relationships to the database.")] - public void LinqToSqlInsert02() - { - Northwind db = CreateDB(); - - var ds = new DataLoadOptions(); - - ds.LoadWith(c => c.Products); - db.LoadOptions = ds; - - var q = from c in db.Categories - where c.CategoryName == "Temp Widgets" - select c; - - var newCategory = new Category - { - CategoryName = "Temp Widgets", - Description = "Widgets are the customer-facing analogues to sprockets and cogs." - }; - - var newProduct = new Product - { - ProductName = "temp Blue Widget", - UnitPrice = 34.56m, - Category = newCategory - }; - db.Categories.InsertOnSubmit(newCategory); - db.SubmitChanges(); - - var reloadedProduct = db.Products.First(p => p.ProductID == newProduct.ProductID); - - Assert.AreEqual(reloadedProduct.ProductName, newProduct.ProductName); - Assert.AreEqual(reloadedProduct.UnitPrice, newProduct.UnitPrice); - Assert.AreEqual(reloadedProduct.Category.CategoryID, newProduct.CategoryID); - - var reloadedCategory = reloadedProduct.Category; - - Assert.AreEqual(reloadedCategory.CategoryName, newCategory.CategoryName); - Assert.AreEqual(reloadedCategory.Description, reloadedCategory.Description); - - db.Products.DeleteOnSubmit(newProduct); - db.Categories.DeleteOnSubmit(newCategory); - db.SubmitChanges(); - } -#endif - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Linq101SamplesModified("The original sample didn't compile, db2 Northwind context was used for nothing")] - [Test(Description = "Insert - Many-to-Many. This sample uses the Add method to add a new Employee to the Employees table object, a new Territory to the Territories table object, and a new EmployeeTerritory to the EmployeeTerritories table object with foreign key relationships to the new Employee and Territory. The call to SubmitChanges persists these new objects and their relationships to the database.")] - public void LinqToSqlInsert03() - { - Northwind db = CreateDB(); - - var ds = new DataLoadOptions(); - ds.LoadWith(p => p.EmployeeTerritories); - ds.LoadWith(p => p.Territory); - - db.LoadOptions = ds; - var q = from e in db.Employees where e.FirstName == "Nancy" select e; - - - if (db.Employees.Any(e => e.FirstName == "Test Kira" && e.LastName == "Test Smith")) - Assert.Ignore(); - - - var newEmployee = new Employee { FirstName = "Test Kira", LastName = "Test Smith" }; - var newTerritory = new Territory - { - TerritoryID = "12345", - TerritoryDescription = "Test Anytown", - Region = db.Regions.First() - }; - - var newEmployeeTerritory = new EmployeeTerritory { Employee = newEmployee, Territory = newTerritory }; - db.Employees.InsertOnSubmit(newEmployee); - db.Territories.InsertOnSubmit(newTerritory); - db.EmployeeTerritories.InsertOnSubmit(newEmployeeTerritory); - db.SubmitChanges(); - - // cleanup - db.EmployeeTerritories.DeleteOnSubmit(newEmployeeTerritory); - db.Territories.DeleteOnSubmit(newTerritory); - db.Employees.DeleteOnSubmit(newEmployee); - db.SubmitChanges(); - } - - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Test(Description = "Update - Simple. This sample uses SubmitChanges to persist an update made to a retrieved Customer object back to the database.")] - public void LinqToSqlInsert04() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.CustomerID == "ALFKI" - select c; - - Customer cust = (from c in db.Customers - where c.CustomerID == "ALFKI" - select c).First(); - - var oldContactTitle = cust.ContactTitle; - cust.ContactTitle = "Vice President"; - db.SubmitChanges(); - - Customer reloadedCustomer = db.Customers.First(c => c.CustomerID == cust.CustomerID); - Assert.AreEqual(reloadedCustomer.ContactTitle, cust.ContactTitle); - - // undo - reloadedCustomer.ContactTitle = oldContactTitle; - db.SubmitChanges(); - } - - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Test(Description = "Update - Multiple. This sample uses SubmitChanges to persist updates made to multiple retrieved Product objects back to the database.")] - public void LinqToSqlInsert05() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.CategoryID.Value == 1 - select p; - - foreach (var p in q) - p.UnitPrice += 1.0m; - - db.SubmitChanges(); - - - var reloadedProducts = db.Products.Where(p => p.CategoryID.Value == 1); - IEnumerator original = q.GetEnumerator(); - IEnumerator reloaded = reloadedProducts.GetEnumerator(); - - while (original.MoveNext() && reloaded.MoveNext()) - Assert.AreEqual(original.Current.UnitPrice, reloaded.Current.UnitPrice); - - Assert.AreEqual(original.MoveNext(), reloaded.MoveNext()); - - // undo - foreach (var p in q) - p.UnitPrice -= 1.0m; - db.SubmitChanges(); - } - - - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Test(Description = "Delete - Simple. This sample uses the Remove method to delete an OrderDetail from the OrderDetails Table object. The call to SubmitChanges persists this deletion to the database.")] - public void LinqToSqlInsert06() - { - Northwind db = CreateDB(); - - db.Connection.Open(); - db.Transaction = db.Connection.BeginTransaction(); - try - { - OrderDetail ode = db.OrderDetails.First(); - decimal orderID = ode.OrderID; - decimal productID = ode.ProductID; - - - OrderDetail order = (from c in db.OrderDetails - where c.OrderID == orderID && c.ProductID == productID - select c).First(); - - //what happened to Table.Remove()? - //The Add and AddAll methods are now InsertOnSubmit and InsertAllOnSubmit. The Remove and RemoveAll are now DeleteOnSubmit and DeleteAllOnSubmit. - //http://blogs.vertigo.com/personal/petar/Blog/Lists/Posts/Post.aspx?List=9441ab3e%2Df290%2D4a5b%2Da591%2D49a8226de525&ID=3 - - db.OrderDetails.DeleteOnSubmit(order); //formerly Remove(order); - db.SubmitChanges(); - - Assert.IsFalse(db.OrderDetails.Any(od => od.OrderID == orderID && od.ProductID == productID)); - } - finally - { - db.Transaction.Rollback(); - db.Transaction = null; - } - } - - [SetUp] - public void Setup_LinqToSqlInsert07() - { - //Northwind db = CreateDB(); - //var o = new Order { CustomerID = "WARTH", Employee = db.Employees.First() }; - //o.OrderDetails.Add(new OrderDetail { Discount = 0.1f, Quantity = 1, Product = db.Products.First(p => p.Discontinued) }); - //o.OrderDetails.Add(new OrderDetail { Discount = 0.2f, Quantity = 1, Product = db.Products.First(p => !p.Discontinued) }); - //db.Orders.InsertOnSubmit(o); - //db.SubmitChanges(); - } - - [Linq101SamplesModified("Console and ObjectDummper references deleted")] - [Test(Description = "Delete - One-to-Many. This sample uses the Remove method to delete an Order and Order Detail from the Order Details and Orders tables. First deleting Order Details and then deleting from Orders. The call to SubmitChanges persists this deletion to the database.")] - public void LinqToSqlInsert07() - { - Northwind db = CreateDB(); - - db.Connection.Open(); - db.Transaction = db.Connection.BeginTransaction(); - try - { - var orderDetails = - from o in db.OrderDetails - where o.Order.CustomerID == "WARTH" - select o; - - var order = - (from o in db.Orders - where o.CustomerID == "WARTH" - select o).FirstOrDefault(); - - if (!orderDetails.Any() || order == null) - Assert.Ignore("Preconditions"); - - - foreach (var od in orderDetails) - { - db.OrderDetails.DeleteOnSubmit(od); //formerly Remove(od); - } - - db.Orders.DeleteOnSubmit(order); //formerly Remove(order); - db.SubmitChanges(); - - Assert.IsFalse( - db.OrderDetails.Any(od => od.Order.Customer.CustomerID == "WARTH" && od.Order.EmployeeID == 3)); - Assert.IsFalse(db.Orders.Any(ord => ord.OrderID == order.OrderID)); - } - finally - { - db.Transaction.Rollback(); - db.Transaction = null; - } - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Join.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Join.cs deleted file mode 100644 index 9b798995f8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Join.cs +++ /dev/null @@ -1,233 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737929.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class Join : TestBase - { - [Test(Description = "This sample uses foreign key navigation in the from clause to select all orders for customers in London")] - public void LinqToSqlJoin01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - from o in c.Orders - where c.City == "London" - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0, "No rows returned"); - Assert.IsTrue(list[0].CustomerID != null, "Missing CustomerID"); - } - - [Test(Description = "This sample uses foreign key navigation in the from clause to select all orders for customers in London")] - public void LinqToSqlJoin01_b() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - from o in c.Orders - where c.City == "London" - select new { o.CustomerID, o.OrderID }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "This sample uses foreign key navigation in the where clause to filter for Products whose Supplier is in the USA that are out of stock")] - public void LinqToSqlJoin02() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.Supplier.Country == "USA" && p.UnitsInStock == 0 - select p; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "This sample uses foreign key navigation in the from clause to filter for employees in Seattle, and also list their territories")] - public void LinqToSqlJoin03() - { - //Logger.Write(Level.Information, "\nLinq.Join03()"); - Northwind db = CreateDB(); - - var q = from e in db.Employees - from et in e.EmployeeTerritories - where e.City == "Seattle" - select new { e.FirstName, e.LastName, et.Territory.TerritoryDescription }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "SelectMany - Self-Join. filter for pairs of employees where one employee reports to the other and where both employees are from the same City")] - public void LinqToSqlJoin04() - { - //Logger.Write(Level.Information, "\nLinq.Join04()"); - Northwind db = CreateDB(); - - var q = from e1 in db.Employees - from e2 in e1.Employees - where e1.City == e2.City - select new - { - FirstName1 = e1.FirstName, - LastName1 = e1.LastName, - FirstName2 = e2.FirstName, - LastName2 = e2.LastName, - e1.City - }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - foreach (var v in list) - { - Assert.IsTrue(v.LastName1 != v.LastName2, "Last names must be different"); - } - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "GroupJoin - Two-way join. This sample explictly joins two tables and projects results from both tables.")] - public void LinqToSqlJoin05() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - join o in db.Orders on c.CustomerID equals o.CustomerID into orders - select new { c.ContactName, OrderCount = orders.Count() }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "GroupJoin - Three-way join. This sample explictly joins three tables and projects results from each of them.")] - public void LinqToSqlJoin06() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - join o in db.Orders on c.CustomerID equals o.CustomerID into ords - join e in db.Employees on c.City equals e.City into emps - select new { c.ContactName, ords = ords.Count(), emps = emps.Count() }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupJoin - LEFT OUTER JOIN. This sample shows how to get LEFT OUTER JOIN by using DefaultIfEmpty(). The DefaultIfEmpty() method returns null when there is no Order for the Employee.")] - public void LinqToSqlJoin07() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - join o in db.Orders on e equals o.Employee into ords - from o in ords.DefaultIfEmpty() - select new { e.FirstName, e.LastName, Order = o }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupJoin - Projected let assignment. This sample projects a 'let' expression resulting from a join.")] - public void LinqToSqlJoin08() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - join o in db.Orders on c.CustomerID equals o.CustomerID into ords - let z = c.City + c.Country - from o in ords - select new { c.ContactName, o.OrderID, z }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "GroupJoin - Composite Key.This sample shows a join with a composite key.")] - public void LinqToSqlJoin09() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - from p in db.Products - join d in db.OrderDetails - on new { o.OrderID, p.ProductID } - equals new { d.OrderID, d.ProductID } - into details - from d in details - select new { o.OrderID, p.ProductID, d.UnitPrice }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - /// - /// This sample shows how to construct a join where one side is nullable and the other isn't. - /// - [Test(Description = "GroupJoin - Nullable\\Nonnullable Key Relationship")] - public void LinqToSqlJoin10() - { - //Microsoft Linq-to-SQL generated statement that we want to match: - //SELECT [t0].[OrderID], [t1].[FirstName] - //FROM [dbo].[Orders] AS [t0], [dbo].[Employees] AS [t1] - //WHERE [t0].[EmployeeID] = ([t1].[EmployeeID]) - - Northwind db = CreateDB(); - - var q = from o in db.Orders - join e in db.Employees on o.EmployeeID equals e.EmployeeID into emps - from e in emps - select new { o.OrderID, e.FirstName }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Linq101SamplesModifiedAttribute.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Linq101SamplesModifiedAttribute.cs deleted file mode 100644 index fa324cd803..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Linq101SamplesModifiedAttribute.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Test_NUnit.Linq_101_Samples -{ - [global::System.AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)] - sealed class Linq101SamplesModifiedAttribute : Attribute - { - readonly string description; - public Linq101SamplesModifiedAttribute(string description) - { - this.description = description; - } - - public string PositionalString { get; private set; } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Null.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Null.cs deleted file mode 100644 index f437e58a09..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Null.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737930.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class NullTest : TestBase - { - [Test] - public void Null() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.ReportsTo==null select e; - - List list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void NullableT_HasValue() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where !e.ReportsTo.HasValue select e; - - List list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void NullableT_Value() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.ReportsTo.HasValue - select new { e.FirstName, e.LastName, ReportsTo = e.ReportsTo.Value }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Null_EX1() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where null == e.ReportsTo - select e; - - List list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Null_EX2() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where null != e.ReportsTo - select e; - - List list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object Loading.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object Loading.cs deleted file mode 100644 index 976f76974e..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object Loading.cs +++ /dev/null @@ -1,174 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && MONO_STRICT - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Object_Loading : TestBase - { - [Test(Description = "This sample demonstrates how to use Including to request related data during the original query so that additional roundtrips to the database are not required later when navigating through the retrieved objects.")] - public void LinqToSqlObject01() - { - Northwind db = CreateDB(); - - var custs = from c in db.Customers - where c.City == "Marseille" - select c; - - foreach (var cust in custs) - foreach (var ord in cust.Orders) - { - Console.WriteLine("CustomerID {0} has an OrderID {1}.", cust.CustomerID, ord.OrderID); - } - - var list = custs.ToList(); - Assert.IsTrue(list.Count > 0); - - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Linq101SamplesModified("The original sample didn't compile, db2 Northwind context was used for nothing")] - [Test(Description = "This sample demonstrates how to use Including to request related data during the original query so that additional roundtrips to the database are not required later when navigating through the retrieved objects.")] - public void LinqToSqlObject02() - { - Northwind db = CreateDB(); - - - var ds = new DataLoadOptions(); - ds.LoadWith(p => p.Orders); - - db.LoadOptions = ds; - - var custs = from c in db.Customers - where c.City == "Marseille" - select c; - - foreach (var cust in custs) - foreach (var ord in cust.Orders) - Console.WriteLine("CustomerID {0} has an OrderID {1}.", cust.CustomerID, ord.OrderID); - - var list = custs.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "This sample demonstrates how navigating through relationships in retrieved objects can end up triggering new queries to the database if the data was not requested by the original query.")] - public void LinqToSqlObject03() - { - Northwind db = CreateDB(); - - var custs = from c in db.Customers - where c.City == "London" - select c; - - foreach (var cust in custs) - foreach (var ord in cust.Orders) - foreach (var orderDetail in ord.OrderDetails) - { - Console.WriteLine("CustomerID {0} has an OrderID {1} with ProductID {2} that has name {3}.", - cust.CustomerID, ord.OrderID, orderDetail.ProductID, orderDetail.Product.ProductName); - } - - var list = custs.ToList(); - Assert.IsTrue(list.Count > 0); - - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Linq101SamplesModified("The original sample didn't compile, db2 Northwind context was used for nothing")] - [Test(Description = "This sample demonstrates how to use Including to request related data during the original query so that additional roundtrips to the database are not required later when navigating through the retrieved objects.")] - public void LinqToSqlObject04() - { - var db = CreateDB(); - - var ds = new DataLoadOptions(); - ds.LoadWith(p => p.Orders); - ds.LoadWith(p => p.OrderDetails); - - db.LoadOptions = ds; - - var custs = from c in db.Customers - where c.City == "London" - select c; - - foreach (var cust in custs) - foreach (var ord in cust.Orders) - foreach (var orderDetail in ord.OrderDetails) - { - Console.WriteLine("CustomerID {0} has an OrderID {1} with ProductID {2} that has name {3}.", - cust.CustomerID, ord.OrderID, orderDetail.ProductID, orderDetail.Product.ProductName); - } - - var list = custs.ToList(); - Assert.IsTrue(list.Count > 0); - - - } - - [Test(Description = "This sample demonstrates how navigating through relationships in retrieved objects can result in triggering new queries to the database if the data was not requested by the original query.")] - public void LinqToSqlObject05() - { - var db = CreateDB(); - - var emps = from e in db.Employees select e; - - foreach (var emp in emps) - foreach (var man in emp.Employees) - Console.WriteLine("Employee {0} reported to Manager {1}.", emp.FirstName, man.FirstName); - - var list = emps.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - - [Test(Description = "This sample demonstrates how navigating through Link in retrieved objects can end up triggering new queries to the database if the data type is Link.")] - public void LinqToSqlObject06() - { - var db = CreateDB(); - - var emps = from c in db.Employees select c; - - foreach (var emp in emps) - Console.WriteLine("{0}", emp.Notes); - - var list = emps.ToList(); - Assert.IsTrue(list.Count > 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object_Identity.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object_Identity.cs deleted file mode 100644 index 32ed885235..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Object_Identity.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737931.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class Object_Identity : TestBase - { - - /// - /// This sample demonstrates how, upon executing the same query twice, you will receive a reference to the same object in memory each time. - /// - [Test(Description = "Object Caching - 1.")] - public void LinqToSqlObjectIdentity01() - { - Northwind db = CreateDB(); - - Customer cust1 = db.Customers.First(c => c.CustomerID == "BONAP"); - - Customer cust2 = (from c in db.Customers - where c.CustomerID == "BONAP" - select c).First(); - - bool isSameObject = Object.ReferenceEquals(cust1, cust2); - Assert.IsTrue(isSameObject); - Assert.IsTrue(cust1.CustomerID == "BONAP", "CustomerID must be BONAP - was: " + cust1.CustomerID); - } - - [Test(Description="Example 2 from msdn")] - public void MSDN_ObjectIdentity2() - { - //source: http://msdn2.microsoft.com/en-us/library/bb399376.aspx - Northwind db = CreateDB(); - - Customer cust1 = - (from cust in db.Customers - where cust.CustomerID == "BONAP" - select cust).First(); - - Customer cust2 = - (from ord in db.Orders - where ord.Customer.CustomerID == "BONAP" - select ord).First().Customer; - - bool isSameObject = Object.ReferenceEquals(cust1, cust2); - Assert.IsTrue(isSameObject); - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OptimisticConcurrence.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OptimisticConcurrence.cs deleted file mode 100644 index a4526cd543..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OptimisticConcurrence.cs +++ /dev/null @@ -1,423 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using nwind; -using Test_NUnit.Linq_101_Samples; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class OptimisticConcurrence:TestBase - { - [Test(Description="Get conflict information. This sample demonstrates how to retrieve the changes that lead to an optimistic concurrency exception.")] - - public void LinqToSqlOptimistic01() - { - Northwind db=CreateDb(); - - Console.WriteLine("YOU: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"); - var product = db.Products.First(p=>p.ProductID = 1); - Console.WriteLine("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"); - Console.WriteLine(); - Console.WriteLine("OTHER USER: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"); - // Open a second connection to the database to simulate another user - // who is going to make changes to the Products table - - var otherUser_db = Northwind(My.Settings.NORTHWINDConnectionString1) With {.Log = db.Log}; - var otherUser_product = otherUser_db.Products.First(p=>p.ProductID = 1); - otherUser_product.UnitPrice = 999.99D; - otherUser_product.UnitsOnOrder = 10; - otherUser_db.SubmitChanges(); - Console.WriteLine("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"); - Console.WriteLine("YOU (continued): ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"); - product.UnitPrice = 777.77D; - - var conflictOccurred = False; - try{ - db.SubmitChanges(ConflictMode.ContinueOnConflict) - catch(ChangeConflictException c) - { - Console.WriteLine("* * * OPTIMISTIC CONCURRENCY EXCEPTION * * *") - For Each aConflict In db.ChangeConflicts - var prod = CType(aConflict.Object, Product) - Console.WriteLine("The conflicting product has ProductID {0}", prod.ProductID) - Console.WriteLine() - Console.WriteLine("Conflicting members:") - Console.WriteLine() - For Each memConflict In aConflict.MemberConflicts - var name = memConflict.Member.Name - var yourUpdate = memConflict.CurrentValue.ToString() - var original = memConflict.OriginalValue.ToString() - var theirUpdate = memConflict.DatabaseValue.ToString() - If (memConflict.IsModified) Then - - Console.WriteLine("//{0}// was updated from {1} to {2} while you updated it to {3}", _ - name, original, theirUpdate, yourUpdate) - Else - Console.WriteLine("//{0}// was updated from {1} to {2}, you did not change it.", _ - name, original, theirUpdate) - End If - Console.WriteLine() - Next - conflictOccurred = True - Next - - Console.WriteLine() - If (Not conflictOccurred) Then - - Console.WriteLine("* * * COMMIT SUCCESSFUL * * *") - Console.WriteLine("Changes to Product 1 saved.") - End If - Console.WriteLine("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ") - - ResetProducts() // clean up - } -} - - - -[Test(Description="Resolve conflicts: Overwrite current values. This sample demonstrates how to automatically resolve concurrency conflicts. The //overwrite current values// option writes the new database values to the client objects.")] - -public void LinqToSqlOptimistic02() - { - Northwind db=CreateDb(); - - - var otherUser_db = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - db.Log = null - - var product = db.Products.First(p=>p.ProductID = 1) - Console.WriteLine("You retrieve the product 1, it costs {0}", product.UnitPrice) - Console.WriteLine("There are {0} units in stock, {1} units on order", product.UnitsInStock, product.UnitsOnOrder) - Console.WriteLine() - - Console.WriteLine("Another user changes the price to 22.22 and UnitsInStock to 22") - var otherUser_product = otherUser_db.Products.First(p=>p.ProductID = 1) - otherUser_product.UnitPrice = 22.22D - otherUser_product.UnitsInStock = 22 - otherUser_db.SubmitChanges() - - Console.WriteLine("You set the price of product 1 to 1.01 and UnitsOnOrder to 11") - product.UnitPrice = 1.01D - product.UnitsOnOrder = 11 - Try - Console.WriteLine("You submit") - Console.WriteLine() - db.SubmitChanges() - Catch c As ChangeConflictException - WriteConflictDetails(db.ChangeConflicts) // write changed objects / members to console - Console.WriteLine() - Console.WriteLine("Resolve by overwriting current values") - db.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues) - db.SubmitChanges() - End Try - - Console.WriteLine() - var dbResult = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - var result = dbResult.Products.First(p=>p.ProductID = 1) - Console.WriteLine("Now product 1 has price={0}, UnitsInStock={1}, UnitsOnOrder={2}", _ - result.UnitPrice, result.UnitsInStock, result.UnitsOnOrder) - Console.WriteLine() - ResetProducts() // clean up -} - - - -[Test(Description="Resolve conflicts: Keep current values. This sample demonstrates how to automatically resolve concurrency conflicts. The //keep current values// option changes everything to the values of this client.")] -public void LinqToSqlOptimistic03() - { - Northwind db=CreateDb(); - - var otherUser_db = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - db.Log = null - - var Prod = db.Products.First(p=>p.ProductID = 1) - Console.WriteLine("You retrieve the product 1, it costs {0}", Prod.UnitPrice) - Console.WriteLine("There are {0} units in stock, {1} units on order", Prod.UnitsInStock, Prod.UnitsOnOrder) - Console.WriteLine() - - Console.WriteLine("Another user changes the price to 22.22 and UnitsInStock to 22") - var otherUser_product = otherUser_db.Products.First(p=>p.ProductID = 1) - otherUser_product.UnitPrice = 22.22D - otherUser_product.UnitsInStock = 22 - otherUser_db.SubmitChanges() - - Console.WriteLine("You set the price of product 1 to 1.01 and UnitsOnOrder to 11") - Prod.UnitPrice = 1.01D - Prod.UnitsOnOrder = 11 - Try - Console.WriteLine("You submit") - Console.WriteLine() - db.SubmitChanges() - Catch c As ChangeConflictException - WriteConflictDetails(db.ChangeConflicts) // write changed objects / members to console - Console.WriteLine() - Console.WriteLine("Resolve by keeping current values") - db.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues) - db.SubmitChanges() - End Try - Console.WriteLine() - var dbResult = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - var result = dbResult.Products.First(p=>p.ProductID = 1) - Console.WriteLine("Now product 1 has price={0}, UnitsInStock={1}, UnitsOnOrder={2}", _ - result.UnitPrice, result.UnitsInStock, result.UnitsOnOrder) - Console.WriteLine() - ResetProducts() // clean up -} - - - -[Test(Description="Resolve conflicts: Keep changes. This sample demonstrates how to automatically resolve concurrency conflicts. The //keep changes// option keeps all changes from the current user and merges changes from other users if the corresponding field was not changed by the current user.")] - -public void LinqToSqlOptimistic04() - { - Northwind db=CreateDb(); - - - var otherUser_db = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - db.Log = null - - var prod = db.Products.First(p=>p.ProductID = 1) - Console.WriteLine("You retrieve the product 1, it costs {0}", prod.UnitPrice) - Console.WriteLine("There are {0} units in stock, {1} units on order", prod.UnitsInStock, prod.UnitsOnOrder) - Console.WriteLine() - - Console.WriteLine("Another user changes the price to 22.22 and UnitsInStock to 22") - var otherUser_product = otherUser_db.Products.First(p=>p.ProductID = 1) - otherUser_product.UnitPrice = 22.22D - otherUser_product.UnitsInStock = 22 - otherUser_db.SubmitChanges() - - Console.WriteLine("You set the price of product 1 to 1.01 and UnitsOnOrder to 11") - prod.UnitPrice = 1.01D - prod.UnitsOnOrder = 11D - Try - Console.WriteLine("You submit") - Console.WriteLine() - db.SubmitChanges() - Catch c As ChangeConflictException - WriteConflictDetails(db.ChangeConflicts) //write changed objects / members to console - Console.WriteLine() - Console.WriteLine("Resolve by keeping changes") - db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges) - db.SubmitChanges() - End Try - Console.WriteLine() - var dbResult = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - var result = dbResult.Products.First(p=>p.ProductID = 1) - Console.WriteLine("Now product 1 has price={0}, UnitsInStock={1}, UnitsOnOrder={2}", _ - result.UnitPrice, result.UnitsInStock, result.UnitsOnOrder) - Console.WriteLine() - ResetProducts() // clean up -} - - - -[Test(Description="Custom resolve rule. Demonstrates using MemberConflict.Resolve to write a custom resolve rule.")] - -public void LinqToSqlOptimistic05() - { - Northwind db=CreateDb(); - - - var otherUser_db = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - db.Log = null - - var prod = db.Products.First(p=>p.ProductID = 1) - Console.WriteLine("You retrieve the product 1, it costs {0}", prod.UnitPrice) - Console.WriteLine("There are {0} units in stock, {1} units on order", prod.UnitsInStock, prod.UnitsOnOrder) - Console.WriteLine() - - Console.WriteLine("Another user changes the price to 22.22 and UnitsOnOrder to 2") - var otherUser_product = otherUser_db.Products.First(p=>p.ProductID = 1) - otherUser_product.UnitPrice = 22.22D - otherUser_product.UnitsOnOrder = 2 - otherUser_db.SubmitChanges() - - Console.WriteLine("You set the price of product 1 to 1.01 and UnitsOnOrder to 11") - prod.UnitPrice = 1.01D - prod.UnitsOnOrder = 11 - var needsSubmit = True - While needsSubmit - Try - Console.WriteLine("You submit") - Console.WriteLine() - needsSubmit = False - db.SubmitChanges() - Catch c As ChangeConflictException - needsSubmit = True - WriteConflictDetails(db.ChangeConflicts) // write changed objects / members to console - Console.WriteLine() - Console.WriteLine("Resolve by higher price / order") - For Each conflict In db.ChangeConflicts - conflict.Resolve(RefreshMode.KeepChanges) - For Each memConflict In conflict.MemberConflicts - If (memConflict.Member.Name = "UnitPrice") Then - //always use the highest price - var theirPrice = CDec(memConflict.DatabaseValue) - var yourPrice = CDec(memConflict.CurrentValue) - memConflict.Resolve(Math.Max(theirPrice, yourPrice)) - ElseIf (memConflict.Member.Name = "UnitsOnOrder") Then - //always use higher order - var theirOrder = CShort(memConflict.DatabaseValue) - var yourOrder = CShort(memConflict.CurrentValue) - memConflict.Resolve(Math.Max(theirOrder, yourOrder)) - End If - Next - Next - End Try - End While - var dbResult = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - var result = dbResult.Products.First(p=>p.ProductID = 1) - Console.WriteLine("Now product 1 has price={0}, UnitsOnOrder={1}", _ - result.UnitPrice, result.UnitsOnOrder) - Console.WriteLine() - ResetProducts() //clean up -} - - - -[Test(Description="Submit with FailOnFirstConflict. Submit(FailOnFirstConflict) throws an Optimistic Concurrency Exception when the first conflict is detected. Only one exception is handled at a time, you have to submit for each conflict.")] - -public void LinqToSqlOptimistic06() - { - Northwind db=CreateDb(); - - - db.Log = null - var otherUser_db = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - - //you load 3 products - var prod() = db.Products.OrderBy(p=>p.ProductID).Take(3).ToArray() - For i = 0 To 2 - Console.WriteLine("You retrieve the product {0}, it costs {1}", i + 1, prod(i).UnitPrice) - Next - //other user changes these products - var otherUserProd() = otherUser_db.Products.OrderBy(p=>p.ProductID).Take(3).ToArray() - For i = 0 To 2 - var otherPrice = (i + 1) * 111.11D - Console.WriteLine("Other user changes the price of product {0} to {1}", i + 1, otherPrice) - otherUserProd(i).UnitPrice = otherPrice - Next - otherUser_db.SubmitChanges() - Console.WriteLine("Other user submitted changes") - - //you change your loaded products - For i = 0 To 2 - var yourPrice = (i + 1) * 1.01D - Console.WriteLine("You set the price of product {0} to {1}", i + 1, yourPrice) - prod(i).UnitPrice = yourPrice - Next - - // submit - var needsSubmit = True - While needsSubmit - Try - Console.WriteLine("======= You submit with FailOnFirstConflict =======") - needsSubmit = False - db.SubmitChanges(ConflictMode.FailOnFirstConflict) - Catch c As ChangeConflictException - For Each conflict In db.ChangeConflicts - - DescribeConflict(conflict) //write changes to console - Console.WriteLine("Resolve conflict with KeepCurrentValues") - conflict.Resolve(RefreshMode.KeepCurrentValues) - Next - needsSubmit = True - End Try - End While - var dbResult = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - For i = 0 To 2 - //Creating a temporary since this will be used in a lambda - var tmp = i - var result = dbResult.Products.First(p=>p.ProductID = tmp + 1) - Console.WriteLine("Now the product {0} has price {1}", i + 1, result.UnitPrice) - Next - ResetProducts() //clean up -} -c - - - - -[Test(Description="Submit with ContinueOnConflict. Submit(ContinueOnConflict) collects all concurrency conflicts and throws an exception when the last conflict is detected.\r\nAll conflicts are handled in one catch statement. It is still possible that another user updated the same objects before this update, so it is possible that another Optimistic Concurrency Exception is thrown which would need to be handled again.")] - -public void LinqToSqlOptimistic07() - { - Northwind db=CreateDb(); - - db.Log = null - var otherUser_db = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - - // you load 3 products - var prod() = db.Products.OrderBy(p=>p.ProductID).Take(3).ToArray() - For i = 0 To 2 - Console.WriteLine("You retrieve the product {0}, it costs {1}", i + 1, prod(i).UnitPrice) - Next - // other user changes these products - var otherUserProd() = otherUser_db.Products.OrderBy(p=>p.ProductID).Take(3).ToArray() - For i = 0 To 2 - var otherPrice = (i + 1) * 111.11D - Console.WriteLine("Other user changes the price of product {0} to {1}", i + 1, otherPrice) - otherUserProd(i).UnitPrice = otherPrice - Next - otherUser_db.SubmitChanges() - Console.WriteLine("Other user submitted changes") - - // you change your loaded products - For i = 0 To 2 - var yourPrice = (i + 1) * 1.01D - Console.WriteLine("You set the price of product {0} to {1}", i + 1, yourPrice) - prod(i).UnitPrice = yourPrice - Next - // submit - var needsSubmit = True - While needsSubmit - Try - Console.WriteLine("======= You submit with ContinueOnConflict =======") - needsSubmit = False - db.SubmitChanges(ConflictMode.ContinueOnConflict) - Catch c As ChangeConflictException - For Each conflict In db.ChangeConflicts - DescribeConflict(conflict) // write changes to console - Console.WriteLine("Resolve conflict with KeepCurrentValues") - conflict.Resolve(RefreshMode.KeepCurrentValues) - Next - needsSubmit = True - End Try - End While - var dbResult = New NorthwindDataContext(My.Settings.NORTHWINDConnectionString1) - For i = 0 To 2 - var tmp = i - var result = dbResult.Products.First(p=>p.ProductID = tmp + 1) - Console.WriteLine("Now the product {0} has price {1}", i + 1, result.UnitPrice) - Next - - ResetProducts() //clean up -} - - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OrderBy.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OrderBy.cs deleted file mode 100644 index 7741d0a443..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/OrderBy.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class OrderBy : TestBase - { - [Test(Description = "OrderBy - Simple. This sample uses orderby to sort Employees by hire date.")] - public void LinqToSqlOrderBy01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - orderby e.HireDate - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "OrderBy - With where. This sample uses where and orderby to sort Orders shipped to London by freight.")] - public void LinqToSqlOrderBy02() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.ShipCity == "Marseille" - orderby o.Freight - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "OrderByDescending. This sample uses orderby to sort Products by unit price from highest to lowest.")] - public void LinqToSqlOrderBy03() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - orderby p.UnitPrice descending - select p; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "ThenBy. This sample uses a compound orderby to sort Customers by city and then contact name.")] - public void LinqToSqlOrderBy04() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - orderby c.City, c.ContactName - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "ThenByDescending. This sample uses orderby to sort Orders from EmployeeID 1 by ship-to country, and then by freight from highest to lowest.")] - public void LinqToSqlOrderBy05() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.EmployeeID == 1 - orderby o.ShipCountry, o.Freight descending - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "OrderBy - Group by. This sample uses Orderby, Max and Group by to find the Products that have the highest unit price in each category, and sorts the group by category id.")] - public void LinqToSqlOrderBy06() - { - Northwind db = CreateDB(); - - var categories = from p in db.Products - orderby p.CategoryID - group p by p.CategoryID into Group - select new - { - Group, - MostExpensiveProducts = - from p2 in Group - where p2.UnitPrice == Group.Max(p3 => p3.UnitPrice) - select p2 - }; - - var list = categories.ToList(); - Assert.IsTrue(list.Count > 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Paging.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Paging.cs deleted file mode 100644 index b070f49c28..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Paging.cs +++ /dev/null @@ -1,139 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - class CustomerComparer : IEqualityComparer - { - public bool Equals(Customer x, Customer y) - { - if (object.ReferenceEquals (x, y)) - return true; - return x.Address == y.Address && - x.City == y.City && - x.CompanyName == y.CompanyName && - x.ContactName == y.ContactName && - x.ContactTitle == y.ContactTitle && - x.Country == y.Country && - x.CustomerID == y.CustomerID && - x.Fax == y.Fax && - x.Phone == y.Phone && - x.PostalCode == y.PostalCode && - x.Region == y.Region && - true; // TODO: compare Orders: x.Orders.SequenceEqual(y.Orders, new OrderComparer()); - } - - public int GetHashCode(Customer obj) - { - throw new NotImplementedException(); - } - } - - [TestFixture] - public class Paging : TestBase - { - [Test(Description = "Paging - Index. This sample uses the Skip and Take operators to do paging by skipping the first 50 records and then returning the next 10, thereby providing the data for page 6 of the Products table.")] - public void LinqToSqlPaging01() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - orderby c.ContactName - select c) - .Skip(1) - .Take(2); - - var expected = new[]{ - new Customer { - Address = "Heerstr. 22", - City = "Leipzig", - CompanyName = "Morgenstern Gesundkost", - ContactName = "Alexander Feuer", - ContactTitle = "Marketing Assistant", - Country = "Germany", - CustomerID = "MORGK", - Fax = null, - Phone = "0342-023176", - PostalCode = "04179", - Region = null - }, - new Customer { - Address = "Avda. de la Constitución 2222", - City = "México D.F.", - CompanyName = "Ana Trujillo Emparedados y helados", - ContactName = "Ana Trujillo", - ContactTitle = "Owner", - Country = "Mexico", - CustomerID = "ANATR", - Fax = "(5) 555-3745", - Phone = "(5) 555-4729", - PostalCode = "05021", - Region = null - }, - }; -// The ordering of space characters depends on collation so -// lets jst check if the query worked on PostgreSQL. -#if !POSTGRES - Assert.IsTrue(expected.SequenceEqual(q, new CustomerComparer())); -#else - Assert.IsTrue(q.ToList().Count == 2); -#endif - } - - [Test(Description = "Paging - Ordered Unique Key. This sample uses a where clause and the take operator to do paging by, first filtering to get only the ProductIDs above 50 (the last ProductID from page 5), then ordering by ProductID, and finally taking the first 10 results, thereby providing the data for page 6 of the Products table. Note that this method only works when ordering by a unique key.")] - public void LinqToSqlPaging02() - { - Northwind db = CreateDB(); - - var q = (from p in db.Products - where p.ProductID > 3 - orderby p.ProductID - select p) - .Take(10); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "Paging - Index. This sample uses the Skip and Take operators to do paging by skipping the first 50 records and then returning the next 10, thereby providing the data for page 6 of the Products table.")] - public void LinqToSqlPaging03() - { - // This is basically LinqToSqlPaging01() without the `orderby` clause. - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select c) - .Skip(1) - .Take(2); - - // The ordering depends on collation so - // lets jst check if the query worked as ~expected. - Assert.IsTrue(q.ToList().Count == 2); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Select_Distinct.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Select_Distinct.cs deleted file mode 100644 index d7abe49e05..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Select_Distinct.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Select_Distinct : TestBase - { - [Test(Description = "select - Simple. This sample uses select to return a sequence of just the Customers' contact names.")] - public void LinqToSqlSelect01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - select c.ContactName; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "select - Anonymous Type 1. This sample uses select and anonymous types to return a sequence of just the Customers' contact names and phone numbers.")] - public void LinqToSqlSelect02() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - select new { c.ContactName, c.Phone }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "select - Anonymous Type 2. This sample uses select and anonymous types to return a sequence of just the Employees' names and phone numbers, with the FirstName and LastName fields combined into a single field, 'Name', and the HomePhone field renamed to Phone in the resulting sequence.")] - public void LinqToSqlSelect03() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "select - Anonymous Type 3. This sample uses select and anonymous types to return a sequence of all Products' IDs and a calculated value called HalfPrice which is set to the Product's UnitPrice divided by 2.")] - public void LinqToSqlSelect04() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - select new { p.ProductID, HalfPrice = p.UnitPrice / 2 }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("c# does not have that syntax capability. Symple projection instead")] - [Test(Description = "select - Named Type. This sample uses SELECT and a known type to return a sequence of employees' names.")] - public void LinqToSqlSelect06() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select new { FirstName = e.FirstName, LastName = e.LastName }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "select - Filtered. This sample uses select and where to return a sequence of just the London Customers' contact names.")] - public void LinqToSqlSelect07() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.City == "London" - select c.ContactName; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "select - Shaped. This sample uses select and anonymous types to return a shaped subset of the data about Customers.")] - public void LinqToSqlSelect08() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - select new - { - c.CustomerID, - CompanyInfo = new { c.CompanyName, c.City, c.Country }, - ContactInfo = new { c.ContactName, c.ContactTitle } - }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "select - Nested. This sample uses nested queries to return a sequence of all orders containing their OrderID, a subsequence of the items in the order where there is a discount, and the money saved if shipping is not included.")] - public void LinqToSqlSelect09() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - select new - { - o.OrderID, - DiscountedProducts = (from od in o.OrderDetails - where od.Discount == 0 - select od), - FreeShippingDiscount = o.Freight - }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "Distinct. This sample uses Distinct to select a sequence of the unique cities that have Customers.")] - public void LinqToSqlSelect10() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select c.City).Distinct(); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/String_Date_functions.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/String_Date_functions.cs deleted file mode 100644 index dac2b61614..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/String_Date_functions.cs +++ /dev/null @@ -1,325 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737930.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class String_Date_functions : TestBase - { - [Test(Description = "String Concatenation. This sample uses the & operator to concatenate string fields and string literals in forming the Customers' calculated Location value")] - public void LinqToSqlString01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - select new { c.CustomerID, Location = c.City + ", " + c.Country }; - - //bool foundBerlin = false; - foreach (var v in q) - { - if (v.Location == "Berlin, Germany") - { - //foundBerlin = true; - return; - } - } - Assert.Fail("Expected to find location 'Berlin, Germany'"); - } - - [Test(Description = "String.Length. This sample uses the Length property to find all Products whose name is shorter than 10 characters.")] - public void LinqToSqlString02() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.ProductName.Length < 10 - select p; - - List prods = q.ToList(); - Assert.IsTrue(prods.Count > 0, "Expected some products"); - } - - [Test(Description = "String.Contains(substring).This sample uses the Contains method to find all Customers whose contact name contains 'Anders'.")] - public void LinqToSqlString03() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.ContactName.Contains("Anders") - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.IndexOf(substring). This sample uses the IndexOf method to find the first instance of a space in each Customer's contact name.")] - public void LinqToSqlString04() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - select new { c.ContactName, SpacePos = c.ContactName.IndexOf(" ") }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.StartsWith(prefix). This sample uses the StartsWith method to find Customers whose contact name starts with 'Maria'.")] - public void LinqToSqlString05() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.ContactName.StartsWith("Maria") - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.EndsWith(suffix). This sample uses the StartsWith method to find Customers whose contact name ends with 'Anders'.")] - public void LinqToSqlString06() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.ContactName.EndsWith("Anders") - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Substring(start). This sample uses the Substring method to return Product names starting from the fourth letter.")] - public void LinqToSqlString07() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - select p.ProductName.Substring(3); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Substring(start, length). This sample uses the Substring method to find Employees whose home phone numbers have '555' as the seventh through ninth digits.")] - public void LinqToSqlString08() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HomePhone.Substring(5, 3) == "555" - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.ToUpper(). This sample uses the ToUpper method to return Employee names where the last name has been converted to uppercase.")] - public void LinqToSqlString09() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select new { LastName = e.LastName.ToUpper(), e.FirstName }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - - [Test(Description = "String.ToLower(). This sample uses the ToLower method to return Category names that have been converted to lowercase.")] - public void LinqToSqlString10() - { - Northwind db = CreateDB(); - - var q = from c in db.Categories - select c.CategoryName.ToLower(); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Trim(). This sample uses the Trim method to return the first five digits of Employee home phone numbers, with leading and trailing spaces removed.")] - public void LinqToSqlString11() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where !(" "+(e.LastName)).Trim().Contains(" ") - select e.LastName; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Insert(pos, str). This sample uses the Insert method to return a sequence of employee phone numbers that have a ) in the fifth position, inserting a : after the ).")] - public void LinqToSqlString12() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HomePhone.Substring(4, 1) == ")" - select e.HomePhone.Insert(5, ":"); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Remove(start). This sample uses the Insert method to return a sequence of employee phone numbers that have a ) in the fifth position, removing all characters starting from the tenth character.")] - public void LinqToSqlString13() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HomePhone.Substring(4, 1) == ")" - select e.HomePhone.Remove(9); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Remove(start, length). This sample uses the Insert method to return a sequence of employee phone numbers that have a ) in the fifth position, removing the first six characters.")] - public void LinqToSqlString14() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HomePhone.Substring(4, 1) == ")" - select e.HomePhone.Remove(0, 6); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "String.Replace(find, replace). This sample uses the Replace method to return a sequence of Supplier information where the Country field has had UK replaced with United Kingdom and USA replaced with United States of America.")] - public void LinqToSqlString15() - { - Northwind db = CreateDB(); - - var q = from s in db.Suppliers - select new { s.CompanyName, Country = s.Country.Replace("UK", "United Kingdom").Replace("USA", "United States of America") }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test(Description = "DateTime.Year. This sample uses the DateTime's Year property to find Orders placed in 1997.")] - public void LinqToSqlString16() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.OrderDate.Value.Year == 1996 - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test(Description = "DateTime.Month. This sample uses the DateTime's Month property to find Orders placed in December.")] - public void LinqToSqlString17() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.OrderDate.Value.Month == 10 - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test(Description = "DateTime.Day. This sample uses the DateTime's Day property to find Orders placed on the 31st day of the month.")] - public void LinqToSqlString18() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.OrderDate.Value.Day == 16 - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test(Description = "DateTime.Seconds. This sample uses the DateTime's Day property to find Orders placed on the 31st day of the month.")] - public void LinqToSqlString19() - { - Northwind db = CreateDB(); - - var q = (from o in db.Orders - where o.OrderDate.Value.Second == 16 - select o).ToList(); - - - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Top_Bottom.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Top_Bottom.cs deleted file mode 100644 index 1ead5ffb98..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Top_Bottom.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - /// - /// Source: http://msdn2.microsoft.com/en-us/vbasic/bb737940.aspx - /// manually translated from VB into C#. - /// - [TestFixture] - public class Top_Bottom : TestBase - { - - [Test(Description="This sample uses Take to select the first 5 Employees hired.")] - public void LinqToSqlTop01() - { - Northwind db = CreateDB(); - - var q = (from e in db.Employees - orderby e.HireDate select e). Take(5); - - List list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - // The .Skip() method won't work on Ingres as it does not support the OFFSET clause - // but it's on the roadmap... -#if !INGRES - [Test(Description = "This sample uses Skip to select all but the 10 most expensive Products.")] - public void LinqToSqlTop02() - { - Northwind db = CreateDB(); - - var q = (from p in db.Products - orderby p.UnitPrice descending - select p).Skip(4); - - List list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "This bug was submitted by Andrus")] - public void LinqToSqlTop03_Ex_Andrus() - { - Northwind db = CreateDB(); - - var q = db.Customers.Skip(3).Take(5); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } -#endif - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/UnionAll_Union_Intersect.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/UnionAll_Union_Intersect.cs deleted file mode 100644 index e27185c12a..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/UnionAll_Union_Intersect.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class UnionAll_Union_Intersect : TestBase - { - [Test(Description = "Concat - Simple. This sample uses Concat to return a sequence of all Customer and Employee phone/fax numbers.")] - public void LinqToSqlUnion01() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers select c.Phone).Concat( - from c in db.Customers select c.Fax).Concat( - from e in db.Employees select e.HomePhone); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "Concat - Compound. This sample uses Concat to return a sequence of all Customer and Employee name and phone number mappings.")] - public void LinqToSqlUnion02() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select new { Name = c.CompanyName, Phone = c.Phone }) - .Concat(from e in db.Employees - select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone }); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "Union. This sample uses Union to return a sequence of all countries that either Customers or Employees are in.")] - public void LinqToSqlUnion03() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select c.Country).Union(from e in db.Employees - select e.Country); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "Intersect. This sample uses Intersect to return a sequence of all countries that both Customers and Employees live in.")] - public void LinqToSqlUnion04() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select c.Country).Intersect(from e in db.Employees - select e.Country); - - var list = q.ToList(); - if (list.Count == 0) - Assert.Ignore("Please check test validity"); - //Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "Except. This sample uses Except to return a sequence of all countries that Customers live in but no Employees live in.")] - public void LinqToSqlUnion05() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select c.Country).Except(from e in db.Employees select e.Country); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Views.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Views.cs deleted file mode 100644 index 3ff9583da1..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Views.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Views : TestBase - { - [Linq101SamplesModified("Original db didn't has Invoices table so. It has been used Employees instead")] - [Test(Description = "Query - Anonymous Type. This sample uses SELECT and WHERE to return a sequence of invoices where shipping city is London.")] - public void LinqToSqlView01() - { - Northwind db = CreateDB(); - - var q = from i in db.Employees - where i.City == "Seattle" - select new { i.Country, i.Address, i.City, i.BirthDate }; - - var list = q.ToList(); - if (list.Count == 0) - Assert.Ignore("Please check test"); // the test fails on SQLite - Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("Original db didn't has Invoices table so. It has been used Employees instead")] - [Test(Description = "Query - Negative. Entities must have a mapped ID, but SqlMetal does not generate an ID for view by default.")] - public void LinqToSqlView02() - { - Northwind db = CreateDB(); - - try - { - var q = from i in db.Employees - where i.City == "London" - select i; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - catch (Exception ex) - { - Console.WriteLine("{0} : {1}", ex.GetType().ToString(), ex.Message); - } - } - - [Linq101SamplesModified("Original db didn't has Quarterly_Orders table so. It has been used Employees instead")] - [Test(Description = "Query - Identity mapping. This sample uses SELECT to query QuarterlyOrders.")] - public void LinqToSqlView03() - { - Northwind db = CreateDB(); - - var q = from qo in db.Employees - select qo; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Where.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Where.cs deleted file mode 100644 index 9783e3df05..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Linq_101_Samples/Where.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns Linq_101_Samples -#if MYSQL - namespace Test_NUnit_MySql.Linq_101_Samples -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP.Linq_101_Samples -#elif ORACLE - namespace Test_NUnit_Oracle.Linq_101_Samples -#elif POSTGRES - namespace Test_NUnit_PostgreSql.Linq_101_Samples -#elif SQLITE - namespace Test_NUnit_Sqlite.Linq_101_Samples -#elif INGRES - namespace Test_NUnit_Ingres.Linq_101_Samples -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict.Linq_101_Samples -#elif MSSQL - namespace Test_NUnit_MsSql.Linq_101_Samples -#elif FIREBIRD - namespace Test_NUnit_Firebird.Linq_101_Samples -#endif -{ - [TestFixture] - public class Where : TestBase - { - [Test(Description = "where - 1. This sample uses where to filter for Customers in London.")] - public void LinqToSqlWhere01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.City == "London" - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test(Description = "where - 2. This sample uses where to filter for Employees hired during or after 1994.")] - public void LinqToSqlWhere02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HireDate >= new DateTime(1994,1,1) - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("Strange casting, It seems like original northwind discontinued were boolean")] - [Test(Description = "where - 3. This sample uses where to filter for Products that have stock below their reorder level and are not discontinued.")] - public void LinqToSqlWhere03() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.UnitsInStock <= p.ReorderLevel || !Convert.ToBoolean(p.Discontinued)==true - select p; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("Strange casting, It seems like original northwind discontinued were boolean")] - [Test(Description = "where - 4. This sample uses WHERE to filter out Products that are either UnitPrice is greater than 10 or is discontinued.")] - public void LinqToSqlWhere04() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.UnitPrice > 10.0m || Convert.ToBoolean(p.Discontinued)==true - select p; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description="Where - 5. This sample calls WHERE twice to filter out Products that UnitPrice is greater than 10 and is discontinued.")] - public void LinqToSqlWhere05() - { - Northwind db = CreateDB(); - - var q = db.Products.Where(p => p.UnitPrice > 5.0m) - .Where(p => !Convert.ToBoolean(p.Discontinued)==true); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Linq101SamplesModified("Changed shipper table by Employee since some of our databases haven't got such table")] - [Test(Description = "First - Simple. This sample uses First to select the first Shipper in the table.")] - public void LinqToSqlWhere06() - { - Northwind db = CreateDB(); - Employee employee = db.Employees.First(); - } - - [Test(Description = "First - Element. This sample uses Take to select the first Customer with CustomerID 'BONAP'.")] - public void LinqToSqlWhere07() - { - Northwind db = CreateDB(); - - var cust = (from c in db.Customers - where c.CustomerID == "BONAP" - select c).Take(1); - - var list = cust.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test(Description = "First - Condition. This sample uses First to select an Order with freight greater than 10.00.")] - public void LinqToSqlWhere08() - { - Northwind db = CreateDB(); - var ord = (from o in db.Orders - where o.Freight > 10m - select o).First(); - - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/MetalTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/MetalTest.cs deleted file mode 100644 index bd01443ace..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/MetalTest.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using NUnit.Framework; - -namespace Test_NUnit_MySql -{ - [TestFixture] - public class MetalTest - { - static string GetSqlMetalPath() - { - string path = "../../../SqlMetal/bin/SqlMetal.exe"; - if (!File.Exists(path)) - throw new NUnit.Framework.IgnoreException("SqlMetal not found"); - return path; - } - - static string GetCompilerPath() - { - string windowsDir = Environment.GetEnvironmentVariable("SystemRoot"); - string frameworkDir = Path.Combine(windowsDir, "Microsoft.Net/Framework/v3.5"); - if (!Directory.Exists(frameworkDir)) - throw new NUnit.Framework.IgnoreException("Framework dir not found"); - - string cscExe = Path.Combine(frameworkDir, "csc.exe"); - if (!File.Exists(cscExe)) - throw new NUnit.Framework.IgnoreException("csc.exe not found in framework dir"); - return cscExe; - } - - [Test] - public void GenerateFromDbml() - { - //1. gather prerequisites (compiler, sqlmetal etc) - string cscExe = GetCompilerPath(); - string sqlMetal = GetSqlMetalPath(); - - //2. run SqlMetal to generate 'bin/Northwind_temp.cs' - string currDir = Directory.GetCurrentDirectory(); - string mysqlExampleDir = "../../../Example/DbLinq.Mysql.Example/nwind"; - bool ok = Directory.Exists(mysqlExampleDir); - string args1 = string.Format(" -provider=MySql -namespace:nwind -code:Northwind_temp.cs -sprocs {0}/Northwind_from_mysql.dbml" - , mysqlExampleDir); - - ProcessRunner p1 = new ProcessRunner(); - int sqlMetalExitCode = p1.Run(sqlMetal, args1, 5000); - Assert.IsTrue(sqlMetalExitCode == 0, "Got SqlMetal.exe error exit code " + sqlMetalExitCode); - - //3. make sure generated code compiles with 'bin/Northwind_temp.cs' - Directory.SetCurrentDirectory(".."); - string dependencies = @"/r:bin\nunit.framework.dll /r:bin\DbLinq.dll /r:bin\DbLinq.mysql.dll /r:bin\Mysql.data.dll"; - string cscArgs = @"/nologo /target:library /d:MYSQL /out:bin/SqlMetal_test.dll bin/Northwind_temp.cs ReadTest.cs WriteTest.cs TestBase.cs " - + dependencies; - - ProcessRunner p2 = new ProcessRunner(); - int cscExitCode = p2.Run(cscExe, cscArgs, 5000); - Console.Out.WriteLine("csc exitCode:" + cscExitCode + ", output: " + p2._stdout); - Assert.IsTrue(cscExitCode == 0, "csc.exe failed with exit code " + cscExitCode); - - Directory.SetCurrentDirectory(currDir); - } - - [Test] - public void GetHashCode_should_not_throw() - { - nwind.Customer customer = new nwind.Customer(); - - //bug: GetHashCode sometimes throws NullPointerException because of null _customerID - int hashCode = customer.GetHashCode(); - } - - #region helper class ProcessRunner - launches jobs, reads output - class ProcessRunner - { - delegate void StreamHandler(StreamReader s, bool isStdout); - - public string _stdout; - public string _stderr; - - public int Run(string exe, string args, int timeout) - { - ProcessStartInfo psi = new ProcessStartInfo(exe, args); - psi.RedirectStandardOutput = true; - psi.RedirectStandardError = true; - psi.UseShellExecute = false; - psi.CreateNoWindow = true; - Process p = Process.Start(psi); - new StreamHandler(readOutput).BeginInvoke(p.StandardOutput, true, null, null); - new StreamHandler(readOutput).BeginInvoke(p.StandardError, false, null, null); - bool exitOk = p.WaitForExit(timeout); - Assert.IsTrue(exitOk, "Expected app to exit cleanly"); - return p.ExitCode; - } - - void readOutput(StreamReader reader, bool isStdout) - { - try - { - string result = reader.ReadToEnd(); - - if (isStdout) - _stdout = result; - else - _stderr = result; - } - catch (Exception ex) - { - Trace.WriteLine("read failed: " + ex); - } - } - } - #endregion - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Ing.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Ing.cs deleted file mode 100644 index bdc198a3c8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Ing.cs +++ /dev/null @@ -1,51 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -#region HEADER -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using Test_NUnit_Ingres; -#endregion - -namespace Test_NUnit_Ingres -{ -#region HEADER - /// - /// when a problem crops up in NUnit, you can convert the project from DLL into EXE, - /// and debug into the offending method. - /// -#endregion - class Program2 - { - static void Main() - { - // The current test status can be found at - // http://linq.to/db/Tests - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Mysql.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Mysql.cs deleted file mode 100644 index 2bcf0dce12..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Mysql.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region HEADER -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Data.Linq; -using Test_NUnit_MySql; - -#endregion - -namespace Test_NUnit -{ -#region HEADER - /// - /// when a problem crops up in NUnit, you can convert the project from DLL into EXE, - /// and debug into the offending method. - /// -#endregion - class Program2 - { - static void Main() - { - //new ReadTest_GroupBy().G01_SimpleGroup_Count(); - //new ReadTest_GroupBy().G05_Group_Into(); - //new ReadTest().D04_SelectProducts_OrderByName(); - //new Join().Join_Laurent(); - //new ReadTest().C2_SelectPenId(); - //new ReadTest_Complex().D2_ArrayContains(); - //new ReadTest_Complex().O3_OperatorUnion(); - //new StoredProcTest().SPB_GetOrderCount_Having(); - //new ReadTest().E2_ConnectionClosedTest(); - //new ReadTest_AllTypes().AT1_SelectRow(); - //new ReadTest_Operands().H1_SelectConcat(); - //rc.F11_ConcatString(); - new WriteTest().G5_SetFieldToNull(); - //new WriteTest_BulkInsert().BI01_InsertProducts(); - //new NullTest().NullableT_Value(); - //new Count_Sum_Min_Max_Avg().LiqnToSqlCount02(); - //new Top_Bottom().LinqToSqlTop03_Ex_Andrus(); - //new Object_Identity().LinqToSqlObjectIdentity01(); - //new String_Date_functions().LinqToSqlString02(); - } - } - -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Pg.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Pg.cs deleted file mode 100644 index 6828b833df..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2Pg.cs +++ /dev/null @@ -1,43 +0,0 @@ -#region HEADER -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using Test_NUnit_PostgreSql; -#endregion - -namespace Test_NUnit -{ -#region HEADER - /// - /// when a problem crops up in NUnit, you can convert the project from DLL into EXE, - /// and debug into the offending method. - /// -#endregion - class Program2 - { - static void Main() - { - //new ReadTest().A1_PingDatabase(); - //new ReadTest().D10_Products_LetterP_Desc(); - //new StoredProcTest().SP3_GetOrderCount_SelField(); - //new ReadTest_GroupBy().G04_OrderSumByCustomerID(); - //new ReadTest_Operands().H1_SelectConcat(); - //ReadTest_Complex rc = new ReadTest_Complex(); - //rc.F5_AvgProductId(); - //rc.F11_ConcatString(); - //rc.F12_ConcatString_2(); - //rc.F2_ProductCount_Clause(); - //rc.F2_ProductCount_Projected(); - //rc.F3_MaxProductId(); - //new ReadTest_Complex().F3_MaxProductId(); - //new ReadTest().D09_Products_LetterP_Take5(); - //new ReadTest().D7_OrdersFromLondon_Alt(); - //new WriteTest().G2_DeleteTest(); - new WriteTest().G1_InsertProduct(); - } - } - //class Column { public string table_name; } - //class Table { public string table_name; } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2SQLite.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2SQLite.cs deleted file mode 100644 index c22a9705f6..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program2SQLite.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region HEADER -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Data.Linq; -using Test_NUnit_Sqlite; -#endregion - -namespace Test_NUnit -{ -#region HEADER - /// - /// when a problem crops up in NUnit, you can convert the project from DLL into EXE, - /// and debug into the offending method. - /// -#endregion - class Program2 - { - static void Main() - { - //new ReadTest_GroupBy().G01_SimpleGroup_Count(); - //new ReadTest_GroupBy().G05_Group_Into(); - //new ReadTest().C1_SelectProducts(); - //new Join().LinqToSqlJoin10(); - //new ReadTest_Complex().F10_DistinctCity(); - //new StoredProcTest().SPB_GetOrderCount_Having(); - //new ReadTest().D08_Products_Take5(); - //new ReadTest_AllTypes().AT1_SelectRow(); - //new ReadTest_Operands().H1_SelectConcat(); - //rc.F11_ConcatString(); - new WriteTest().G8_DeleteTableWithStringPK(); - //new WriteTest_BulkInsert().BI01_InsertProducts(); - //new NullTest().NullableT_Value(); - //new Count_Sum_Min_Max_Avg().LiqnToSqlCount02(); - //new Top_Bottom().LinqToSqlTop03_Ex_Andrus(); - //new Object_Identity().LinqToSqlObjectIdentity01(); - //new String_Date_functions().LinqToSqlString01(); - } - } - -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program3Ora.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program3Ora.cs deleted file mode 100644 index 9628053bb8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Program3Ora.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -#if ODP -using Test_NUnit_OracleODP; -#else -using Test_NUnit_Oracle; -#endif - -namespace Test_NUnit -{ - /// - /// when a problem crops up in NUnit, - /// you can convert the project from DLL into EXE, - /// and debug into the offending method. - /// - class Program2 - { - static void Main() - { - //new ReadTest_Complex().F1_ProductCount(); - //new ReadTest().D04_SelectProducts_OrderByName(); - //new Linq_101_Samples.AdvancedTest().LinqToSqlAdvanced06(); - //new WriteTest().G2_DeleteTest(); - //new WriteTest().G1_InsertProduct(); - new ReadTest().C1_SelectProducts(); - } - } - //class Column { public string table_name; } - //class Table { public string table_name; } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Properties/AssemblyInfo.cs deleted file mode 100644 index c552d999b1..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Test_NUnit")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Test_NUnit")] -[assembly: AssemblyCopyright("Copyright ? 2005")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM componenets. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("0cae4ddc-abd5-4c2a-96c0-918ed1d736e4")] diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest.cs deleted file mode 100644 index efde50c3dc..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest.cs +++ /dev/null @@ -1,1215 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using NUnit.Framework; -using Test_NUnit; -using System.Data.Linq.Mapping; - -using nwind; - -#if MONO_STRICT -using DataLinq = System.Data.Linq; -#else -using DataLinq = DbLinq.Data.Linq; -#endif - -namespace nwind -{ - interface IHasAddress - { - string Address { get; set; } - } - - partial class Customer : IHasAddress - { - } - - partial class Employee : IHasAddress - { - } -} - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTest : TestBase - { - #region Tests 'A' check for DB being ready - - - /// - /// in NUnit, tests are executed in alpha order. - /// We want to start by checking access to DB. - /// - [Test] - public void A1_PingDatabase() - { - Northwind db = CreateDB(); - bool pingOK = db.DatabaseExists(); - //bool pingOK = Conn.Ping(); //Schildkroete - Ping throws NullRef if conn is not open - Assert.IsTrue(pingOK, "Pinging database"); - } - - - -#if !DEBUG && (MSSQL && L2SQL) - // L2SQL doesn't support 'SELECT' queries in DataContext.ExecuteCommand(). - [Explicit] -#endif - [Test] - public void A3_ProductsTableHasPen() - { - Northwind db = CreateDB(); - //string sql = @"SELECT count(*) FROM linqtestdb.Products WHERE ProductName='Chai'"; - string sql = @"SELECT count(*) FROM [Products] WHERE [ProductName]='Chai'"; - long iResult = db.ExecuteCommand(sql); - //long iResult = base.ExecuteScalar(sql); - Assert.AreEqual(iResult, 1L, "Expecting one Chai in Products table, got:" + iResult + " (SQL:" + sql + ")"); - } - - [Test] - public void A4_SelectSingleCustomer() - { - Northwind db = CreateDB(); - - // Query for a specific customer - var cust = db.Customers.Single(c => c.CompanyName == "Around the Horn"); - Assert.IsNotNull(cust, "Expected one customer 'Around the Horn'."); - var id = 1; - var prod = db.Products.Single(p => p.ProductID == id); - Assert.AreEqual("Chai", prod.ProductName); - id = 2; - prod = db.Products.Single(p => p.ProductID == id); - Assert.AreEqual("Chang", prod.ProductName); - } - - [Test] - public void A5_SelectSingleOrDefault() - { - Northwind db = CreateDB(); - - // Query for a specific customer - var cust = db.Customers.SingleOrDefault(c => c.CompanyName == "Around the Horn"); - Assert.IsNotNull(cust, "Expected one customer 'Around the Horn'."); - -#if false - var id = "ALFKI"; - cust = db.Customers.SingleOrDefault(c => c.CustomerID == id); - Assert.AreEqual("ALFKI", cust.CustomerID); - id = "BLAUS"; - cust = db.Customers.SingleOrDefault(c => c.CustomerID == id); - Assert.AreEqual("BLAUS", cust.CustomerID); - id = "DNE"; - cust = db.Customers.SingleOrDefault(c => c.CustomerID == id); // Does Not Exist - Assert.IsNull(cust); - - id = "ALFKI"; - cust = db.Customers.SingleOrDefault(c => c.CustomerID == id); - Assert.AreEqual("ALFKI", cust.CustomerID); - id = "BLAUS"; - cust = db.Customers.SingleOrDefault(c => c.CustomerID == id); -#endif - cust = GetCustomerById(db, "ALFKI"); - Assert.AreEqual("ALFKI", cust.CustomerID); - - cust = GetCustomerById(db, "BLAUS"); - Assert.AreEqual("BLAUS", cust.CustomerID); - - cust = GetCustomerById(db, "DNE"); - Assert.IsNull(cust); - - cust = GetCustomerById(db, "ALFKI"); - Assert.AreEqual("ALFKI", cust.CustomerID); - - cust = GetCustomerById(db, "BLAUS"); - Assert.AreEqual("BLAUS", cust.CustomerID); - } - - - private static Customer GetCustomerById(Northwind db, string id) - { - return db.Customers.SingleOrDefault(c => c.CustomerID == id); - } - - - [Test] - public void A6_ConnectionOpenTest() - { - Northwind db = CreateDB(System.Data.ConnectionState.Open); - Product p1 = db.Products.Single(p => p.ProductID == 1); - Assert.IsTrue(p1.ProductID == 1); - } - - [Test] - public void A7_ConnectionClosedTest() - { - Northwind db = CreateDB(System.Data.ConnectionState.Closed); - Product p1 = db.Products.Single(p => p.ProductID == 1); - Assert.IsTrue(p1.ProductID == 1); - } - - [Test] - public void A8_SelectSingleOrDefault_QueryCacheDisabled() - { - Northwind db = CreateDB(); -#if !MONO_STRICT - db.QueryCacheEnabled = true; -#endif - - // Query for a specific customer - var cust = db.Customers.SingleOrDefault(c => c.CompanyName == "Around the Horn"); - Assert.IsNotNull(cust, "Expected one customer 'Around the Horn'."); - - cust = GetCustomerById(db, "ALFKI"); - Assert.AreEqual("ALFKI", cust.CustomerID); - - cust = GetCustomerById(db, "BLAUS"); - Assert.AreEqual("BLAUS", cust.CustomerID); - - cust = GetCustomerById(db, "DNE"); - Assert.IsNull(cust); - - cust = GetCustomerById(db, "ALFKI"); - Assert.AreEqual("ALFKI", cust.CustomerID); - - cust = GetCustomerById(db, "BLAUS"); - Assert.AreEqual("BLAUS", cust.CustomerID); - } - - #endregion - - //TODO: group B, which checks AllTypes - - #region Tests 'C' do plain select - no aggregation - [Test] - public void C1_SelectProducts() - { - Northwind db = CreateDB(); - - var q = from p in db.Products select p; - List products = q.ToList(); - int productCount = products.Count; - AssertHelper.Greater(productCount, 0, "Expected some products, got none"); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void C2_SelectPenId() - { - Northwind db = CreateDB(); - - var q = from p in db.Products where p.ProductName == "Chai" select p.ProductID; - var productIDs = q.ToList(); - int productCount = productIDs.Count; - Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount); - } - - [Test] - public void C2b_SelectPenId() - { - Northwind db = CreateDB(); - - var pen = "Chai"; - var q = from p in db.Products where p.ProductName == pen select p.ProductID; - var productIDs = q.ToList(); - int productCount = productIDs.Count; - Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount); - } - - [Test] - public void C3_SelectPenIdName() - { - Northwind db = CreateDB(); - - var q = from p in db.Products - where p.ProductName == "Chai" - select new { ProductId = p.ProductID, Name = p.ProductName }; - int count = 0; - //string penName; - foreach (var v in q) - { - Assert.AreEqual(v.Name, "Chai", "Expected ProductName='Chai'"); - count++; - } - Assert.AreEqual(count, 1, "Expected one pen, got count=" + count); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void C4_CountWithOrderBy() - { - Northwind db = CreateDB(); - var q = (from p in db.Products - orderby p.ProductID - select p).Count(); - Assert.IsTrue(q > 0); - } - - [Test] - public void C5_ConstantProperty() - { - Northwind db = CreateDB(); - var res = from o in db.Orders - select new { test = 1 }; - var list = res.ToList(); - Assert.AreEqual(db.Orders.Count(), list.Count); - } - - - [Test] - public void C6_NullParentEmplyee() - { - //this should generate a LEFT JOIN statement, but currently does not. - Northwind db = CreateDB(); - - var query = from e in db.Employees - select new - { - Name = e.FirstName, - ReportsTo = e.ReportsToEmployee.FirstName - }; - - var list = query.ToList(); - // PC patch: I get 4 results... - Assert.IsTrue(list.Count >= 3); - } - - - - [Test] - public void C7_CaseInsensitiveSubstringSearch() - { - Northwind db = CreateDB(); - - string search = "HERKKU"; - var query = db.Customers.Where(d => d.CompanyName.ToUpper() - .Contains(search)); - - var list = query.ToList(); - Assert.AreEqual(1, list.Count); - } - - - /// - /// from http://www.agilior.pt/blogs/pedro.rainho/archive/2008/04/11/4271.aspx - /// -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "Using LIKE operator from linq query")] - public void C7B_LikeOperator() - { - Northwind db = CreateDB(); - - //this used to read "Like(HU%F)" but I don't think we have that company. - - var query = (from c in db.Customers - where System.Data.Linq.SqlClient.SqlMethods.Like(c.CompanyName, "Alfre%") - select c).ToList(); - var list = query.ToList(); - Assert.AreEqual(1, list.Count); - } - - [Test] - public void C8_SelectPenByLocalVariable() - { - Northwind db = CreateDB(); - string pen = "Chai"; - - var q = from p in db.Products - where (p.ProductName == pen) - select p; - var productIDs = q.ToList(); - int productCount = productIDs.Count; - Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount); - } - - [Test] - public void C9_OrderByLeftJoin() - { - Northwind db = CreateDB(); - var q = from p in db.Orders - orderby p.Customer.City - select p; - - int count = q.ToList().Count(); - int ordcount = db.Orders.Count(); - Assert.AreEqual(ordcount, count); - } - - [Test] - public void C10_ConstantPredicate() - { - Northwind db = CreateDB(); - var q = from p in db.Customers - where true - select p; - - int count = q.ToList().Count; - Assert.AreEqual(count, db.Customers.Count()); - } - - [Test] - public void C10b_ConstantPredicate() - { - Northwind db = CreateDB(); - var q = from p in db.Customers - where false - select p; - - int count = q.Count(); - Assert.AreEqual(count, 0); - } - - [Test] - public void C10c_ConstantPredicate() - { - Northwind db = CreateDB(); - var q = from p in db.Customers - where (p.Address.StartsWith("A") && false) - select p; - - int count = q.Count(); - Assert.AreEqual(count, 0); - } - - [Test] - public void C10d_ConstantPredicate() - { - Northwind db = CreateDB(); - var q = from p in db.Customers - where (p.Address.StartsWith("A") || true) - select p; - - int count = q.Count(); - Assert.AreEqual(count, db.Customers.Count()); - } - - [Test] - public void C10e_ConstantPredicate() - { - Northwind db = CreateDB(); - var q = from p in db.Customers - where (p.Address.StartsWith("A") || false) - select p; - - int count = q.Count(); - AssertHelper.Less(count, db.Customers.Count()); - } - - [Test] - public void C10f_ConstantPredicate() - { - Northwind db = CreateDB(); - var q = from p in db.Customers - where (p.Address.StartsWith("A") && true) - select p; - - int count = q.Count(); - AssertHelper.Less(count, db.Customers.Count()); - } - - [Test] - public void C11_SelectProductsDiscontinued() - { - Northwind db = CreateDB(); - var q = from p in db.Products -#if INGRES - where p.Discontinued == "Y" -#else - where p.Discontinued == true -#endif - select p.ProductID; - - var productIDs = q.ToList(); - int productCount = productIDs.Count; - Assert.AreEqual(productCount, 8, "Expected eight products discontinued, got count=" + productCount); - } - - [Explicit] - [Test] - public void C12_SelectEmployee_MultiJoinWithWhere() - { - Northwind db = CreateDB(); - var q = from t in db.Territories - join l in db.EmployeeTerritories on t.TerritoryID equals l.TerritoryID - join e in db.Employees on l.EmployeeID equals e.EmployeeID - where t.RegionID > 3 - select e; - /* Note that written this way it work, but it's not always possible. - var q = from t in db.Territories.Where(t => t.RegionID > 3) - join l in db.EmployeeTerritories on t.TerritoryID equals l.TerritoryID - join e in db.Employees on l.EmployeeID equals e.EmployeeID - select e; - */ - var employeeCount = q.Count(); - Assert.AreEqual(4, employeeCount, "Expected for employees, got count=" + employeeCount); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException), ExpectedMessage="Data context options cannot be modified after results have been returned from a query.")] - public void C13_Changing_ObjectTrackingEnabled2False() - { - Northwind db = CreateDB(); - var q = from t in db.Territories - select t; - var territoryCount = q.FirstOrDefault(); - db.ObjectTrackingEnabled = false; - } - - [Test] - [ExpectedException(typeof(InvalidOperationException), ExpectedMessage = "Data context options cannot be modified after results have been returned from a query.")] - public void C14_Changing_DeferredLoadingEnabled2False() - { - Northwind db = CreateDB(); - var q = from t in db.Territories - select t; - var territoryCount = q.FirstOrDefault(); - db.DeferredLoadingEnabled = false; - } - - [Test] - [ExpectedException(typeof(InvalidOperationException), ExpectedMessage = "Object tracking is not enabled for the current data context instance.")] - public void C15_SubmitChanges_DeferredLoadingEnabled_False() - { - Northwind db = CreateDB(); - db.ObjectTrackingEnabled = false; - var q = from t in db.Territories - select t; - var territoryCount = q.Count(); - db.SubmitChanges(); - } - - [Test] - public void C16_GettingProperty_DeferredLoadingEnabled2False() - { - Northwind db = CreateDB(); - db.DeferredLoadingEnabled = false; - var q = from t in db.Territories - select t; - Territory territory = q.FirstOrDefault(); - Assert.IsNotNull(territory); - Assert.IsNull(territory.Region); - } - - [Test] - public void C17_GettingProperty_ObjectTrackingEnabled2False() - { - Northwind db = CreateDB(); - db.ObjectTrackingEnabled = false; - var q = from t in db.Territories - select t; - Territory territory = q.FirstOrDefault(); - Assert.IsNotNull(territory); - Assert.IsNull(territory.Region); - } - - [Test] - public void C18_GettingProperty_LazyLoaded() - { - Northwind db = CreateDB(); - var q = from t in db.Territories - select t; - Territory territory = q.FirstOrDefault(); - Assert.IsNotNull(territory); - Assert.IsNotNull(territory.Region); - } - - [Test] - public void C19_SelectEmployee_Fluent() - { - Northwind db = CreateDB(); - var q = db.GetTable() - .Join(db.GetTable(), t => t.TerritoryID, l => l.TerritoryID, (t, l) => l) - .Join(db.GetTable().Where(e => e.EmployeeID > 0), l => l.EmployeeID, e => e.EmployeeID, (l, e) => e); - var employeeCount = q.Count(); - AssertHelper.Greater(employeeCount, 0, "Expected any employees, got count=" + employeeCount); - } - - /// - /// Test the use of DbLinq as a QueryObject - /// http://www.martinfowler.com/eaaCatalog/queryObject.html - /// - [Test] - public void C20_SelectEmployee_DbLinqAsQueryObject() - { - Northwind db = CreateDB(); - IQueryable allEmployees = db.GetTable(); - - allEmployees = filterByNameOrSurnameContains(db, allEmployees, "an"); - - allEmployees = filterByTerritoryName(db, allEmployees, "Neward"); - - Assert.AreEqual(1, allEmployees.Count()); - } - - [Test] - public void C21_SelectEmployee_DbLinqAsQueryObjectWithOrderCount() - { - Northwind db = CreateDB(); - IQueryable allEmployees = db.GetTable(); - - allEmployees = filterByOrderCountGreaterThan(db, allEmployees, 50); - allEmployees = filterByNameOrSurnameContains(db, allEmployees, "an"); - - allEmployees = filterByTerritoryNames(db, allEmployees, "Neward", "Boston", "Wilton"); - - int employeesCount = allEmployees.ToList().Count; - - Assert.AreEqual(employeesCount, allEmployees.Count()); - } - - - private IQueryable filterByOrderCountGreaterThan(Northwind db, IQueryable allEmployees, int minimumOrderNumber) - { - return from e in allEmployees.Where(e => e.Orders.Count > minimumOrderNumber) select e; - } - - private IQueryable filterByNameOrSurnameContains(Northwind db, IQueryable allEmployees, string namePart) - { - return from e in allEmployees.Where(e => e.FirstName.Contains(namePart) || e.LastName.Contains(namePart)) select e; - } - - private IQueryable filterByTerritoryName(Northwind db, IQueryable allEmployees, string territoryName) - { - IQueryable territoryRequired = db.GetTable().Where(t => t.TerritoryDescription == territoryName); - var q = territoryRequired - .Join(db.GetTable(), t => t.TerritoryID, l => l.TerritoryID, (t, l) => l) - .Join(allEmployees, l => l.EmployeeID, e => e.EmployeeID, (l, e) => e); - return q; - } - - private IQueryable filterByTerritoryNames(Northwind db, IQueryable allEmployees, params string[] territoryNames) - { - IQueryable territoryRequired = db.GetTable().Where(t => territoryNames.Contains(t.TerritoryDescription)); - var q = territoryRequired - .Join(db.GetTable(), t => t.TerritoryID, l => l.TerritoryID, (t, l) => l) - .Join(allEmployees, l => l.EmployeeID, e => e.EmployeeID, (l, e) => e); - return q; - } - - [Test] - public void C22_SelectEmployee_GetCommandTextWithNoFilter() - { - Northwind db = CreateDB(); - IQueryable allEmployees = db.GetTable(); - var commandText = db.GetCommand(allEmployees).CommandText; - Assert.IsNotNull(commandText); - } - - [Test] - public void C23_SelectEmployees() - { - Northwind db = CreateDB(); - var allEmployees = db.GetTable(); - int count = 0; - foreach (var emp in allEmployees) - { - ++count; - } - Assert.AreEqual(9, count); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - public void C24_SelectEmployee_DbLinqAsQueryObjectWithExceptAndImage() - { - // This fail becouse Employee contains a ndata, ndata is not comparable - // and EXCEPT make a distinct on DATA - Northwind db = CreateDB(); - IQueryable allEmployees = db.GetTable(); - - var toExclude = filterByOrderCountGreaterThan(db, allEmployees, 50); - allEmployees = filterByNameOrSurnameContains(db, allEmployees, "a").Except(toExclude); - - string commandText = db.GetCommand(allEmployees).CommandText; - - int employeesCount = allEmployees.ToList().Count; - - Assert.AreEqual(employeesCount, allEmployees.Count()); - } - - [Test] - public void C25_SelectViaInterface() - { - var db = CreateDB(); - var c = MatchAddress(db.Customers, "ignoreme").FirstOrDefault(); - Assert.IsNotNull(c); - var e = MatchAddress(db.Employees, "ignoreme").FirstOrDefault(); - Assert.IsNotNull(e); - } - - private static IEnumerable MatchAddress(IQueryable query, string searchValue) - where T : IHasAddress - { - var lookups = query.OrderByDescending(v => v.Address.Length); - return lookups; - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void C26_SelectWithNestedMethodCall() - { - var db = CreateDB(); - var s = "param"; - var q = from e in db.Employees select new - { - BackName = e.LastName + ", " + e.FirstName, - StaticName = GetStaticName(e), - InstanceName= GetInstanceName(e, s, "constant"), - Territories = e.EmployeeTerritories.ToList(), - }; - var actual = q.ToList(); - var expected = new[]{ - new { - BackName = "Davolio, Nancy", - StaticName = "Nancy Davolio [Hired: 1992-05-01]", - InstanceName = "Nancy Davolio [Home Phone: (206) 555-9857]", - TerritoryCount = 2, - }, - new { - BackName = "Fuller, Andrew", - StaticName = "Andrew Fuller [Hired: 1992-08-14]", - InstanceName = "Andrew Fuller [Home Phone: (206) 555-9482]", - TerritoryCount = 7, - }, - new { - BackName = "Leverling, Janet", - StaticName = "Janet Leverling [Hired: 1992-04-01]", - InstanceName = "Janet Leverling [Home Phone: (206) 555-3412]", - TerritoryCount = 4, - }, - new { - BackName = "Peacock, Margaret", - StaticName = "Margaret Peacock [Hired: 1993-05-03]", - InstanceName = "Margaret Peacock [Home Phone: (206) 555-8122]", - TerritoryCount = 3, - }, - new { - BackName = "Buchanan, Steven", - StaticName = "Steven Buchanan [Hired: 1993-10-17]", - InstanceName = "Steven Buchanan [Home Phone: (71) 555-4848]", - TerritoryCount = 7, - }, - new { - BackName = "Suyama, Michael", - StaticName = "Michael Suyama [Hired: 1993-10-17]", - InstanceName = "Michael Suyama [Home Phone: (71) 555-7773]", - TerritoryCount = 5, - }, - new { - BackName = "King, Robert", - StaticName = "Robert King [Hired: 1994-01-02]", - InstanceName = "Robert King [Home Phone: (71) 555-5598]", - TerritoryCount = 10, - }, - new { - BackName = "Callahan, Laura", - StaticName = "Laura Callahan [Hired: 1994-03-05]", - InstanceName = "Laura Callahan [Home Phone: (206) 555-1189]", - TerritoryCount = 4, - }, - new { - BackName = "Dodsworth, Anne", - StaticName = "Anne Dodsworth [Hired: 1994-11-15]", - InstanceName = "Anne Dodsworth [Home Phone: (71) 555-4444]", - TerritoryCount = 7, - }, - }; - Assert.AreEqual(expected.Length, actual.Count); - for (int i = 0; i < expected.Length; ++i) - { - Assert.AreEqual(expected[i].BackName, actual[i].BackName); - Assert.AreEqual(expected[i].StaticName, actual[i].StaticName); - Assert.AreEqual(expected[i].InstanceName, actual[i].InstanceName); - Assert.AreEqual(expected[i].TerritoryCount, actual[i].Territories.Count); - } - } - - static string GetStaticName(Employee e) - { - return e.FirstName + " " + e.LastName + " [Hired: " + - (e.HireDate.HasValue ? e.HireDate.Value.ToString("yyyy-MM-dd") : "") + "]"; - } - - string GetInstanceName(Employee e, string a, string b) - { - return e.FirstName + " " + e.LastName + " [Home Phone: " + e.HomePhone.ToString() + "]"; - } - - [Test] - public void C27_SelectEntitySet() - { - // Debugger.Break(); - var db = CreateDB(); - var q = from e in db.Employees - orderby e.EmployeeID - select new - { - e.Orders - }; - var expectedOrderCounts = new[]{ - 123, // Nancy Davolio - 96, // Andrew Fuller - 127, // Janet Leverling - 156, // Margaret Peacock - 42, // Steven Buchanan - 67, // Michael Suyama - 72, // Robert King - 104, // Laura Callahan - 43, // Anne Dodsworth - }; - int c = 0; - foreach (var e in q) - { - Assert.AreEqual(expectedOrderCounts[c], e.Orders.Count); - ++c; - } - Assert.AreEqual(expectedOrderCounts.Length, c); - } - - [Test] - public void C28_SelectEntityRef() - { - var db = CreateDB(); - var emp = db.Employees.Single(e => e.EmployeeID == 1); - Assert.IsNotNull(emp.ReportsToEmployee); - Assert.AreEqual(emp.ReportsTo.Value, emp.ReportsToEmployee.EmployeeID); - } - #endregion - - #region region D - select first or last - calls IQueryable.Execute instead of GetEnumerator - [Test] - public void D01_SelectFirstPenID() - { - Northwind db = CreateDB(); - - var q = from p in db.Products where p.ProductName == "Chai" select p.ProductID; - var productID = q.First(); - AssertHelper.Greater(productID, 0, "Expected penID>0, got " + productID); - } - - - /// - /// Reported by pwy.mail in http://code.google.com/p/dblinq2007/issues/detail?id=67 - /// - [Test] - public void D01b_SelectFirstOrDefaultCustomer() - { - Northwind db = CreateDB(); - var q = - from c in db.Customers - select c; - - Customer customer = q.FirstOrDefault(); - Assert.IsNotNull(customer.CustomerID); - } - - - [Test] - public void D02_SelectFirstPen() - { - Northwind db = CreateDB(); - - var q = from p in db.Products where p.ProductName == "Chai" select p; - Product pen = q.First(); - Assert.IsNotNull(pen, "Expected non-null Product"); - } - -#if !DEBUG && MSSQL - // L2SQL: System.NotSupportedException : The query operator 'Last' is not supported. - [Explicit] -#endif - [Test] - public void D03_SelectLastPenID() - { - Northwind db = CreateDB(); - - var q = from p in db.Products where p.ProductName == "Chai" select p.ProductID; - var productID = q.Last(); - AssertHelper.Greater(productID, 0, "Expected penID>0, got " + productID); - } - -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void D04_SelectProducts_OrderByName() - { - Northwind db = CreateDB(); - - var q = from p in db.Products orderby p.ProductName select p; - string prevProductName = null; - foreach (Product p in q) - { - if (prevProductName == p.ProductName && p.ProductName.StartsWith("temp_")) - continue; //skip temp rows - - if (prevProductName != null) - { - //int compareNames = prevProductName.CompareTo(p.ProductName); - int compareNames = string.Compare(prevProductName, p.ProductName, stringComparisonType); - AssertHelper.Less(compareNames, 0, "When ordering by names, expected " + prevProductName + " to come after " + p.ProductName); - } - prevProductName = p.ProductName; - } - //AssertHelper.Greater(productID,0,"Expected penID>0, got "+productID); - } - - [Test] - public void D05_SelectOrdersForProduct() - { - Northwind db = CreateDB(); - //var q = from p in db.Products where "Chai"==p.ProductName select p.Order; - //List penOrders = q.ToList(); - //AssertHelper.Greater(penOrders.Count,0,"Expected some orders for product 'Chai'"); - - var q = - from o in db.Orders - where o.Customer.City == "London" - select new { c = o.Customer, o }; - - var list1 = q.ToList(); - foreach (var co in list1) - { - Assert.IsNotNull(co.c, "Expected non-null customer"); - Assert.IsNotNull(co.c.City, "Expected non-null customer city"); - Assert.IsNotNull(co.o, "Expected non-null order"); - } - AssertHelper.Greater(list1.Count, 0, "Expected some orders for London customers"); - } - - [Test] - public void D06_OrdersFromLondon() - { - Northwind db = CreateDB(); - var q = - from o in db.Orders - where o.Customer.City == "London" - select new { c = o.Customer, o }; - - var list1 = q.ToList(); - foreach (var co in list1) - { - Assert.IsNotNull(co.c, "Expected non-null customer"); - Assert.IsNotNull(co.o, "Expected non-null order"); - } - AssertHelper.Greater(list1.Count, 0, "Expected some orders for London customers"); - } - - [Test] - public void D07_OrdersFromLondon_Alt() - { - //this is a "SelectMany" query: - Northwind db = CreateDB(); - - var q = - from c in db.Customers - from o in c.Orders - where c.City == "London" - select new { c, o }; - - AssertHelper.Greater(q.ToList().Count, 0, "Expected some orders for London customers"); - } - - [Test] - public void D08_Products_Take5() - { - Northwind db = CreateDB(); - var q = (from p in db.Products select p).Take(5); - List prods = q.ToList(); - Assert.AreEqual(5, prods.Count, "Expected five products"); - } - - [Test] - public void D09_Products_LetterP_Take5() - { - Northwind db = CreateDB(); - - //var q = (from p in db.Products where p.ProductName.Contains("p") select p).Take(5); - var q = db.Products.Where(p => p.ProductName.Contains("p")).Take(5); - List prods = q.ToList(); -#if POSTGRES || INGRES - int expectedCount = 0; //Only 'Toilet Paper' -#else - int expectedCount = 2; //Oracle, Mysql: 'Toilet Paper' and 'iPod' -#endif - AssertHelper.Greater(prods.Count, expectedCount, "Expected couple of products with letter 'p'"); - } - - [Test] - public void D10_Products_LetterP_Desc() - { - Northwind db = CreateDB(); - - var q = (from p in db.Products - where p.ProductName.Contains("P") - orderby p.ProductID descending - select p - ).Take(5); - //var q = db.Products.Where( p=>p.ProductName.Contains("p")).Take(5); - List prods = q.ToList(); - AssertHelper.Greater(prods.Count, 2, "Expected couple of products with letter 'p'"); - - var prodID0 = prods[0].ProductID; - var prodID1 = prods[1].ProductID; - AssertHelper.Greater(prodID0, prodID1, "Sorting is broken"); - } - - [Test] - public void D11_Products_DoubleWhere() - { - Northwind db = CreateDB(); - var q1 = db.Products.Where(p => p.ProductID > 1).Where(q => q.ProductID < 10); - int count1 = q1.Count(); - } - - -#if !DEBUG && (SQLITE || POSTGRES || MSSQL) - // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTest+Northwind1+CustomerDerivedClass' is not mapped as a Table. - [Explicit] -#endif - [Test] - public void D12_SelectDerivedClass() - { - Northwind dbo = CreateDB(); - Northwind1 db = new Northwind1(dbo.Connection); - - var derivedCustomer = (from c in db.ChildCustomers - where c.City == "London" - select c).First(); - Assert.IsTrue(derivedCustomer.City == "London"); - } - - public class Northwind1 : Northwind - { - public Northwind1(System.Data.IDbConnection connection) - : base(connection) - { } - - public class CustomerDerivedClass : Customer { } - public class CustomerDerivedClass2 : CustomerDerivedClass { } - - public DataLinq.Table ChildCustomers - { - get { return base.GetTable(); } - } - } - - - [Test(Description = "Calls ExecuteQuery<> to store result into object type property")] - // note: for PostgreSQL requires database with lowercase names, NorthwindReqular.SQL - public void D13_ExecuteQueryObjectProperty() - { - Northwind db = CreateDB(); - - var res = db.ExecuteQuery(@"SELECT [ProductID] AS ChaiId FROM [Products] WHERE - [ProductName] ='Chai'").Single(); - Assert.AreEqual(1, res.ChaiId); - } - - class Chai - { - internal int ChaiId; - } - - [Test] - public void D14_ProjectedProductList() - { - Northwind db = CreateDB(); - - var query = from pr in db.Products - select new - { - pr.ProductID, - pr.ProductName, - pr.Supplier, // exception! - pr.UnitPrice, // exception! - pr.UnitsInStock, - pr.UnitsOnOrder - }; - //WARNING - as of 2008Apr, we return Suppliers without blowing up, but they need to be live - var list = query.ToList(); - Assert.IsTrue(list.Count > 0); - foreach (var item in list) - { - Assert.IsTrue(item.Supplier != null); - } - } - -#if !DEBUG && (SQLITE || POSTGRES || MSSQL) - // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTest+NorthwindDupl+CustomerDerivedClass' is not mapped as a Table. - [Explicit] -#endif - [Test] - public void D15_DuplicateProperty() - { - Northwind dbo = CreateDB(); - NorthwindDupl db = new NorthwindDupl(dbo.Connection); - var derivedCustomer = (from c in db.ChildCustomers - where c.City == "London" - select c).First(); - Assert.IsTrue(derivedCustomer.City == "London"); - } - - public class NorthwindDupl : Northwind - { - public NorthwindDupl(System.Data.IDbConnection connection) - : base(connection) - { } - - public class CustomerDerivedClass : Customer - { - private string city; - [Column(Storage = "city", Name = "city")] - public new string City - { - get - { - return city; - } - set - { - if (value != city) - { - city = value; - } - } - } - } - - public DataLinq.Table ChildCustomers - { - get { return base.GetTable(); } - } - } - - /// - /// DbLinq must use field and should not look to setter. - /// - // PC: is this specified somewhere? - [Test] - public void D16_CustomerWithoutSetter() - { - Assert.Ignore("See if this is specified"); - Northwind dbo = CreateDB(); - NorthwindAbstractBaseClass db = new NorthwindAbstractBaseClass(dbo.Connection); - var Customer = (from c in db.ChildCustomers - where c.City == "London" - select c).First(); - Assert.IsTrue(Customer.City == "London"); - } - - - abstract class AbstractCustomer - { - public abstract string City { get; } - } - - class NorthwindAbstractBaseClass : Northwind - { - public NorthwindAbstractBaseClass(System.Data.IDbConnection connection) - : base(connection) { } - - [Table(Name = "customers")] - public class Customer : AbstractCustomer - { - string city; - [Column(Storage = "city", Name = "city")] - public override string City - { - get - { - return city; - } - } - } - - [Table(Name = "customers")] - public class Customer2 : Customer { } - - public DataLinq.Table ChildCustomers - { - get { return base.GetTable(); } - } - } - - - #endregion - - [Test] - public void SqlInjectionAttack() - { - var db = CreateDB(); - var q = db.Customers.Where(c => c.ContactName == "'; DROP TABLE DoesNotExist; --"); - Assert.AreEqual(0, q.Count()); - } - -#if POSTGRES || MSSQL - [Test] - public void Storage01() - { - var db = CreateDB(); - var q = db.NoStorageCategories.Where(c => c.CategoryID == 1); - var r = q.First(); - Assert.AreEqual(1, q.Count()); - Assert.AreEqual(1, r.CategoryID); - Assert.IsTrue(r.propertyInvoked_CategoryName); - Assert.IsFalse(r.propertyInvoked_Description); - } -#endif - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_AllTypes_MySql.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_AllTypes_MySql.cs deleted file mode 100644 index a4bd9f27dc..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_AllTypes_MySql.cs +++ /dev/null @@ -1,165 +0,0 @@ -#define DbLinqGuidTest - -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Globalization; -using NUnit.Framework; -using AllTypesExample; - - -namespace Test_NUnit_MySql -{ - - /// - /// this test will exercise reading of columns of all MySQL types - /// (such as decimal, decimal?, DateTime? etc) - /// - [TestFixture] - public class ReadTest_AllTypes - { - public AllTypes CreateDB() - { - string DbServer = Environment.GetEnvironmentVariable("DbLinqServer") ?? "localhost"; - string connStr = string.Format("server={0};user id=LinqUser; password=linq2; database=AllTypes", DbServer); - - //return CreateDB(System.Data.ConnectionState.Closed); - AllTypes db = new AllTypes(new MySql.Data.MySqlClient.MySqlConnection(connStr)); - - return db; - } - - [Test] - public void AT1_SelectAllIntTypes() - { - AllTypes db = CreateDB(); - - var q = from p in db.AllIntTypes select p; - int count = q.ToList().Count; - Assert.IsTrue(count > 0, "Expected some entries in AllIntTypes, got none"); - } - - [Test] - public void AT2_SelectAllFloatTypes() - { - AllTypes db = CreateDB(); - - var q = from p in db.FloatTypes select p; - int count = q.ToList().Count; - Assert.IsTrue(count > 0, "Expected some entries in FloatTypes, got none"); - } - - [Test] - public void AT2_SelectOtherTypes() - { - AllTypes db = CreateDB(); - - var q = from p in db.OtherTypes select p.DateTimeN; - int count = q.ToList().Count; - Assert.IsTrue(count > 0, "Expected some entries in AllTypes, got none"); - } - - [Test] - public void AT3_SelectDecimalN() - { - AllTypes db = CreateDB(); - - var q = from p in db.FloatTypes select p.DecimalN; - int count = q.ToList().Count; - Assert.IsTrue(count > 0, "Expected some entries in AllTypes, got none"); - } - -#if DBLINQ_ENUMTEST - [Test] - public void AT4_SelectEnum() - { - AllTypes db = CreateDB(); - - var q = from p in db.Allinttypes select p.DbLinq_EnumTest; - int count = q.ToList().Count; - Assert.IsTrue(count > 0, "Expected some enums in AllTypes, got none"); - } - - [Test] - public void AT5_SelectEnum_() - { - AllTypes db = CreateDB(); - - var q = from p in db.Allinttypes select p.DbLinq_EnumTest; - string sql_string = db.GetQueryText(q); - - DbLinq_EnumTest enumValue = q.First(); - Assert.IsTrue(enumValue > 0, "Expected enum value>0 in AllTypes, got enumValue=" + enumValue); - } -#endif - - [Test] - public void AT6_ReadBlob() - { - //DbLinq could not read byte[] - //This test was contributed by Anatoli Koutsevol - - Console.WriteLine("from p in db.Othertypes orderby p.DateTime_ select p.blob;"); - AllTypes db = CreateDB(); - - var result = from p in db.OtherTypes orderby p.DateTime select p.Blob; - foreach (var blob in result) - { - Console.WriteLine("blob[{0}]", blob.Length); - } - Console.WriteLine("Press enter to continue."); - } - -#if DbLinqGuidTest - - [Test] - public void AT7_ReadGuidFromVarchar() - { - Console.WriteLine("from p in db.Othertypes orderby p.DateTime_ select p.blob;"); - AllTypes db = CreateDB(); - - var query = from p in db.OtherTypes orderby p.DateTime select p.DbLinqGuidTest; - Guid? guid = query.First(); - Assert.IsTrue(guid != null); - } - - [Test] - public void AT8_ReadGuidFromVarbinary() - { - Console.WriteLine("from p in db.Othertypes orderby p.DateTime_ select p.blob;"); - AllTypes db = CreateDB(); - - var query = from p in db.OtherTypes orderby p.DateTime select p.DbLinqGuidTest2; - Guid guid = query.First(); - string guidStr = guid.ToString(); - Assert.IsTrue(guidStr == "{0101}"); - } -#endif - [Test] - public void Test_Unknown() - { - AllTypes db = CreateDB(); - - var result = from p in db.OtherTypes - orderby p.DateTime - select - p.Blob; - foreach (var blob in result) - { - Console.WriteLine("blob[{0}]", blob.Length); - } - } - - [Test] - public void Test_Select_DateTime_ParseExact() - { - AllTypes db = CreateDB(); - var result = from p in db.ParsingData - select DateTime.ParseExact(p.DateTimeStr, "yyyy.MM.dd", CultureInfo.InvariantCulture); - DateTime dt1 = result.First(); - Assert.IsTrue(dt1.Year == 2008); - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Complex.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Complex.cs deleted file mode 100644 index fe7a675318..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Complex.cs +++ /dev/null @@ -1,633 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Data.Linq; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -#if ORACLE -using Id = System.Decimal; -#else -using Id = System.Int32; -#endif - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTest_Complex : TestBase - { - Northwind db; - - public ReadTest_Complex() - { - db = CreateDB(); - - } - - #region 'D' tests exercise 'local object constants' - [Test] - public void D0_SelectPensByLocalProperty() - { - //reported by Andrus. - //http://groups.google.com/group/dblinq/browse_thread/thread/c25527cbed93d265 - - Northwind db = CreateDB(); - - Product localProduct = new Product { ProductName = "Chai" }; - var q = from p in db.Products where p.ProductName == localProduct.ProductName select p; - - List products = q.ToList(); - int productCount = products.Count; - Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount); - } - - [Test] - public void D1_SelectPensByLocalProperty() - { - Northwind db = CreateDB(); - var pen = new { Name = "Chai" }; - var q = from p in db.Products where p.ProductName == pen.Name select p; - - List products = q.ToList(); - int productCount = products.Count; - Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount); - } - - [Test] - public void D2_SelectProductByLocalPropertyAndConstant() - { - - Northwind db = CreateDB(); - string product = "Carnarvon Tigers"; - var q = from p in db.Products - where p.ProductName == product && - p.QuantityPerUnit.StartsWith("16") - select p; - List products = q.ToList(); - int productCount = products.Count; - Assert.AreEqual(1, productCount, "Expected one product, got count=" + productCount); - } - - [Test] - public void D3_ArrayContains() - { - Northwind db = CreateDB(); - - var data = from p in db.Customers - where new string[] { "ALFKI", "WARTH" }.Contains(p.CustomerID) - select new { p.CustomerID, p.Country }; - - var dataList = data.ToList(); - //Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount); - } - #endregion - - #region Tests 'F' work on aggregation - [Test] - public void F1_ProductCount() - { - var q = from p in db.Products select p; - int productCount = q.Count(); - AssertHelper.Greater(productCount, 0, "Expected non-zero product count"); - } - - [Test] - public void F2_ProductCount_Projected() - { - var q = from p in db.Products select p.ProductID; - int productCount = q.Count(); - AssertHelper.Greater(productCount, 0, "Expected non-zero product count"); - Console.WriteLine(); - } - [Test] - public void F2_ProductCount_Clause() - { - var q = from p in db.Products select p.ProductID; - int productCount = q.Count(i => i < 3); - AssertHelper.Greater(productCount, 0, "Expected non-zero product count"); - Assert.IsTrue(productCount < 4, "Expected product count < 3"); - } - - [Test] - public void F3_MaxProductId() - { - var q = from p in db.Products select p.ProductID; - var maxID = q.Max(); - AssertHelper.Greater(maxID, 0, "Expected non-zero product count"); - } - - [Test] - public void F4_MinProductId() - { - var q = from p in db.Products select p.ProductID; - var minID = q.Min(); - AssertHelper.Greater(minID, 0, "Expected non-zero product count"); - } - -#if !ORACLE // picrap: this test causes an internal buffer overflow when marshaling with oracle win32 driver - - [Test] - public void F5_AvgProductId() - { - var q = from p in db.Products select p.ProductID; - double avg = q.Average(); - AssertHelper.Greater(avg, 0, "Expected non-zero productID average"); - } - -#endif - - [Test] - public void F7_ExplicitJoin() - { - //a nice and light nonsense join: - //bring in rows such as {Chai,AIRBU} - var q = - from p in db.Products - join c in db.Categories on p.ProductID equals c.CategoryID - select new { p.ProductName, c.CategoryName }; - - int rowCount = 0; - foreach (var v in q) - { - rowCount++; - Assert.IsTrue(v.ProductName != null); - Assert.IsTrue(v.CategoryName != null); - } - Assert.IsTrue(rowCount > 2); - } - - [Test] - public void F7b_ExplicitJoin() - { - var q = - from c in db.Customers - join o in db.Orders on c.CustomerID equals o.CustomerID - where c.City == "London" - select o; - } - -#if INCLUDING_CLAUSE - //Including() clause discontinued in Studio Orcas? - [Test] - public void F8_IncludingClause() - { - var q = ( - from c in db.Customers - where c.City == "London" - select c) - .Including(c => c.Orders); - } - - [Test] - public void F8_Including_Nested() - { - var q = ( - from c in db.Customers - where c.City == "London" - select c) - .Including(c => c.Orders.Including(o => o.OrderDetails)); - } -#endif - - [Test] - public void F9_Project_AndContinue() - { - var q = - from c in db.Customers - where c.City == "London" - select new { Name = c.ContactName, c.Phone } into x - orderby x.Name - select x; - } - - [Test] - public void F10_DistinctCity() - { - var q1 = from c in db.Customers select c.City; - var q2 = q1.Distinct(); - - int numLondon = 0; - foreach (string city in q2) - { - if (city == "London") { numLondon++; } - } - Assert.AreEqual(1, numLondon, "Expected to see London once"); - } - - [Test] - public void F11_ConcatString() - { - var q4 = from p in db.Products select p.ProductName + p.ProductID; - //var q4 = from p in db.Products select p.ProductID; - var q5 = q4.ToList(); - AssertHelper.Greater(q5.Count, 2, "Expected to see some concat strings"); - foreach (string s0 in q5) - { - bool startWithLetter = Char.IsLetter(s0[0]); - bool endsWithDigit = Char.IsDigit(s0[s0.Length - 1]); - Assert.IsTrue(startWithLetter && endsWithDigit, "String must start with letter and end with digit"); - } - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void F12_ConcatString_2() - { - var q4 = from p in db.Products - where (p.ProductName + p.ProductID).Contains("e") - select p.ProductName+p.ProductID; - //var q4 = from p in db.Products select p.ProductID; - //var q5 = q4.ToList(); - AssertHelper.Greater( q4.Count(), 2, "Expected to see some concat strings"); - foreach(string s0 in q4) - { - bool startWithLetter = Char.IsLetter(s0[0]); - bool endsWithDigit = Char.IsDigit(s0[s0.Length-1]); - Assert.IsTrue(startWithLetter && endsWithDigit, "String must start with letter and end with digit"); - } - } - #endregion - - const string obsoleteError = @"Since beta2 in Linq2Sql to project a new entity (ie: select new Order(3)) is forbidden for coherence reasons, so this tests doesn't mimic the Linq2Sql behavior and it is obsolete and should be modified. If you apply such test cases to Linq2Sql you'll get Test_NUnit_MsSql_Strict.DynamicLinqTest.DL5_NestedObjectSelect: - System.NotSupportedException : Explicit construction of entity type 'MsNorthwind.XX' in query is not allowed.\n\nMore Info in: http://linqinaction.net/blogs/roller/archive/2007/11/27/explicit-construction-of-entity-type-in-query-is-not-allowed.aspx"; - [Test] - public void F13_NewCustomer() - { - Assert.Ignore(obsoleteError); - Northwind db = CreateDB(); - IQueryable q = (from c in db.Customers - select - new Customer - { - CustomerID = c.CustomerID - }); - var list = q.ToList(); - AssertHelper.Greater(list.Count(), 0, "Expected list"); - //AssertHelper.Greater(list.Count(), 0, "Expected list"); - Assert.Ignore("test passed but: theoretically constructions of entity types are not allowed"); - } - - [Test] - public void F14_NewCustomer_Order() - { - Assert.Ignore(obsoleteError); - Northwind db = CreateDB(); - IQueryable q = (from c in db.Customers - select - new Customer - { - CustomerID = c.CustomerID - }); - //this OrderBy clause messes up the SQL statement - var q2 = q.OrderBy(c => c.CustomerID); - var list = q2.ToList(); - AssertHelper.Greater(list.Count(), 0, "Expected list"); - //AssertHelper.Greater(list.Count(), 0, "Expected list"); - } - - - [Test] - public void F15_OrderByCoalesce() - { - Northwind db = CreateDB(); - var q = from c in db.Customers - orderby c.ContactName ?? "" - select c; - var list = q.ToList(); - AssertHelper.Greater(list.Count(), 0, "Expected list"); - } - - [Test(Description = "Non-dynamic version of DL5_NestedObjectSelect")] - public void F16_NestedObjectSelect() - { - Assert.Ignore(obsoleteError); - Northwind db = CreateDB(); - var q = from o in db.Orders - select new Order() { OrderID = o.OrderID, Customer = new Customer() { ContactName = o.Customer.ContactName } }; - var list = q.ToList(); - } - - [Test(Description = "Non-dynamic version of DL5_NestedObjectSelect")] - public void F17_NestedObjectSelect_Ver2() - { - Assert.Ignore(obsoleteError); - Northwind db = CreateDB(); - var query = from order in db.Orders - select new Order - { - OrderID = order.OrderID, - Customer = new Customer - { - ContactName = order.Customer.ContactName, - ContactTitle = order.Customer.ContactTitle - } - }; - var list = query.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test(Description = "byte[] test")] - public void F18_ByteArrayAssignmentTest() - { - var db = CreateDB(); - - var picture = new byte[] { 1, 2, 3, 4 }; - - var nc = new Category { CategoryName = "test", Picture = picture }; - db.Categories.InsertOnSubmit(nc); - db.SubmitChanges(); - - var q = from c in db.Categories - where c.CategoryName == "test" - select new { c.Picture }; - var l = q.ToList(); - Assert.IsTrue(l.Count > 0); - Assert.IsTrue(picture.SequenceEqual(l[0].Picture.ToArray())); - - db.Categories.DeleteOnSubmit(nc); - db.SubmitChanges(); - } - - - [Test] - public void F19_ExceptWithCount_ViaToList() - { - var db = CreateDB(); - - var toExclude = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var universe = from t in db.GetTable() select t; - var toTake = universe.Except(toExclude); - - int toListCount = toTake.ToList().Count; - Assert.AreEqual(51, toListCount); - } - - [Test] - public void F20_ExceptWithCount() - { - var db = CreateDB(); - - var toExclude = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var universe = from t in db.GetTable() select t; - var toTake = universe.Except(toExclude).Except(db.Territories.Where(terr => terr.TerritoryDescription.StartsWith("B"))); - - int toTakeCount = toTake.Count(); - Assert.AreEqual(44, toTakeCount); - } - -#if !DEBUG && (SQLITE) - [Explicit] -#endif - [Test] - public void F21_CountNestedExcepts() - { - var db = CreateDB(); - - var toExclude1 = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var toExclude2 = toExclude1.Except(db.GetTable().Where(terr => terr.TerritoryDescription.Contains("i"))); - - var universe = from t in db.GetTable() select t; - - var toTake = universe.Except(toExclude2); - - int toTakeCount = toTake.Count(); - Assert.AreEqual(52, toTakeCount); - } - -#if !DEBUG && (SQLITE) - [Explicit] -#endif - [Test] - public void F22_AnyNestedExcepts() - { - var db = CreateDB(); - - var toExclude1 = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var toExclude2 = toExclude1.Except(db.GetTable().Where(terr => terr.TerritoryDescription.Contains("i"))); - - var universe = from t in db.GetTable() select t; - - var toTake = universe.Except(toExclude2); - - Assert.IsTrue(toTake.Any()); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void F23_AnyNestedExcepts_WithParameter() - { - var db = CreateDB(); - - var toExclude1 = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var toExclude2 = toExclude1.Except(db.GetTable().Where(terr => terr.TerritoryDescription.Contains("i"))); - - var universe = from t in db.GetTable() select t; - - var toTake = universe.Except(toExclude2); - - Assert.IsTrue(toTake.Any(t => t.TerritoryDescription.Contains("i"))); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void F24_CountNestedExcepts_WithParameter() - { - var db = CreateDB(); - - var toExclude1 = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var toExclude2 = toExclude1.Except(db.GetTable().Where(terr => terr.TerritoryDescription.Contains("i"))); - - var universe = from t in db.GetTable() select t; - - var toTake = universe.Except(toExclude2); - - int toTakeCount = toTake.Count(t => t.TerritoryDescription.Contains("o")); - Assert.AreEqual(34, toTakeCount); - } - - [Test] - public void F25_DistinctUnion() - { - var db = CreateDB(); - - var toInclude1 = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var toInclude2 = toInclude1.Concat(db.GetTable().Where(terr => terr.TerritoryDescription.Contains("i"))); - - var toTake = toInclude2.Distinct(); - - int count = toTake.ToList().Count; - - Assert.AreEqual(27, count); - } - - [Test] - public void F26_DistinctUnion_Count() - { - var db = CreateDB(); - - var toInclude1 = from t in db.GetTable() - where t.TerritoryDescription.StartsWith("A") - select t; - var toInclude2 = toInclude1.Concat(db.GetTable().Where(terr => terr.TerritoryDescription.Contains("i"))); - - var toTake = toInclude2.Distinct(); - - int count = toTake.Count(); - - Assert.AreEqual(27, count); - } - -#if MSSQL || L2SQL - -#if L2SQL - [Explicit] -#endif - [Test] - public void F27_SelectEmployee_Identifier() - { - var db = CreateDB(); - var q = from e in db.GetTable() where e.Identifier == "7" select e; - EmployeeWithStringIdentifier em = q.Single(); - - Assert.AreEqual("King", em.LastName); - } - -#endif - - /// - /// the following three tests are from Jahmani's page - /// LinqToSQL: Comprehensive Support for SQLite, MS Access, SQServer2000/2005 - /// http://www.codeproject.com/KB/linq/linqToSql_7.aspx?msg=2428251 - /// - [Test(Description = "list of customers who have place orders that have all been shipped to the customers city.")] - public void O1_OperatorAll() - { - var q = from c in db.Customers - where (from o in c.Orders - select o).All(o => o.ShipCity == c.City) - select new { c.CustomerID, c.ContactName }; - var list = q.ToList(); - } - - [Test(Description = "list of customers who have placed no orders")] - public void O2_OperatorAny() - { - //SELECT t0.CustomerID, t0.ContactName - //FROM Customers AS t0 - //WHERE NOT ( - //( SELECT COUNT(*) - // FROM Orders AS t1 - // WHERE (t1.CustomerID = t0.CustomerID) - //) > 0 - //) - var q = from customer in db.Customers - where !customer.Orders.Any() - select new { customer.CustomerID, customer.ContactName }; - //var q = from customer in db.Customers - // where customer.Orders.Count() == 0 - // select new { customer.CustomerID, customer.ContactName }; - var list = q.ToList(); - } - - [Test(Description = "provide a list of customers and employees who live in London.")] - public void O3_OperatorUnion() - { - var q = (from c in db.Customers.Where(d => d.City == "London") - select new { ContactName = c.ContactName }) - .Union(from e in db.Employees.Where(f => f.City == "London") - select new { ContactName = e.LastName }); - var list = q.ToList(); - Assert.IsTrue(list.Count > 0, "Expected some customers and employees from London"); - } - - [Test] - public void O4_OperatorContains() - { - var ids = new Id[] { 1, 2, 3 }; - Northwind db = CreateDB(); - - //var q = from p in db.Products select p.ProductID; - //int productCount = q.Count(); - - var products = from p in db.Products - where ids.Contains((Id) p.ProductID) - select p; - - Assert.AreEqual(3, products.Count()); - - } - - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_GroupBy.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_GroupBy.cs deleted file mode 100644 index 9ff4496ee8..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_GroupBy.cs +++ /dev/null @@ -1,322 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTest_GroupBy : TestBase - { - - - [Test] - public void G01_SimpleGroup_Count() - { - Northwind db = base.CreateDB(); - - var q2 = db.Customers.GroupBy(c => c.City) - .Select(g => new { g.Key, Count = g.Count() }); - - int rowCount = 0; - foreach (var g in q2) - { - rowCount++; - Assert.IsTrue(g.Count > 0, "Must have Count"); - Assert.IsTrue(g.Key != null, "Must have City"); - } - Assert.IsTrue(rowCount > 0, "Must have some rows"); - } - -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G02_SimpleGroup_First() - { - try - { - //Note: this SQL is allowed in Mysql but illegal on Postgres - //(PostgreSql ERROR: column "c$.customerid" must appear in the GROUP BY clause or be used in an aggregate function - SQL state: 42803) - //"SELECT City, customerid FROM customer GROUP BY City" - //that's why DbLinq disallows it - Northwind db = base.CreateDB(); - var q2 = db.Customers.GroupBy(c => c.City); - var q3 = q2.First(); - - Assert.IsTrue(q3 != null && q3.Key != null, "Must have result with Key"); - foreach (var c in q3) - { - Assert.IsTrue(c.City != null, "City must be non-null"); - } - } - catch(InvalidOperationException) - { - Assert.Ignore("Some vendors don't support this request (which doesn't make sense anyway)"); - } - } - -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G03_SimpleGroup_WithSelector_Invalid() - { - try - { - //Note: this SQL is allowed in Mysql but illegal on Postgres - //(PostgreSql ERROR: column "c$.customerid" must appear in the GROUP BY clause or be used in an aggregate function - SQL state: 42803) - //"SELECT City, customerid FROM customer GROUP BY City" - Northwind db = base.CreateDB(); - - var q2 = db.Customers.GroupBy(c => c.City, c => new {c.City, c.CustomerID}); - - foreach (var g in q2) - { - int entryCount = 0; - foreach (var c in g) - { - Assert.IsTrue(c.City != null, "City must be non-null"); - entryCount++; - } - Assert.IsTrue(entryCount > 0, "Must have some entries in group"); - } - } - catch (InvalidOperationException) - { - Assert.Ignore("Some vendors don't support this request (which doesn't make sense anyway)"); - } - } - - [Test] - public void G03_DoubleKey() - { - //Note: this SQL is allowed in Mysql but illegal on Postgres - //(PostgreSql ERROR: column "c$.customerid" must appear in the GROUP BY clause or be used in an aggregate function - SQL state: 42803) - //"SELECT City, customerid FROM customer GROUP BY City" - Northwind db = base.CreateDB(); - - var q2 = from o in db.Orders - group o by new { o.CustomerID, o.EmployeeID } into g - select new { g.Key.CustomerID, g.Key.EmployeeID, Count = g.Count() }; - - int entryCount = 0; - foreach (var g in q2) - { - entryCount++; - Assert.IsTrue(g.CustomerID != null, "Must have non-null customerID"); - Assert.IsTrue(g.EmployeeID > 0, "Must have >0 employeeID"); - Assert.IsTrue(g.Count >= 0, "Must have non-neg Count"); - } - Assert.IsTrue(entryCount > 0, "Must have some entries in group"); - } - - -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G04_SimpleGroup_WithSelector() - { - try - { - //Note: this SQL is allowed in Mysql but illegal on Postgres - //(PostgreSql ERROR: column "c$.customerid" must appear in the GROUP BY clause or be used in an aggregate function - SQL state: 42803) - //"SELECT City, customerid FROM customer GROUP BY City" - Northwind db = base.CreateDB(); - var q2 = db.Customers.GroupBy(c => c.City, c => c.CustomerID); - - foreach (var g in q2) - { - int entryCount = 0; - foreach (var c in g) - { - Assert.IsTrue(c != null, "CustomerID must be non-null"); - entryCount++; - } - Assert.IsTrue(entryCount > 0, "Must have some entries in group"); - } - } - catch (InvalidOperationException) - { - Assert.Ignore("Some vendors don't support this request (which doesn't make sense anyway)"); - } - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G05_Group_Into() - { - Northwind db = base.CreateDB(); - var q2 = - from c in db.Customers - //where c.Country == "France" - group new { c.PostalCode, c.ContactName } by c.City into g - select g; - var q3 = from g in q2 select new { FortyTwo = 42, g.Key, Count = g.Count() }; - //select new {g.Key.Length, g}; - //select new {42,g}; - - int entryCount = 0; - foreach (var g in q3) - { - Assert.IsTrue(g.FortyTwo == 42, "Forty42 must be there"); - Assert.IsTrue(g.Count > 0, "Positive count"); - entryCount++; - } - Assert.IsTrue(entryCount > 0, "Must have some entries in group"); - } - - - [Test] - public void G06_OrderCountByCustomerID() - { - Northwind db = base.CreateDB(); - - var q2 = from o in db.Orders - group o by o.CustomerID into g - //where g.Count()>1 - select new { g.Key, OrderCount = g.Count() }; - - var lst = q2.ToList(); - AssertHelper.Greater(lst.Count, 0, "Expected some grouped order results"); - var result0 = lst[0]; - Assert.IsTrue(result0.Key != null, "Key must be non-null"); - AssertHelper.Greater(result0.OrderCount, 0, "Count must be > 0"); - //select new { g.Key , SumPerCustomer = g.Sum(o2=>o2.OrderID) }; - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G07_OrderCountByCustomerID_Where() - { - Northwind db = base.CreateDB(); - - var q2 = from o in db.Orders - group o by o.CustomerID into g - where g.Count() > 1 - select new { g.Key, OrderCount = g.Count() }; - - var lst = q2.ToList(); - AssertHelper.Greater(lst.Count, 0, "Expected some grouped order results"); - var result0 = lst[0]; - Assert.IsTrue(result0.Key != null, "Key must be non-null"); - AssertHelper.Greater(result0.OrderCount, 0, "Count must be > 0"); - //select new { g.Key , SumPerCustomer = g.Sum(o2=>o2.OrderID) }; - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G08_OrderSumByCustomerID() - { - Northwind db = base.CreateDB(); - - var q2 = from o in db.Orders - group o by o.CustomerID into g - //where g.Count()>1 - select new { g.Key, OrderSum = g.Sum(o => o.OrderID) }; - var lst = q2.ToList(); - AssertHelper.Greater(lst.Count, 0, "Expected some grouped order results"); - foreach (var result in lst) - { - Console.WriteLine(" Result: custID=" + result.Key + " sum=" + result.OrderSum); - Assert.IsTrue(result.Key != null, "Key must be non-null"); - AssertHelper.Greater(result.OrderSum, 0, "OrderSum must be > 0"); - } - //select new { g.Key , SumPerCustomer = g.Sum(o2=>o2.OrderID) }; - } - - /// - /// Reported by pwy.mail in http://code.google.com/p/dblinq2007/issues/detail?id=64 - /// -#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G09_UnitPriceGreaterThan10() - { - Northwind db = base.CreateDB(); - - var priceQuery = - from prod in db.Products - group prod by new - { - Criterion = prod.UnitPrice > 10 - } - into grouping - select grouping; - - foreach (var prodObj in priceQuery) - { - if (prodObj.Key.Criterion == false) - Console.WriteLine("Prices 10 or less:"); - else - Console.WriteLine("\nPrices greater than 10"); - foreach (var listing in prodObj) - { - Console.WriteLine("{0}, {1}", listing.ProductName, - listing.UnitPrice); - } - } - - } - - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Operands.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Operands.cs deleted file mode 100644 index 6d598f151f..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Operands.cs +++ /dev/null @@ -1,209 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - /// - /// this test class will exercise various operands, such as 'a&&b', 'a>=b', ""+a, etc. - /// - [TestFixture] - public class ReadTest_Operands : TestBase - { - - [Test] - public void H1_SelectConcat() - { - Northwind db = CreateDB(); - - var q = from p in db.Products select p.ProductName + " " + p.SupplierID; - int count = 0; - foreach (string s in q) - { - if (s == null) - continue; //concat('X',NULL) -> NULL - - bool ok = Char.IsLetterOrDigit(s[0]) && s.Contains(' '); - Assert.IsTrue(ok, "Concat string should start with product name, instead got:" + s); - count++; - } - Assert.IsTrue(count > 0, "Expected concat strings, got none"); - } - - [Test] - public void H2_SelectGreaterOrEqual() - { - Northwind db = CreateDB(); - - var q = db.Products.Where(p => p.ProductID >= 5); - int count = 0; - foreach (Product p in q) - { - Assert.IsTrue(p.ProductID >= 5, "Failed on ProductID>=20"); - count++; - } - Assert.IsTrue(count > 0, "Expected some products with ProductID>=5, got none"); - } - - public struct ProductWrapper1 - { - public int ProductID { get; set; } - public int? SupplierID { get; set; } - } - - public class ProductWrapper2 - { - public int ProductID { get; set; } - public int? SupplierID { get; set; } - } - - public class ProductWrapper3 - { - public int ProductID { get; set; } - public int? SupplierID { get; set; } - public ProductWrapper3(int p, int? s) { ProductID = p; SupplierID = s; } - public ProductWrapper3(int p, int? s, bool unused) { ProductID = p; SupplierID = s; } - } - - [Test] - public void H3_Select_MemberInit_Struct() - { - Northwind db = CreateDB(); - var q = from p in db.Products - where p.ProductID > 5 - select new ProductWrapper1 { ProductID = (int)p.ProductID, SupplierID = (int?)p.SupplierID }; - int count = 0; - foreach (ProductWrapper1 p in q) - { - Assert.IsTrue(p.ProductID > 5, "Failed on ProductID>=20"); - count++; - } - Assert.IsTrue(count > 0, "Expected some products with ProductID>5, got none"); - } - - [Test] - public void H4_Select_MemberInit_Class() - { - Northwind db = CreateDB(); - var q = from p in db.Products - where p.ProductID > 5 - select new ProductWrapper2 { ProductID = (int)p.ProductID, SupplierID = (int?)p.SupplierID }; - int count = 0; - foreach (ProductWrapper2 p in q) - { - Assert.IsTrue(p.ProductID > 5, "Failed on ProductID>=20"); - count++; - } - Assert.IsTrue(count > 0, "Expected some products with ProductID>5, got none"); - } - - [Test] - public void H5_Select_MemberInit_Class2() - { - Northwind db = CreateDB(); - var q = from p in db.Products - where p.ProductID > 5 - select new ProductWrapper3((int)p.ProductID, (int?)p.SupplierID); - int count = 0; - foreach (ProductWrapper3 p in q) - { - Assert.IsTrue(p.ProductID > 5, "Failed on ProductID>=20"); - count++; - } - Assert.IsTrue(count > 0, "Expected some products with ProductID>5, got none"); - } - - [Test] - public void H6_SelectNotEqual() - { - Northwind db = CreateDB(); - var q = from p in db.Products - where p.ProductID != 1 - select p; - int count = 0; - foreach (Product p in q) - { - Assert.IsFalse(p.ProductID == 1, "Failed on ProductID != 1"); - count++; - } - Assert.IsTrue(count > 0, "Expected some products with ProductID != 1, got none"); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void J1_LocalFunction_DateTime_ParseExact() - { - Northwind db = CreateDB(); - - //Lookup EmployeeID 1: - //Andy Fuller - HireDate: 1989-01-01 00:00:00 - - string hireDate = "1992.08.14"; - - // Ingres assumes UTC on all date queries - var q = from e in db.Employees -#if INGRES - where e.HireDate == DateTime.ParseExact(hireDate, "yyyy.MM.dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal) -#else - where e.HireDate == DateTime.ParseExact(hireDate, "yyyy.MM.dd", CultureInfo.InvariantCulture) -#endif - select e.LastName; - var empLastName = q.Single(); //MTable_Projected.GetQueryText() - Assert.AreEqual("Fuller", empLastName); - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Subquery.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Subquery.cs deleted file mode 100644 index e93e831674..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTest_Subquery.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Data.Linq; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -#if ORACLE -using Id = System.Decimal; -#else -using Id = System.Int32; -#endif - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTest_Subquery : TestBase - { - [Description("Simple projection")] - [Test] - public void CQ1_SimpleProjection() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.LastName); - var count = q.ToList().Count; - Assert.IsTrue(count > 0); - } - - /* - Generated SQL should look like -SELECT o$.* -FROM Employees AS e$ -LEFT OUTER JOIN Orders AS o$ ON o$.[EmployeeID] = e$.[EmployeeID] - */ -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Description("Subquery")] - [Test] - public void CQ2_Subquery() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders); - var l = q.ToList(); - var count = l.Count; - Assert.IsTrue(count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Description("Subquery with nested select")] - [Test] - public void CQ3_SubquerySelect() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders.Select(o => o)); - var count = q.ToList().Count; - Assert.IsTrue(count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Description("Subquery with nested entityset")] - [Test] - public void CQ4_SubqueryNested() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders.Select(o => o.OrderDetails)); - var count = q.ToList().Count; - Assert.IsTrue(count > 0); - } - -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Description("Subquery with nested query")] - [Test] - public void CQ5_SubqueryNestedQuery() - { - var db = CreateDB(); - var q = from d in db.Orders - where (from r in db.OrderDetails - where r.ProductID == 1 - select - r.OrderID).Contains(d.OrderID) - select d; - var count = q.ToList().Count; - Assert.AreEqual(38, count); - } - - - [Test] - public void QueryableContains01() - { - var db = CreateDB(); - var q1 = db.OrderDetails.Where(o => o.Discount > 0).Select(o => o.OrderID); - var q = db.OrderDetails.Where(o => !q1.Contains(o.OrderID)); - Assert.AreEqual(1110, q.Count()); - } - - [Test] - public void QueryableContains02() - { - var db = CreateDB(); - DateTime t = DateTime.Parse("01/01/1950"); - var q1 = db.Employees.Where(e => e.BirthDate.HasValue && e.BirthDate.Value > t).Select(e => e.EmployeeID); - var q = db.Orders.Where(o => o.EmployeeID.HasValue && !q1.Contains(o.EmployeeID.Value)); - Assert.AreEqual(279, q.Count()); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_AnyCountFirst.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_AnyCountFirst.cs deleted file mode 100644 index 48e0020e30..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_AnyCountFirst.cs +++ /dev/null @@ -1,352 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class AnyCount : TestBase - { - [Test] - public void AnyInternal01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where !c.Orders.Any() - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void AnyInternal02() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where !c.Orders.Any(o => o.Customer.ContactName == "WARTH") - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void AnyInternal03() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where !c.Orders.Where(o => o.Customer.ContactName == "WARTH") - .Any(o => o.Customer.Country == "USA") - select c).ToList(); - } - - [Test] - public void AnyInternal04() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where !c.Orders.Select(o => o.Customer.Country) - .Any(ct => ct == "USA") - select c).ToList(); - } - - [Test] - public void AnyInternal05() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select new { c.CustomerID, HasUSAOrders = c.Orders.Any(o => o.ShipCountry == "USA") }).ToList(); - } - - - [Test] - public void AnyExternal01() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Country == "USA" - select c).Any(); - - } - - [Test] - public void AnyExternal02() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Country == "USA" - select c).Any(cust => cust.City == "Seatle"); - } - - [Test] - public void AnyExternal03() - { - Northwind db = CreateDB(); - var q = db.Customers.Any(); - } - - [Test] - public void AnyExternal04() - { - Northwind db = CreateDB(); - var q = db.Customers.Any(cust => cust.City == "Seatle"); - } - - - [Test] - public void CountInternal01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.Orders.Count() % 2 == 0 - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void CountInternal02() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.Orders.Count(o => o.Customer.ContactName == "WARTH") % 2 == 0 - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void CountInternal03() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Orders.Where(o => o.Customer.ContactName == "WARTH") - .Count(o => o.Customer.Country == "USA") % 2 == 0 - select c).ToList(); - } - - [Test] - public void CountInternal04() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Orders.Select(o => o.Customer.Country) - .Count(ct => ct == "USA") % 2 == 0 - select c).ToList(); - } - - - [Test] - public void CountExternal01() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Country == "USA" - select c).Count(); - } - - [Test] - public void CountExternal02() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Country == "USA" - select c).Count(cust => cust.City == "Seatle"); - } - - [Test] - public void CountExternal03() - { - Northwind db = CreateDB(); - var q = db.Customers.Count(); - } - - [Test] - public void CountExternal04() - { - Northwind db = CreateDB(); - var q = db.Customers.Count(cust => cust.City == "Seatle"); - } - - [Test] - public void CountInternal05() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select new { c.CustomerID, HasUSAOrders = c.Orders.Count(o => o.ShipCountry == "USA") }).ToList(); - } - -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void FirstInternal01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.Orders.FirstOrDefault() != null - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void FirstInternal02() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.Orders.FirstOrDefault(o => o.Customer.ContactName == "WARTH") != null - select c; - - var list = q.ToList(); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void FirstInternal03() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Orders.Where(o => o.Customer.ContactName == "WARTH") - .FirstOrDefault(o => o.Customer.Country == "USA") != null - select c).ToList(); - } - - [Test] - public void FirstInternal04() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Orders.Select(o => o.Customer.Country) - .FirstOrDefault(ct => ct == "USA") != null - select c).ToList(); - } - - [Test] - public void FirstExternal01() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Country == "USA" - select c).First(); - } - - [Test] - public void FirstExternal02() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - where c.Country == "France" - select c).First(cust => cust.City == "Marseille"); - - } - - [Test] - public void FirstExternal03() - { - Northwind db = CreateDB(); - var q = db.Customers.First(); - } - - [Test] - public void FirstExternal04() - { - Northwind db = CreateDB(); - var q = db.Customers.First(cust => cust.City == "Marseille"); - } - - [Test] - public void FirstInternal05() - { - Northwind db = CreateDB(); - - var q = (from c in db.Customers - select new { c.CustomerID, FirstUSAOrder = c.Orders.First(o => o.ShipCountry == "France") }).ToList(); - } - - [Test] - public void ArrayContains() - { - var db = CreateDB(); - decimal[] d = new decimal[] { 1, 4, 5, 6, 10248, 10255 }; - var q = db.OrderDetails.Where(o => d.Contains(o.OrderID)); - - AssertHelper.Greater(q.Count(), 0); - } - - - [Test] - public void ArrayContains_QueryParserCacheHit() - { - var db = CreateDB(); - decimal[] d = new decimal[] { 1, 4, 5, 6, 10248, 10255 }; - var q = db.OrderDetails.Where(o => d.Contains(o.OrderID)); - string query1 = db.GetCommand(q).CommandText; - d = new decimal[] { 1, 4, 5, 6, 7, 8 }; - q = db.OrderDetails.Where(o => d.Contains(o.OrderID)); - string query2 = db.GetCommand(q).CommandText; - Assert.AreEqual(query1, query2); - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Conversions.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Conversions.cs deleted file mode 100644 index fbeaa32f41..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Conversions.cs +++ /dev/null @@ -1,138 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTests_Conversions:TestBase - { - - [Test] - public void TestToString01() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where e.LastName.ToString() == "F" - select e; - - var list = query.ToList(); - } - - [Test] - [ExpectedException(typeof(System.NotSupportedException))] - public void TestToString02() - { - Northwind db = CreateDB(); - var query = from e in db.OrderDetails - where e.ToString() == "1" - select e; - - var list = query.ToList(); - } - - [Test] - public void TestToString03() - { - Northwind db = CreateDB(); - var query = from e in db.OrderDetails - where e.Discount.ToString() == "1" - select e; - - var list = query.ToList(); - } - - [Test] - public void TestToString04() - { - Northwind db = CreateDB(); - object strangeObject4Sql = new HttpStyleUriParser(); - var query = from e in db.OrderDetails - where e.Discount.ToString() == strangeObject4Sql.ToString() - select e; - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void ParseInt() - { - Northwind db = CreateDB(); - string year = "1997"; - var query = from e in db.Employees - where e.BirthDate.Value.Year == int.Parse(year) - select e; - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void ParseFloat() - { - Northwind db = CreateDB(); - string realNumber = "0,1"; - var query = from e in db.Employees - where e.BirthDate.Value.Year == float.Parse(realNumber) - select e; - - var list = query.ToList(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_DateTimeFunctions.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_DateTimeFunctions.cs deleted file mode 100644 index dabe2f12a7..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_DateTimeFunctions.cs +++ /dev/null @@ -1,510 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTests_DateTimeFunctions : TestBase - { -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetYear() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.OrderDate.Value.Year == 1996 - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetMonth() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.OrderDate.Value.Month == 10 - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetDay() - { - Northwind db = CreateDB(); - - var q = from o in db.Orders - where o.OrderDate.Value.Day == 16 - select o; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetHours() - { - Northwind db = CreateDB(); - - var q = (from o in db.Orders - where o.OrderDate.Value.Hour == 0 - select o).ToList(); - - - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetMinutes() - { - Northwind db = CreateDB(); - - var q = (from o in db.Orders - where o.OrderDate.Value.Minute == 0 - select o).ToList(); - - - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetSeconds() - { - Northwind db = CreateDB(); - - var q = (from o in db.Orders - where o.OrderDate.Value.Second == 16 - select o).ToList(); - - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetMilliSeconds() - { - Northwind db = CreateDB(); - - var q = (from o in db.Orders - where o.OrderDate.Value.Millisecond == 0 - select o).ToList(); - - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void GetCurrentDateTime() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where e.BirthDate.HasValue && e.BirthDate.Value == DateTime.Now - select e; - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void Parse01() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where e.BirthDate.Value == DateTime.Parse("1984/05/02") - select e; - - var list = query.ToList(); - } - - [Test] - [ExpectedException(typeof(NotSupportedException))] - public void Parse02() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where e.BirthDate.Value == DateTime.Parse(e.BirthDate.ToString()) - select e; - - var list = query.ToList(); - } - - [Test] - public void Parse03() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where e.BirthDate.HasValue - select e.BirthDate.Value == DateTime.Parse("1984/05/02"); - - - var list = query.ToList(); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void Parse04() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - select e.BirthDate.Value == DateTime.Parse(e.BirthDate.ToString()); - - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffTotalHours() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalHours > 0 - select e; - - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffHours() - { - Northwind db = CreateDB(); - - DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddHours(2); - - var query = from e in db.Employees - where (e.BirthDate.Value - parameterDateTime).Hours > -2 - select e; - - - var list = query.ToList(); - AssertHelper.Greater(list.Count, 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffTotalMinutes() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalMinutes > 0 - select e; - - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffMinutes() - { - Northwind db = CreateDB(); - - DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddMinutes(2); - - var query = from e in db.Employees - where (e.BirthDate.Value - parameterDateTime).Minutes == -2 - select e; - - - var list = query.ToList(); - AssertHelper.Greater(list.Count, 0); - } - - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffTotalSeconds() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalSeconds > 0 - select e; - - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffSeconds() - { - Northwind db = CreateDB(); - - DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddSeconds(2); - - var query = from e in db.Employees - where (e.BirthDate.Value - parameterDateTime).Seconds == -2 - select e; - - - var list = query.ToList(); - AssertHelper.Greater(list.Count, 0); - } - -#if !DEBUG && (SQLITE || MSSQL) - // L2SQL: SQL Server doesnt' seem to support millisecond precision. - [Explicit] -#endif - [Test] - public void DateTimeDiffMilliseconds() - { - Northwind db = CreateDB(); - - DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddMilliseconds(2); - - var query = from e in db.Employees - where (e.BirthDate.Value - parameterDateTime).Milliseconds == -2 - select e; - - - var list = query.ToList(); - AssertHelper.Greater(list.Count, 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffTotalMilliseconds() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalMinutes > 0 - select e; - - - var list = query.ToList(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffDays() - { - Northwind db = CreateDB(); - - DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddDays(2); - - var query = from e in db.Employees - where (e.BirthDate.Value - parameterDateTime).Days == -2 - select e; - - - var list = query.ToList(); - AssertHelper.Greater(list.Count, 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void DateTimeDiffTotalDays() - { - Northwind db = CreateDB(); - DateTime firstDate = db.Employees.First().BirthDate.Value; - - DateTime parameterDate = firstDate.Date.AddDays(2); - parameterDate = parameterDate.Date.AddHours(12); - - - var query = from e in db.Employees - where (e.BirthDate.Value -parameterDate).TotalDays == -2.5 - select e; - - var list = query.ToList(); - - AssertHelper.Greater(list.Count, 0); - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void DateTimeDiffTotalDaysSelectWithNulls01() - { - - Northwind db = CreateDB(); - - var employee = new Employee - { - FirstName = "Test First", - LastName = "Test Last", - }; - db.Employees.InsertOnSubmit(employee); - db.SubmitChanges(); - - DateTime firstDate = db.Employees.First().BirthDate.Value; - firstDate.Date.AddDays(2); - DateTime parameterDate = firstDate.Date.AddHours(12); - - try - { - //this test should throw an invalid operation exception since one BirthDate is null so select clausle should crash - var query = from e in db.Employees - select (e.BirthDate.Value - parameterDate).TotalDays; - - var list = query.ToList(); - - AssertHelper.Greater(list.Count, 0); - } - finally - { - db.Employees.DeleteOnSubmit(employee); - db.SubmitChanges(); - } - } - -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void DateTimeDiffTotalDaysSelectWithNulls02() - { - Northwind db = CreateDB(); - - var employee = new Employee - { - FirstName = "Test First", - LastName = "Test Last", - }; - db.Employees.InsertOnSubmit(employee); - db.SubmitChanges(); - - DateTime firstDate = db.Employees.First().BirthDate.Value; - - DateTime parameterDate = firstDate.Date.AddDays(2); - parameterDate = parameterDate.Date.AddHours(12); - - try - { - var query = from e in db.Employees - where e.BirthDate.HasValue - select (e.BirthDate.Value - parameterDate).TotalDays; - - var list = query.ToList(); - - AssertHelper.Greater(list.Count, 0); - } - finally - { - db.Employees.DeleteOnSubmit(employee); - db.SubmitChanges(); - } - } - - -#if !DEBUG && (SQLITE || (MSSQL && L2SQL)) - // L2SQL: System.Data.SqlClient.SqlException : The datepart minute is not supported by date function datepart for data type date. - [Explicit] -#endif - [Test] - public void DateGetDate() - { - Northwind db = CreateDB(); - var query = from e in db.Employees - where (e.BirthDate.Value.Date).Minute == 0 - select e; - - - var list = query.ToList(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_EntitySet.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_EntitySet.cs deleted file mode 100644 index 16a0b0a7ba..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_EntitySet.cs +++ /dev/null @@ -1,422 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; -using System.Data.Linq; - -#if MONO_STRICT -using DataLoadOptions = System.Data.Linq.DataLoadOptions; -#else -using DataLoadOptions = DbLinq.Data.Linq.DataLoadOptions; -#endif - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class EntitySet : TestBase - { - - [Test] - public void SimpleMemberAccess01() - { - var customer = new Customer(); - var orders = customer.Orders; - } - - [Test] - public void SimpleMemberAccess02() - { - var db = CreateDB(); - var customer = db.Customers.First(); - AssertHelper.Greater(customer.Orders.Count, 0); - } - -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void EntitySetEnumerationProjection() - { - var db = CreateDB(); - var results = (from c in db.Customers select c.Orders).ToList(); - - AssertHelper.Greater(results.Count, 0); - } - - [Test] - public void HasLoadedOrAsignedValues01() - { - var db = CreateDB(); - var customer = db.Customers.First(); - Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues); - - customer.Orders.Add(new Order()); - Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues); - } - - [Test] - public void HasLoadedOrAsignedValues02() - { - var db = CreateDB(); - var customer = db.Customers.First(); - Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues); - - customer.Orders.Assign(System.Linq.Enumerable.Empty()); - Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues); - } - - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void InvalidSourceChange() - { - var db = CreateDB(); - var customer = db.Customers.First(); - - AssertHelper.Greater(customer.Orders.Count, 0, "#1"); - Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2"); - customer.Orders.SetSource(System.Linq.Enumerable.Empty()); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void InvalidSourceChange2() - { - var db = CreateDB(); - var customer = db.Customers.First(); - Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues, "#1"); - customer.Orders.Assign(new List()); - Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2"); - customer.Orders.SetSource(System.Linq.Enumerable.Empty()); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void InvalidSourceChange3() - { - var db = CreateDB(); - var customer = db.Customers.First(); - customer.Orders.SetSource(new List()); - Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues, "#1"); - customer.Orders.Load(); - Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2"); - customer.Orders.SetSource(System.Linq.Enumerable.Empty()); - } - - [Test] - public void SourceChange() - { - var db = CreateDB(); - - int ordersCount = (from cust in db.Customers - select cust.Orders.Count).First(); - - AssertHelper.Greater(ordersCount, 0); - - var customer2 = db.Customers.First(); - customer2.Orders.SetSource(System.Linq.Enumerable.Empty()); - Assert.AreEqual(customer2.Orders.Count, 0); - } - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Refresh01() - { - var db = CreateDB(); - var c = db.Customers.First(); - - int beforeCount = c.Orders.Count; - AssertHelper.Greater(beforeCount, 0); - c.Orders.Clear(); - Assert.AreEqual(c.Orders.Count, 0); - c.Orders.AddRange(db.Orders); - AssertHelper.Greater(c.Orders.Count, beforeCount); - db.Refresh(RefreshMode.OverwriteCurrentValues, c.Orders); - - Assert.AreEqual(c.Orders.Count, beforeCount); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Refresh02() - { - var db = CreateDB(); - var c = db.Customers.First(); - - int beforeCount = c.Orders.Count; - AssertHelper.Greater(beforeCount, 0); - c.Orders.Clear(); - Assert.AreEqual(c.Orders.Count, 0); - c.Orders.AddRange(db.Orders); - - int middleCount = c.Orders.Count; - AssertHelper.Greater(c.Orders.Count, beforeCount); - - db.Refresh(RefreshMode.KeepCurrentValues, c.Orders); - Assert.AreEqual(c.Orders.Count, middleCount); - - db.Refresh(RefreshMode.KeepChanges, c.Orders); - Assert.AreEqual(c.Orders.Count, middleCount); - } - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Refresh03() - { - var db = CreateDB(); - var c = db.Customers.First(); - - var order = c.Orders.First(); - string newcustomerId = "NEWCUSTOMERID"; - order.CustomerID = newcustomerId; - - db.Refresh(RefreshMode.OverwriteCurrentValues, c.Orders); - Assert.AreNotEqual(order.CustomerID, newcustomerId); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Refresh04() - { - var db = CreateDB(); - var c = db.Customers.First(); - - var order = c.Orders.First(); - string newcustomerId = "NEWCUSTOMERID"; - order.CustomerID = newcustomerId; - - db.Refresh(RefreshMode.KeepCurrentValues, c.Orders); - Assert.AreEqual(order.CustomerID, newcustomerId); - - db.Refresh(RefreshMode.KeepChanges, c.Orders); - Assert.AreEqual(order.CustomerID, newcustomerId); - } - - - [Test] - public void ListChangedEvent() - { - var db = CreateDB(); - var customer = db.Customers.Where(c => c.Orders.Count > 0).First(); - AssertHelper.Greater(customer.Orders.Count, 0); - bool ok; - System.ComponentModel.ListChangedEventArgs args = null; - customer.Orders.ListChanged += delegate(object sender, System.ComponentModel.ListChangedEventArgs a) - { - ok = true; - args = a; - }; - - ok = false; - args = null; - customer.Orders.Remove(customer.Orders.First()); - Assert.IsTrue(ok); - Assert.AreEqual(System.ComponentModel.ListChangedType.ItemDeleted, args.ListChangedType); - Assert.AreEqual(0, args.NewIndex); - Assert.AreEqual(-1, args.OldIndex); - - ok = false; - args = null; - customer.Orders.Assign(Enumerable.Empty()); - Assert.IsTrue(ok); - Assert.AreEqual(System.ComponentModel.ListChangedType.Reset, args.ListChangedType); - Assert.AreEqual(0, args.NewIndex); - Assert.AreEqual(-1, args.OldIndex); - - ok = false; - args = null; - customer.Orders.Add(db.Orders.First()); - Assert.IsTrue(ok); - Assert.AreEqual(System.ComponentModel.ListChangedType.ItemAdded, args.ListChangedType); - Assert.AreEqual(0, args.NewIndex); - Assert.AreEqual(-1, args.OldIndex); - - ok = false; - args = null; - customer.Orders.Clear(); - Assert.IsTrue(ok); - Assert.AreEqual(System.ComponentModel.ListChangedType.Reset, args.ListChangedType); - Assert.AreEqual(0, args.NewIndex); - Assert.AreEqual(-1, args.OldIndex); - - ok = false; - args = null; - customer.Orders.Insert(0, new Order()); - Assert.IsTrue(ok); - Assert.AreEqual(System.ComponentModel.ListChangedType.ItemAdded, args.ListChangedType); - Assert.AreEqual(0, args.NewIndex); - Assert.AreEqual(-1, args.OldIndex); - - ok = false; - args = null; - customer.Orders.RemoveAt(0); - Assert.IsTrue(ok); - Assert.AreEqual(System.ComponentModel.ListChangedType.ItemDeleted, args.ListChangedType); - Assert.AreEqual(args.NewIndex, 0); - Assert.AreEqual(args.OldIndex, -1); - } - - [Test] - public void Load() - { - var db = CreateDB(); - var customer = db.Customers.First(); - var orders = customer.Orders; - - Assert.IsFalse(orders.HasLoadedOrAssignedValues); - orders.Load(); - Assert.IsTrue(orders.HasLoadedOrAssignedValues); - } - - [Test] - public void DeferedExecution() - { - var db = CreateDB(); - var customer = db.Customers.First(); - Assert.IsTrue(customer.Orders.IsDeferred); - - customer.Orders.Load(); - Assert.IsFalse(customer.Orders.IsDeferred); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void DeferedExecutionAndLoadWith() - { - var db = CreateDB(); - DataLoadOptions loadoptions = new DataLoadOptions(); - loadoptions.LoadWith(c => c.Orders); - db.LoadOptions = loadoptions; - - var customer = db.Customers.First(); - Assert.IsFalse(customer.Orders.IsDeferred, "#1"); - Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2"); - } - - [Test] - public void Add() - { - var db = CreateDB(); - var customer = db.Customers.First(); - int beforeCount = customer.Orders.Count; - var order = new Order(); - customer.Orders.Add(order); - Assert.AreEqual(beforeCount + 1, customer.Orders.Count, "#3"); - customer.Orders.Add(order); // do not actually add - Assert.AreEqual(beforeCount + 1, customer.Orders.Count, "#4"); - } - - [Test] - [ExpectedException (typeof (ArgumentOutOfRangeException))] - public void IList_Add() - { - var db = CreateDB(); - var customer = db.Customers.First(); - var order = new Order(); - ((IList)customer.Orders).Add(order); - ((IList)customer.Orders).Add(order); // raises ArgumentOutOfRangeException for duplicate - } - - [Test] - public void Clear() - { - var db = CreateDB(); - var customer = db.Customers.First(); - - if (customer.Orders.Count == 0) - Assert.Ignore(); - - customer.Orders.Clear(); - Assert.AreEqual(customer.Orders.Count, 0); - } - - [Test] - public void AddRange() - { - var db = CreateDB(); - var customer = db.Customers.First(); - int beforeCount = customer.Orders.Count; - var order = new Order(); - customer.Orders.AddRange(new Order[] { order, new Order() }); - Assert.AreEqual(beforeCount + 2, customer.Orders.Count); - customer.Orders.AddRange(new Order[] { new Order(), order }); // one is existing -> not added - Assert.AreEqual(beforeCount + 3, customer.Orders.Count); - } - - [Test] - public void Remove() - { - var db = CreateDB(); - var customer = db.Customers.First(); - Assert.IsTrue(customer.Orders.IsDeferred); - int beforeCount = customer.Orders.Count; - Assert.IsFalse(customer.Orders.IsDeferred); - - if (beforeCount == 0) - Assert.Ignore(); - - Assert.IsFalse(customer.Orders.Remove(null)); - Assert.AreEqual(beforeCount, customer.Orders.Count); - - Assert.IsTrue(customer.Orders.Remove(customer.Orders.First())); - Assert.AreEqual(customer.Orders.Count, beforeCount - 1); - } - - [Test] - public void RemoveAt() - { - var db = CreateDB(); - var customer = db.Customers.First(); - int beforeCount = customer.Orders.Count; - - if (beforeCount == 0) - Assert.Ignore(); - - customer.Orders.RemoveAt(0); - Assert.AreEqual(customer.Orders.Count, beforeCount - 1); - } - - [Test] - public void RemoveAll() - { - Clear(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Join.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Join.cs deleted file mode 100644 index 44130c96c2..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Join.cs +++ /dev/null @@ -1,336 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -#if MONO_STRICT -using System.Data.Linq; -#else -using DbLinq.Data.Linq; -#endif - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTests_Join : TestBase - { - -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test(Description = "example by Frans Brouma: select all customers that have no orders")] - public void LeftJoin_DefaultIfEmpty() - { - //example by Frans Brouma on Matt Warren's site - //select all customers that have no orders - //http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx - //http://weblogs.asp.net/fbouma/archive/2007/11/23/developing-linq-to-llblgen-pro-part-9.aspx - - Northwind db = CreateDB(); - - var q = from c in db.Customers - join o in db.Orders on c.CustomerID equals o.CustomerID into oc - from x in oc.DefaultIfEmpty() - where x.OrderID == null - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - int countPARIS = list.Count(item => item.CustomerID == "PARIS"); - Assert.IsTrue(countPARIS == 1); - } - - [Test] - public void LeftOuterJoin_Suppliers() - { - //http://blogs.class-a.nl/blogs/anko/archive/2008/03/14/linq-to-sql-outer-joins.aspx - //example by Anko Duizer (NL) - Northwind db = CreateDB(); - var query = from s in db.Suppliers - join c in db.Customers on s.City equals c.City into temp - from t in temp.DefaultIfEmpty() - select new - { - SupplierName = s.CompanyName, - CustomerName = t.CompanyName, - City = s.City - }; - - var list = query.ToList(); - - bool foundMelb = false, foundNull = false; - foreach (var item in list) - { - foundMelb = foundMelb || item.City == "Melbourne"; - foundNull = foundNull || item.City == null; - } - Assert.IsTrue(foundMelb, "Expected rows with City=Melbourne"); - Assert.IsFalse(foundNull, "Expected no rows with City=null"); - } - - // picrap: commented out, it doesn't build because of db.Orderdetails (again, a shared source file...) - - [Test(Description = "Problem discovered by Laurent")] - public void Join_Laurent() - { - Northwind db = CreateDB(); - - var q1 = (from p in db.Products - join o in db.OrderDetails on p.ProductID equals o.ProductID - where p.ProductID > 1 - select new - { - p.ProductName, - o.OrderID, - o.ProductID, - } - ).ToList(); - - Assert.IsTrue(q1.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || MSSQL) - // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTests_Join+Northwind1+ExtendedOrder' is not mapped as a Table. - [Explicit] -#endif - [Test] - public void RetrieveParentAssociationProperty() - { - Northwind dbo = CreateDB(); - Northwind1 db = new Northwind1(dbo.Connection); - var t = db.GetTable(); - var q = from order in t - select new - { - order.OrderID, - order.CustomerShipCity.ContactName - }; - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - -#if !DEBUG && (SQLITE || POSTGRES || MSSQL) - // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTests_Join+Northwind1+ExtendedOrder' is not mapped as a Table. - [Explicit] -#endif - [Test] - public void DifferentParentAndAssociationPropertyNames() - { - Northwind dbo = CreateDB(); - Northwind1 db = new Northwind1(dbo.Connection); - var query = db.GetTable() as IQueryable; - - var q2 = query.Select(e => new Northwind1.ExtendedOrder - { - OrderID = e.OrderID, - ShipAddress = e.CustomerShipCity.ContactName - }); - var list = q2.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || MSSQL) - // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTests_Join+Northwind1+ExtendedOrder' is not mapped as a Table. - [Explicit] -#endif - [Test] - public void SelectCustomerContactNameFromOrder() - { - Northwind dbo = CreateDB(); - Northwind1 db = new Northwind1(dbo.Connection); - var t = db.GetTable(); - - var q = from order in t - select new - { - order.CustomerContactName - }; - var list = q.ToList(); - Assert.AreEqual(db.Orders.Count(), list.Count()); - foreach (var s in list) - Assert.AreEqual("Test", s); - } - - public class Northwind1 : Northwind - { - public Northwind1(System.Data.IDbConnection connection) - : base(connection) { } - - // Linq-SQL requires this: [System.Data.Linq.Mapping.Table(Name = "orders")] - public class ExtendedOrder : Order - { -#if MONO_STRICT - System.Data.Linq -#else - DbLinq.Data.Linq -#endif -.EntityRef _x_Customer; - - [System.Data.Linq.Mapping.Association(Storage = "_x_Customer", - ThisKey = "ShipCity", Name = -#if MYSQL - "orders_ibfk_1" -#elif ORACLE - "SYS_C004742" -#elif POSTGRES - "fk_order_customer" -#elif SQLITE - "fk_Orders_1" -#elif INGRES - "fk_order_customer" -#elif MSSQL - "fk_order_customer" -#elif FIREBIRD - "??" // TODO: correct FK name -#else -#error unknown target -#endif -)] - public Customer CustomerShipCity - { - get { return _x_Customer.Entity; } - set { _x_Customer.Entity = value; } - } - - public string CustomerContactName - { - get - { - return "Test"; - } - } - } - - public Table ExtendedOrders - { - get { return base.GetTable(); } - } - } - - [Test] - [ExpectedException(typeof(NotSupportedException))] - public void WhereBeforeSelect() - { - Northwind db = CreateDB(); - var t = db.GetTable(); - - var query = t.Where(o => o.OrderID != 0); - - query = query.Select(dok => new Order - { - OrderID = dok.OrderID, - OrderDate = dok.OrderDate, - ShipCity = dok.Customer.ContactName, - Freight = dok.Freight - }); - var list = query.ToList(); - } - - /// - /// Reported by pwy.mail in http://code.google.com/p/dblinq2007/issues/detail?id=66 - /// - [Test] - public void OrdersLazyLoad() - { - Northwind db = CreateDB(); - - var q = - from c in db.Customers - select c; - - foreach (var c in q) - { - Console.WriteLine(c.Address); - foreach (var o in c.Orders) - Console.WriteLine(o.OrderID); - } - - } - - [Test] - public void JoinWhere() - { - Northwind db = CreateDB(); - - var custID = "BT___"; - - var custOderInfos = from o in db.Orders - join em in db.Employees on o.EmployeeID equals em.EmployeeID - where o.CustomerID == custID - select new { o, em }; - - var l = custOderInfos.ToList(); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - // submitted by bryan costanich - public void ImplicitLeftOuterJoin() - { - var db = CreateDB(); - - var dbItems = - (from a in db.Products - from b in db.Suppliers - where a.SupplierID == b.SupplierID - select a); - - var list = dbItems.ToList(); - } - } - -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Maths.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Maths.cs deleted file mode 100644 index a296ddb210..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_Maths.cs +++ /dev/null @@ -1,260 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTests_Maths : TestBase - { - - [Test] - public void Abs01() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Abs((double)c.ProductID) > 0.0 - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Abs02() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Abs((double)(c.Quantity)) > 0.0 - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - //Devuelve el valor absoluto (positivo) de una expresión numérica. - - //EXP (SSIS) - -#if !DEBUG && (SQLITE && MONO) - [Explicit] -#endif - [Test] - public void Exp() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Exp((double)(c.Quantity)) > 0 - select c; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - //Devuelve el exponente de la base e de la expresión especificada. - - //CEILING (SSIS) - - - //Devuelve el menor entero mayor o igual que una expresión numérica. - -#if !DEBUG && (SQLITE && MONO) - [Explicit] -#endif - [Test] - public void Floor() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Floor((double)(c.Discount)) > 0 - select c; - - var list = q.ToList(); - - } - - - //Devuelve el mayor entero que es menor o igual que una expresión numérica. - - //LN (SSIS) - -#if !DEBUG && (SQLITE) - [Explicit] -#endif - [Test] - public void Log01() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Log((double)(c.Discount + 1)) > 0.0 - select c; - - Assert.AreEqual(838, q.Count()); - } - -#if !DEBUG && (SQLITE || POSTGRES) - [Explicit] -#endif - [Test] - public void Log02() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Log((double)(c.Discount + 1),3.0) > 0.0 - select c; - - Assert.AreEqual(838, q.Count()); - } - - - //Devuelve el logaritmo natural de una expresión numérica. - - //LOG (SSIS) -#if !DEBUG && (SQLITE && MONO) - [Explicit] -#endif - [Test] - public void Log03() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Log10((double)(c.Discount + 1)) > 0.0 - select c; - - Assert.AreEqual(838, q.Count()); - } - - - //Devuelve el logaritmo en base 10 de una expresión numérica. - - //POWER (SSIS) - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void Pow() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Pow((double)(c.Discount), 2.0) > 0 - select c; - - var list = q.ToList(); - - } - //Devuelve el resultado de elevar una expresión numérica a una determinada potencia. - - //ROUND (SSIS) -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - public void Round() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Round((double)(c.Discount), MidpointRounding.AwayFromZero) > 0 - select c; - - var list = q.ToList(); - - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(NotSupportedException))] - public void Round02() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Round((double)(c.Discount)) > 0 - select c; - - var list = q.ToList(); - } - - //Devuelve una expresión numérica, redondeada a la longitud o precisión especificada. . - - //SIGN (SSIS) - - -#if !DEBUG && (SQLITE && MONO) - [Explicit] -#endif - [Test] - public void Sign01() - { - Northwind db = CreateDB(); - - var q = from c in db.OrderDetails - where Math.Sign((double)(c.Discount)) > 0d - select c; - - var list = q.ToList(); - } - //Devuelve el signo positivo (+), cero (0) o negativo (-) de una expresión numérica. - - //SQUARE (SSIS) - - - //Devuelve el cuadrado de una expresión numérica. - - //SQRT (SSIS) - -#if !DEBUG && (SQLITE && MONO) - [Explicit] -#endif - [Test] - public void Sqrt() - { - Northwind db = CreateDB(); - //Employee e; - //Order o; - var q = from c in db.OrderDetails - where Math.Sqrt((double)(c.Discount)) > 0 - select c; - - var list = q.ToList(); - } - } - -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_ReferenceLoading.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_ReferenceLoading.cs deleted file mode 100644 index 902301ddd7..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_ReferenceLoading.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; -using System.Data.Linq; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTests_ReferenceLoading : TestBase - { - - [Test] - public void ReferenceLoading01() - { - var db = CreateDB(); - var order = db.Orders.First(); - Assert.IsNotNull(order.Employee); - } - - [Test] - public void ReferenceLoading02() - { - var db = CreateDB(); - var c = db.Customers.First(); - Assert.IsNotNull(c.Orders.First().Employee); - } - - [Test] - public void ReferenceLoading03() - { - var db = CreateDB(); - var employeeTerritory = db.EmployeeTerritories.First(); - Assert.IsNotNull(employeeTerritory.Territory.Region.RegionID); - } - - [Test] - public void ReferenceLoading04() - { - var db = CreateDB(); - var q = db.Employees.Select(e => new { e.Region }); - - var list = q.ToList(); - Assert.AreEqual(db.Employees.Count(), list.Count); - } - -#if !DEBUG && (SQLITE || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection01() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders); - - var list = q.ToList(); - Assert.AreEqual(db.Employees.Count(), list.Count); - } - -#if !DEBUG && (SQLITE || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection02() - { - var db = CreateDB(); - var q = db.Employees.Select(e => new { e.Orders }); - - var list = q.ToList(); - Assert.AreEqual(db.Employees.Count(), list.Count); - } - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection03() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders.Select(o => o.OrderID)); - - var list = q.ToList(); - Assert.AreEqual(db.Employees.Count(), list.Count); - } - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection04() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders.Select(o => o.OrderID)); - - var list = q.ToList(); - Assert.AreEqual(db.Employees.Count(), list.Count); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection05() - { - var db = CreateDB(); - var q = db.Orders.Select(o => o.Employee.EmployeeTerritories); - - var list = q.ToList(); - Assert.AreEqual(db.Orders.Count(), list.Count); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection06() - { - var db = CreateDB(); - var q = db.Orders.Select(o => new { o.Employee, X = o.OrderDetails.Select(od => od.Product) }); - - var list = q.ToList(); - Assert.AreEqual(db.Orders.Count(), list.Count); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !MONO_STRICT)) - [Explicit] -#endif - [Test] - public void ComplexProjection07() - { - var db = CreateDB(); - var q = db.Employees.Select(e => e.Orders.Select(o=>o)); - - var list = q.ToList(); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_StringFunctions.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_StringFunctions.cs deleted file mode 100644 index ea25c154de..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/ReadTests_StringFunctions.cs +++ /dev/null @@ -1,699 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class ReadTests_StringFunctions : TestBase - { - [Test] - public void Insert01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.Insert(3, ":"); - - - var list = q.ToList(); - Assert.IsTrue(list.All(lastname => lastname.Contains(":"))); - } - - [Test] - public void Insert02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.Insert(3, ":").Contains(":") - select e.LastName.Insert(3, ":"); - - - var list = q.ToList(); - Assert.IsTrue(list.All(lastname => lastname.Contains(":"))); - } - - [Test] - public void Replace01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " .".Replace('.', 'a') == " a" - select e; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - - } - - [Test] - public void Replace02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.Replace('A', 'B').Contains("B") - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - - [Test] - public void Replace03() - { - //white-box test: Testing preevalutation of the where predicate (SpecialExpression.Execute method) before of building the sql query - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " .".Replace(" ", "f") == "f." - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Replace04() - { - //white-box test: Testing the select's projection field execution in clr. - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName + " .".Replace('.', 'a'); - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void Replace05() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select " .".Replace(" ", "f"); - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void IndexOf01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " fu".IndexOf("fu") == 1 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void IndexOf02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.IndexOf("Fu") == 0 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void IndexOf03() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " fu".IndexOf('f') == 1 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void IndexOf04() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.IndexOf('F') == 0 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - -#if !DEBUG && (SQLITE || POSTGRES) - [Explicit] -#endif - [Test] - public void IndexOf05() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.IndexOf("u", 1) == 1 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void IndexOf06() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.IndexOf('u', 1, 1) == 1 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void IndexOf08() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.IndexOf("u", 1, 1) == 1 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - - [Test] - public void IndexOf09() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.IndexOf("Fu") == 0; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void IndexOf10() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select " fu".IndexOf('f') == 1; - - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void IndexOf11() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.IndexOf('F') == 0; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - - - [Test] - public void IndexOf12() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.IndexOf("u", 1) == 1; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - - - [Test] - public void IndexOf13() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.IndexOf('u', 1, 1) == 1; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void IndexOf14() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.IndexOf("u", 1, 1) == 1; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void IndexOf15() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " fu".IndexOf('a') == 1 - select e; - - var list = q.ToList(); - Assert.AreEqual(0, list.Count); - } - - [Test] - public void Remove01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " .".Remove(1) == " " - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - - [Test] - public void Remove02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.Remove(1).Length > 0 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - } - - [Test] - public void Remove03() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where " ..".Remove(1, 2) == " " - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Remove04() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.LastName.Remove(1, 2).Length > 0 - select e; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Remove05() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select " .".Remove(1) == " "; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void Remove06() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.Remove(1).Length > 0; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - - } - - [Test] - public void Remove07() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select " ..".Remove(1, 2) == " "; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void Remove08() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select e.LastName.Remove(1, 2).Length > 0; - - var list = q.ToList(); - Assert.AreEqual(list.Count, db.Employees.Count()); - } - - [Test] - public void StartsWith01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.CustomerID.StartsWith("ALF") - select c.CustomerID; - - string custID = q.Single(); - Assert.IsTrue(custID == "ALFKI"); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - public void StartsWith02() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.CustomerID == "ALFKI" - select c.CustomerID.StartsWith("ALF"); - - bool matchStart = q.Single(); - Assert.IsTrue(matchStart); - } - - - /// - /// This test is related to paths: enable DbLinq to search for a path or it's container - /// Since we have no path in Nortwind we use a CustomerID. - /// -#if !DEBUG && (MSSQL && L2SQL) - // L2SQL: System.NotSupportedException : Only arguments that can be evaluated on the client are supported for the String.StartsWith method. [Test] - [Explicit] -#endif - [Test] - public void StartsWith03() - { - string path = "ALFKI test"; - Northwind db = CreateDB(); - - var q = from c in db.Customers - where path.StartsWith(c.CustomerID) - select c; - - Customer match = q.Single(); - Assert.IsNotNull(match); - } - - [Test] - public void EndsWith01() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.CustomerID.EndsWith("LFKI") - select c.CustomerID; - - string custID = q.Single(); - Assert.IsTrue(custID == "ALFKI"); - } - - [Test] - public void EndsWith02() - { - string param = "LFKI"; - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.CustomerID.EndsWith(param) - select c.CustomerID; - - string custID = q.Single(); - Assert.IsTrue(custID == "ALFKI"); - } - - [Test] - public void EndsWith03() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - where "ALFKI".EndsWith("LFKI") - select c.CustomerID; - - Assert.AreEqual(q.ToList().Count, db.Customers.Count()); - } - -#if !DEBUG && (MSSQL && !L2SQL) - [Explicit] -#endif - [Test] - public void EndsWith04() - { - Northwind db = CreateDB(); - - var q = from c in db.Customers - select c.CustomerID.EndsWith("LFKI"); - - Assert.IsTrue(q.Any(r => r == true)); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void StartsWithPercent01() - { - string param = "%"; - Northwind db = CreateDB(); - - var q = from c in db.Customers - where c.CustomerID.StartsWith(param) - select c.CustomerID; - - int cnt = q.Count(); - Assert.AreEqual(0, cnt); - } - -#if !DEBUG && (MSSQL && L2SQL) - // L2SQL: System.NotSupportedException : Method 'System.String TrimStart(Char[])' has no supported translation to SQL. [Test] - [Explicit] -#endif - [Test] - public void LTrim01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where !((e.LastName)).TrimStart().Contains(" ") - select e.LastName; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (MSSQL) - // L2SQL: System.InvalidOperationException : Could not translate expression 'Table(Employee).Select(e => Not(e.LastName.TrimStart(Invoke(value(System.Func`1[System.Char[]]))).Contains(" ")))' into SQL and could not treat it as a local expression. - [Explicit] -#endif - [Test] - public void LTrim02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select !((e.LastName)).TrimStart().Contains(" "); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (MSSQL && L2SQL) - // L2SQL: System.NotSupportedException : Method 'System.String TrimEnd(Char[])' has no supported translation to SQL. - [Explicit] -#endif - [Test] - public void RTrim01() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where !((e.LastName)).TrimEnd().Contains(" ") - select e.LastName; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - -#if !DEBUG && (MSSQL) - // L2SQL: System.InvalidOperationException : Could not translate expression 'Table(Employee).Select(e => Not(e.LastName.TrimEnd(Invoke(value(System.Func`1[System.Char[]]))).Contains(" ")))' into SQL and could not treat it as a local expression. - [Explicit] -#endif - [Test] - public void RTrim02() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - select !((e.LastName)).TrimEnd().Contains(" "); - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - } - - [Test] - public void Substring01() - { - Northwind db = CreateDB(); - - int index = 0; - var q = (from e in db.Customers - where e.CustomerID == "WARTH" - select new { name = e.CustomerID.Substring(index) }).First(); - - Assert.AreEqual(q.name, "WARTH".Substring(index)); - } - - [Test] - public void Substring02() - { - Northwind db = CreateDB(); - - var q = (from e in db.Customers - where e.CustomerID.Substring(2) == "RTH" - select e); - - Assert.IsTrue(q.Any()); - } - - [Test] - public void Substring03() - { - Northwind db = CreateDB(); - - var q = from e in db.Employees - where e.HomePhone.Substring(4, 1) == ")" - select new { A = e.HomePhone.Remove(0, 6), B = e.HomePhone.Substring(4, 1) }; - - var list = q.ToList(); - Assert.IsTrue(list.Count > 0); - - var Employees = db.Employees.ToArray(); - - var q2 = (from e in Employees - where e.HomePhone != null && e.HomePhone.Substring(4, 1) == ")" - select new { A = e.HomePhone.Remove(0, 6), B = e.HomePhone.Substring(4, 1) }).ToArray(); - - Assert.AreEqual(list.Count, q2.Count()); - - for (int i = 0; i < list.Count; i++) - Assert.AreEqual(list[i], q2[i]); - - } - - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/StoredProcTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/StoredProcTest.cs deleted file mode 100644 index e32291198a..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/StoredProcTest.cs +++ /dev/null @@ -1,129 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class StoredProcTest : TestBase - { - -#if !SQLITE && !MSSQL && !L2SQL && !FIREBIRD && !POSTGRES - [Test] - public void SP1_CallHello0() - { - Northwind db = base.CreateDB(); - string result = db.Hello0(); - Assert.IsNotNull(result); - } - - [Test] - public void SP2_CallHello1() - { - Northwind db = base.CreateDB(); - string result = db.Hello1("xx"); - Assert.IsTrue(result!=null && result.Contains("xx")); - } - - [Test] - public void SP3_GetOrderCount_SelField() - { - Northwind db = base.CreateDB(); - var q = from c in db.Customers - select new { c.CustomerID, OrderCount = db.GetOrderCount(c.CustomerID) }; - - int count = 0; - foreach (var c in q) - { - Assert.IsNotNull(c.CustomerID); - AssertHelper.Greater(c.OrderCount, -1); - count++; - } - AssertHelper.Greater(count, 0); - } - - [Test] - public void SP4_GetOrderCount_SelField_B() - { - Northwind db = base.CreateDB(); - var q = from c in db.Customers - select new {c, OrderCount=db.GetOrderCount(c.CustomerID)}; - - int count = 0; - foreach (var v in q) - { - Assert.IsNotNull(v.c.CustomerID); - AssertHelper.Greater(v.OrderCount, -1); - count++; - } - AssertHelper.Greater(count, 0); - } - - [Test] - public void SPB_GetOrderCount_Having() - { - Northwind db = base.CreateDB(); - var q = from c in db.Customers where db.GetOrderCount(c.CustomerID) > 1 select c; - - int count = 0; - foreach (var c in q) - { - Assert.IsTrue(c.CustomerID!=null, "Non-null customerID required"); - count++; - } - AssertHelper.Greater(count, 0); - } -#endif - } - -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Table.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Table.cs deleted file mode 100644 index 08ed664f1b..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Table.cs +++ /dev/null @@ -1,242 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Test_NUnit; -using NUnit.Framework; -using Test_NUnit.Linq_101_Samples; -using System.Data.Linq; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class Table : TestBase - { - [Test] - public void BasicAccess() - { - var db = CreateDB(); - var customers = db.Customers.ToArray(); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void GetModifiedMembers() - { - var db = CreateDB(); - var customer = db.Customers.First(); - - string beforeCountry = customer.Country; - string afterCountry = "Spain"; - customer.Country = afterCountry; - - string beforeFax = customer.Fax; - string afterFax = "4823-435-6456"; - customer.Fax = afterFax; - - ModifiedMemberInfo[] modifiedInfoList = db.Customers.GetModifiedMembers(customer); - Assert.AreEqual(modifiedInfoList.Count(), 2); - - ModifiedMemberInfo modInfo = modifiedInfoList.First(); - Assert.AreEqual(modInfo.Member, typeof(Customer).GetProperty("Country")); - Assert.AreEqual(modInfo.CurrentValue, afterCountry); - Assert.AreEqual(modInfo.OriginalValue, beforeCountry); - - modInfo = modifiedInfoList.ElementAt(1); - Assert.AreEqual(modInfo.Member, typeof(Customer).GetProperty("Fax")); - Assert.AreEqual(modInfo.CurrentValue, afterFax); - Assert.AreEqual(modInfo.OriginalValue, beforeFax); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void GetOriginalEntityState() - { - var db = CreateDB(); - var customer = db.Customers.First(); - - string beforeCountry = customer.Country; - string afterCountry = "Spain"; - customer.Country = afterCountry; - - string beforeFax = customer.Fax; - string afterFax = "4823-435-6456"; - customer.Fax = afterFax; - - var originalCustomer = db.Customers.GetOriginalEntityState(customer); - Assert.AreEqual(originalCustomer.Fax, beforeFax); - Assert.AreEqual(originalCustomer.Country, beforeCountry); - - } - - //[Test] - //public void IsReadOnly() - //{ - // var db = CreateDB(); - // db.ObjectTrackingEnabled=false; - // db.Customers.ToArray(); - // Assert.IsFalse(db.Customers.IsReadOnly); - - // var db2 = CreateDB(); - // db2.ObjectTrackingEnabled = true; - // db2.Customers.ToArray(); - // Assert.IsTrue(db2.Customers.IsReadOnly); - //} - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Attach01() - { - var db = CreateDB(); - var customer = new Customer(); - db.Customers.Attach(customer); - - Assert.IsFalse(db.Customers.Contains(customer)); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(NotSupportedException))] - public void Attach02() - { - var db = CreateDB(); - var customer = new Customer(); - db.Customers.Attach(customer); - - Assert.IsFalse(db.Customers.Contains(customer)); - var db2 = CreateDB(); - db2.Customers.Attach(customer); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void Attach03() - { - var db = CreateDB(); - db.ObjectTrackingEnabled = false; - var customer = new Customer(); - db.Customers.Attach(customer); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Attach04() - { - var db = CreateDB(); - var originalCustomer = db.Customers.First(); - var customer = new Customer(); - db.Customers.Attach(customer, originalCustomer); - - AssertHelper.Greater(db.Customers.GetModifiedMembers(customer).Count(), 0); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void Attach05() - { - var db = CreateDB(); - var customer = new Customer(); - db.Customers.Attach(customer, true); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void Attach06() - { - var db = CreateDB(); - var customer = new Customer(); - //http://geekswithblogs.net/michelotti/archive/2007/12/17/117791.aspx - //we have to do a test related with that stuff, but we need to change all of datacontexts - - Assert.Ignore(); - } - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void AttachAll() - { - var db = CreateDB(); - var customers = new Customer[] { new Customer { CustomerID = "ID1" }, new Customer { CustomerID = "ID2" } }; - db.Customers.AttachAll(customers); - - Assert.IsFalse(customers.Any(c => db.Customers.Contains(c))); - - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void GetBindingList() - { - var db = CreateDB(); - var customers = db.Customers.GetNewBindingList(); - - Assert.AreEqual(customers.Count, db.Customers.Count()); - } - - [Description("Check direct use of DataContext instead of typed DataContext")] - [Test] - public void T1_DirectDataContext() - { - var db = CreateDB(); - - var dc = new -#if MONO_STRICT - System.Data.Linq.DataContext(db.Connection); -#else - DbLinq.Data.Linq.DataContext(db.Connection, CreateVendor()); -#endif - - var dbq = from p in db.Products where p.ProductName == "Chai" select p.ProductID; - var dbc = dbq.ToList().Count; - Assert.AreEqual(dbc, 1); - - var dcq = from p in dc.GetTable() where p.ProductName == "Chai" select p.ProductID; - var dcc = dcq.ToList().Count; - Assert.AreEqual(dbc, 1); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/TestBase.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/TestBase.cs deleted file mode 100644 index ba0734df60..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/TestBase.cs +++ /dev/null @@ -1,185 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Data; -using System.IO; -using System.Xml; -using System.Reflection; -using NUnit.Framework; - -using nwind; - -#if MONO_STRICT -using System.Diagnostics; -public static class Profiler -{ - private static Stopwatch timer = new Stopwatch(); - - [Conditional("DEBUG")] - public static void Start() - { - timer.Reset(); - timer.Start(); - } - [Conditional("DEBUG")] - public static void At(string format, params object[] args) - { - timer.Stop(); - Console.Write("#AT({0:D12}) ", timer.ElapsedTicks); - Console.WriteLine(format, args); - timer.Start(); - } - - [Conditional("DEBUG")] - public static void Stop() - { - timer.Stop(); - } -} -#else -using DbLinq.Util; -#endif - -namespace Test_NUnit -{ - /// - /// base class for ReadTest and WriteTest. - /// Provides CreateDB(), Conn, and stringComparisonType. - /// - public abstract partial class TestBase - { - [SetUp] - public void BaseSetUp() - { - Profiler.Start(); - Profiler.At("BaseSetUp()"); - } - - [TearDown] - public void BaseTearDown() - { - Profiler.At("BaseTearDown()"); - Profiler.Stop(); - } - - public string DbServer - { - get - { - return Environment.GetEnvironmentVariable("DbLinqServer") ?? "localhost"; - } - } - public string connStr - { - get - { - var xConnectionStringsDoc = new XmlDocument(); - xConnectionStringsDoc.Load("../tests/ConnectionStrings.xml"); - XmlNode currentAssemblyNode = xConnectionStringsDoc.SelectSingleNode(string.Format("//Connection[@assembly=\"{0}\"]", Assembly.GetCallingAssembly().GetName().Name)); - string stringConnection = currentAssemblyNode.FirstChild.Value.Replace(@"\\", @"\"); - if (stringConnection.Contains("{0}")) - stringConnection = string.Format(stringConnection, DbServer); - return stringConnection; - } - } - IDbConnection _conn; - public IDbConnection Conn - { - get - { - if (_conn == null) { _conn = CreateConnection(connStr); _conn.Open(); } - return _conn; - } - } - - //public Northwind CreateDB() - //{ - // return CreateDB(System.Data.ConnectionState.Closed); - //} - - static partial void CheckRecreateSqlite (); - - public Northwind CreateDB() - { - return CreateDB(System.Data.ConnectionState.Closed); - } - - public Northwind CreateDB(System.Data.ConnectionState state) - { - CheckRecreateSqlite(); - var conn = CreateConnection(connStr); - if (state == System.Data.ConnectionState.Open) - conn.Open(); - var db = new Northwind(conn) { Log = Console.Out }; - return db; - } - - /// - /// execute a sql statement, return an Int64. - /// - public long ExecuteScalar(string sql) - { - using (var cmd = CreateCommand(sql, Conn)) - { - object oResult = cmd.ExecuteScalar(); - Assert.IsNotNull("Expecting result, instead got null. (sql=" + sql + ")"); - Assert.IsInstanceOfType(typeof(long), oResult, "Expecting 'long' result from query " + sql + ", instead got type " + oResult.GetType()); - return (long)oResult; - } - } - - /// - /// execute a sql statement - /// - public void ExecuteNonQuery(string sql) - { - using (var cmd = CreateCommand(sql, Conn)) - { - int iResult = cmd.ExecuteNonQuery(); - } - } - - public static Product NewProduct(string productName) - { - var p = new Product - { - ProductName = productName, - SupplierID = 1, - CategoryID = 1, - QuantityPerUnit = "11", -#if ORACLE || FIREBIRD - UnitPrice = 11, //type "int?" -#else - UnitPrice = 11m, -#endif - UnitsInStock = 23, - UnitsOnOrder = 0, - }; - return p; - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Transactions.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Transactions.cs deleted file mode 100644 index 406550ff99..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/Transactions.cs +++ /dev/null @@ -1,148 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -using System.Data; -using System.Data.Common; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class Transactions : TestBase - { - [SetUp] - public void Setup_LinqToSqlInsert07() - { - Northwind db = CreateDB(); - var orderDetails = - from o in db.OrderDetails - where o.Order.CustomerID == "WARTH" - select o; - - var order = - (from o in db.Orders - where o.CustomerID == "WARTH" - select o).FirstOrDefault(); - - if (!orderDetails.Any() || order == null) - { - var o = new Order { CustomerID = "WARTH", Employee = db.Employees.First() }; - o.OrderDetails.Add(new OrderDetail { Discount = 0.1f, Quantity = 1, Product = db.Products.First(p => p.ProductID % 2 == 0) }); - o.OrderDetails.Add(new OrderDetail { Discount = 0.2f, Quantity = 1, Product = db.Products.First(p => p.ProductID % 2 != 0) }); - db.Orders.InsertOnSubmit(o); - db.SubmitChanges(); - } - } - - [Test] - public void TransactionRollbackDelete() - { - Northwind db = CreateDB(); - DbTransaction t = BeginTransaction(db); - - try - { - var orderDetails = - from o in db.OrderDetails - where o.Order.CustomerID == "WARTH" - select o; - - var order = - (from o in db.Orders - where o.CustomerID == "WARTH" - select o).FirstOrDefault(); - - if (!orderDetails.Any() || order == null) - Assert.Ignore("Preconditions"); - - db.OrderDetails.DeleteAllOnSubmit(orderDetails); //formerly Remove(od); - - db.Orders.DeleteOnSubmit(order); //formerly Remove(order); - db.SubmitChanges(); - - Assert.IsFalse( - db.OrderDetails.Any(od => od.Order.Customer.CustomerID == "WARTH" && od.Order.EmployeeID == 3)); - Assert.IsFalse(db.Orders.Any(ord => ord.OrderID == order.OrderID)); - } - finally - { - t.Rollback(); - } - } - - private DbTransaction BeginTransaction(Northwind db) - { - db.Connection.Open(); - DbTransaction t = db.Connection.BeginTransaction(); - db.Transaction = t; - - return t; - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void TransactionCheckAndRollbackInsert() - { - Northwind db = CreateDB(); - DbTransaction t = BeginTransaction(db); - - var cust = new Customer(); - int beforeCustomersCount = db.Customers.Count(); - - string id = new object().GetHashCode().ToString().Substring(0, 5); - cust.CustomerID = id; - cust.Country = "Spain"; - cust.CompanyName = "Coco"; - - db.Customers.InsertOnSubmit(cust); - db.SubmitChanges(); - - int afterCustomercount = db.Customers.Count(); - Assert.IsTrue(beforeCustomersCount + 1 == afterCustomercount); - - t.Rollback(); - - afterCustomercount = db.Customers.Count(); - Assert.IsTrue(beforeCustomersCount == afterCustomercount); - - // The Count is correct. However, DataContext doesn't know that the - // transaction was aborted, and will satisfy the following from - // an internal cache - var customer = db.Customers.FirstOrDefault(c => c.CustomerID == id); - Assert.IsNotNull(customer); - - // Let's let DataContext know that it doesn't exist anymore. - db.Customers.DeleteOnSubmit(customer); - db.SubmitChanges(); // Note no exception from deleting a non-existent entity - - customer = db.Customers.FirstOrDefault(c => c.CustomerID == id); - Assert.IsNull(customer); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/VerticalPartitioningTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/VerticalPartitioningTest.cs deleted file mode 100644 index 5713e0f505..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/VerticalPartitioningTest.cs +++ /dev/null @@ -1,60 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Test_NUnit; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - /// - /// TODO: write test cases which ensure that db.Employee can produce derived classes, such as HourlyEmployee. - /// - public class VerticalPartitioningTest : TestBase - { - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest.cs deleted file mode 100644 index 11fe0098a2..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest.cs +++ /dev/null @@ -1,859 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; - -using NUnit.Framework; -using Test_NUnit; -using System.ComponentModel; -using System.Data.Linq.Mapping; - -using nwind; - -#if MONO_STRICT -using System.Data.Linq; -#if MONO -using DbLinq.Util; -#endif -#else -using DbLinq.Data.Linq; -using DbLinq.Util; -#endif - -#if ORACLE -using Id = System.Decimal; -#else -using Id = System.Int32; -#endif - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ - [TestFixture] - public class WriteTest : TestBase - { - [SetUp] - public void TestSetup() - { - base.BaseSetUp(); - - Profiler.At("START: WriteTest.TestSetup()"); - - Northwind db = CreateDB(); - // "[Products]" gets converted to "Products". - //This is a DbLinq-defined escape sequence, by Pascal. - //db.ExecuteCommand("DELETE FROM [Products] WHERE [ProductName] like 'temp%'"); - - var deleteProducts = db.Products.Where(p => p.ProductName.StartsWith("temp")).ToList(); - db.Products.DeleteAllOnSubmit(deleteProducts); - - var deleteCategories = db.Categories.Where(c => c.CategoryName.StartsWith("temp")).ToList(); - db.Categories.DeleteAllOnSubmit(deleteCategories); - - db.SubmitChanges(); - - Profiler.At("END: WriteTest.TestSetup()"); - } - - #region Tests 'E' test live object cache - [Test] - public void E1_LiveObjectsAreUnique() - { - //grab an object twice, make sure we get the same object each time - Northwind db = CreateDB(); - var q = from p in db.Products select p; - Product product1 = q.First(); - Product product2 = q.First(); - Assert.AreSame(product1, product2); - - string uniqueStr = "Unique" + Environment.TickCount; - product1.QuantityPerUnit = uniqueStr; - bool isSameObject1 = product2.QuantityPerUnit == uniqueStr; - Assert.IsTrue(isSameObject1, "Expected product1 and product2 to be the same live object, but their fields are different"); - object oProduct1 = product1; - object oProduct2 = product2; - bool isSameObject2 = oProduct1 == oProduct2; - Assert.IsTrue(isSameObject2, "Expected product1 and product2 to be the same live object, but their fields are different"); - } - - [Test] - public void E2_LiveObjectsAreUnique_Scalar() - { - //grab an object twice, make sure we get the same object each time - Northwind db = CreateDB(); - var q = from p in db.Products select p; - Product product1 = q.First(p => p.ProductName == "Chai"); - Product product2 = q.Single(p => p.ProductName == "Chai"); - bool isSame = object.ReferenceEquals(product1, product2); - Assert.IsTrue(isSame, "Expected product2 and product2 to be the same live object"); - } - -#if MYSQL && USE_ALLTYPES - [Test] - public void E3_UpdateEnum() - { - Northwind db = CreateDB(); - - var q = from at in db.Alltypes where at.int_ == 1 select at; - - Alltype row = q.First(); - DbLinq_EnumTest newValue = row.DbLinq_EnumTest == DbLinq_EnumTest.BB - ? DbLinq_EnumTest.CC - : DbLinq_EnumTest.BB; - - row.DbLinq_EnumTest = newValue; - - db.SubmitChanges(); - } -#endif - #endregion - - - #region Tests 'G' do insertion - private int insertProduct_priv() - { - Northwind db = CreateDB(); - - Product newProd = new Product(); - newProd.CategoryID = db.Categories.First().CategoryID; - newProd.ProductName = "Temp." + Environment.TickCount; - newProd.QuantityPerUnit = "33 1/2"; - db.Products.InsertOnSubmit(newProd); - db.SubmitChanges(); - AssertHelper.Greater(newProd.ProductID, 0, "After insertion, ProductID should be non-zero"); - //Assert.IsFalse(newProd.IsModified, "After insertion, Product.IsModified should be false"); - return (int)newProd.ProductID; //this test cab be used from delete tests - } - - [Test] - public void G1_InsertProduct() - { - insertProduct_priv(); - } - - [Test] - public void G2_DeleteTest() - { - int insertedID = insertProduct_priv(); - AssertHelper.Greater(insertedID, 0, "DeleteTest cannot operate if row was not inserted"); - - Northwind db = CreateDB(); - - var q = from p in db.Products where p.ProductID == insertedID select p; - List insertedProducts = q.ToList(); - foreach (Product insertedProd in insertedProducts) - { - db.Products.DeleteOnSubmit(insertedProd); - } - db.SubmitChanges(); - - int numLeft = (from p in db.Products where p.ProductID == insertedID select p).Count(); - Assert.AreEqual(numLeft, 0, "After deletion, expected count of Products with ID=" + insertedID + " to be zero, instead got " + numLeft); - } - - [Test] - public void G3_DeleteTest() - { - int insertedID = insertProduct_priv(); - AssertHelper.Greater(insertedID, 0, "DeleteTest cannot operate if row was not inserted"); - - Northwind db = CreateDB(); - - var q = from p in db.Products where p.ProductID == insertedID select p; - List insertedProducts = q.ToList(); - foreach (Product insertedProd in insertedProducts) - { - db.Products.DeleteOnSubmit(insertedProd); - } - db.SubmitChanges(); - - int numLeft = (from p in db.Products where p.ProductID == insertedID select p).Count(); - Assert.AreEqual(numLeft, 0, "After deletion, expected count of Products with ID=" + insertedID + " to be zero, instead got " + numLeft); - } - - [Test] - public void G4_DuplicateSubmitTest() - { - Northwind db = CreateDB(); - int productCount1 = db.Products.Count(); -#if INGRES && !MONO_STRICT - Product p_temp = new Product { ProductName = "temp_g4", Discontinued = "N" }; -#else - Product p_temp = new Product { ProductName = "temp_g4", Discontinued = false }; -#endif - db.Products.InsertOnSubmit(p_temp); - db.SubmitChanges(); - db.SubmitChanges(); - int productCount2 = db.Products.Count(); - Assert.IsTrue(productCount2 == productCount1 + 1, "Expected product count to grow by one"); - } - - /// - /// there is a bug in v0.14 where fields cannot be updated to be null. - /// - [Test] - public void G5_SetFieldToNull() - { - string productName = "temp_G5_" + Environment.TickCount; - Northwind db = CreateDB(); -#if ORACLE - //todo fix Oracle - Product p1 = new Product { ProductName = productName, Discontinued = false, UnitPrice = 11 }; -#elif INGRES && !MONO_STRICT - Product p1 = new Product { ProductName = productName, Discontinued = "N", UnitPrice = 11m }; -#else - Product p1 = new Product { ProductName = productName, Discontinued = false, UnitPrice = 11m }; -#endif - db.Products.InsertOnSubmit(p1); - db.SubmitChanges(); - - p1.UnitPrice = null; - db.SubmitChanges(); - - Northwind db3 = CreateDB(); - Product p3 = db3.Products.Single(p => p.ProductName == productName); - Assert.IsNull(p3.UnitPrice); - } - - /// - /// there is a bug in v0.14 where table Customers cannot be updated, - /// because quotes where missing around the primaryKey in the UPDATE statement. - /// - [Test] - public void G6_UpdateTableWithStringPK() - { - Northwind db = CreateDB(); - var customer = new Customer - { - CompanyName = "Test Company", - ContactName = "Test Customer", - CustomerID = "BT___", - }; - db.Customers.InsertOnSubmit(customer); - db.SubmitChanges(); - Customer BT = db.Customers.Single(c => c.CustomerID == "BT___"); - BT.Country = "U.K."; - db.SubmitChanges(); - - db.Customers.DeleteOnSubmit(customer); - db.SubmitChanges(); - } - - [Test] - public void G7_InsertTableWithStringPK() - { - Northwind db = CreateDB(); - db.ExecuteCommand("DELETE FROM [Customers] WHERE [CustomerID]='TEMP_'"); - - Customer custTemp = new Customer - { - CustomerID = "TEMP_", - CompanyName = "Magellan", - ContactName = "Antonio Pigafetta", - City = "Lisboa", - }; - db.Customers.InsertOnSubmit(custTemp); - db.SubmitChanges(); - } - - [Test] - public void G8_DeleteTableWithStringPK() - { - Northwind db = CreateDB(); - Customer cust = (from c in db.Customers - where c.CustomerID == "TEMP_" - select c).Single(); - db.Customers.DeleteOnSubmit(cust); - db.SubmitChanges(); - } - - [Test] - public void G9_UpdateOnlyChangedProperty() - { - Northwind db = CreateDB(); - var cust = (from c in db.Customers - select c).First(); - - var old = cust.City; - cust.City = "Tallinn"; - db.SubmitChanges(); - db.SubmitChanges(); // A second call does not update anything - - //exposes bug: - //Npgsql.NpgsqlException was unhandled - //Message="ERROR: 23502: null value in column \"companyname\" violates not-null constraint" - cust.City = old; - db.SubmitChanges(); - - } - -#if POSTGRES - - public class Northwind1 : Northwind - { - public Northwind1(System.Data.IDbConnection connection) - : base(connection) { } - - [System.Data.Linq.Mapping.Table(Name = "cust1")] - public class Cust1 - { - - string _customerid; - - [System.Data.Linq.Mapping.Column(Storage = "_customerid", - Name = "customerid", IsPrimaryKey = true, - DbType = "char(10)", - IsDbGenerated = true, - Expression = "nextval('seq8')")] - public string CustomerId - { - get { return _customerid; } - set { _customerid = value; } - } - - // Dummy property is required only as workaround over empty insert list bug - // If this bug is fixed this may be removed - string _dummy; - [System.Data.Linq.Mapping.Column(Storage = "_dummy", - DbType = "text", Name = "dummy")] - public string Dummy - { - get; - set; - } - - } - - public Table Cust1s - { - - get - { - return base.GetTable(); - } - } - } - - [Test] - public void G10_InsertCharSerialPrimaryKey() - { - Northwind dbo = CreateDB(); - Northwind1 db = new Northwind1(dbo.Connection); - try - { - db.ExecuteCommand( - @"create sequence seq8; -create temp table cust1 ( CustomerID char(10) DEFAULT nextval('seq8'), -dummy text -); -"); - - Table cust1s = - db.GetTable(); - - var cust1 = new Northwind1.Cust1(); - cust1.Dummy = ""; - db.Cust1s.InsertOnSubmit(cust1); - db.SubmitChanges(); - Assert.IsNotNull(cust1.CustomerId); - } - finally - { - try { db.ExecuteCommand("drop table cust1;"); } - catch { } - try { db.ExecuteCommand("drop sequence seq8;"); } - catch { } - } - } -#endif - - public class NorthwindG11 : Northwind - { - public NorthwindG11(System.Data.IDbConnection connection) - : base(connection) { } - - [Table(Name = "rid")] - public class Rid : INotifyPropertyChanged - { - - protected int _id; - - protected int _reanr; - - -#if INGRES - [System.Data.Linq.Mapping.Column(Storage = "_id", Name = "id", DbType = "integer", IsPrimaryKey = true, IsDbGenerated = true, Expression = "next value for rid_id1_seq")] -#else - [System.Data.Linq.Mapping.Column(Storage = "_id", Name = "id", DbType = "integer", IsPrimaryKey = true, IsDbGenerated = true, Expression = "nextval('rid_id1_seq')")] -#endif - public int Id - { - get { return _id; } - set - { - _id = value; - OnPropertyChanged("Id"); - } - } - -#if INGRES - [System.Data.Linq.Mapping.Column(Storage = "_reanr", Name = "reanr", DbType = "integer", IsDbGenerated = true, CanBeNull = false, Expression = "next value for rid_reanr_seq")] -#else - [System.Data.Linq.Mapping.Column(Storage = "_reanr", Name = "reanr", DbType = "integer", IsDbGenerated = true, CanBeNull = false, Expression = "nextval('rid_reanr_seq')")] -#endif - public int Reanr - { - get { return _reanr; } - set - { - _reanr = value; - OnPropertyChanged("Reanr"); - } - } - - - #region INotifyPropertyChanged handling - public event PropertyChangedEventHandler PropertyChanged; - protected virtual void OnPropertyChanged(string propertyName) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); - } - } - #endregion - - } - - - public Table Rids - { - get - { - return base.GetTable(); - } - } - } - -#if (POSTGRES || INGRES) && !MONO_STRICT -#if !DEBUG && POSTGRES - [Explicit] -#endif - [Test] - public void G11_TwoSequencesInTable() - { - Northwind dbo = CreateDB(); - NorthwindG11 db = new NorthwindG11(dbo.Connection); - - db.ExecuteCommand(@"create sequence rid_id1_seq"); - db.ExecuteCommand(@"create sequence rid_reanr_seq"); -#if INGRES - db.ExecuteCommand(@"create table Rid ( id int primary key DEFAULT rid_id1_seq.nextval, reanr int DEFAULT rid_reanr_seq.nextval)"); -#else - db.ExecuteCommand(@"create temp table Rid ( id int primary key DEFAULT nextval('rid_id1_seq'), reanr int DEFAULT nextval('rid_reanr_seq'))"); -#endif - DbLinq.Data.Linq.Table Rids = db.GetTable(); - - var Rid = new NorthwindG11.Rid(); - Rid.Reanr = 22; - Exception e = null; - db.Rids.InsertOnSubmit(Rid); - - Rid = new NorthwindG11.Rid(); - Rid.Reanr = 23; - db.Rids.InsertOnSubmit(Rid); - try - { - db.SubmitChanges(); - } - catch (Exception ex) - { - e = ex; - } - db.ExecuteCommand("drop table rid"); - db.ExecuteCommand("drop sequence rid_reanr_seq"); - db.ExecuteCommand("drop sequence rid_id1_seq"); - if (e != null) - { - throw e; - } - Assert.AreEqual(2, Rid.Id); - Assert.AreEqual(23, Rid.Reanr); - } - -#endif - -#if !DEBUG && (SQLITE || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G12_EmptyInsertList() - { - Northwind db = CreateDB(); - Region newRegion = new Region() { RegionDescription = "" }; // RegionDescription must be non-null - db.Regions.InsertOnSubmit(newRegion); - db.SubmitChanges(); - Assert.IsNotNull(newRegion.RegionID); - db.Regions.DeleteOnSubmit(newRegion); - db.SubmitChanges(); - } - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G13_ProvidedAutoGeneratedColumn() - { - Northwind db = CreateDB(); - Category newCat = new Category(); - newCat.CategoryID = 999; - newCat.CategoryName = "test"; - db.Categories.InsertOnSubmit(newCat); - db.SubmitChanges(); - // CategoryID is [Column(AutoSync=AutoSync.OnInsert)], so it's - // value is ignored on insert and will be updated - Assert.AreNotEqual(999, newCat.CategoryID); - // then, load our object - var checkCat = (from c in db.Categories where c.CategoryID == newCat.CategoryID select c).Single(); - Assert.AreEqual(newCat.CategoryID, checkCat.CategoryID); - // remove the whole thing - db.Categories.DeleteOnSubmit(newCat); - db.SubmitChanges(); - } - - - [Test] - public void G14_AutoGeneratedSupplierIdAndCompanyName() - { - Northwind db = CreateDB(); - Supplier supplier = new Supplier() - { - CompanyName = "Test Company", - }; - db.Suppliers.InsertOnSubmit(supplier); - db.SubmitChanges(); - Assert.IsNotNull(supplier.SupplierID); - Assert.AreEqual("Test Company", supplier.CompanyName); - db.Suppliers.DeleteOnSubmit(supplier); - db.SubmitChanges(); - } - - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void G15_CustomerIdUpdate() - { - //if you run this against Microsoft Linq-to-Sql, it throws an InvalidOperationEx: - //{"Value of member 'CustomerID' of an object of type 'Customers' changed. - //A member defining the identity of the object cannot be changed. - //Consider adding a new object with new identity and deleting the existing one instead."} - - Northwind db = CreateDB(); - Customer c1 = (from c in db.Customers - where c.CustomerID == "AIRBU" - select c).Single(); - c1.CustomerID = "TEMP"; - db.SubmitChanges(); - Customer c2 = (from c in db.Customers - where c.CustomerID == "TEMP" - select c).Single(); - - c2.CustomerID = "AIRBU"; - db.SubmitChanges(); - } - - /// - /// Quote from MSDN: - /// If the object requested by the query is easily identifiable as one - /// already retrieved, no query is executed. The identity table acts as a cache - /// of all previously retrieved objects - - /// From Matt Warren: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=345635&SiteID=1 - /// The cache is checked when the query is a simple table.Where(pred) or table.First(pred) where the - /// predicate refers only to the primary key. Otherwise the query is always sent and the cache only checked - /// after the results are retrieved. - /// The DLINQ cache is not distributed or shared, it is local and contained within the context. It is only a - /// referential identity cache used to guarantee that two reads of the same entity return the same instance. - /// You are not expected to hold the cache for an extended duration (except possibly for a client scenario), - /// or share it across threads, processes, or machines in a cluster. - /// -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G16_CustomerCacheHit() - { - Northwind db = CreateDB(); - Customer c1 = new Customer() { CustomerID = "temp", CompanyName = "Test", ContactName = "Test" }; - db.Customers.InsertOnSubmit(c1); - db.SubmitChanges(); - db.ExecuteCommand("delete from \"Customers\" WHERE \"CustomerID\"='temp'"); - - var res = db.Customers.First(c => c.CustomerID == "temp"); - Assert.IsNotNull(res); - } - - - -#if !DEBUG && (SQLITE || POSTGRES || MSSQL) - // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.WriteTest+OrderDetailWithSum' is not mapped as a Table. - [Explicit] -#endif - [Test] - public void G17_LocalPropertyUpdate() - { - Northwind dbo = CreateDB(); - NorthwindLocalProperty db = new NorthwindLocalProperty(dbo.Connection); - var det = db.OrderDetailWithSums.First(); - det.ChangeQuantity(); - Assert.AreEqual(0, db.GetChangeSet().Updates.Count); - db.SubmitChanges(); - } - - - class NorthwindLocalProperty : Northwind - { - internal NorthwindLocalProperty(System.Data.IDbConnection connection) - : base(connection) { } - - internal Table OrderDetailWithSums - { - get - { - return GetTable(); - } - } - - } - - class OrderDetailWithSum : OrderDetail, INotifyPropertyChanged - { - public event PropertyChangedEventHandler PropertyChanged; - protected virtual void OnPropertyChanged(string propertyName) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); - } - } - - internal decimal? Sum - { - get - { - return Quantity * UnitPrice; - } - } - - internal void ChangeQuantity() - { - OnPropertyChanged("Sum"); - } - } - -#if !DEBUG && (!(MSSQL && L2SQL)) - [Explicit] -#endif - // L2SQL: System.NotSupportedException : An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported. - [Test] - [ExpectedException(typeof(NotSupportedException))] - public void G18_UpdateWithAttach() - { - List list; - using (Northwind db = CreateDB()) - list = db.Orders.ToList(); - - using (Northwind db = CreateDB()) - { - var tbl = db.GetTable(); - foreach (var order in list) - { - if (order.Freight == null) - continue; - tbl.Attach(order); - } - db.SubmitChanges(); - } - } - - -#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL)) - [Explicit] -#endif - [Test] - public void G19_ExistingCustomerCacheHit() - { - Northwind db = CreateDB(); - string id = "ALFKI"; - Customer c1 = (from c in db.Customers - where id == c.CustomerID - select c).Single(); - - db.Connection.ConnectionString = null; - - var x = db.Customers.First(c => id == c.CustomerID); - } - - - [Test] - public void G20_CustomerCacheHitComparingToLocalVariable() - { - Northwind db = CreateDB(); - try - { - Customer c1 = new Customer() { CustomerID = "temp", CompanyName = "Test", ContactName = "Test" }; - db.Customers.InsertOnSubmit(c1); - db.SubmitChanges(); - - string id = "temp"; - var res = from c in db.Customers - where c.CustomerID == id - select c; - - Assert.AreEqual(1, res.Count(), "#1"); - - db.ExecuteCommand("DELETE FROM \"Customers\" WHERE \"CustomerID\"='temp'"); - - res = from c in db.Customers - where c.CustomerID == id - select c; - Assert.AreEqual(0, res.Count(), "#2"); - } - finally - { - db.ExecuteCommand("DELETE FROM \"Customers\" WHERE \"CustomerID\"='temp'"); - } - } - - #endregion - - [Test] - public void Update01() - { - var db = CreateDB(); - Employee p = db.Employees.First(r => r.LastName == "Fuller"); - - DateTime beforeDateTime = p.BirthDate.Value; - DateTime now = beforeDateTime.AddMinutes(10); - - p.BirthDate = now; - db.SubmitChanges(); - - Employee p2 = db.Employees.First(r => r.LastName == "Fuller"); - Assert.AreEqual(p2.BirthDate, now); - - //undo changes - p.BirthDate = beforeDateTime; - db.SubmitChanges(); - } - -#if !DEBUG && SQLITE - [Explicit] -#endif - [Test] - public void InsertAndDeleteWithDependencies() - { - const string newCategoryName = "temp Category"; - const string newProduct1 = "temp First Test Product"; - const string newProduct2 = "temp Second Test Product"; - - var db = CreateDB(); - - var product = new Product - { -#if INGRES - Discontinued = "Y", -#else - Discontinued = true, -#endif - ProductName = newProduct1, - }; - - var category = new Category - { - CategoryName = newCategoryName, - Description = "Insert Description Here", - }; - category.Products.Add(product); - - Assert.AreEqual(0, category.CategoryID); - Assert.AreEqual(0, product.CategoryID.Value); - - db.Categories.InsertOnSubmit(category); - db.SubmitChanges(); - - Assert.AreEqual(1, db.Categories.Where(c => c.CategoryName == newCategoryName).Count()); - Assert.AreNotEqual(0, category.CategoryID); - Assert.AreEqual(1, db.Products.Where(p => p.ProductName == newProduct1).Count()); - Assert.AreEqual(category.CategoryID, product.CategoryID.Value); - - var p2 = new Product - { -#if INGRES - Discontinued = "Y", -#else - Discontinued = true, -#endif - ProductName = newProduct2 - }; - category.Products.Add(p2); - db.SubmitChanges(); - - Assert.AreEqual(1, db.Products.Where(p => p.ProductName == newProduct2).Count()); - - db.Products.DeleteOnSubmit(product); - db.Products.DeleteOnSubmit(p2); - db.Categories.DeleteOnSubmit(category); - db.SubmitChanges(); - - Assert.AreEqual(0, db.Categories.Where(c => c.CategoryName == newCategoryName).Count()); - Assert.AreEqual(0, db.Products.Where(p => p.ProductName == newProduct1).Count()); - Assert.AreEqual(0, db.Products.Where(p => p.ProductName == newProduct2).Count()); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest_BulkInsert.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest_BulkInsert.cs deleted file mode 100644 index 9c067b72ee..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/Providers/WriteTest_BulkInsert.cs +++ /dev/null @@ -1,95 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Linq.Expressions; -using NUnit.Framework; -using Test_NUnit; - -using nwind; - -// test ns -#if MYSQL - namespace Test_NUnit_MySql -#elif ORACLE && ODP - namespace Test_NUnit_OracleODP -#elif ORACLE - namespace Test_NUnit_Oracle -#elif POSTGRES - namespace Test_NUnit_PostgreSql -#elif SQLITE - namespace Test_NUnit_Sqlite -#elif INGRES - namespace Test_NUnit_Ingres -#elif MSSQL && L2SQL - namespace Test_NUnit_MsSql_Strict -#elif MSSQL - namespace Test_NUnit_MsSql -#elif FIREBIRD - namespace Test_NUnit_Firebird -#endif -{ -#if !MONO_STRICT - [TestFixture] - public class WriteTest_BulkInsert : TestBase - { -#if !DEBUG && (SQLITE || MSSQL) - [Explicit] -#endif - [Test] - public void BI01_InsertProducts() - { - int initialCount = 0, countAfterBulkInsert = 0; - - Northwind db = CreateDB(); - initialCount = db.Products.Count(); - - //DbLinq.vendor.mysql.MySqlVendor.UseBulkInsert[db.Products] = 3; //insert three rows at a time - // picrap: inject this information in the IVendor (and check this is necessary) - - db.Products.BulkInsert(new[] - { - NewProduct("tmp_ProductA"), - NewProduct("tmp_ProductB"), - NewProduct("tmp_ProductC"), - NewProduct("tmp_ProductD") - }); - db.SubmitChanges(); - - //confirm that we indeed inserted four rows: - Northwind db2 = CreateDB(); - countAfterBulkInsert = db2.Products.Count(); - Assert.IsTrue(countAfterBulkInsert == initialCount + 4); - - //clean up - base.ExecuteNonQuery("DELETE FROM Products WHERE ProductName LIKE 'tmp_%'"); - } - } -#endif -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/System.Data.Linq.Mapping/ColumnAttributeTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/System.Data.Linq.Mapping/ColumnAttributeTest.cs deleted file mode 100755 index 5ff896778a..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/System.Data.Linq.Mapping/ColumnAttributeTest.cs +++ /dev/null @@ -1,64 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2010 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Data.SqlClient; -using System.IO; -using System.Linq; -using System.Reflection; - -using System.Data.Linq.Mapping; - -using DbLinq.Null; -using NUnit.Framework; - -namespace System.Data.Linq.Mapping.Test -{ - [TestFixture] - public class ColumnAttributeTest - { - [Test] - public void Ctor() - { - var c = new ColumnAttribute(); - Assert.AreEqual(AutoSync.Default, c.AutoSync); - Assert.AreEqual(true, c.CanBeNull); - Assert.AreEqual(null, c.DbType); - Assert.AreEqual(null, c.Expression); - Assert.AreEqual(false, c.IsDbGenerated); - Assert.AreEqual(false, c.IsDiscriminator); - Assert.AreEqual(false, c.IsVersion); - Assert.AreEqual(UpdateCheck.Always, c.UpdateCheck); - Assert.AreEqual(false, c.IsPrimaryKey); - Assert.AreEqual(null, c.Name); - Assert.AreEqual(null, c.Storage); - Assert.AreEqual(c.GetType(), c.TypeId); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Test/TypeContextTest.cs b/mcs/class/System.Data.Linq/src/DbLinq/Test/TypeContextTest.cs deleted file mode 100644 index e07cd2a18d..0000000000 --- a/mcs/class/System.Data.Linq/src/DbLinq/Test/TypeContextTest.cs +++ /dev/null @@ -1,61 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System.Globalization; -using DbLinq.Schema; -using DbLinq.Schema.Implementation; -using DbLinq.Util; -using NUnit.Framework; - -namespace DbLinqTest -{ - /// - /// Summary description for TypeContextTest - /// - [TestFixture] - public class TypeContextTest - { - public enum SomeEnum - { - A = 1, - B = 2, - } - - [Test] - public void ToEnumTest1() - { - var e = TypeConvert.ToEnum("B"); - Assert.AreEqual(SomeEnum.B, e); - } - - [Test] - public void ToEnumTest2() - { - var e = TypeConvert.ToEnum(2); - Assert.AreEqual(SomeEnum.B, e); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbMetal/AllTypes all to Cs.txt b/mcs/class/System.Data.Linq/src/DbMetal/AllTypes all to Cs.txt deleted file mode 100644 index 97371e4e0a..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/AllTypes all to Cs.txt +++ /dev/null @@ -1,7 +0,0 @@ -# note that databaserver can be specified in %DbLinqServer%, and is localhost by default (if not specified) -#-code:AllTypesSqlite1.cs -provider:Sqlite -conn="data source=../../Northwind.db3" -#-code:AllTypesOracle1.cs -provider:Oracle -user=Northwind -#-code:AllTypesOraODP1.cs -provider:OracleODP -user=Northwind -#-code:AllTypesPgsql1.cs -provider:PostgreSQL -database=northwind -#-code:AllTypesIngres1.cs -provider:Ingres --code:AllTypesMySql1.cs -provider:MySQL diff --git a/mcs/class/System.Data.Linq/src/DbMetal/AllTypes to Cs.txt b/mcs/class/System.Data.Linq/src/DbMetal/AllTypes to Cs.txt deleted file mode 100644 index b8b4bbd48b..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/AllTypes to Cs.txt +++ /dev/null @@ -1,2 +0,0 @@ -# DbMetal "@Db to Cs.txt" -/database=AllTypes /server=%DbLinqServer??localhost /user=LinqUser /password=linq2 /namespace=nwind /sprocs /entityInterfaces=INotifyPropertyChanged /pluralize "@AllTypes all to Cs.txt" /culture="en" diff --git a/mcs/class/System.Data.Linq/src/DbMetal/DB all to Cs.txt b/mcs/class/System.Data.Linq/src/DbMetal/DB all to Cs.txt deleted file mode 100644 index af123ff837..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/DB all to Cs.txt +++ /dev/null @@ -1,8 +0,0 @@ -# note that databaserver can be specified in %DbLinqServer%, and is localhost by default (if not specified) -/code:NorthwindFirebird1.cs /provider:Firebird /database="c:\program files\Firebird\Firebird_2_1\examples\nwind\Northwind.FDB" -/code:NorthwindSqlite1.cs /provider:Sqlite /conn="data source=../../Northwind.db3" -/code:NorthwindIngres1.cs /provider:Ingres -/code:NorthwindOraODP1.cs /provider:OracleODP /user=Northwind -/code:NorthwindOracle1.cs /provider:Oracle /user=Northwind -/code:NorthwindMySql1.cs /provider:MySQL -/code:NorthwindPgsql1.cs /provider:PostgreSQL diff --git a/mcs/class/System.Data.Linq/src/DbMetal/DB all to DBML.txt b/mcs/class/System.Data.Linq/src/DbMetal/DB all to DBML.txt deleted file mode 100644 index bf65b50d07..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/DB all to DBML.txt +++ /dev/null @@ -1,7 +0,0 @@ -# note that databaserver can be specified in %DbLinqServer%, and is localhost by default (if not specified) --dbml:NorthwindSqlite1.dbml -provider:Sqlite -conn="data source=../../Northwind.db3" --dbml:NorthwindOracle1.dbml -provider:Oracle -user=Northwind --dbml:NorthwindOraODP1.dbml -provider:OracleODP -user=Northwind --dbml:NorthwindPgsql1.dbml -provider:PostgreSQL -database=northwind --dbml:NorthwindIngres1.dbml -provider:Ingres --dbml:NorthwindMySql1.dbml -provider:MySQL diff --git a/mcs/class/System.Data.Linq/src/DbMetal/DB to Cs.txt b/mcs/class/System.Data.Linq/src/DbMetal/DB to Cs.txt deleted file mode 100644 index 7b03e05ea5..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/DB to Cs.txt +++ /dev/null @@ -1,3 +0,0 @@ -# DbMetal "@Db to Cs.txt" -#/database=Northwind /server=%DbLinqServer??localhost /user=LinqUser /password=linq2 /namespace=nwind /sprocs /entityInterfaces=INotifyPropertyChanged /pluralize "@DB all to Cs.txt" /culture="en" -/database=Northwind /server=%DbLinqServer??localhost /user=LinqUser /password=linq2 /namespace=nwind /sprocs /entityInterfaces=INotifyPropertyChanged /pluralize "@DB all to Cs.txt" /culture="en" /no-generateEqualsAndHash /entityAttributes=System.Runtime.Serialization.DataContract /memberAttributes=System.Runtime.Serialization.DataMember diff --git a/mcs/class/System.Data.Linq/src/DbMetal/DB to DBML.txt b/mcs/class/System.Data.Linq/src/DbMetal/DB to DBML.txt deleted file mode 100644 index 75a0416ba2..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/DB to DBML.txt +++ /dev/null @@ -1,2 +0,0 @@ -# DbMetal "@Db to DBML.txt" -/database=Northwind /server=%DbLinqServer??localhost /user=LinqUser /password=linq2 /namespace=nwind /sprocs /entityInterfaces=INotifyPropertyChanged /pluralize "@DB all to DBML.txt" diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/DbMetal/Properties/AssemblyInfo.cs deleted file mode 100644 index 6ca42bc77d..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System.Reflection; -using System.Runtime.InteropServices; -using DbLinq.Factory; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DbMetal")] -[assembly: AssemblyDescription("DbLinq DbMetal code generator")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7ae782c4-e495-44ff-821d-8580dbe184d4")] - -[assembly: DbLinq] diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Test/AppRunner.cs b/mcs/class/System.Data.Linq/src/DbMetal/Test/AppRunner.cs deleted file mode 100755 index 6d40227356..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Test/AppRunner.cs +++ /dev/null @@ -1,108 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2010 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using DbMetal; -using NUnit.Framework; - -namespace DbMetal_Test_Sqlite -{ - class DbMetalAppDomainSetup : MarshalByRefObject - { - public void SetStandardError(TextWriter stderr) - { - Console.SetError(stderr); - } - - public void Run(string[] args) - { - Program.Main(args); - } - } - - static class AppRunner - { -#if MONO_STRICT - const string Program = "sqlmetal"; - const string DbConnectionProvider = "Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite"; - const string DbLinqSchemaLoader = "DbLinq.Vendor.DbSchemaLoader, System.Data.Linq"; - const string SqlDialect = "DbLinq.Sqlite.SqliteVendor, System.Data.Linq"; -#else - const string Program = "DbMetal"; - const string DbConnectionProvider = "System.Data.SQLite.SQLiteConnection, System.Data.SQLite"; - const string DbLinqSchemaLoader = "DbLinq.Vendor.DbSchemaLoader, DbLinq"; - const string SqlDialect = "DbLinq.Sqlite.SqliteVendor, DbLinq.Sqlite"; -#endif - - public static void WithinAppDomain(string expectedFile, string createdFile, IEnumerable args) - { - var bd = AppDomain.CurrentDomain.BaseDirectory; - var info = new AppDomainSetup() - { - ApplicationBase = bd, - ApplicationName = Program + ".exe", - ConfigurationFile = Program + ".exe.config", - }; - AppDomain ad = AppDomain.CreateDomain("DbMetal Sqlite Test", null, info); - var t = typeof(DbMetalAppDomainSetup); - var s = (DbMetalAppDomainSetup)ad.CreateInstanceAndUnwrap(t.Assembly.GetName().Name, t.FullName); - var stderr = new StringWriter(); - s.SetStandardError(stderr); - var testdir = Path.Combine(bd, Path.Combine("..", "tests")); - var expectedDir = Path.Combine(testdir, "expected"); - s.Run(new []{ - "/provider:Sqlite", - "/conn:Data Source=" + Path.Combine(testdir, "Northwind.db3"), - }.Concat(args).ToArray()); - AppDomain.Unload(ad); - if (stderr.GetStringBuilder().Length != 0) - Console.Error.Write(stderr.GetStringBuilder().ToString()); - Assert.AreEqual(0, stderr.GetStringBuilder().Length); - FileAssert.AreEqual(Path.Combine(expectedDir, string.Format (expectedFile, Program)), createdFile); - File.Delete(createdFile); - } - - public static void WithDbSchemaLoader(string expectedFile, string createdFile, IEnumerable args) - { - var bd = AppDomain.CurrentDomain.BaseDirectory; - var testdir = Path.Combine(bd, Path.Combine("..", "tests")); - var expectedDir = Path.Combine(testdir, "expected"); - - DbMetal.Program.Main(new []{ - "/conn:Data Source=" + Path.Combine(testdir, "Northwind.db3"), - "--with-dbconnection=" + DbConnectionProvider, - "--with-schema-loader=" + DbLinqSchemaLoader, - "--with-sql-dialect=" + SqlDialect, - }.Concat(args).ToArray()); - - FileAssert.AreEqual(Path.Combine(expectedDir, string.Format(expectedFile, Program)), createdFile); - File.Delete(createdFile); - } - } -} \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Test/CreateDbmlFromSqliteDbTest.cs b/mcs/class/System.Data.Linq/src/DbMetal/Test/CreateDbmlFromSqliteDbTest.cs deleted file mode 100755 index f3ac66bdc0..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Test/CreateDbmlFromSqliteDbTest.cs +++ /dev/null @@ -1,55 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2010 Novell, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.IO; -using DbMetal; -using NUnit.Framework; - -namespace DbMetal_Test_Sqlite -{ - [TestFixture] - public class CreateDbmlFromSqliteDbTest - { - [Test] - public void CreateViaProvider() - { - var created = "Northwind.dbml"; - AppRunner.WithinAppDomain("Northwind.Sqlite-{0}.dbml", created, new[]{ - "/dbml:" + created, - }); - } - - [Test] - public void CreateViaDbSchemaLoader() - { - var created = "Northwind.dbml"; - AppRunner.WithDbSchemaLoader("Northwind.Sqlite+DbSchemaLoader-{0}.dbml", created, new[]{ - "/dbml:" + created, - }); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Test/CreateEntitiesFromSqliteDbTest.cs b/mcs/class/System.Data.Linq/src/DbMetal/Test/CreateEntitiesFromSqliteDbTest.cs deleted file mode 100755 index cfd8702629..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Test/CreateEntitiesFromSqliteDbTest.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System; -using System.IO; -using DbMetal; -using NUnit.Framework; - -namespace DbMetal_Test_Sqlite -{ - [TestFixture] - public class CreateEntitiesFromSqliteDbTest - { - [Test] - public void CreateViaProvider() - { - var created = "Northwind.Sqlite.cs"; - AppRunner.WithinAppDomain("Northwind.Sqlite-{0}.cs", created, new[]{ - "/code:" + created, - "/database:Northwind", - "--generate-equals-hash", - "--generate-timestamps-", - "/namespace:nwind", - "/pluralize", - }); - } - - [Test] - public void CreateViaDbSchemaLoader() - { - var created = "Northwind.Sqlite.cs"; - AppRunner.WithDbSchemaLoader("Northwind.Sqlite+DbSchemaLoader-{0}.cs", created, new[]{ - "/code:" + created, - "/database:Northwind", - "--generate-equals-hash", - "--generate-timestamps-", - "/namespace:nwind", - "/pluralize", - }); - } - } -} \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Test/EnglishWordsTest.cs b/mcs/class/System.Data.Linq/src/DbMetal/Test/EnglishWordsTest.cs deleted file mode 100644 index eb68000e94..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Test/EnglishWordsTest.cs +++ /dev/null @@ -1,172 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using DbMetal.Language; -using System.Collections.Generic; -using NUnit.Framework; - -// These don't build in tools/sqlmetal -#if FALSE - -namespace DbLinqTest -{ - - - /// - ///This is a test class for EnglishWordsTest and is intended - ///to contain all EnglishWordsTest Unit Tests - /// - [TestFixture] - public class EnglishWordsTest - { - public EnglishWordsTest() - { - englishWords = new EnglishWords(); - englishWords.Load(); - } - - public static void AssertAreIListEqual(IList a, IList b) - { - Assert.AreEqual(b.Count, a.Count); - for (int index = 0; index < a.Count; index++) - Assert.AreEqual(b[index], a[index]); - } - - public static void AssertAreEqual(IList a, params string[] b) - { - AssertAreIListEqual(a, b); - } - - /* - hiredate - quantityperunit - unitsinstock - fkterrregion - fkprodcatg - */ - - private EnglishWords englishWords; - - [Test] - public void GetWordsTest_HelloWorld() - { - var actual = englishWords.GetWords("helloworld"); - AssertAreEqual(actual, "hello", "world"); - } - - [Test] - public void GetWordsTest_HireDate() - { - var actual = englishWords.GetWords("hiredate"); - AssertAreEqual(actual, "hire", "date"); - } - - [Test] - public void GetWordsTest_QuantityPerUnit() - { - var actual = englishWords.GetWords("quantityperunit"); - AssertAreEqual(actual, "quantity", "per", "unit"); - } - - [Test] - public void GetWordsTest_UnitsInStock() - { - var actual = englishWords.GetWords("unitsinstock"); - AssertAreEqual(actual, "units", "in", "stock"); - } - // we can't rely on this test, since "terr" is not a word, so the algorithm returs "ft" "t" "err" "region" - //[Test] - //public void GetWords4Test() - //{ - // var actual = englishWords.GetWords("fkterrregion"); - // AssertAreEqual(actual, "fk", "terr", "region"); - //} - [Test] - public void GetWordsTest_FkProdCatG() - { - var actual = englishWords.GetWords("fkprodcatg"); - AssertAreEqual(actual, "fk", "prod", "cat", "g"); - } - - [Test] - public void GetWordsTest_CatG() - { - var actual = englishWords.GetWords("catg"); - AssertAreEqual(actual, "cat", "g"); - } - - [Test] - public void GetWordsTest_CustomerId() - { - var actual = englishWords.GetWords("customerid"); - AssertAreEqual(actual, "customer", "id"); - } - - [Test] - public void GetWordsTest_SupplierId() - { - var actual = englishWords.GetWords("supplierid"); - AssertAreEqual(actual, "supplier", "id"); - } - - // picrap: this one's failing, and I think we're at the limits of words recognition - // (at least at the limits of what I'm able to do) - //[TestMethod] - //[Test] - //public void GetWordsTest_IntType() - //{ - // var actual = englishWords.GetWords("inttype"); - // AssertAreEqual(actual, "int", "type"); - //} - - [Test] - public void GetWordsTest_AllIntType() - { - var actual = englishWords.GetWords("allinttype"); - AssertAreEqual(actual, "all", "int", "type"); - } - - [Test] - public void GetNoteTest_ToothPaste() - { - Assert.IsTrue(englishWords.GetNote(new[] { "toothpaste" }) > englishWords.GetNote(new[] { "tooth", "paste" })); - } - - [Test] - public void GetNoteTest_PerUnit() - { - Assert.IsTrue(englishWords.GetNote(new[] { "per", "unit" }) > englishWords.GetNote(new[] { "peru", "nit" })); - } - - [Test] - public void GetNoteTest_Hello() - { - Assert.IsTrue(englishWords.GetNote(new[] { "hello" }) > englishWords.GetNote(new[] { "h", "e", "l", "l", "o" })); - } - } -} - -#endif diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Test/FrenchWordsTest.cs b/mcs/class/System.Data.Linq/src/DbMetal/Test/FrenchWordsTest.cs deleted file mode 100644 index aca18dccf7..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Test/FrenchWordsTest.cs +++ /dev/null @@ -1,117 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using DbMetal.Language; -using System.Collections.Generic; -using NUnit.Framework; - -// These don't build in tools/sqlmetal -#if FALSE - -namespace DbLinqTest -{ - - - /// - ///This is a test class for EnglishWordsTest and is intended - ///to contain all EnglishWordsTest Unit Tests - /// - [TestFixture] - public class FrenchWordsTest - { - public FrenchWordsTest() - { - frenchWords = new FrenchWords(); - frenchWords.Load(); - } - - public static void AssertAreIListEqual(IList a, IList b) - { - Assert.AreEqual(b.Count, a.Count); - for (int index = 0; index < a.Count; index++) - Assert.AreEqual(b[index], a[index]); - } - - public static void AssertAreEqual(IList a, params string[] b) - { - AssertAreIListEqual(a, b); - } - - /* - hiredate - quantityperunit - unitsinstock - fkterrregion - fkprodcatg - */ - - private FrenchWords frenchWords; - - [Test] - public void GetWordsTest_SalutMonde() - { - var actual = frenchWords.GetWords("salutmonde"); - AssertAreEqual(actual, "salut", "monde"); - } - - [Test] - public void GetWordsTest_MTER() - { - var actual = frenchWords.GetWords("montailleurestriche"); - AssertAreEqual(actual, "mon", "tailleur", "est", "riche"); - } - - [Test] - public void PluralizeTest_Oeuf() - { - var actual = frenchWords.Pluralize("œuf"); - Assert.AreEqual("œufs", actual); - } - - [Test] - public void PluralizeTest_Bijou() - { - var actual = frenchWords.Pluralize("bijou"); - Assert.AreEqual("bijoux", actual); - } - - [Test] - public void PluralizeTest_Cou() - { - var actual = frenchWords.Pluralize("cou"); - Assert.AreEqual("cous", actual); - } - - [Test] - public void PluralizeTest_Gas() - { - var actual = frenchWords.Pluralize("gas"); - Assert.AreEqual("gas", actual); - } - } -} - -#endif diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Test/NameFormatterTest.cs b/mcs/class/System.Data.Linq/src/DbMetal/Test/NameFormatterTest.cs deleted file mode 100644 index 4c2da226cd..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/Test/NameFormatterTest.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -using System.Globalization; -using DbLinq; -using DbLinq.Factory; -using DbLinq.Schema; -using DbLinq.Schema.Implementation; -using DbLinq.Util; -using DbMetal; -using DbMetal.Language; -using NUnit.Framework; - -// These don't build in tools/sqlmetal -#if FALSE - -using Case = DbLinq.Schema.Case; -using WordsExtraction = DbLinq.Schema.WordsExtraction; - -namespace DbLinqTest -{ - /// - /// Test for NameFormatter - /// - [TestFixture] - public class NameFormatterTest - { - private NameFormat InvariantNameFormat - { - get - { - return new NameFormat(false, Case.PascalCase, CultureInfo.InvariantCulture); - } - } - - private NameFormat EnglishNameFormat - { - get - { - Reference.DbLinqLocalizations(); - return new NameFormat(false, Case.NetCase, new CultureInfo("en-us")); - } - } - - private NameFormat EnglishNameFormatCamelCase - { - get - { - Reference.DbLinqLocalizations(); - return new NameFormat(false, Case.camelCase, new CultureInfo("en-us")); - } - } - - [Test] - public void InvalidCharactersCaseTest() - { - var nf = new NameFormatter(); - var tn = nf.GetTableName("A#?", WordsExtraction.FromCase, InvariantNameFormat); - Assert.AreEqual("A__", tn.ClassName); - } - - [Test] - public void InvalidCharactersLanguageTest() - { - var nf = new NameFormatter(); - var tn = nf.GetTableName("A#?", WordsExtraction.FromDictionary, InvariantNameFormat); - Assert.AreEqual("A__", tn.ClassName); - } - - [Test] - public void InvalidCharactersLanguage2Test() - { - try - { - ObjectFactory.Current.Register(typeof(EnglishWords)); - var nf = new NameFormatter(); - var tn = nf.GetTableName("Test#?", WordsExtraction.FromDictionary, EnglishNameFormat); - Assert.AreEqual("Test__", tn.ClassName); - } - finally - { - ObjectFactory.Current.Unregister(typeof(EnglishWords)); - } - } - - [Test] - public void GetWordsTest_MyTableName() - { - try - { - ObjectFactory.Current.Register(typeof(EnglishWords)); - var nf = new NameFormatter(); - var tn = nf.GetTableName("MY_TABLE_NAME_", WordsExtraction.FromDictionary, EnglishNameFormat); - Assert.AreEqual("MyTableName", tn.ClassName); - } - finally - { - ObjectFactory.Current.Unregister(typeof(EnglishWords)); - } - } - - [Test] - public void GetWordsTest_MyTableName2() - { - try - { - ObjectFactory.Current.Register(typeof(EnglishWords)); - var nf = new NameFormatter(); - var tn = nf.GetTableName("_MY_TABLE__NAME", WordsExtraction.FromDictionary, EnglishNameFormat); - Assert.AreEqual("MyTableName", tn.ClassName); - } - finally - { - ObjectFactory.Current.Unregister(typeof(EnglishWords)); - } - } - - [Test] - public void GetWordsTest_MyColumnName() - { - try - { - ObjectFactory.Current.Register(typeof(EnglishWords)); - var nf = new NameFormatter(); - ColumnName cn = nf.GetColumnName("MY_COLUMN_NAME_", WordsExtraction.FromDictionary, EnglishNameFormat); - Assert.AreEqual("MyColumnName", cn.PropertyName); - cn = nf.GetColumnName("MY_COLUMN_NAME_", WordsExtraction.FromDictionary, EnglishNameFormatCamelCase); - Assert.AreEqual("myColumnName", cn.PropertyName); - } - finally - { - ObjectFactory.Current.Unregister(typeof(EnglishWords)); - } - } - } -} - -#endif diff --git a/mcs/class/System.Data.Linq/src/DbMetal/oraFieldRenames.xml b/mcs/class/System.Data.Linq/src/DbMetal/oraFieldRenames.xml deleted file mode 100644 index 08534b1a32..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/oraFieldRenames.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/src/DbMetal/pgsqlFieldRenames.xml b/mcs/class/System.Data.Linq/src/DbMetal/pgsqlFieldRenames.xml deleted file mode 100644 index 999887f098..0000000000 --- a/mcs/class/System.Data.Linq/src/DbMetal/pgsqlFieldRenames.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Program.cs b/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Program.cs deleted file mode 100644 index 85ece4c7d6..0000000000 --- a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; - -namespace NUnitConsoleRunner -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - string[] args = new string[] { "../DbLinq-Sqlite-Sqlserver.nunit" }; - NUnit.Gui.AppEntry.Main(args); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/AssemblyInfo.cs deleted file mode 100644 index d869a5bf03..0000000000 --- a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NUnitConsoleRunner")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NUnitConsoleRunner")] -[assembly: AssemblyCopyright("Copyright © 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2e39c94e-8988-41cf-a6a4-81a82fa02066")] diff --git a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Resources.Designer.cs b/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Resources.Designer.cs deleted file mode 100644 index fb84fc9f4a..0000000000 --- a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.3082 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NUnitConsoleRunner.Properties -{ - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NUnitConsoleRunner.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Settings.Designer.cs b/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Settings.Designer.cs deleted file mode 100644 index 457989b199..0000000000 --- a/mcs/class/System.Data.Linq/src/Tools/NUnitRunner/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.3082 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NUnitConsoleRunner.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Program.cs b/mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Program.cs deleted file mode 100644 index c200e2ace0..0000000000 --- a/mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Program.cs +++ /dev/null @@ -1,133 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion - -namespace TestNamespaceWriter -{ - using System; - using System.Configuration; - using System.IO; - using System.Text; - using System.Text.RegularExpressions; - - class Program - { - /// - /// Processes the specified directory. - /// - /// The directory. - static void ProcessDirectory(string directory) - { - foreach (var file in Directory.GetFiles(directory, "*.cs")) - { - ProcessFile(file); - } - foreach (var subDirectory in Directory.GetDirectories(directory)) - { - ProcessDirectory(subDirectory); - } - } - - /// - /// Processes the file. - /// - /// The file. - private static void ProcessFile(string file) - { - string codeText; - using (var textStream = File.OpenText(file)) - { - codeText = textStream.ReadToEnd(); - } - if (IsTest(codeText)) - { - Console.WriteLine("Processing {0}", Path.GetFileName(file)); - codeText = SetNamespaces(codeText); - using (var fileStream = File.Create(file)) - using (var textStream = new StreamWriter(fileStream, Encoding.UTF8)) - { - textStream.Write(codeText); - } - } - } - - private const string Marker = "// test ns"; - - private static readonly Regex HeaderEx = new Regex(Regex.Escape(Marker) + "(?[^\n\r]*)?" + "(?.*?){", - RegexOptions.Compiled | RegexOptions.Singleline); - - /// - /// Sets the namespaces. - /// - /// The text. - /// - private static string SetNamespaces(string text) - { - return HeaderEx.Replace(text, delegate(Match match) - { - var ns = match.Groups["ns"].Value.Trim(); - var newHeader = Marker + " " + ns + "\r\n" + GetNamespaces(ns) + "{"; - return newHeader; - }); - } - - private static string GetNamespaces(string ns) - { - var namespacesBuilder = new StringBuilder(); - foreach (string key in ConfigurationManager.AppSettings) - { - if (namespacesBuilder.Length == 0) - namespacesBuilder.Append("#if "); - else - namespacesBuilder.Append("#elif "); - - var keys = key.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - var literalKeys = string.Join(" && ", keys); - namespacesBuilder.AppendLine(literalKeys); - namespacesBuilder.AppendFormat(" namespace {0}{1}\r\n", ConfigurationManager.AppSettings[key], - string.IsNullOrEmpty(ns) ? "" : "." + ns); - } - namespacesBuilder.AppendLine("#endif"); - return namespacesBuilder.ToString(); - } - - /// - /// Determines whether the specified code text is test. - /// - /// The code text. - /// - /// true if the specified code text is test; otherwise, false. - /// - private static bool IsTest(string codeText) - { - return codeText.Contains("\r\n" + Marker); - } - - static void Main(string[] args) - { - ProcessDirectory(@"..\..\..\.."); - } - } -} diff --git a/mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Properties/AssemblyInfo.cs b/mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Properties/AssemblyInfo.cs deleted file mode 100644 index 57032638bc..0000000000 --- a/mcs/class/System.Data.Linq/src/Tools/TestNamespaceWriter/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TestNamespaceWriter")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TestNamespaceWriter")] -[assembly: AssemblyCopyright("Copyright © 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a4b927a0-9719-47b5-ad36-21ecf88d7978")] diff --git a/mcs/class/System.Data.Linq/src/readme.txt b/mcs/class/System.Data.Linq/src/readme.txt deleted file mode 100644 index 04185f036d..0000000000 --- a/mcs/class/System.Data.Linq/src/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -DbLinq 0.18 - -We are in need of additional developers. If you'd like to help out with the -project please talk to us. - -Report bugs to our google project at http://code.google.com/p/dblinq2007/ diff --git a/mcs/class/System.Data/Test/System.Data.SqlTypes/SqlStringTest.cs b/mcs/class/System.Data/Test/System.Data.SqlTypes/SqlStringTest.cs index 092ac25e6c..348c5771ba 100644 --- a/mcs/class/System.Data/Test/System.Data.SqlTypes/SqlStringTest.cs +++ b/mcs/class/System.Data/Test/System.Data.SqlTypes/SqlStringTest.cs @@ -68,6 +68,7 @@ namespace MonoTests.System.Data.SqlTypes // Test constructor [Test] + [Category("AndroidSdksNotWorking")] public void Create() { // SqlString (String) @@ -342,6 +343,7 @@ namespace MonoTests.System.Data.SqlTypes } [Test] + [Category("AndroidSdksNotWorking")] public void UnicodeBytes() { Assert.AreEqual ((byte)105, Test1.GetNonUnicodeBytes () [1], "#N01"); @@ -597,6 +599,7 @@ namespace MonoTests.System.Data.SqlTypes } [Test] + [Category ("Calendars")] public void SqlDateTimeToSqlString() { SqlDateTime TestTime = new SqlDateTime(2002, 10, 22, 9, 52, 30); diff --git a/mcs/class/System.Data/Test/System.Data/DataSetTest.cs.REMOVED.git-id b/mcs/class/System.Data/Test/System.Data/DataSetTest.cs.REMOVED.git-id index d07cb78944..2b73716e2d 100644 --- a/mcs/class/System.Data/Test/System.Data/DataSetTest.cs.REMOVED.git-id +++ b/mcs/class/System.Data/Test/System.Data/DataSetTest.cs.REMOVED.git-id @@ -1 +1 @@ -cb15d8ba56678e66fd3473fef709b88a22cb9f48 \ No newline at end of file +9e3f2c87c431bdde07229b674330d6ab900d189d \ No newline at end of file diff --git a/mcs/class/System.Data/Test/System.Data/DataTableTest.cs.REMOVED.git-id b/mcs/class/System.Data/Test/System.Data/DataTableTest.cs.REMOVED.git-id index 9e69b79513..f832a1cc83 100644 --- a/mcs/class/System.Data/Test/System.Data/DataTableTest.cs.REMOVED.git-id +++ b/mcs/class/System.Data/Test/System.Data/DataTableTest.cs.REMOVED.git-id @@ -1 +1 @@ -17d4d876434b0d3eb0723be53b58711ebcaa6f61 \ No newline at end of file +adc3c36f464f5483c73a2a1646e5bd9c2ad1e4b9 \ No newline at end of file diff --git a/mcs/class/System.Data/corefx.common.sources b/mcs/class/System.Data/corefx.common.sources index fcdc821362..dafbe8ec44 100644 --- a/mcs/class/System.Data/corefx.common.sources +++ b/mcs/class/System.Data/corefx.common.sources @@ -24,6 +24,7 @@ corefx/SqlParameterCollection.cs corefx/TdsEnums.cs corefx/SR.cs corefx/SqlDependencyUtils.cs +corefx/DataReaderExtensions.cs ../referencesource/System.Data/System/Data/Sql/SqlDataSourceEnumerator.cs ../referencesource/System.Data/System/Data/CodeGen/StrongTypingException.cs ../referencesource/System.Data/System/Data/OleDb/PropertyAttributes.cs @@ -465,3 +466,4 @@ corefx/SqlDependencyUtils.cs ../../../external/corefx/src/System.Data.Odbc/src/Common/System/Data/Common/NameValuePermission.cs ../../../external/corefx/src/System.Data.Odbc/src/Common/System/Data/Common/SafeNativeMethods.cs ../../../external/corefx/src/System.Data.Odbc/src/Common/System/Data/ProviderBase/DbBuffer.cs +corefx/DbProviderFactories.mobile.cs diff --git a/mcs/class/System.Data/corefx/DataReaderExtensions.cs b/mcs/class/System.Data/corefx/DataReaderExtensions.cs new file mode 100644 index 0000000000..ba1ef7cb06 --- /dev/null +++ b/mcs/class/System.Data/corefx/DataReaderExtensions.cs @@ -0,0 +1,183 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.ComponentModel; +using System.Data.Common; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace System.Data +{ + // copied from CoreFX (NS2.1) + public static class DataReaderExtensions + { + public static bool GetBoolean(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetBoolean(reader.GetOrdinal(name)); + } + + public static byte GetByte(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetByte(reader.GetOrdinal(name)); + } + + public static long GetBytes(this DbDataReader reader, string name, long dataOffset, byte[] buffer, int bufferOffset, int length) + { + AssertNotNull(reader); + return reader.GetBytes(reader.GetOrdinal(name), dataOffset, buffer, bufferOffset, length); + } + + public static char GetChar(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetChar(reader.GetOrdinal(name)); + } + + public static long GetChars(this DbDataReader reader, string name, long dataOffset, char[] buffer, int bufferOffset, int length) + { + AssertNotNull(reader); + return reader.GetChars(reader.GetOrdinal(name), dataOffset, buffer, bufferOffset, length); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public static DbDataReader GetData(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetData(reader.GetOrdinal(name)); + } + + public static string GetDataTypeName(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetDataTypeName(reader.GetOrdinal(name)); + } + + public static DateTime GetDateTime(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetDateTime(reader.GetOrdinal(name)); + } + + public static decimal GetDecimal(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetDecimal(reader.GetOrdinal(name)); + } + + public static double GetDouble(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetDouble(reader.GetOrdinal(name)); + } + + public static Type GetFieldType(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetFieldType(reader.GetOrdinal(name)); + } + + public static T GetFieldValue(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetFieldValue(reader.GetOrdinal(name)); + } + + public static Task GetFieldValueAsync(this DbDataReader reader, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + AssertNotNull(reader); + return reader.GetFieldValueAsync(reader.GetOrdinal(name), cancellationToken); + } + + public static float GetFloat(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetFloat(reader.GetOrdinal(name)); + } + + public static Guid GetGuid(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetGuid(reader.GetOrdinal(name)); + } + + public static short GetInt16(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetInt16(reader.GetOrdinal(name)); + } + + public static int GetInt32(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetInt32(reader.GetOrdinal(name)); + } + + public static long GetInt64(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetInt64(reader.GetOrdinal(name)); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public static Type GetProviderSpecificFieldType(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetProviderSpecificFieldType(reader.GetOrdinal(name)); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public static object GetProviderSpecificValue(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetProviderSpecificValue(reader.GetOrdinal(name)); + } + + public static Stream GetStream(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetStream(reader.GetOrdinal(name)); + } + + public static string GetString(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetString(reader.GetOrdinal(name)); + } + + public static TextReader GetTextReader(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetTextReader(reader.GetOrdinal(name)); + } + + public static object GetValue(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.GetValue(reader.GetOrdinal(name)); + } + + public static bool IsDBNull(this DbDataReader reader, string name) + { + AssertNotNull(reader); + return reader.IsDBNull(reader.GetOrdinal(name)); + } + + public static Task IsDBNullAsync(this DbDataReader reader, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + AssertNotNull(reader); + return reader.IsDBNullAsync(reader.GetOrdinal(name), cancellationToken); + } + + private static void AssertNotNull(DbDataReader reader) + { + if (reader == null) + { + throw new ArgumentNullException(nameof(reader)); + } + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Data/corefx/DbProviderFactories.mobile.cs b/mcs/class/System.Data/corefx/DbProviderFactories.mobile.cs new file mode 100644 index 0000000000..9c06aa28f6 --- /dev/null +++ b/mcs/class/System.Data/corefx/DbProviderFactories.mobile.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +#if MOBILE +namespace System.Data.Common +{ + public static partial class DbProviderFactories + { + public static System.Data.Common.DbProviderFactory GetFactory(System.Data.Common.DbConnection connection) => throw new PlatformNotSupportedException(); + public static System.Data.Common.DbProviderFactory GetFactory(System.Data.DataRow providerRow) => throw new PlatformNotSupportedException(); + public static System.Data.Common.DbProviderFactory GetFactory(string providerInvariantName) => throw new PlatformNotSupportedException(); + public static System.Data.DataTable GetFactoryClasses() => throw new PlatformNotSupportedException(); + public static System.Collections.Generic.IEnumerable GetProviderInvariantNames() => throw new PlatformNotSupportedException(); + public static void RegisterFactory(string providerInvariantName, System.Data.Common.DbProviderFactory factory) => throw new PlatformNotSupportedException(); + public static void RegisterFactory(string providerInvariantName, string factoryTypeAssemblyQualifiedName) => throw new PlatformNotSupportedException(); + public static void RegisterFactory(string providerInvariantName, System.Type providerFactoryClass) => throw new PlatformNotSupportedException(); + public static bool TryGetFactory(string providerInvariantName, out System.Data.Common.DbProviderFactory factory) => throw new PlatformNotSupportedException(); + public static bool UnregisterFactory(string providerInvariantName) => throw new PlatformNotSupportedException(); + } +} +#endif \ No newline at end of file diff --git a/mcs/class/System.IO.Compression/Makefile b/mcs/class/System.IO.Compression/Makefile index 8d0c503e80..401eff5f29 100644 --- a/mcs/class/System.IO.Compression/Makefile +++ b/mcs/class/System.IO.Compression/Makefile @@ -5,14 +5,17 @@ include ../../build/rules.make LIBRARY = System.IO.Compression.dll LIB_REFS = System KEYFILE = ../ecma.pub -LIB_MCS_FLAGS = +LIB_MCS_FLAGS = -unsafe TEST_RESOURCE_FILES = Test/resources/archive.zip Test/resources/test.nupkg TEST_MCS_FLAGS = $(foreach r, $(TEST_RESOURCE_FILES), -resource:$(r),$(r)) TEST_LIB_REFS = System System.Core LIBRARY_WARN_AS_ERROR = yes +XTEST_LIB_REFS = System System.Core Facades/System.Threading.Tasks + RESX_RESOURCE_STRING = \ - ../../../external/corefx/src/System.IO.Compression/src/Resources/Strings.resx + ../../../external/corefx/src/System.IO.Compression/src/Resources/Strings.resx \ + ../../../external/corefx/src/System.IO.Compression.Brotli/src/Resources/Strings.resx EXTRA_DISTFILES = $(TEST_RESOURCE_FILES) diff --git a/mcs/class/System.IO.Compression/System.IO.Compression.dll.sources b/mcs/class/System.IO.Compression/System.IO.Compression.dll.sources index 91fda722a3..9415ecfbf8 100644 --- a/mcs/class/System.IO.Compression/System.IO.Compression.dll.sources +++ b/mcs/class/System.IO.Compression/System.IO.Compression.dll.sources @@ -36,3 +36,11 @@ corefx/SR.cs ../../../external/corefx/src/System.IO.Compression/src/System/IO/Compression/DeflateManaged/MatchState.cs ../../../external/corefx/src/System.IO.Compression/src/System/IO/Compression/DeflateManaged/OutputBuffer.cs ../../../external/corefx/src/System.IO.Compression/src/System/IO/Compression/DeflateManaged/OutputWindow.cs + +# Brotli +../../../external/corefx/src/System.IO.Compression.Brotli/src/System/IO/Compression/dec/*.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/System/IO/Compression/enc/*.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/System/IO/Compression/*.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/Interop/*.cs +../../../external/corefx/src/Common/src/Microsoft/Win32/SafeHandles/SafeBrotliHandle.cs +corefx/Interop.Libraries.cs diff --git a/mcs/class/System.IO.Compression/System.IO.Compression_xtest.dll.sources b/mcs/class/System.IO.Compression/System.IO.Compression_xtest.dll.sources new file mode 100644 index 0000000000..7ff2353229 --- /dev/null +++ b/mcs/class/System.IO.Compression/System.IO.Compression_xtest.dll.sources @@ -0,0 +1,8 @@ +../../../external/corefx/src/CoreFx.Private.TestUtilities/src/System/AssertExtensions.cs +../../../external/corefx/src/System.IO.Compression.Brotli/tests/BrotliEncoderTests.cs +../../../external/corefx/src/Common/tests/System/IO/Compression/CompressionStreamUnitTestBase.cs +../../../external/corefx/src/Common/tests/System/IO/Compression/CompressionStreamTestBase.cs +../../../external/corefx/src/Common/tests/System/IO/Compression/LocalMemoryStream.cs +../../../external/corefx/src/Common/tests/System/IO/Compression/StreamHelpers.cs +../../../external/corefx/src/Common/tests/System/IO/TempFile.cs +../../../external/corefx/src/Common/src/System/Threading/Tasks/TaskToApm.cs diff --git a/mcs/class/System.IO.Compression/corefx/BrotliStubs.cs b/mcs/class/System.IO.Compression/corefx/BrotliStubs.cs new file mode 100644 index 0000000000..b465cdd488 --- /dev/null +++ b/mcs/class/System.IO.Compression/corefx/BrotliStubs.cs @@ -0,0 +1,52 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Runtime.InteropServices; +using System.IO.Compression; +using Microsoft.Win32.SafeHandles; +using size_t = System.IntPtr; + +internal static partial class Interop +{ + internal static partial class Brotli + { + internal static SafeBrotliEncoderHandle BrotliEncoderCreateInstance(IntPtr allocFunc, IntPtr freeFunc, IntPtr opaque) => + throw new PlatformNotSupportedException(); + + internal static bool BrotliEncoderSetParameter(SafeBrotliEncoderHandle state, BrotliEncoderParameter parameter, UInt32 value) => + throw new PlatformNotSupportedException(); + + internal static unsafe bool BrotliEncoderCompressStream( + SafeBrotliEncoderHandle state, BrotliEncoderOperation op, ref size_t availableIn, + byte** nextIn, ref size_t availableOut, byte** nextOut, out size_t totalOut) => + throw new PlatformNotSupportedException(); + + internal static bool BrotliEncoderHasMoreOutput(SafeBrotliEncoderHandle state) => + throw new PlatformNotSupportedException(); + + internal static void BrotliEncoderDestroyInstance(IntPtr state) => + throw new PlatformNotSupportedException(); + + internal static unsafe bool BrotliEncoderCompress(int quality, int window, int v, size_t availableInput, byte* inBytes, ref size_t availableOutput, byte* outBytes) => + throw new PlatformNotSupportedException(); + + internal static SafeBrotliDecoderHandle BrotliDecoderCreateInstance(IntPtr allocFunc, IntPtr freeFunc, IntPtr opaque) => + throw new PlatformNotSupportedException(); + + internal static unsafe int BrotliDecoderDecompressStream( + SafeBrotliDecoderHandle state, ref size_t availableIn, byte** nextIn, + ref size_t availableOut, byte** nextOut, out size_t totalOut) => + throw new PlatformNotSupportedException(); + + internal static unsafe bool BrotliDecoderDecompress(size_t availableInput, byte* inBytes, ref size_t availableOutput, byte* outBytes) => + throw new PlatformNotSupportedException(); + + internal static void BrotliDecoderDestroyInstance(IntPtr state) => + throw new PlatformNotSupportedException(); + + internal static bool BrotliDecoderIsFinished(SafeBrotliDecoderHandle state) => + throw new PlatformNotSupportedException(); + } +} \ No newline at end of file diff --git a/mcs/class/System.IO.Compression/corefx/Interop.Libraries.cs b/mcs/class/System.IO.Compression/corefx/Interop.Libraries.cs new file mode 100644 index 0000000000..03574996ad --- /dev/null +++ b/mcs/class/System.IO.Compression/corefx/Interop.Libraries.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +internal static partial class Interop +{ + internal static partial class Libraries + { + internal const string CompressionNative = "System.Native"; + } +} diff --git a/mcs/class/System.IO.Compression/corefx/SR.cs b/mcs/class/System.IO.Compression/corefx/SR.cs index 60456cfc91..a9bc75db1e 100644 --- a/mcs/class/System.IO.Compression/corefx/SR.cs +++ b/mcs/class/System.IO.Compression/corefx/SR.cs @@ -25,10 +25,6 @@ partial class SR public const string ZLibErrorNotEnoughMemory = "The underlying compression routine could not reserve sufficient memory."; public const string ZLibErrorVersionMismatch = "The version of the underlying compression routine does not match expected version."; public const string ZLibErrorUnexpected = "The underlying compression routine returned an unexpected error code."; - public const string CorruptedGZipHeader = "The magic number in GZip header is not correct. Make sure you are passing in a GZip stream."; - public const string UnknownCompressionMode = "The compression mode specified in GZip header is unknown."; - public const string InvalidCRC = "The CRC in GZip footer does not match the CRC calculated from the decompressed data."; - public const string InvalidStreamSize = "The stream size in GZip footer does not match the real stream size."; public const string ArgumentNeedNonNegative = "The argument must be non-negative."; public const string CannotBeEmpty = "String cannot be empty."; public const string CDCorrupt = "Central Directory corrupt."; @@ -72,6 +68,20 @@ partial class SR public const string UpdateModeOneStream = "Entries cannot be opened multiple times in Update mode."; public const string WritingNotSupported = "This stream from ZipArchiveEntry does not support writing."; public const string Zip64EOCDNotWhereExpected = "Zip 64 End of Central Directory Record not where indicated."; - public const string Argument_InvalidPathChars = "Illegal characters in path."; - public const string FileNameContainsInvalidCharacters = "An entry in the ZipArchive has a path that contains invalid characters."; + public const string Argument_InvalidPathChars = "Illegal characters in path '{0}'."; + public const string Stream_FalseCanRead = "Stream does not support reading."; + public const string Stream_FalseCanWrite = "Stream does not support writing."; + public const string BrotliEncoder_Create = "Failed to create BrotliEncoder instance"; + public const string BrotliEncoder_Disposed = "Can not access a closed Encoder."; + public const string BrotliEncoder_Quality = "Provided BrotliEncoder Quality of {0} is not between the minimum value of {1} and the maximum value of {2}"; + public const string BrotliEncoder_Window = "Provided BrotliEncoder Window of {0} is not between the minimum value of {1} and the maximum value of {2}"; + public const string BrotliEncoder_InvalidSetParameter = "The BrotliEncoder {0} can not be changed at current encoder state."; + public const string BrotliDecoder_Create = "Failed to create BrotliDecoder instance"; + public const string BrotliDecoder_Error = "Decoder threw unexpected error: {0}"; + public const string BrotliDecoder_Disposed = "Can not access a closed Decoder."; + public const string BrotliStream_Compress_UnsupportedOperation = "Can not perform Read operations on a BrotliStream constructed with CompressionMode.Compress."; + public const string BrotliStream_Compress_InvalidData = "Encoder ran into invalid data."; + public const string BrotliStream_Decompress_UnsupportedOperation = "Can not perform Write operations on a BrotliStream constructed with CompressionMode.Decompress."; + public const string BrotliStream_Decompress_InvalidData = "Decoder ran into invalid data."; + public const string BrotliStream_Decompress_InvalidStream = "BrotliStream.BaseStream returned more bytes than requested in Read."; } diff --git a/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.exclude.sources b/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.exclude.sources new file mode 100644 index 0000000000..7db3f6a7ff --- /dev/null +++ b/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.exclude.sources @@ -0,0 +1,3 @@ +corefx/Interop.Libraries.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/Interop/Interop.Brotli.Decoder.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/Interop/Interop.Brotli.Encoder.cs diff --git a/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.sources b/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.sources new file mode 100644 index 0000000000..1c053c887b --- /dev/null +++ b/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression.dll.sources @@ -0,0 +1,5 @@ +#include System.IO.Compression.dll.sources +corefx/BrotliStubs.cs + +# for clrcompression.dll (instead of BrotliStubs for Windows) +#../../../external/corefx/src/Common/src/Interop/Windows/Interop.Libraries.cs diff --git a/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression_xtest.dll.exclude.sources b/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression_xtest.dll.exclude.sources new file mode 100644 index 0000000000..24d9662ad2 --- /dev/null +++ b/mcs/class/System.IO.Compression/win32_net_4_x_System.IO.Compression_xtest.dll.exclude.sources @@ -0,0 +1 @@ +../../../external/corefx/src/System.IO.Compression.Brotli/tests/BrotliEncoderTests.cs diff --git a/mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.exclude.sources b/mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.exclude.sources new file mode 100644 index 0000000000..7db3f6a7ff --- /dev/null +++ b/mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.exclude.sources @@ -0,0 +1,3 @@ +corefx/Interop.Libraries.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/Interop/Interop.Brotli.Decoder.cs +../../../external/corefx/src/System.IO.Compression.Brotli/src/Interop/Interop.Brotli.Encoder.cs diff --git a/mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.sources b/mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.sources new file mode 100644 index 0000000000..80313b94b4 --- /dev/null +++ b/mcs/class/System.IO.Compression/winaot_System.IO.Compression.dll.sources @@ -0,0 +1 @@ +#include win32_net_4_x_System.IO.Compression.dll.sources diff --git a/mcs/class/System.IdentityModel/Test/System.IdentityModel.Claims/ClaimTest.cs b/mcs/class/System.IdentityModel/Test/System.IdentityModel.Claims/ClaimTest.cs index 4f29670572..3e7be06b9a 100644 --- a/mcs/class/System.IdentityModel/Test/System.IdentityModel.Claims/ClaimTest.cs +++ b/mcs/class/System.IdentityModel/Test/System.IdentityModel.Claims/ClaimTest.cs @@ -53,7 +53,7 @@ namespace MonoTests.System.IdentityModel.Claims c = Claim.CreateDnsClaim ("123.45.6.7"); AssertClaim ("Dns", c, ClaimTypes.Dns, "123.45.6.7", Rights.PossessProperty); - Uri uri = new Uri ("http://www.mono-project.com"); + Uri uri = new Uri ("http://www.example.com"); c = Claim.CreateUriClaim (uri); AssertClaim ("Uri", c, ClaimTypes.Uri, uri, Rights.PossessProperty); diff --git a/mcs/class/System.Net.Http.WebRequest/Makefile b/mcs/class/System.Net.Http.WebRequest/Makefile index deca27db3f..7c9e87b4fa 100644 --- a/mcs/class/System.Net.Http.WebRequest/Makefile +++ b/mcs/class/System.Net.Http.WebRequest/Makefile @@ -11,9 +11,4 @@ LIB_MCS_FLAGS = TEST_MCS_FLAGS = -d:WEBREQUEST_HANDLER TEST_LIB_REFS = System System.Core System.Net.Http System.Net.Http.WebRequest -ifndef SOCKETSHTTPHANDLER -TEST_MCS_FLAGS += -d:LEGACY_HTTPCLIENT -LIB_MCS_FLAGS += -d:LEGACY_HTTPCLIENT -endif - include ../../build/library.make diff --git a/mcs/class/System.Net.Http.WebRequest/Test/HttpClientTestHelpers.cs b/mcs/class/System.Net.Http.WebRequest/Test/HttpClientTestHelpers.cs index f5b6f68f81..a422b1b19c 100644 --- a/mcs/class/System.Net.Http.WebRequest/Test/HttpClientTestHelpers.cs +++ b/mcs/class/System.Net.Http.WebRequest/Test/HttpClientTestHelpers.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Reflection; using System.Net.Http; @@ -6,11 +7,18 @@ namespace MonoTests.System.Net.Http { static class HttpClientTestHelpers { -#if LEGACY_HTTPCLIENT - internal static bool UsingSocketsHandler => false; -#else - internal static bool UsingSocketsHandler => true; -#endif + static bool initialized; + static bool usingSocketsHandler; + static object syncLock; + + internal static bool UsingSocketsHandler { + get { + LazyInitializer.EnsureInitialized ( + ref usingSocketsHandler, ref initialized, ref syncLock, + () => typeof (HttpClient).Assembly.GetType ("System.Net.Http.SocketsHttpHandler") != null); + return usingSocketsHandler; + } + } internal static bool IsSocketsHandler (HttpClientHandler handler) => false; diff --git a/mcs/class/System.Net.Http/FunctionalTests/Makefile b/mcs/class/System.Net.Http/FunctionalTests/Makefile index e75ea2e154..8e8991fbdb 100644 --- a/mcs/class/System.Net.Http/FunctionalTests/Makefile +++ b/mcs/class/System.Net.Http/FunctionalTests/Makefile @@ -7,7 +7,7 @@ ASSEMBLY = System.Net.Http.FunctionalTests XTEST_LIB_REFS = System System.Core Facades/System.Threading.Tasks USE_XTEST_REMOTE_EXECUTOR = YES -XTEST_LIB_FLAGS = /resource:../TestData/testservereku.contoso.com.pfx +XTEST_LIB_FLAGS = /resource:../../System/Test/TestData/testservereku.contoso.com.pfx the_assembly = $(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Net.Http.dll diff --git a/mcs/class/System.Net.Http/HttpClient.DefaultHandler.cs b/mcs/class/System.Net.Http/HttpClient.DefaultHandler.cs new file mode 100644 index 0000000000..676dc6db9d --- /dev/null +++ b/mcs/class/System.Net.Http/HttpClient.DefaultHandler.cs @@ -0,0 +1,10 @@ +namespace System.Net.Http +{ + partial class HttpClient + { + static HttpMessageHandler CreateDefaultHandler() + { + return new HttpClientHandler(); + } + } +} diff --git a/mcs/class/System.Net.Http/HttpClientHandler.Legacy.cs b/mcs/class/System.Net.Http/HttpClientHandler.Legacy.cs index 97904594ca..d4e64ddda1 100644 --- a/mcs/class/System.Net.Http/HttpClientHandler.Legacy.cs +++ b/mcs/class/System.Net.Http/HttpClientHandler.Legacy.cs @@ -7,5 +7,8 @@ namespace System.Net.Http partial class HttpClientHandler : HttpMessageHandler { static IMonoHttpClientHandler CreateDefaultHandler () => new MonoWebRequestHandler (); + + // NS2.1: + public static System.Func DangerousAcceptAnyServerCertificateValidator => throw new PlatformNotSupportedException (); } } diff --git a/mcs/class/System.Net.Http/HttpClientHandler.wasm.cs b/mcs/class/System.Net.Http/HttpClientHandler.wasm.cs new file mode 100644 index 0000000000..c2e16dea99 --- /dev/null +++ b/mcs/class/System.Net.Http/HttpClientHandler.wasm.cs @@ -0,0 +1,148 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.Net.Security; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; + +namespace System.Net.Http +{ + public partial class HttpClientHandler : HttpMessageHandler + { + HttpMessageHandler wasmHandler; + + public HttpClientHandler () : this (HttpClient.CreateDefaultHandler ()) { } + + HttpClientHandler (HttpMessageHandler wasmHandler) + { + this.wasmHandler = wasmHandler; + } + + protected override void Dispose (bool disposing) + { + if (disposing) { + if (wasmHandler != null) { + wasmHandler.Dispose (); + wasmHandler = null; + } + } + base.Dispose (disposing); + } + + const string EXCEPTION_MESSAGE = "System.Net.Http.HttpClientHandler is not supported on the current platform."; + + public virtual bool SupportsAutomaticDecompression => false; + + public virtual bool SupportsProxy => false; + + public virtual bool SupportsRedirectConfiguration => false; + + public bool UseCookies { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public CookieContainer CookieContainer { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public ClientCertificateOption ClientCertificateOptions { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public X509CertificateCollection ClientCertificates { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public Func ServerCertificateCustomValidationCallback { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public bool CheckCertificateRevocationList { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public SslProtocols SslProtocols { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public DecompressionMethods AutomaticDecompression { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public bool UseProxy { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public IWebProxy Proxy { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public ICredentials DefaultProxyCredentials { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public bool PreAuthenticate { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public bool UseDefaultCredentials { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public ICredentials Credentials { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public bool AllowAutoRedirect { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public int MaxAutomaticRedirections { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public int MaxConnectionsPerServer { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public int MaxResponseHeadersLength { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public long MaxRequestContentBufferSize { + get => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + set => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + } + + public IDictionary Properties => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + + protected internal override Task SendAsync (HttpRequestMessage request, CancellationToken cancellationToken) + { + if (wasmHandler == null) + throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + return wasmHandler.SendAsync (request, cancellationToken); + } + } +} diff --git a/mcs/class/System.Net.Http/HttpRequestMessage.Mono.cs b/mcs/class/System.Net.Http/HttpRequestMessage.Mono.cs new file mode 100644 index 0000000000..87adab770f --- /dev/null +++ b/mcs/class/System.Net.Http/HttpRequestMessage.Mono.cs @@ -0,0 +1,18 @@ +namespace System.Net.Http +{ + partial class HttpRequestMessage + { + static bool IsAllowedAbsoluteUri (Uri uri) + { + if (!uri.IsAbsoluteUri) + return true; + +#if WASM + if (uri.Scheme == "blob") + return true; +#endif + + return HttpUtilities.IsHttpUri (uri); + } + } +} diff --git a/mcs/class/System.Net.Http/Makefile b/mcs/class/System.Net.Http/Makefile index 5b071613e2..3eef96a6b2 100644 --- a/mcs/class/System.Net.Http/Makefile +++ b/mcs/class/System.Net.Http/Makefile @@ -42,14 +42,6 @@ TEST_MCS_FLAGS = LIBRARY_WARN_AS_ERROR = yes -EXTRA_DISTFILES = \ - TestData/testservereku.contoso.com.pfx - -ifndef SOCKETSHTTPHANDLER -TEST_MCS_FLAGS += -d:LEGACY_HTTPCLIENT -LIB_MCS_FLAGS += -d:LEGACY_HTTPCLIENT -endif - SUBDIRS = FunctionalTests UnitTests include ../../build/library.make diff --git a/mcs/class/System.Net.Http/MonoWebRequestHandler.cs b/mcs/class/System.Net.Http/MonoWebRequestHandler.cs index 166947ad2f..023343f01f 100644 --- a/mcs/class/System.Net.Http/MonoWebRequestHandler.cs +++ b/mcs/class/System.Net.Http/MonoWebRequestHandler.cs @@ -391,7 +391,7 @@ namespace System.Net.Http values = values.Where (l => l != "chunked"); } - var values_formated = HeaderUtils.GetSingleHeaderString (header.Key, values); + var values_formated = PlatformHelper.GetSingleHeaderString (header.Key, values); if (values_formated == null) continue; @@ -406,11 +406,7 @@ namespace System.Net.Http var response = new HttpResponseMessage (wr.StatusCode); response.RequestMessage = requestMessage; response.ReasonPhrase = wr.StatusDescription; -#if LEGACY_HTTPCLIENT - response.Content = new StreamContent (wr.GetResponseStream (), cancellationToken); -#else - response.Content = new StreamContent (wr.GetResponseStream ()); -#endif + response.Content = PlatformHelper.CreateStreamContent (wr.GetResponseStream (), cancellationToken); var headers = wr.Headers; for (int i = 0; i < headers.Count; ++i) { @@ -418,7 +414,7 @@ namespace System.Net.Http var value = headers.GetValues (i); HttpHeaders item_headers; - if (HeaderUtils.IsContentHeader (key)) + if (PlatformHelper.IsContentHeader (key)) item_headers = response.Content.Headers; else item_headers = response.Headers; diff --git a/mcs/class/System.Net.Http/HeaderUtils.Legacy.cs b/mcs/class/System.Net.Http/PlatformHelper.Legacy.cs similarity index 63% rename from mcs/class/System.Net.Http/HeaderUtils.Legacy.cs rename to mcs/class/System.Net.Http/PlatformHelper.Legacy.cs index f1e51e8121..668b88bd5c 100644 --- a/mcs/class/System.Net.Http/HeaderUtils.Legacy.cs +++ b/mcs/class/System.Net.Http/PlatformHelper.Legacy.cs @@ -1,9 +1,11 @@ +using System.IO; +using System.Threading; using System.Collections.Generic; using System.Net.Http.Headers; namespace System.Net.Http { - static class HeaderUtils + static class PlatformHelper { internal static bool IsContentHeader (string name) { @@ -14,5 +16,10 @@ namespace System.Net.Http { return HttpRequestHeaders.GetSingleHeaderString (name, values); } + + internal static StreamContent CreateStreamContent (Stream stream, CancellationToken cancellationToken) + { + return new StreamContent (stream, cancellationToken); + } } } diff --git a/mcs/class/System.Net.Http/HeaderUtils.SocketsHandler.cs b/mcs/class/System.Net.Http/PlatformHelper.SocketsHandler.cs similarity index 75% rename from mcs/class/System.Net.Http/HeaderUtils.SocketsHandler.cs rename to mcs/class/System.Net.Http/PlatformHelper.SocketsHandler.cs index 6f41de9311..dde50c0d57 100644 --- a/mcs/class/System.Net.Http/HeaderUtils.SocketsHandler.cs +++ b/mcs/class/System.Net.Http/PlatformHelper.SocketsHandler.cs @@ -1,9 +1,11 @@ +using System.IO; +using System.Threading; using System.Collections.Generic; using System.Net.Http.Headers; namespace System.Net.Http { - static class HeaderUtils + static class PlatformHelper { internal static bool IsContentHeader (string name) { @@ -20,6 +22,11 @@ namespace System.Net.Http return string.Join (separator, values); } + + internal static StreamContent CreateStreamContent (Stream stream, CancellationToken cancellationToken) + { + return new StreamContent (stream); + } } } diff --git a/mcs/class/System.Net.Http/StreamContent.Mono.cs b/mcs/class/System.Net.Http/StreamContent.Mono.cs deleted file mode 100644 index 411119106f..0000000000 --- a/mcs/class/System.Net.Http/StreamContent.Mono.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.IO; -using System.Threading; - -namespace System.Net.Http -{ - partial class StreamContent - { - // - // Workarounds for poor .NET API - // Instead of having SerializeToStreamAsync with CancellationToken as public API. Only LoadIntoBufferAsync - // called internally from the send worker can be cancelled and user cannot see/do it - // - [Obsolete ("FIXME: Please talk to Martin about this; see https://github.com/mono/mono/issues/12996.")] - internal StreamContent (Stream content, CancellationToken cancellationToken) - : this (content) - { - } - } -} diff --git a/mcs/class/System.Net.Http/System.Net.Http/DelegatingHandler.cs b/mcs/class/System.Net.Http/System.Net.Http/DelegatingHandler.cs index fe940df896..93f43483ff 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/DelegatingHandler.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/DelegatingHandler.cs @@ -73,6 +73,9 @@ namespace System.Net.Http protected internal override Task SendAsync (HttpRequestMessage request, CancellationToken cancellationToken) { + if (InnerHandler == null) { + throw new InvalidOperationException (SR.net_http_handler_not_assigned); + } return InnerHandler.SendAsync (request, cancellationToken); } } diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs index f48b49cd10..1ef1af81b7 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs @@ -1,15 +1,12 @@ using System; using System.Reflection; +using System.Threading; +using System.Threading.Tasks; namespace System.Net.Http { public partial class HttpClient { - public HttpClient () - : this (GetDefaultHandler (), true) - { - } - - static HttpMessageHandler GetDefaultHandler () + static HttpMessageHandler CreateDefaultHandler () { Type type = Type.GetType("Android.Runtime.AndroidEnvironment, Mono.Android"); if (type == null) diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs index eaeb02d644..3e91b2d224 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs @@ -338,5 +338,11 @@ namespace System.Net.Http return await resp.Content.ReadAsStringAsync ().ConfigureAwait (false); } } + + // NS2.1 methods, added here while CoreFX HttpClient PR is not merged + public Task PatchAsync(string requestUri, HttpContent content) => throw new PlatformNotSupportedException(); + public Task PatchAsync(string requestUri, HttpContent content, CancellationToken cancellationToken) => throw new PlatformNotSupportedException(); + public Task PatchAsync(Uri requestUri, HttpContent content) => throw new PlatformNotSupportedException(); + public Task PatchAsync(Uri requestUri, HttpContent content, CancellationToken cancellationToken) => throw new PlatformNotSupportedException(); } } diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs index 86a6edd402..6be7c51368 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs @@ -7,14 +7,11 @@ namespace System.Net.Http public partial class HttpClient { +#pragma warning disable 649 private static Func GetHttpMessageHandler; +#pragma warning restore 649 - public HttpClient() - : this(GetDefaultHandler(), true) - { - } - - static HttpMessageHandler GetDefaultHandler() + internal static HttpMessageHandler CreateDefaultHandler() { if (GetHttpMessageHandler == null) @@ -54,4 +51,4 @@ namespace System.Net.Http return new HttpClientHandler(); } } -} \ No newline at end of file +} diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.platformnotsupported.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.platformnotsupported.cs index 4b6b666e69..e883807a5c 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.platformnotsupported.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.platformnotsupported.cs @@ -172,5 +172,8 @@ namespace System.Net.Http // Only used in MonoWebRequestHandler and ignored by the other handlers. internal void SetWebRequestTimeout (TimeSpan timeout) => throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); + + // NS2.1: + public static System.Func DangerousAcceptAnyServerCertificateValidator => throw new PlatformNotSupportedException (); } } diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpMethod.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpMethod.cs index a88b78464b..5875449912 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpMethod.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpMethod.cs @@ -131,5 +131,8 @@ namespace System.Net.Http { return method; } + + // NS2.1: + public static System.Net.Http.HttpMethod Patch => throw new PlatformNotSupportedException (); } } diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpResponseMessage.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpResponseMessage.cs index 0bdd0b652a..e0faa8bc95 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpResponseMessage.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpResponseMessage.cs @@ -34,6 +34,7 @@ namespace System.Net.Http public class HttpResponseMessage : IDisposable { HttpResponseHeaders headers; + HttpResponseHeaders trailingHeaders; string reasonPhrase; HttpStatusCode statusCode; Version version; @@ -137,5 +138,14 @@ namespace System.Net.Http return sb.ToString (); } + + public HttpResponseHeaders TrailingHeaders { + get { + if (trailingHeaders == null) + trailingHeaders = new HttpResponseHeaders (); + + return trailingHeaders; + } + } } } diff --git a/mcs/class/System.Net.Http/Test/HttpClientTestHelpers.cs b/mcs/class/System.Net.Http/Test/HttpClientTestHelpers.cs index 66c3c40a28..32e858eac1 100644 --- a/mcs/class/System.Net.Http/Test/HttpClientTestHelpers.cs +++ b/mcs/class/System.Net.Http/Test/HttpClientTestHelpers.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Reflection; using System.Net.Http; @@ -6,11 +7,18 @@ namespace MonoTests.System.Net.Http { static class HttpClientTestHelpers { -#if LEGACY_HTTPCLIENT - internal static bool UsingSocketsHandler => false; -#else - internal static bool UsingSocketsHandler => true; -#endif + static bool initialized; + static bool usingSocketsHandler; + static object syncLock; + + internal static bool UsingSocketsHandler { + get { + LazyInitializer.EnsureInitialized ( + ref usingSocketsHandler, ref initialized, ref syncLock, + () => typeof (HttpClient).Assembly.GetType ("System.Net.Http.SocketsHttpHandler") != null); + return usingSocketsHandler; + } + } internal static bool IsSocketsHandler (HttpClientHandler handler) => UsingSocketsHandler; diff --git a/mcs/class/System.Net.Http/Test/System.Net.Http/DelegatingHandlerTest.cs b/mcs/class/System.Net.Http/Test/System.Net.Http/DelegatingHandlerTest.cs index d6812e7f1d..9cb61d640e 100644 --- a/mcs/class/System.Net.Http/Test/System.Net.Http/DelegatingHandlerTest.cs +++ b/mcs/class/System.Net.Http/Test/System.Net.Http/DelegatingHandlerTest.cs @@ -30,6 +30,7 @@ using System; using NUnit.Framework; using System.Net.Http; using System.IO; +using System.Threading; using System.Threading.Tasks; namespace MonoTests.System.Net.Http @@ -41,6 +42,13 @@ namespace MonoTests.System.Net.Http { } + class CustomHandler : DelegatingHandler + { + protected override async Task SendAsync (HttpRequestMessage request, CancellationToken cancellationToken) + { + return await base.SendAsync (request, cancellationToken); + } + } [Test] public void DisposeTest () @@ -59,5 +67,19 @@ namespace MonoTests.System.Net.Http } catch (ArgumentNullException) { } } + + [Test] + public async void InnerHandler_NotAssigned () + { + var httpRequestMessage = new HttpRequestMessage (HttpMethod.Get, "http://contoso.com"); + var handler = new CustomHandler (); + + var invoker = new HttpMessageInvoker (handler); + try { + await invoker.SendAsync (httpRequestMessage, new CancellationToken ()); + Assert.Fail (); + } catch (InvalidOperationException) { + } + } } } diff --git a/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientHandlerTest.cs b/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientHandlerTest.cs index c4e715ee79..ef7b8b5802 100644 --- a/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientHandlerTest.cs +++ b/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientHandlerTest.cs @@ -139,7 +139,7 @@ namespace MonoTests.System.Net.Http h.Dispose (); var c = new HttpClient (h); try { - c.GetAsync ("http://google.com").Wait (); + c.GetAsync ("http://www.example.com").Wait (); Assert.Fail ("#1"); } catch (AggregateException e) { Assert.IsTrue (e.InnerException is ObjectDisposedException, "#2"); diff --git a/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientTest.cs b/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientTest.cs index fe1aaefbcc..2134a5ea93 100644 --- a/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientTest.cs +++ b/mcs/class/System.Net.Http/Test/System.Net.Http/HttpClientTest.cs @@ -274,7 +274,7 @@ namespace MonoTests.System.Net.Http handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; var httpClient = new HttpClient (handler) { - BaseAddress = new Uri ("https://google.com"), + BaseAddress = new Uri ("https://www.example.com"), Timeout = TimeSpan.FromMilliseconds (1) }; @@ -288,7 +288,7 @@ namespace MonoTests.System.Net.Http httpClient.PostAsync (restRequest.RequestUri, restRequest.Content).Wait (WaitTimeout); Assert.Fail ("#1"); } catch (AggregateException e) { - Assert.That (e.InnerException, Is.InstanceOf (), "#2"); + Assert.That (e.InnerException, Is.InstanceOf (), $"#2: {e}"); } } @@ -349,7 +349,7 @@ namespace MonoTests.System.Net.Http request.UseProxy = false; var client = new HttpClient (request); - Assert.IsTrue (client.GetAsync ("http://google.com").Wait (5000), "needs internet access"); + Assert.IsTrue (client.GetAsync ("http://www.example.com").Wait (5000), "needs internet access"); } finally { WebRequest.DefaultWebProxy = pp; } @@ -361,7 +361,7 @@ namespace MonoTests.System.Net.Http var mh = new HttpMessageHandlerMock (); var client = new HttpClient (mh); - client.BaseAddress = new Uri ("http://xamarin.com"); + client.BaseAddress = new Uri ("http://www.example.com"); var request = new HttpRequestMessage (); var response = new HttpResponseMessage (); @@ -399,9 +399,9 @@ namespace MonoTests.System.Net.Http var mh = new HttpMessageHandlerMock (); var client = new HttpClient (mh); - client.DefaultRequestHeaders.Referrer = new Uri ("http://google.com"); + client.DefaultRequestHeaders.Referrer = new Uri ("http://www.example.com"); - var request = new HttpRequestMessage (HttpMethod.Get, "http://xamarin.com"); + var request = new HttpRequestMessage (HttpMethod.Get, "http://www.example.org"); var response = new HttpResponseMessage (); mh.OnSend = l => { @@ -798,42 +798,6 @@ namespace MonoTests.System.Net.Http } } - [Test] -#if FEATURE_NO_BSD_SOCKETS - [ExpectedException (typeof (PlatformNotSupportedException))] -#endif - // The SocketsHttpHandler permits custom transfer encodings. - public void Send_Transfer_Encoding_Custom () - { - if (HttpClientTestHelpers.UsingSocketsHandler) - Assert.Ignore ("Requires LegacyHttpClient"); - - bool? failed = null; - - var listener = NetworkHelpers.CreateAndStartHttpListener("http://*:", out int port, "/Send_Transfer_Encoding_Custom/"); - AddListenerContext (listener, l => { - failed = true; - }); - - try { - var client = HttpClientTestHelpers.CreateHttpClientWithHttpClientHandler (); - client.DefaultRequestHeaders.TransferEncoding.Add (new TransferCodingHeaderValue ("chunked2")); - - var request = new HttpRequestMessage (HttpMethod.Get, $"http://localhost:{port}/Send_Transfer_Encoding_Custom/"); - - try { - client.SendAsync (request, HttpCompletionOption.ResponseHeadersRead).Wait (); - Assert.Fail ("#1"); - } catch (AggregateException e) { - Assert.AreEqual (typeof (InvalidOperationException), e.InnerException.GetType (), "#2"); - } - Assert.IsNull (failed, "#102"); - } finally { - listener.Abort (); - listener.Close (); - } - } - [Test] #if FEATURE_NO_BSD_SOCKETS [ExpectedException (typeof (PlatformNotSupportedException))] @@ -913,7 +877,7 @@ namespace MonoTests.System.Net.Http client.SendAsync (request, HttpCompletionOption.ResponseContentRead).Wait (WaitTimeout); Assert.Fail ("#2"); } catch (AggregateException e) { - Assert.IsTrue (e.InnerException is HttpRequestException, "#3"); + Assert.That (e.InnerException, Is.InstanceOf (), $"#3: {e}"); } } finally { @@ -1363,7 +1327,7 @@ namespace MonoTests.System.Net.Http client.GetByteArrayAsync ($"http://localhost:{port}/GetByteArray_ServerError/").Wait (WaitTimeout); Assert.Fail ("#1"); } catch (AggregateException e) { - Assert.IsTrue (e.InnerException is HttpRequestException , "#2"); + Assert.That (e.InnerException, Is.InstanceOf (), $"#2: {e}"); } } finally { listener.Close (); @@ -1394,7 +1358,7 @@ namespace MonoTests.System.Net.Http client.GetStringAsync ($"http://localhost:{port}/DisallowAutoRedirect/").Wait (WaitTimeout); Assert.Fail ("#1"); } catch (AggregateException e) { - Assert.IsTrue (e.InnerException is HttpRequestException, "#2"); + Assert.That (e.InnerException, Is.InstanceOf (), $"#2: {e}"); } } finally { listener.Abort (); diff --git a/mcs/class/System.Net.Http/Test/System.Net.Http/HttpResponseMessageTest.cs b/mcs/class/System.Net.Http/Test/System.Net.Http/HttpResponseMessageTest.cs index 64c87bfbd2..0ed45c14c6 100644 --- a/mcs/class/System.Net.Http/Test/System.Net.Http/HttpResponseMessageTest.cs +++ b/mcs/class/System.Net.Http/Test/System.Net.Http/HttpResponseMessageTest.cs @@ -439,7 +439,7 @@ namespace MonoTests.System.Net.Http } try { - headers.Add ("location", new[] { "google.com", "xamarin.com" }); + headers.Add ("location", new[] { "example.com", "example.org" }); Assert.Fail ("#7a"); } catch (FormatException) { } diff --git a/mcs/class/System.Net.Http/corefx/ReadOnlyMemoryContent.cs b/mcs/class/System.Net.Http/corefx/ReadOnlyMemoryContent.cs new file mode 100644 index 0000000000..f4272bfb55 --- /dev/null +++ b/mcs/class/System.Net.Http/corefx/ReadOnlyMemoryContent.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Net.Http +{ + public sealed partial class ReadOnlyMemoryContent : System.Net.Http.HttpContent + { + public ReadOnlyMemoryContent(System.ReadOnlyMemory content) => throw new PlatformNotSupportedException(); + protected internal override System.Threading.Tasks.Task SerializeToStreamAsync(System.IO.Stream stream, System.Net.TransportContext context) => throw new PlatformNotSupportedException(); + protected internal override bool TryComputeLength(out long length) => throw new PlatformNotSupportedException(); + } +} \ No newline at end of file diff --git a/mcs/class/System.Net.Http/legacy.sources b/mcs/class/System.Net.Http/legacy.sources index 4a200fd6e6..1b5be8388f 100644 --- a/mcs/class/System.Net.Http/legacy.sources +++ b/mcs/class/System.Net.Http/legacy.sources @@ -3,7 +3,7 @@ HttpClientHandler.cs HttpClientHandler.Legacy.cs IMonoHttpClientHandler.cs MonoWebRequestHandler.cs -HeaderUtils.Legacy.cs +PlatformHelper.Legacy.cs System.Net.Http/ByteArrayContent.cs System.Net.Http/ClientCertificateOption.cs System.Net.Http/DelegatingHandler.cs @@ -22,6 +22,7 @@ System.Net.Http/MultipartContent.cs System.Net.Http/MultipartFormDataContent.cs System.Net.Http/StreamContent.cs System.Net.Http/StringContent.cs +corefx/ReadOnlyMemoryContent.cs System.Net.Http.Headers/AuthenticationHeaderValue.cs System.Net.Http.Headers/CacheControlHeaderValue.cs System.Net.Http.Headers/CollectionExtensions.cs diff --git a/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.exclude.sources b/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.exclude.sources new file mode 100644 index 0000000000..c1788b13bf --- /dev/null +++ b/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.exclude.sources @@ -0,0 +1 @@ +HttpClient.DefaultHandler.cs diff --git a/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.sources b/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.sources index f5149e8e16..eca4fd33a4 100644 --- a/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.sources +++ b/mcs/class/System.Net.Http/monodroid_System.Net.Http.dll.sources @@ -1,2 +1,2 @@ -#include legacy.sources +#include socketshandler.sources System.Net.Http/HttpClient.android.cs diff --git a/mcs/class/System.Net.Http/socketshandler.sources b/mcs/class/System.Net.Http/socketshandler.sources new file mode 100644 index 0000000000..e8622eafe6 --- /dev/null +++ b/mcs/class/System.Net.Http/socketshandler.sources @@ -0,0 +1,21 @@ +Assembly/AssemblyInfo.cs + +PlatformHelper.SocketsHandler.cs +HttpClient.DefaultHandler.cs +HttpClientHandler.cs +HttpClientHandler.SocketsHandler.cs +HttpRequestMessage.Mono.cs +IMonoHttpClientHandler.cs +MonoWebRequestHandler.cs + +../corlib/System.Diagnostics/Debug.cs + +corefx/SocketsHttpHandler.Mono.cs +corefx/NetEventSource.Http.cs + +../../../external/corefx/src/Common/src/System/Net/Http/HttpHandlerDefaults.cs + +../../../external/corefx/src/System.Net.Http/src/System/Net/Http/Headers/*.cs +../../../external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/*.cs:HttpSystemProxy.cs,SystemProxyInfo.Windows.cs +../../../external/corefx/src/System.Net.Http/src/System/Net/Http/*.cs:HttpClientHandler.*.cs,NetEventSource.Http.cs,DiagnosticsHandler.cs + diff --git a/mcs/class/System.Net.Http/unix_net_4_x_System.Net.Http.dll.sources b/mcs/class/System.Net.Http/unix_net_4_x_System.Net.Http.dll.sources index 364adf6978..74f48b0866 100644 --- a/mcs/class/System.Net.Http/unix_net_4_x_System.Net.Http.dll.sources +++ b/mcs/class/System.Net.Http/unix_net_4_x_System.Net.Http.dll.sources @@ -1,20 +1 @@ -Assembly/AssemblyInfo.cs - -HeaderUtils.SocketsHandler.cs -HttpClientHandler.cs -HttpClientHandler.SocketsHandler.cs -IMonoHttpClientHandler.cs -MonoWebRequestHandler.cs -StreamContent.Mono.cs - -../corlib/System.Diagnostics/Debug.cs - -corefx/SocketsHttpHandler.Mono.cs -corefx/NetEventSource.Http.cs - -../../../external/corefx/src/Common/src/System/Net/Http/HttpHandlerDefaults.cs - -../../../external/corefx/src/System.Net.Http/src/System/Net/Http/Headers/*.cs -../../../external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/*.cs:HttpSystemProxy.cs,SystemProxyInfo.Windows.cs -../../../external/corefx/src/System.Net.Http/src/System/Net/Http/*.cs:HttpClientHandler.*.cs,NetEventSource.Http.cs,DiagnosticsHandler.cs - +#include socketshandler.sources diff --git a/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.exclude.sources b/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.exclude.sources new file mode 100644 index 0000000000..aa99247b7a --- /dev/null +++ b/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.exclude.sources @@ -0,0 +1,6 @@ +HttpClient.DefaultHandler.cs +HttpClientHandler.cs +HttpClientHandler.DefaultHandler.cs +HttpClientHandler.SocketsHandler.cs +corefx/SocketsHttpHandler.Mono.cs +../../../external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/*.cs diff --git a/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.sources b/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.sources index 917389ebca..e315913cc0 100644 --- a/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.sources +++ b/mcs/class/System.Net.Http/wasm_System.Net.Http.dll.sources @@ -1,2 +1,3 @@ -#include legacy.sources +#include socketshandler.sources +HttpClientHandler.wasm.cs System.Net.Http/HttpClient.wasm.cs diff --git a/mcs/class/System.Private.CoreLib/Makefile b/mcs/class/System.Private.CoreLib/Makefile new file mode 100644 index 0000000000..39789798d0 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Makefile @@ -0,0 +1,22 @@ +thisdir = class/System.Private.CoreLib +SUBDIRS = +include ../../build/rules.make + +include ../../../netcore/roslyn.make +ROSLYN_PROPS_FILE := ../../../netcore/roslyn/packages/microsoft.net.compilers.toolset/$(ROSLYN_VERSION)/build/Microsoft.Net.Compilers.Toolset.props + +dirs := $(dir $(wildcard */*)) +files := $(wildcard */*.cs) + +all-local: $(ROSLYN_PROPS_FILE) + dotnet build $(CORETARGETS) $(CORLIB_BUILD_FLAGS) -p:BuildArch=$(COREARCH) -p:OutputPath=bin/$(COREARCH) -p:RoslynPropsFile="$(ROSLYN_PROPS_FILE)" System.Private.CoreLib.csproj + +$(ROSLYN_PROPS_FILE): + make -C ../../../netcore update-roslyn + +dist-local: + mkdir -p $(distdir) + cp -a Makefile $(distdir) + cp -a *.csproj $(distdir) + for i in $(dirs); do mkdir -p $(distdir)/$$i; done + for i in $(files); do cp -a $$i $(distdir)/$$i; done diff --git a/mcs/class/System.Private.CoreLib/Microsoft.Win32.SafeHandles/SafeWaitHandle.Unix.cs b/mcs/class/System.Private.CoreLib/Microsoft.Win32.SafeHandles/SafeWaitHandle.Unix.cs new file mode 100644 index 0000000000..ba74528c87 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Microsoft.Win32.SafeHandles/SafeWaitHandle.Unix.cs @@ -0,0 +1,18 @@ +using System; +using System.Threading; +using System.Runtime.CompilerServices; + +namespace Microsoft.Win32.SafeHandles +{ + partial class SafeWaitHandle + { + protected override bool ReleaseHandle () + { + CloseEventInternal (handle); + return true; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void CloseEventInternal (IntPtr handle); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/Microsoft.Win32/UnsafeNativeMethods.cs b/mcs/class/System.Private.CoreLib/Microsoft.Win32/UnsafeNativeMethods.cs new file mode 100644 index 0000000000..216cf7a513 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Microsoft.Win32/UnsafeNativeMethods.cs @@ -0,0 +1,46 @@ +using System; +using System.Runtime.InteropServices; + +namespace Microsoft.Win32 +{ + static class UnsafeNativeMethods + { + internal static unsafe class ManifestEtw + { + internal unsafe delegate void EtwEnableCallback( + [In] ref Guid sourceId, + [In] int isEnabled, + [In] byte level, + [In] long matchAnyKeywords, + [In] long matchAllKeywords, + [In] EVENT_FILTER_DESCRIPTOR* filterData, + [In] void* callbackContext + ); + + [StructLayout(LayoutKind.Sequential)] + unsafe internal struct EVENT_FILTER_DESCRIPTOR + { + public long Ptr; + public int Size; + public int Type; + } + + internal enum ActivityControl : uint + { + EVENT_ACTIVITY_CTRL_GET_ID = 1, + EVENT_ACTIVITY_CTRL_SET_ID = 2, + EVENT_ACTIVITY_CTRL_CREATE_ID = 3, + EVENT_ACTIVITY_CTRL_GET_SET_ID = 4, + EVENT_ACTIVITY_CTRL_CREATE_SET_ID = 5 + } + + internal const int ERROR_ARITHMETIC_OVERFLOW = 534; + internal const int ERROR_NOT_ENOUGH_MEMORY = 8; + internal const int ERROR_MORE_DATA = 0xEA; + + internal const int EVENT_CONTROL_CODE_DISABLE_PROVIDER = 0; + internal const int EVENT_CONTROL_CODE_ENABLE_PROVIDER = 1; + internal const int EVENT_CONTROL_CODE_CAPTURE_STATE = 2; + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/Mono/MonoDomain.cs b/mcs/class/System.Private.CoreLib/Mono/MonoDomain.cs new file mode 100644 index 0000000000..c4151850b3 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Mono/MonoDomain.cs @@ -0,0 +1,42 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace Mono +{ + [StructLayout (LayoutKind.Sequential)] + internal sealed partial class MonoDomain + { + #pragma warning disable 169 + #region Sync with object-internals.h + IntPtr _mono_app_domain; + #endregion + #pragma warning restore 169 + + public event AssemblyLoadEventHandler AssemblyLoad; + + private void DoAssemblyLoad (Assembly assembly) + { + return; /* FIXME */ + } + + private Assembly? DoAssemblyResolve (string name, Assembly requestingAssembly, bool refonly) + { + return null; + } + + internal Assembly? DoTypeResolve (string name) + { + return null; + } + + internal Assembly? DoTypeBuilderResolve (System.Reflection.Emit.TypeBuilder tb) + { + return null; + } + + public event UnhandledExceptionEventHandler UnhandledException; + + public event EventHandler ProcessExit; + } +} diff --git a/mcs/class/System.Private.CoreLib/Mono/MonoDomainSetup.cs b/mcs/class/System.Private.CoreLib/Mono/MonoDomainSetup.cs new file mode 100644 index 0000000000..8314bf59ea --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Mono/MonoDomainSetup.cs @@ -0,0 +1,41 @@ +#nullable disable +using System.Runtime.InteropServices; + +namespace Mono +{ + [StructLayout (LayoutKind.Sequential)] + internal sealed class MonoDomainSetup + { + #region Sync with object-internals.h + string application_base; + string application_name; + string cache_path; + string configuration_file; + string dynamic_base; + string license_file; + string private_bin_path; + string private_bin_path_probe; + string shadow_copy_directories; + string shadow_copy_files; + bool publisher_policy; + private bool path_changed; + private int loader_optimization; + bool disallow_binding_redirects; + bool disallow_code_downloads; + + object _activationArguments; + object domain_initializer; + object application_trust; + string [] domain_initializer_args; + + bool disallow_appbase_probe; + byte [] configuration_bytes; + + byte [] serialized_non_primitives; + #endregion + + public MonoDomainSetup () + { + } + } +} diff --git a/mcs/class/System.Private.CoreLib/Mono/MonoListItem.cs b/mcs/class/System.Private.CoreLib/Mono/MonoListItem.cs new file mode 100644 index 0000000000..0ce7ae4703 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Mono/MonoListItem.cs @@ -0,0 +1,9 @@ +namespace Mono +{ + // Internal type used by Mono runtime only + internal sealed class MonoListItem + { + public MonoListItem next; + public object data; + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/Mono/RuntimeHandles.cs b/mcs/class/System.Private.CoreLib/Mono/RuntimeHandles.cs new file mode 100644 index 0000000000..50da395ff0 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Mono/RuntimeHandles.cs @@ -0,0 +1,236 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace Mono +{ + unsafe struct RuntimeClassHandle + { + RuntimeStructs.MonoClass* value; + + internal RuntimeClassHandle (RuntimeStructs.MonoClass* value) + { + this.value = value; + } + + internal RuntimeClassHandle (IntPtr ptr) + { + this.value = (RuntimeStructs.MonoClass*) ptr; + } + + internal RuntimeStructs.MonoClass* Value => value; + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((RuntimeClassHandle)obj).Value; + } + + public override int GetHashCode () => ((IntPtr)value).GetHashCode (); + + public bool Equals (RuntimeClassHandle handle) + { + return value == handle.Value; + } + + public static bool operator == (RuntimeClassHandle left, object? right) + { + return right != null && right is RuntimeClassHandle rch && left.Equals (rch); + } + + public static bool operator != (RuntimeClassHandle left, object? right) + { + return !(left == right); + } + + public static bool operator == (object? left, RuntimeClassHandle right) + { + return left != null && left is RuntimeClassHandle rch && rch.Equals (right); + } + + public static bool operator != (object? left, RuntimeClassHandle right) + { + return !(left == right); + } + + [MethodImpl (MethodImplOptions.InternalCall)] + internal unsafe extern static IntPtr GetTypeFromClass (RuntimeStructs.MonoClass *klass); + + internal RuntimeTypeHandle GetTypeHandle () => new RuntimeTypeHandle (GetTypeFromClass (value)); + } + + unsafe struct RuntimeRemoteClassHandle + { + RuntimeStructs.RemoteClass* value; + + internal RuntimeRemoteClassHandle (RuntimeStructs.RemoteClass* value) + { + this.value = value; + } + + internal RuntimeClassHandle ProxyClass { + get { + return new RuntimeClassHandle (value->proxy_class); + } + } + } + + unsafe struct RuntimeGenericParamInfoHandle + { + RuntimeStructs.GenericParamInfo* value; + + internal RuntimeGenericParamInfoHandle (RuntimeStructs.GenericParamInfo* value) + { + this.value = value; + } + + internal RuntimeGenericParamInfoHandle (IntPtr ptr) + { + this.value = (RuntimeStructs.GenericParamInfo*) ptr; + } + + internal Type[] Constraints => GetConstraints (); + + internal GenericParameterAttributes Attributes => (GenericParameterAttributes) value->flags; + + Type[] GetConstraints () + { + int n = GetConstraintsCount (); + var a = new Type [n]; + for (int i = 0; i < n; i++) { + RuntimeClassHandle c = new RuntimeClassHandle (value->constraints[i]); + a[i] = Type.GetTypeFromHandle (c.GetTypeHandle ()); + } + + return a; + } + + int GetConstraintsCount () + { + int i = 0; + RuntimeStructs.MonoClass** p = value->constraints; + while (p != null && *p != null) { + p++; i++; + } + return i; + } + } + + internal struct RuntimeEventHandle + { + IntPtr value; + + internal RuntimeEventHandle (IntPtr v) + { + value = v; + } + + public IntPtr Value => value; + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((RuntimeEventHandle)obj).Value; + } + + public bool Equals (RuntimeEventHandle handle) + { + return value == handle.Value; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public static bool operator == (RuntimeEventHandle left, RuntimeEventHandle right) + { + return left.Equals (right); + } + + public static bool operator != (RuntimeEventHandle left, RuntimeEventHandle right) + { + return !left.Equals (right); + } + } + + internal struct RuntimePropertyHandle + { + IntPtr value; + + internal RuntimePropertyHandle (IntPtr v) + { + value = v; + } + + public IntPtr Value => value; + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((RuntimePropertyHandle)obj).Value; + } + + public bool Equals (RuntimePropertyHandle handle) + { + return value == handle.Value; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public static bool operator == (RuntimePropertyHandle left, RuntimePropertyHandle right) + { + return left.Equals (right); + } + + public static bool operator != (RuntimePropertyHandle left, RuntimePropertyHandle right) + { + return !left.Equals (right); + } + } + + unsafe struct RuntimeGPtrArrayHandle + { + RuntimeStructs.GPtrArray* value; + + internal RuntimeGPtrArrayHandle (RuntimeStructs.GPtrArray* value) + { + this.value = value; + } + + internal RuntimeGPtrArrayHandle (IntPtr ptr) + { + this.value = (RuntimeStructs.GPtrArray*) ptr; + } + + internal int Length => value->len; + + internal IntPtr this [int i] => Lookup (i); + + internal IntPtr Lookup (int i) + { + if (i >= 0 && i < Length) { + return value->data[i]; + } else + throw new IndexOutOfRangeException (); + } + + [MethodImpl(MethodImplOptions.InternalCall)] + extern static void GPtrArrayFree (RuntimeStructs.GPtrArray* value); + + internal static void DestroyAndFree (ref RuntimeGPtrArrayHandle h) + { + GPtrArrayFree (h.value); + h.value = null; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/Resources/SR.common.cs b/mcs/class/System.Private.CoreLib/Resources/SR.common.cs new file mode 100644 index 0000000000..a05c8f7141 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Resources/SR.common.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Globalization; + +static partial class SR +{ + internal static string Format (string resourceFormat, object? p1) + { + return string.Format (CultureInfo.InvariantCulture, resourceFormat, p1); + } + + internal static string Format (string resourceFormat, object p1, object p2) + { + return string.Format (CultureInfo.InvariantCulture, resourceFormat, p1, p2); + } + + internal static string Format (CultureInfo ci, string resourceFormat, object p1, object p2) + { + return string.Format (ci, resourceFormat, p1, p2); + } + + internal static string Format (string resourceFormat, object p1, object p2, object p3) + { + return string.Format (CultureInfo.InvariantCulture, resourceFormat, p1, p2, p3); + } + + internal static string Format (string resourceFormat, params object[] args) + { + if (args != null) + return string.Format (CultureInfo.InvariantCulture, resourceFormat, args); + + return resourceFormat; + } + + internal static string GetResourceString (string str) => str; +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/Resources/SR.cs.REMOVED.git-id b/mcs/class/System.Private.CoreLib/Resources/SR.cs.REMOVED.git-id new file mode 100644 index 0000000000..8e4327c093 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/Resources/SR.cs.REMOVED.git-id @@ -0,0 +1 @@ +094f35e5039cf1b08e6c12e35ab6f5120836bdf5 \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Collections.Generic/ArraySortHelper.cs b/mcs/class/System.Private.CoreLib/System.Collections.Generic/ArraySortHelper.cs new file mode 100644 index 0000000000..71a0403c43 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Collections.Generic/ArraySortHelper.cs @@ -0,0 +1,12 @@ +namespace System.Collections.Generic +{ + partial class ArraySortHelper + { + public static ArraySortHelper Default { get; } = new ArraySortHelper(); + } + + partial class ArraySortHelper + { + public static ArraySortHelper Default { get; } = new ArraySortHelper(); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Collections.Generic/Comparer.cs b/mcs/class/System.Private.CoreLib/System.Collections.Generic/Comparer.cs new file mode 100644 index 0000000000..2b99bad803 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Collections.Generic/Comparer.cs @@ -0,0 +1,46 @@ +using System.Runtime.CompilerServices; + +namespace System.Collections.Generic +{ + partial class Comparer + { + static volatile Comparer defaultComparer; + + public static Comparer Default { + get { + Comparer comparer = defaultComparer; + if (comparer == null) { + comparer = CreateComparer(); + defaultComparer = comparer; + } + return comparer; + } + } + + static Comparer CreateComparer() { + RuntimeType t = (RuntimeType)typeof(T); + + if (typeof(IComparable).IsAssignableFrom(t)) + return (Comparer)RuntimeType.CreateInstanceForAnotherGenericParameter (typeof(GenericComparer<>), t); + + // If T is a Nullable where U implements IComparable return a NullableComparer + if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) { + RuntimeType u = (RuntimeType)t.GetGenericArguments()[0]; + if (typeof(IComparable<>).MakeGenericType (u).IsAssignableFrom (u)) + return (Comparer)RuntimeType.CreateInstanceForAnotherGenericParameter (typeof(NullableComparer<>), u); + } + + if (t.IsEnum) + return (Comparer)RuntimeType.CreateInstanceForAnotherGenericParameter (typeof(EnumComparer<>), t); + + // Otherwise return an ObjectComparer + return new ObjectComparer (); + } + } + + partial class EnumComparer + { + [MethodImpl (MethodImplOptions.AggressiveInlining)] + public override int Compare (T x, T y) => JitHelpers.EnumCompareTo (x, y); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Collections.Generic/EqualityComparer.cs b/mcs/class/System.Private.CoreLib/System.Collections.Generic/EqualityComparer.cs new file mode 100644 index 0000000000..99353a5347 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Collections.Generic/EqualityComparer.cs @@ -0,0 +1,79 @@ +using System.Runtime.CompilerServices; + +namespace System.Collections.Generic +{ + partial class EqualityComparer + { + static volatile EqualityComparer defaultComparer; + + public static EqualityComparer Default { + [MethodImplAttribute (MethodImplOptions.AggressiveInlining)] + get { + EqualityComparer comparer = defaultComparer; + if (comparer == null) { + comparer = CreateComparer(); + defaultComparer = comparer; + } + return comparer; + } + } + + static EqualityComparer CreateComparer () + { + RuntimeType t = (RuntimeType)typeof(T); + if (t == typeof(byte)) { + return (EqualityComparer)(object)(new ByteEqualityComparer()); + } + + ///////////////////////////////////////////////// + // KEEP THIS IN SYNC WITH THE DEVIRT CODE + // IN METHOD-TO-IR.C + ///////////////////////////////////////////////// + + if (typeof(IEquatable).IsAssignableFrom(t)) { + return (EqualityComparer)RuntimeType.CreateInstanceForAnotherGenericParameter (typeof(GenericEqualityComparer<>), t); + } + + if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) { + RuntimeType u = (RuntimeType)t.GetGenericArguments()[0]; + if (typeof(IEquatable<>).MakeGenericType(u).IsAssignableFrom(u)) { + return (EqualityComparer)RuntimeType.CreateInstanceForAnotherGenericParameter (typeof(NullableEqualityComparer<>), u); + } + } + + if (t.IsEnum) { + return (EqualityComparer)RuntimeType.CreateInstanceForAnotherGenericParameter (typeof(EnumEqualityComparer<>), t); + } + + return new ObjectEqualityComparer(); + } + + // MONOTODO: Add specialized versions + internal virtual int IndexOf (T[] array, T value, int startIndex, int count) + { + int endIndex = startIndex + count; + for (int i = startIndex; i < endIndex; i++) { + if (Equals (array[i], value)) + return i; + } + return -1; + } + + internal virtual int LastIndexOf (T[] array, T value, int startIndex, int count) + { + int endIndex = startIndex - count + 1; + for (int i = startIndex; i >= endIndex; i--) { + if (Equals (array[i], value)) + return i; + } + return -1; + } + + } + + partial class EnumEqualityComparer + { + [MethodImpl (MethodImplOptions.AggressiveInlining)] + public override bool Equals (T x, T y) => JitHelpers.EnumEquals (x, y); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Diagnostics/Debugger.cs b/mcs/class/System.Private.CoreLib/System.Diagnostics/Debugger.cs new file mode 100644 index 0000000000..fadc6ffc30 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Diagnostics/Debugger.cs @@ -0,0 +1,34 @@ +using System.Runtime.CompilerServices; + +namespace System.Diagnostics +{ + public static class Debugger + { + public static readonly string DefaultCategory = ""; + + public static bool IsAttached => IsAttached_internal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static bool IsAttached_internal (); + + public static void Break () + { + // The JIT inserts a breakpoint on the caller. + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern bool IsLogging(); + + public static bool Launch () + { + throw new NotImplementedException (); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern void Log (int level, string category, string message); + + public static void NotifyOfCrossThreadDependency () + { + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Diagnostics/StackFrame.cs b/mcs/class/System.Private.CoreLib/System.Diagnostics/StackFrame.cs new file mode 100644 index 0000000000..bc282cd63d --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Diagnostics/StackFrame.cs @@ -0,0 +1,50 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; + +namespace System.Diagnostics +{ + partial class StackFrame + { + internal StackFrame (MonoStackFrame monoStackFrame, bool needFileInfo) + { + _method = monoStackFrame.methodBase; + _nativeOffset = monoStackFrame.nativeOffset; + _ilOffset = monoStackFrame.ilOffset; + + if (needFileInfo) { + _fileName = monoStackFrame.fileName; + _lineNumber = monoStackFrame.lineNumber; + _columnNumber = monoStackFrame.columnNumber; + } + + _isLastFrameFromForeignExceptionStackTrace = monoStackFrame.isLastFrameFromForeignException; + } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + void BuildStackFrame (int skipFrames, bool needFileInfo) + { + const int SystemDiagnosticsStackDepth = 3; + + if (skipFrames + SystemDiagnosticsStackDepth < 0 || !get_frame_info (skipFrames + SystemDiagnosticsStackDepth, needFileInfo, out var method, out var ilOffset, out var nativeOffset, out var fileName, out var line, out var column)) + return; + + _method = method; + _ilOffset = ilOffset; + _nativeOffset = nativeOffset; + + if (needFileInfo) { + _fileName = fileName; + _lineNumber = line; + _columnNumber = column; + } + } + + bool AppendStackFrameWithoutMethodBase (StringBuilder sb) => false; + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool get_frame_info (int skipFrames, bool needFileInfo, + out MethodBase method, out int ilOffset, out int nativeOffset, out string file, out int line, out int column); + + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Diagnostics/StackTrace.cs b/mcs/class/System.Private.CoreLib/System.Diagnostics/StackTrace.cs new file mode 100644 index 0000000000..f7a20f066d --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Diagnostics/StackTrace.cs @@ -0,0 +1,82 @@ +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Diagnostics +{ + // Need our own stackframe class since the shared version has its own fields + [StructLayout (LayoutKind.Sequential)] + class MonoStackFrame + { + #region Keep in sync with object-internals.h + internal int ilOffset; + internal int nativeOffset; + // Unused + internal long methodAddress; + // Unused + internal uint methodIndex; + internal MethodBase methodBase; + internal string fileName; + internal int lineNumber; + internal int columnNumber; + // Unused + internal string internalMethodName; + #endregion + + internal bool isLastFrameFromForeignException; + } + + partial class StackTrace + { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern MonoStackFrame[] get_trace (Exception e, int skipFrames, bool needFileInfo); + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + void InitializeForCurrentThread (int skipFrames, bool needFileInfo) + { + skipFrames += 2; // Current method + parent ctor + + StackFrame sf; + var frames = new List (); + while (skipFrames >= 0) { + sf = new StackFrame (skipFrames, needFileInfo); + if (sf.GetMethod () == null) { + break; + } + frames.Add (sf); + skipFrames++; + } + + _stackFrames = frames.ToArray (); + _numOfFrames = _stackFrames.Length; + } + + void InitializeForException (Exception e, int skipFrames, bool needFileInfo) + { + var frames = get_trace (e, skipFrames, needFileInfo); + _numOfFrames = frames.Length; + + int foreignFrames; + MonoStackFrame[] foreignExceptions = e.foreignExceptionsFrames; + + if (foreignExceptions != null) { + foreignFrames = foreignExceptions.Length; + _numOfFrames += foreignFrames; + + _stackFrames = new StackFrame [_numOfFrames]; + + for (int i = 0; i < foreignExceptions.Length; ++i) { + _stackFrames [i] = new StackFrame (foreignExceptions [i], needFileInfo); + } + } else { + _stackFrames = new StackFrame [_numOfFrames]; + foreignFrames = 0; + } + + for (int i = 0; i < frames.Length; ++i) { + _stackFrames [foreignFrames + i] = new StackFrame (frames [i], needFileInfo); + } + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Unix.cs b/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Unix.cs new file mode 100644 index 0000000000..bdf132ea93 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Unix.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Runtime.CompilerServices; + +namespace System.Globalization +{ + partial class GlobalizationMode + { + static bool GetGlobalizationInvariantMode () + { + bool invariantEnabled = GetInvariantSwitchValue (); + if (invariantEnabled) + return true; + + LoadICU (); + return false; + } + + // Keep this in a separate method to avoid loading the native lib in invariant mode + [MethodImplAttribute (MethodImplOptions.NoInlining)] + static void LoadICU () + { + int res = Interop.Globalization.LoadICU (); + if (res == 0) { + string message = "Couldn't find a valid ICU package installed on the system. " + + "Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support."; + Environment.FailFast (message); + } + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Windows.cs b/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Windows.cs new file mode 100644 index 0000000000..2626142335 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.Windows.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Globalization +{ + partial class GlobalizationMode + { + static bool GetGlobalizationInvariantMode () { + return GetInvariantSwitchValue (); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.cs b/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.cs new file mode 100644 index 0000000000..58b99e0ccc --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Globalization/GlobalizationMode.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +using System.Runtime.CompilerServices; + +namespace System.Globalization +{ + internal static partial class GlobalizationMode + { + internal static bool Invariant { get; } = GetGlobalizationInvariantMode (); + + static bool GetInvariantSwitchValue () + { + var val = Environment.GetEnvironmentVariable ("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT"); + if (val != null) + return Boolean.IsTrueStringIgnoreCase (val) || val.Equals ("1"); + return false; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.IO/FileLoadException.cs b/mcs/class/System.Private.CoreLib/System.IO/FileLoadException.cs new file mode 100644 index 0000000000..43047c120b --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.IO/FileLoadException.cs @@ -0,0 +1,10 @@ +namespace System.IO +{ + partial class FileLoadException + { + internal static string FormatFileLoadExceptionMessage (string fileName, int hResult) + { + return ""; + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.IO/Stream.cs b/mcs/class/System.Private.CoreLib/System.IO/Stream.cs new file mode 100644 index 0000000000..243fcba39d --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.IO/Stream.cs @@ -0,0 +1,9 @@ +namespace System.IO +{ + partial class Stream + { + bool HasOverriddenBeginEndRead () => true; + + bool HasOverriddenBeginEndWrite () => true; + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Private.CoreLib.csproj b/mcs/class/System.Private.CoreLib/System.Private.CoreLib.csproj new file mode 100644 index 0000000000..4b521dda71 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Private.CoreLib.csproj @@ -0,0 +1,304 @@ + + + + + + + + true + true + false + x64 + bin/x64 + + + + x64,x86,arm,armel,arm64 + true + true + $(BuildType) + $(BuildArch) + arm + {DD18B4BA-3B49-437B-9E34-41EF8A640CE0} + Library + true + + false + + true + true + true + 6.00 + true + true + prompt + true + 4 + false + $(WarningsNotAsErrors);618 + + 649,1573,1591,0419,3021,CS8609 + + + $(NoWarn),CS0067,CS0618 + + $(NoWarn),CS8597,CS8600,CS8601,CS8602,CS8603,CS8604,CS8609,CS8611,CS8618,CS8620,CS8625,CS8631,CS8632,CS8634 + false + true + true + $(DefineConstants);_USE_NLS_PLUS_TABLE;CODE_ANALYSIS_BASELINE;netcoreapp + + <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)/Documentation + <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)/Documentation + true + 8.0 + + + + + x64 + false + 0x180000000 + BIT64;AMD64;$(DefineConstants) + + + x86 + 0x10000000 + BIT32;$(DefineConstants) + + + arm + BIT32;ARM;$(DefineConstants) + + + AnyCPU + BIT64;ARM64;$(DefineConstants) + + + + true + false + true + full + _LOGGING;DEBUG;TRACE;$(DefineConstants) + CODE_ANALYSIS;$(DefineConstants) + + + true + true + pdbOnly + TRACE;$(DefineConstants) + + + + portable + + + PLATFORM_OSX;$(DefineConstants) + + + + System.Private.CoreLib + 4.0.0.0 + 4 + 6 + true + + + + $(MSBuildThisFileDirectory)Common + $(MSBuildThisFileDirectory)src + $(MSBuildThisFileDirectory) + $(BclSourcesRoot)\System\Globalization\Tables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FEATURE_DEFAULT_INTERFACES;FEATURE_MANAGED_ETW_CHANNELS;$(DefineConstants) + + MONO;NETCORE;DISABLE_REMOTING;MONO_FEATURE_SRE;$(DefineConstants) + 3021,$(NoWarn) + + + + + + + + + + + + + ..\silverlight.pub + + None + + + + + + + diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/AssemblyBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/AssemblyBuilder.cs new file mode 100644 index 0000000000..f99b7f67ee --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/AssemblyBuilder.cs @@ -0,0 +1,596 @@ +#nullable disable + +// +// System.Reflection.Emit/AssemblyBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.IO; +using System.Runtime.Serialization; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Security; +using System.Security.Cryptography; +using System.Threading; + +namespace System.Reflection.Emit +{ + internal class GenericInstanceKey { + Type gtd; + internal Type[] args; + int hash_code; + + internal GenericInstanceKey (Type gtd, Type[] args) + { + this.gtd = gtd; + this.args = args; + + hash_code = gtd.GetHashCode (); + for (int i = 0; i < args.Length; ++i) + hash_code ^= args [i].GetHashCode (); + } + + static bool IsBoundedVector (Type type) { + ArrayType at = type as ArrayType; + if (at != null) + return at.GetEffectiveRank () == 1; + return type.ToString ().EndsWith ("[*]", StringComparison.Ordinal); /*Super uggly hack, SR doesn't allow one to query for it */ + } + + static bool TypeEquals (Type a, Type b) { + if (a == b) + return true; + + if (a.HasElementType) { + if (!b.HasElementType) + return false; + if (!TypeEquals (a.GetElementType (), b.GetElementType ())) + return false; + if (a.IsArray) { + if (!b.IsArray) + return false; + int rank = a.GetArrayRank (); + if (rank != b.GetArrayRank ()) + return false; + if (rank == 1 && IsBoundedVector (a) != IsBoundedVector (b)) + return false; + } else if (a.IsByRef) { + if (!b.IsByRef) + return false; + } else if (a.IsPointer) { + if (!b.IsPointer) + return false; + } + return true; + } + + if (a.IsGenericType) { + if (!b.IsGenericType) + return false; + if (a.IsGenericParameter) + return a == b; + if (a.IsGenericParameter) //previous test should have caught it + return false; + + if (a.IsGenericTypeDefinition) { + if (!b.IsGenericTypeDefinition) + return false; + } else { + if (b.IsGenericTypeDefinition) + return false; + if (!TypeEquals (a.GetGenericTypeDefinition (), b.GetGenericTypeDefinition ())) + return false; + + Type[] argsA = a.GetGenericArguments (); + Type[] argsB = b.GetGenericArguments (); + for (int i = 0; i < argsA.Length; ++i) { + if (!TypeEquals (argsA [i], argsB [i])) + return false; + } + } + } + + /* + Now only non-generic, non compound types are left. To properly deal with user + types we would have to call UnderlyingSystemType, but we let them have their + own instantiation as this is MS behavior and mcs (pre C# 4.0, at least) doesn't + depend on proper UT canonicalization. + */ + return a == b; + } + + public override bool Equals (object obj) + { + GenericInstanceKey other = obj as GenericInstanceKey; + if (other == null) + return false; + if (gtd != other.gtd) + return false; + for (int i = 0; i < args.Length; ++i) { + Type a = args [i]; + Type b = other.args [i]; + /* + We must cannonicalize as much as we can. Using equals means that some resulting types + won't have the exact same types as the argument ones. + For example, flyweight types used array, pointer and byref will should this behavior. + MCS seens to be resilient to this problem so hopefully this won't show up. + */ + if (a != b && !a.Equals (b)) + return false; + } + return true; + } + + public override int GetHashCode () + { + return hash_code; + } + } + + [StructLayout (LayoutKind.Sequential)] + public sealed partial class AssemblyBuilder : Assembly + { + // + // AssemblyBuilder inherits from Assembly, but the runtime thinks its layout inherits from RuntimeAssembly + // + #region Sync with RuntimeAssembly.cs and ReflectionAssembly in object-internals.h +#pragma warning disable 649 + internal IntPtr _mono_assembly; +#pragma warning restore 649 + object _evidence; + #endregion + +#pragma warning disable 169, 414, 649 + #region Sync with object-internals.h + private UIntPtr dynamic_assembly; /* GC-tracked */ + private MethodInfo entry_point; + private ModuleBuilder[] modules; + private string name; + private string dir; + private CustomAttributeBuilder[] cattrs; + private object resources; + byte[] public_key; + string version; + string culture; + uint algid; + uint flags; + PEFileKinds pekind = PEFileKinds.Dll; + bool delay_sign; + uint access; + Module[] loaded_modules; + object win32_resources; + private object permissions_minimum; + private object permissions_optional; + private object permissions_refused; + PortableExecutableKinds peKind; + ImageFileMachine machine; + bool corlib_internal; + Type[] type_forwarders; + byte[] pktoken; + #endregion +#pragma warning restore 169, 414, 649 + + AssemblyName aname; + string assemblyName; + bool created; + string versioninfo_culture; + ModuleBuilder manifest_module; + bool manifest_module_used; + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern void basic_init (AssemblyBuilder ab); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void UpdateNativeCustomAttributes (AssemblyBuilder ab); + + [PreserveDependency ("RuntimeResolve", "System.Reflection.Emit.ModuleBuilder")] + internal AssemblyBuilder (AssemblyName n, string directory, AssemblyBuilderAccess access, bool corlib_internal) + { + aname = (AssemblyName)n.Clone (); + + if (!Enum.IsDefined (typeof (AssemblyBuilderAccess), access)) + throw new ArgumentException (string.Format (CultureInfo.InvariantCulture, + "Argument value {0} is not valid.", (int) access), + "access"); + + name = n.Name; + this.access = (uint)access; + flags = (uint) n.Flags; + + dir = directory; + + /* Set defaults from n */ + if (n.CultureInfo != null) { + culture = n.CultureInfo.Name; + versioninfo_culture = n.CultureInfo.Name; + } + Version v = n.Version; + if (v != null) { + version = v.ToString (); + } + + basic_init (this); + + // Netcore only allows one module per assembly + manifest_module = new ModuleBuilder (this, "RefEmit_InMemoryManifestModule", false); + modules = new ModuleBuilder [] { manifest_module }; + } + + public override string CodeBase { + get { throw not_supported (); } + } + + public override MethodInfo EntryPoint { + get { + return entry_point; + } + } + + public override string Location { + get { + throw not_supported (); + } + } + + public override bool ReflectionOnly { + get { return base.ReflectionOnly; } + } + + public static AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access) + { + if (name == null) + throw new ArgumentNullException ("name"); + + return new AssemblyBuilder (name, null, access, false); + } + + public static AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, IEnumerable assemblyAttributes) + { + var ab = DefineDynamicAssembly (name, access); + if (assemblyAttributes != null) { + foreach (var attr in assemblyAttributes) + ab.SetCustomAttribute (attr); + } + + return ab; + } + + public ModuleBuilder DefineDynamicModule (string name) + { + return DefineDynamicModule (name, false); + } + + public ModuleBuilder DefineDynamicModule (string name, bool emitSymbolInfo) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name.Length == 0) + throw new ArgumentException ("Empty name is not legal.", "name"); + if (name[0] == '\0') + throw new ArgumentException (SR.Argument_InvalidName, nameof (name)); + + if (manifest_module_used) + throw new InvalidOperationException (SR.InvalidOperation_NoMultiModuleAssembly); + manifest_module_used = true; + return manifest_module; + } + + public ModuleBuilder GetDynamicModule (string name) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name.Length == 0) + throw new ArgumentException ("Empty name is not legal.", "name"); + + if (modules != null) + for (int i = 0; i < modules.Length; ++i) + if (modules [i].name == name) + return modules [i]; + return null; + } + + public override Type[] GetExportedTypes () + { + throw not_supported (); + } + + public override FileStream GetFile (string name) + { + throw not_supported (); + } + + public override FileStream[] GetFiles(bool getResourceModules) { + throw not_supported (); + } + + public override ManifestResourceInfo GetManifestResourceInfo(string resourceName) { + throw not_supported (); + } + + public override string[] GetManifestResourceNames() { + throw not_supported (); + } + + public override Stream GetManifestResourceStream(string name) { + throw not_supported (); + } + public override Stream GetManifestResourceStream(Type type, string name) { + throw not_supported (); + } + + public override bool IsCollectible { + get { + return access == (uint)AssemblyBuilderAccess.RunAndCollect; + } + } + + internal string AssemblyDir { + get { + return dir; + } + } + + public void SetCustomAttribute( CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + + /* + Only update the native list of custom attributes if we're adding one that is known to change dynamic execution behavior. + */ + if (customBuilder.Ctor != null && customBuilder.Ctor.DeclaringType == typeof (System.Runtime.CompilerServices.RuntimeCompatibilityAttribute)) + UpdateNativeCustomAttributes (this); + } + + [ComVisible (true)] + public void SetCustomAttribute ( ConstructorInfo con, byte[] binaryAttribute) { + if (con == null) + throw new ArgumentNullException ("con"); + if (binaryAttribute == null) + throw new ArgumentNullException ("binaryAttribute"); + + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + private Exception not_supported () { + // Strange message but this is what MS.NET prints... + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + + private String create_assembly_version (String version) { + String[] parts = version.Split ('.'); + int[] ver = new int [4] { 0, 0, 0, 0 }; + + if ((parts.Length < 0) || (parts.Length > 4)) + throw new ArgumentException ("The version specified '" + version + "' is invalid"); + + for (int i = 0; i < parts.Length; ++i) { + if (parts [i] == "*") { + DateTime now = DateTime.Now; + + if (i == 2) { + ver [2] = (now - new DateTime (2000, 1, 1)).Days; + if (parts.Length == 3) + ver [3] = (now.Second + (now.Minute * 60) + (now.Hour * 3600)) / 2; + } + else + if (i == 3) + ver [3] = (now.Second + (now.Minute * 60) + (now.Hour * 3600)) / 2; + else + throw new ArgumentException ("The version specified '" + version + "' is invalid"); + } + else { + try { + ver [i] = Int32.Parse (parts [i]); + } + catch (FormatException) { + throw new ArgumentException ("The version specified '" + version + "' is invalid"); + } + } + } + + return ver [0] + "." + ver [1] + "." + ver [2] + "." + ver [3]; + } + + private string GetCultureString (string str) + { + return (str == "neutral" ? String.Empty : str); + } + + /*Warning, @typeArguments must be a mscorlib internal array. So make a copy before passing it in*/ + internal Type MakeGenericType (Type gtd, Type[] typeArguments) + { + return new TypeBuilderInstantiation (gtd, typeArguments); + } + + public override Type GetType (string name, bool throwOnError, bool ignoreCase) + { + if (name == null) + throw new ArgumentNullException (name); + if (name.Length == 0) + throw new ArgumentException ("name", "Name cannot be empty"); + + var res = InternalGetType (null, name, throwOnError, ignoreCase); + if (res is TypeBuilder) { + if (throwOnError) + throw new TypeLoadException (string.Format ("Could not load type '{0}' from assembly '{1}'", name, this.name)); + return null; + } + return res; + } + + public override Module GetModule (String name) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name.Length == 0) + throw new ArgumentException ("Name can't be empty"); + + if (modules == null) + return null; + + foreach (Module module in modules) { + if (module.ScopeName == name) + return module; + } + + return null; + } + + public override Module[] GetModules (bool getResourceModules) + { + return (Module[])modules.Clone (); + } + + public override AssemblyName GetName (bool copiedName) + { + return AssemblyName.Create (this, false); + } + + // FIXME: "This always returns an empty array" + public override AssemblyName[] GetReferencedAssemblies () { + throw new NotImplementedException (); +#if FALSE + return GetReferencedAssemblies (this); +#endif + } + + public override Module[] GetLoadedModules (bool getResourceModules) + { + return GetModules (getResourceModules); + } + + //FIXME MS has issues loading satelite assemblies from SRE + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public override Assembly GetSatelliteAssembly (CultureInfo culture) + { + throw new NotImplementedException (); +#if FALSE + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return GetSatelliteAssembly (culture, null, true, ref stackMark); +#endif + } + + //FIXME MS has issues loading satelite assemblies from SRE + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public override Assembly GetSatelliteAssembly (CultureInfo culture, Version version) + { + throw new NotImplementedException (); +#if FALSE + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return GetSatelliteAssembly (culture, version, true, ref stackMark); +#endif + } + + public override Module ManifestModule { + get { + return manifest_module; + } + } + + public override bool GlobalAssemblyCache { + get { + return false; + } + } + + public override bool IsDynamic { + get { return true; } + } + + public override bool Equals (object obj) + { + return base.Equals (obj); + } + + public override int GetHashCode () + { + return base.GetHashCode (); + } + + public override string ToString () + { + if (assemblyName != null) + return assemblyName; + + assemblyName = FullName; + return assemblyName; + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes (bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public override object[] GetCustomAttributes (Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override IList GetCustomAttributesData () + { + return CustomAttributeData.GetCustomAttributes (this); + } + + public override string FullName { + get { + return aname.ToString (); + } + } + + internal override IntPtr MonoAssembly { + get { + return _mono_assembly; + } + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorBuilder.cs new file mode 100644 index 0000000000..7874748a0a --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorBuilder.cs @@ -0,0 +1,373 @@ +#nullable disable + +// +// System.Reflection.Emit.ConstructorBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.InteropServices; +using System.Diagnostics.SymbolStore; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public sealed partial class ConstructorBuilder : ConstructorInfo { + +#pragma warning disable 169, 414 + private RuntimeMethodHandle mhandle; + private ILGenerator ilgen; + internal Type[] parameters; + private MethodAttributes attrs; + private MethodImplAttributes iattrs; + private int table_idx; + private CallingConventions call_conv; + private TypeBuilder type; + internal ParameterBuilder[] pinfo; + private CustomAttributeBuilder[] cattrs; + private bool init_locals = true; + private Type[][] paramModReq; + private Type[][] paramModOpt; + private object permissions; +#pragma warning restore 169, 414 + internal bool finished; + + internal ConstructorBuilder (TypeBuilder tb, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes, Type[][] paramModReq, Type[][] paramModOpt) + { + attrs = attributes | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName; + call_conv = callingConvention; + if (parameterTypes != null) { + for (int i = 0; i < parameterTypes.Length; ++i) + if (parameterTypes [i] == null) + throw new ArgumentException ("Elements of the parameterTypes array cannot be null", "parameterTypes"); + + this.parameters = new Type [parameterTypes.Length]; + System.Array.Copy (parameterTypes, this.parameters, parameterTypes.Length); + } + type = tb; + this.paramModReq = paramModReq; + this.paramModOpt = paramModOpt; + table_idx = get_next_table_index (this, 0x06, 1); + + ((ModuleBuilder) tb.Module).RegisterToken (this, GetToken ().Token); + } + + // FIXME: + public override CallingConventions CallingConvention { + get { + return call_conv; + } + } + + public bool InitLocals { + get { + return init_locals; + } + set { + init_locals = value; + } + } + + internal TypeBuilder TypeBuilder { + get { + return type; + } + } + + public override MethodImplAttributes GetMethodImplementationFlags () + { + return iattrs; + } + + public override ParameterInfo[] GetParameters () + { + if (!type.is_created) + throw not_created (); + + return GetParametersInternal (); + } + + internal override ParameterInfo [] GetParametersInternal () + { + if (parameters == null) + return Array.Empty (); + + ParameterInfo [] retval = new ParameterInfo [parameters.Length]; + for (int i = 0; i < parameters.Length; i++) + retval [i] = RuntimeParameterInfo.New (pinfo?[i + 1], parameters [i], this, i + 1); + + return retval; + } + + internal override int GetParametersCount () + { + if (parameters == null) + return 0; + + return parameters.Length; + } + + internal override Type GetParameterType (int pos) { + return parameters [pos]; + } + + internal MethodBase RuntimeResolve () { + return type.RuntimeResolve ().GetConstructor (this); + } + + public override Object Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) + { + throw not_supported (); + } + + public override object Invoke (BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) + { + throw not_supported (); + } + + public override RuntimeMethodHandle MethodHandle { + get { + throw not_supported (); + } + } + + public override MethodAttributes Attributes { + get { + return attrs; + } + } + + public override Type ReflectedType { + get { + return type; + } + } + + public override Type DeclaringType { + get { + return type; + } + } + + public override string Name { + get { + return (attrs & MethodAttributes.Static) != 0 ? ConstructorInfo.TypeConstructorName : ConstructorInfo.ConstructorName; + } + } + + public string Signature { + get { + return "constructor signature"; + } + } + + public ParameterBuilder DefineParameter (int iSequence, ParameterAttributes attributes, string strParamName) + { + // The 0th ParameterBuilder does not correspond to an + // actual parameter, but .NETFramework lets you define + // it anyway. It is not useful. + if (iSequence < 0 || iSequence > GetParametersCount ()) + throw new ArgumentOutOfRangeException ("iSequence"); + if (type.is_created) + throw not_after_created (); + + ParameterBuilder pb = new ParameterBuilder (this, iSequence, attributes, strParamName); + if (pinfo == null) + pinfo = new ParameterBuilder [parameters.Length + 1]; + pinfo [iSequence] = pb; + return pb; + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw not_supported (); + } + + public override object [] GetCustomAttributes (bool inherit) + { + throw not_supported (); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + throw not_supported (); + } + + public ILGenerator GetILGenerator () + { + return GetILGenerator (64); + } + + public ILGenerator GetILGenerator (int streamSize) + { + if (finished) + throw new InvalidOperationException (); + if (ilgen != null) + return ilgen; + if (!(((attrs & (MethodAttributes.Abstract | MethodAttributes.PinvokeImpl)) == 0) && ((iattrs & (MethodImplAttributes.Runtime | MethodImplAttributes.InternalCall)) == 0))) + throw new InvalidOperationException (); + ilgen = new ILGenerator (type.Module, ((ModuleBuilder)type.Module).GetTokenGenerator (), streamSize); + return ilgen; + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + + string attrname = customBuilder.Ctor.ReflectedType.FullName; + if (attrname == "System.Runtime.CompilerServices.MethodImplAttribute") { + byte[] data = customBuilder.Data; + int impla; // the (stupid) ctor takes a short or an int ... + impla = (int)data [2]; + impla |= ((int)data [3]) << 8; + SetImplementationFlags ((MethodImplAttributes)impla); + return; + } + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute) + { + if (con == null) + throw new ArgumentNullException ("con"); + if (binaryAttribute == null) + throw new ArgumentNullException ("binaryAttribute"); + + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + public void SetImplementationFlags (MethodImplAttributes attributes) + { + if (type.is_created) + throw not_after_created (); + + iattrs = attributes; + } + + public Module GetModule () + { + return type.Module; + } + + public MethodToken GetToken () + { + return new MethodToken (0x06000000 | table_idx); + } + + public override Module Module { + get { + return GetModule (); + } + } + + public override string ToString () + { + return "ConstructorBuilder ['" + type.Name + "']"; + } + + internal void fixup () + { + if (((attrs & (MethodAttributes.Abstract | MethodAttributes.PinvokeImpl)) == 0) && ((iattrs & (MethodImplAttributes.Runtime | MethodImplAttributes.InternalCall)) == 0)) { + if ((ilgen == null) || (ilgen.ILOffset == 0)) + throw new InvalidOperationException ("Method '" + Name + "' does not have a method body."); + } + if (IsStatic && + ((call_conv & CallingConventions.VarArgs) != 0 || + (call_conv & CallingConventions.HasThis) != 0)) + throw new TypeLoadException (); + if (ilgen != null) + ilgen.label_fixup (this); + } + + internal void ResolveUserTypes () { + TypeBuilder.ResolveUserTypes (parameters); + if (paramModReq != null) { + foreach (var types in paramModReq) + TypeBuilder.ResolveUserTypes (types); + } + if (paramModOpt != null) { + foreach (var types in paramModOpt) + TypeBuilder.ResolveUserTypes (types); + } + } +/* + internal void GenerateDebugInfo (ISymbolWriter symbolWriter) + { + if (ilgen != null && ilgen.HasDebugInfo) { + SymbolToken token = new SymbolToken (GetToken().Token); + symbolWriter.OpenMethod (token); + symbolWriter.SetSymAttribute (token, "__name", System.Text.Encoding.UTF8.GetBytes (Name)); + ilgen.GenerateDebugInfo (symbolWriter); + symbolWriter.CloseMethod (); + } + } +*/ + internal override int get_next_table_index (object obj, int table, int count) + { + return type.get_next_table_index (obj, table, count); + } + + private void RejectIfCreated () + { + if (type.is_created) + throw new InvalidOperationException ("Type definition of the method is complete."); + } + + private Exception not_supported () + { + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + + private Exception not_after_created () + { + return new InvalidOperationException ("Unable to change after type has been created."); + } + + private Exception not_created () + { + return new NotSupportedException ("The type is not yet created."); + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorOnTypeBuilderInst.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorOnTypeBuilderInst.cs new file mode 100644 index 0000000000..835f161f25 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ConstructorOnTypeBuilderInst.cs @@ -0,0 +1,227 @@ +#nullable disable +// +// System.Reflection.Emit/ConstructorOnTypeBuilderInst.cs +// +// Author: +// Zoltan Varga (vargaz@gmail.com) +// +// +// Copyright (C) 2008 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Globalization; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit +{ + /* + * This class represents a ctor of an instantiation of a generic type builder. + */ + [StructLayout (LayoutKind.Sequential)] + internal class ConstructorOnTypeBuilderInst : ConstructorInfo + { + #region Keep in sync with object-internals.h + internal TypeBuilderInstantiation instantiation; + internal ConstructorInfo cb; + #endregion + + public ConstructorOnTypeBuilderInst (TypeBuilderInstantiation instantiation, ConstructorInfo cb) + { + this.instantiation = instantiation; + this.cb = cb; + } + + // + // MemberInfo members + // + + public override Type DeclaringType { + get { + return instantiation; + } + } + + public override string Name { + get { + return cb.Name; + } + } + + public override Type ReflectedType { + get { + return instantiation; + } + } + + public override Module Module { + get { + return cb.Module; + } + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return cb.IsDefined (attributeType, inherit); + } + + public override object [] GetCustomAttributes (bool inherit) + { + return cb.GetCustomAttributes (inherit); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + return cb.GetCustomAttributes (attributeType, inherit); + } + + // + // MethodBase members + // + + public override MethodImplAttributes GetMethodImplementationFlags () + { + return cb.GetMethodImplementationFlags (); + } + + public override ParameterInfo[] GetParameters () + { + /*FIXME, maybe the right thing to do when the type is creates is to retrieve from the inflated type*/ + if (!instantiation.IsCreated) + throw new NotSupportedException (); + + return GetParametersInternal (); + } + + internal override ParameterInfo[] GetParametersInternal () + { + ParameterInfo [] res; + if (cb is ConstructorBuilder) { + ConstructorBuilder cbuilder = (ConstructorBuilder)cb; + res = new ParameterInfo [cbuilder.parameters.Length]; + for (int i = 0; i < cbuilder.parameters.Length; i++) { + Type type = instantiation.InflateType (cbuilder.parameters [i]); + res [i] = RuntimeParameterInfo.New (cbuilder.pinfo?[i], type, this, i + 1); + } + } else { + ParameterInfo[] parms = cb.GetParameters (); + res = new ParameterInfo [parms.Length]; + for (int i = 0; i < parms.Length; i++) { + Type type = instantiation.InflateType (parms [i].ParameterType); + res [i] = RuntimeParameterInfo.New (parms [i], type, this, i + 1); + } + } + return res; + } + + internal override Type[] GetParameterTypes () { + if (cb is ConstructorBuilder) { + return (cb as ConstructorBuilder).parameters; + } else { + ParameterInfo[] parms = cb.GetParameters (); + var res = new Type [parms.Length]; + for (int i = 0; i < parms.Length; i++) { + res [i] = parms [i].ParameterType; + } + return res; + } + } + + // Called from the runtime to return the corresponding finished ConstructorInfo object + internal ConstructorInfo RuntimeResolve () { + var type = instantiation.InternalResolve (); + return type.GetConstructor (cb); + } + + public override int MetadataToken { + get { + return base.MetadataToken; + } + } + + internal override int GetParametersCount () + { + return cb.GetParametersCount (); + } + + public override Object Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) + { + return cb.Invoke (obj, invokeAttr, binder, parameters, + culture); + } + + public override RuntimeMethodHandle MethodHandle { + get { + return cb.MethodHandle; + } + } + + public override MethodAttributes Attributes { + get { + return cb.Attributes; + } + } + + public override CallingConventions CallingConvention { + get { + return cb.CallingConvention; + } + } + + public override Type [] GetGenericArguments () + { + return cb.GetGenericArguments (); + } + + public override bool ContainsGenericParameters { + get { + return false; + } + } + + public override bool IsGenericMethodDefinition { + get { + return false; + } + } + + public override bool IsGenericMethod { + get { + return false; + } + } + + // + // MethodBase members + // + + public override object Invoke (BindingFlags invokeAttr, Binder binder, object[] parameters, + CultureInfo culture) + { + throw new InvalidOperationException (); + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/CustomAttributeBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/CustomAttributeBuilder.cs new file mode 100644 index 0000000000..8c75be019e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/CustomAttributeBuilder.cs @@ -0,0 +1,552 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/CustomAttributeBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public partial class CustomAttributeBuilder { + ConstructorInfo ctor; + byte[] data; + object [] args; + PropertyInfo [] namedProperties; + object [] propertyValues; + FieldInfo [] namedFields; + object [] fieldValues; + + internal ConstructorInfo Ctor { + get {return ctor;} + } + + internal byte[] Data { + get {return data;} + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern byte[] GetBlob(Assembly asmb, ConstructorInfo con, object[] constructorArgs, PropertyInfo[] namedProperties, object[] propertyValues, FieldInfo[] namedFields, object[] fieldValues); + + internal object Invoke () + { + object result = ctor.Invoke (args); + + for (int i=0; i < namedFields.Length; i++) + namedFields [i].SetValue (result, fieldValues [i]); + + for (int i=0; i < namedProperties.Length; i++) + namedProperties [i].SetValue (result, propertyValues [i]); + + return result; + } + + internal CustomAttributeBuilder( ConstructorInfo con, byte[] binaryAttribute) { + if (con == null) + throw new ArgumentNullException ("con"); + if (binaryAttribute == null) + throw new ArgumentNullException ("binaryAttribute"); + ctor = con; + data = (byte[])binaryAttribute.Clone (); + /* should we check that the user supplied data is correct? */ + } + + public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs) + { + Initialize (con, constructorArgs, new PropertyInfo [0], new object [0], + new FieldInfo [0], new object [0]); + } + public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs, + FieldInfo[] namedFields, object[] fieldValues) + { + Initialize (con, constructorArgs, new PropertyInfo [0], new object [0], + namedFields, fieldValues); + } + public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs, + PropertyInfo[] namedProperties, object[] propertyValues) + { + Initialize (con, constructorArgs, namedProperties, propertyValues, new FieldInfo [0], + new object [0]); + } + public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs, + PropertyInfo[] namedProperties, object[] propertyValues, + FieldInfo[] namedFields, object[] fieldValues) + { + Initialize (con, constructorArgs, namedProperties, propertyValues, namedFields, fieldValues); + } + + private bool IsValidType (Type t) + { + /* FIXME: Add more checks */ + if (t.IsArray && t.GetArrayRank () > 1) + return false; + if (t is TypeBuilder && t.IsEnum) { + // Check that the enum is properly constructed, the unmanaged code + // depends on this + Enum.GetUnderlyingType (t); + } + if (t.IsClass && !(t.IsArray || t == typeof (object) || t == typeof (Type) || t == typeof (string) || t.Assembly.GetName ().Name == "mscorlib")) + return false; + if (t.IsValueType && !(t.IsPrimitive || t.IsEnum || ((t.Assembly is AssemblyBuilder) && t.Assembly.GetName ().Name == "mscorlib"))) + return false; + return true; + } + + private bool IsValidParam (object o, Type paramType) + { + Type t = o.GetType (); + if (!IsValidType (t)) + return false; + if (paramType == typeof (object)) { + if (t.IsArray && t.GetArrayRank () == 1) + return IsValidType (t.GetElementType ()); + if (!t.IsPrimitive && !typeof (Type).IsAssignableFrom (t) && t != typeof (string) && !t.IsEnum) + return false; + } + return true; + } + + static bool IsValidValue (Type type, object value) { + if (type.IsValueType && value == null) + return false; + if (type.IsArray && type.GetElementType ().IsValueType) { + foreach (var v in (Array)value) { + if (v == null) + return false; + } + } + return true; + } + + private void Initialize (ConstructorInfo con, object [] constructorArgs, + PropertyInfo [] namedProperties, object [] propertyValues, + FieldInfo [] namedFields, object [] fieldValues) + { + ctor = con; + args = constructorArgs; + this.namedProperties = namedProperties; + this.propertyValues = propertyValues; + this.namedFields = namedFields; + this.fieldValues = fieldValues; + + if (con == null) + throw new ArgumentNullException ("con"); + if (constructorArgs == null) + throw new ArgumentNullException ("constructorArgs"); + if (namedProperties == null) + throw new ArgumentNullException ("namedProperties"); + if (propertyValues == null) + throw new ArgumentNullException ("propertyValues"); + if (namedFields == null) + throw new ArgumentNullException ("namedFields"); + if (fieldValues == null) + throw new ArgumentNullException ("fieldValues"); + if (con.GetParametersCount () != constructorArgs.Length) + throw new ArgumentException ("Parameter count does not match " + + "passed in argument value count."); + if (namedProperties.Length != propertyValues.Length) + throw new ArgumentException ("Array lengths must be the same.", + "namedProperties, propertyValues"); + if (namedFields.Length != fieldValues.Length) + throw new ArgumentException ("Array lengths must be the same.", + "namedFields, fieldValues"); + if ((con.Attributes & MethodAttributes.Static) == MethodAttributes.Static || + (con.Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Private) + throw new ArgumentException ("Cannot have private or static constructor."); + + Type atype = ctor.DeclaringType; + int i; + i = 0; + foreach (FieldInfo fi in namedFields) { + Type t = fi.DeclaringType; + if ((atype != t) && (!t.IsSubclassOf (atype)) && (!atype.IsSubclassOf (t))) + throw new ArgumentException ("Field '" + fi.Name + "' does not belong to the same class as the constructor"); + if (!IsValidType (fi.FieldType)) + throw new ArgumentException ("Field '" + fi.Name + "' does not have a valid type."); + if (!IsValidValue (fi.FieldType, fieldValues [i])) + throw new ArgumentException ("Field " + fi.Name + " is not a valid value."); + // FIXME: Check enums and TypeBuilders as well + if (fieldValues [i] != null) + // IsEnum does not seem to work on TypeBuilders + if (!(fi.FieldType is TypeBuilder) && !fi.FieldType.IsEnum && !fi.FieldType.IsInstanceOfType (fieldValues [i])) { + // + // mcs allways uses object[] for array types and + // MS.NET allows this + // + if (!fi.FieldType.IsArray) + throw new ArgumentException ("Value of field '" + fi.Name + "' does not match field type: " + fi.FieldType); + } + i ++; + } + + i = 0; + foreach (PropertyInfo pi in namedProperties) { + if (!pi.CanWrite) + throw new ArgumentException ("Property '" + pi.Name + "' does not have a setter."); + Type t = pi.DeclaringType; + if ((atype != t) && (!t.IsSubclassOf (atype)) && (!atype.IsSubclassOf (t))) + throw new ArgumentException ("Property '" + pi.Name + "' does not belong to the same class as the constructor"); + if (!IsValidType (pi.PropertyType)) + throw new ArgumentException ("Property '" + pi.Name + "' does not have a valid type."); + if (!IsValidValue (pi.PropertyType, propertyValues [i])) + throw new ArgumentException ("Property " + pi.Name + " is not a valid value."); + if (propertyValues [i] != null) { + if (!(pi.PropertyType is TypeBuilder) && !pi.PropertyType.IsEnum && !pi.PropertyType.IsInstanceOfType (propertyValues [i])) + if (!pi.PropertyType.IsArray) + throw new ArgumentException ("Value of property '" + pi.Name + "' does not match property type: " + pi.PropertyType + " -> " + propertyValues [i]); + } + i ++; + } + + i = 0; + foreach (ParameterInfo pi in GetParameters (con)) { + if (pi != null) { + Type paramType = pi.ParameterType; + if (!IsValidType (paramType)) + throw new ArgumentException ("Parameter " + i + " does not have a valid type."); + if (!IsValidValue (paramType, constructorArgs [i])) + throw new ArgumentException ("Parameter " + i + " is not a valid value."); + + if (constructorArgs [i] != null) { + if (!(paramType is TypeBuilder) && !paramType.IsEnum && !paramType.IsInstanceOfType (constructorArgs [i])) + if (!paramType.IsArray) + throw new ArgumentException ("Value of argument " + i + " does not match parameter type: " + paramType + " -> " + constructorArgs [i]); + if (!IsValidParam (constructorArgs [i], paramType)) + throw new ArgumentException ("Cannot emit a CustomAttribute with argument of type " + constructorArgs [i].GetType () + "."); + } + } + i ++; + } + + data = GetBlob (atype.Assembly, con, constructorArgs, namedProperties, propertyValues, namedFields, fieldValues); + } + + /* helper methods */ + internal static int decode_len (byte[] data, int pos, out int rpos) { + int len = 0; + if ((data [pos] & 0x80) == 0) { + len = (int)(data [pos++] & 0x7f); + } else if ((data [pos] & 0x40) == 0) { + len = ((data [pos] & 0x3f) << 8) + data [pos + 1]; + pos += 2; + } else { + len = ((data [pos] & 0x1f) << 24) + (data [pos + 1] << 16) + (data [pos + 2] << 8) + data [pos + 3]; + pos += 4; + } + rpos = pos; + return len; + } + + internal static string string_from_bytes (byte[] data, int pos, int len) + { + return System.Text.Encoding.UTF8.GetString(data, pos, len); + } + + internal static string decode_string (byte [] data, int pos, out int rpos) + { + if (data [pos] == 0xff) { + rpos = pos + 1; + return null; + } else { + int len = decode_len (data, pos, out pos); + string s = string_from_bytes (data, pos, len); + pos += len; + rpos = pos; + return s; + } + } + + internal string string_arg () + { + int pos = 2; + return decode_string (data, pos, out pos); + } + + internal static UnmanagedMarshal get_umarshal (CustomAttributeBuilder customBuilder, bool is_field) { + byte[] data = customBuilder.Data; + UnmanagedType subtype = (UnmanagedType)0x50; /* NATIVE_MAX */ + int sizeConst = -1; + int sizeParamIndex = -1; + bool hasSize = false; + int value; + int utype; /* the (stupid) ctor takes a short or an enum ... */ + string marshalTypeName = null; + Type marshalTypeRef = null; + string marshalCookie = String.Empty; + utype = (int)data [2]; + utype |= ((int)data [3]) << 8; + + string first_type_name = GetParameters (customBuilder.Ctor) [0].ParameterType.FullName; + int pos = 6; + if (first_type_name == "System.Int16") + pos = 4; + int nnamed = (int)data [pos++]; + nnamed |= ((int)data [pos++]) << 8; + + for (int i = 0; i < nnamed; ++i) { + int paramType; // What is this ? + + /* Skip field/property signature */ + int fieldPropSig = (int)data [pos ++]; + /* Read type */ + paramType = ((int)data [pos++]); + if (paramType == 0x55) { + /* enums, the value is preceeded by the type */ + decode_string (data, pos, out pos); + } + string named_name = decode_string (data, pos, out pos); + + switch (named_name) { + case "ArraySubType": + value = (int)data [pos++]; + value |= ((int)data [pos++]) << 8; + value |= ((int)data [pos++]) << 16; + value |= ((int)data [pos++]) << 24; + subtype = (UnmanagedType)value; + break; + case "SizeConst": + value = (int)data [pos++]; + value |= ((int)data [pos++]) << 8; + value |= ((int)data [pos++]) << 16; + value |= ((int)data [pos++]) << 24; + sizeConst = value; + hasSize = true; + break; + case "SafeArraySubType": + value = (int)data[pos++]; + value |= ((int)data[pos++]) << 8; + value |= ((int)data[pos++]) << 16; + value |= ((int)data[pos++]) << 24; + subtype = (UnmanagedType)value; + break; + case "IidParameterIndex": + pos += 4; + break; + case "SafeArrayUserDefinedSubType": + decode_string (data, pos, out pos); + break; + case "SizeParamIndex": + value = (int)data [pos++]; + value |= ((int)data [pos++]) << 8; + sizeParamIndex = value; + hasSize = true; + break; + case "MarshalType": + marshalTypeName = decode_string (data, pos, out pos); + break; + case "MarshalTypeRef": + marshalTypeName = decode_string (data, pos, out pos); + if (marshalTypeName != null) + marshalTypeRef = Type.GetType (marshalTypeName); + break; + case "MarshalCookie": + marshalCookie = decode_string (data, pos, out pos); + break; + default: + throw new Exception ("Unknown MarshalAsAttribute field: " + named_name); + } + } + + switch ((UnmanagedType)utype) { + case UnmanagedType.LPArray: + if (hasSize) + return UnmanagedMarshal.DefineLPArrayInternal (subtype, sizeConst, sizeParamIndex); + else + return UnmanagedMarshal.DefineLPArray (subtype); +#if FEATURE_COMINTEROP + case UnmanagedType.SafeArray: + return UnmanagedMarshal.DefineSafeArray (subtype); +#endif + case UnmanagedType.ByValArray: + if (!is_field) + throw new ArgumentException ("Specified unmanaged type is only valid on fields"); + + return UnmanagedMarshal.DefineByValArray (sizeConst); + case UnmanagedType.ByValTStr: + return UnmanagedMarshal.DefineByValTStr (sizeConst); +#if FEATURE_COMINTEROP + case UnmanagedType.CustomMarshaler: + return UnmanagedMarshal.DefineCustom (marshalTypeRef, marshalCookie, marshalTypeName, Guid.Empty); +#endif + default: + return UnmanagedMarshal.DefineUnmanagedMarshal ((UnmanagedType)utype); + } + } + + static Type elementTypeToType (int elementType) { + /* Partition II, section 23.1.16 */ + switch (elementType) { + case 0x02: + return typeof (bool); + case 0x03: + return typeof (char); + case 0x04: + return typeof (sbyte); + case 0x05: + return typeof (byte); + case 0x06: + return typeof (short); + case 0x07: + return typeof (ushort); + case 0x08: + return typeof (int); + case 0x09: + return typeof (uint); + case 0x0a: + return typeof (long); + case 0x0b: + return typeof (ulong); + case 0x0c: + return typeof (float); + case 0x0d: + return typeof (double); + case 0x0e: + return typeof (string); + default: + throw new Exception ("Unknown element type '" + elementType + "'"); + } + } + + static object decode_cattr_value (Type t, byte[] data, int pos, out int rpos) { + switch (Type.GetTypeCode (t)) { + case TypeCode.String: + if (data [pos] == 0xff) { + rpos = pos + 1; + return null; + } + int len = decode_len (data, pos, out pos); + rpos = pos + len; + return string_from_bytes (data, pos, len); + case TypeCode.Int32: + rpos = pos + 4; + return data [pos] + (data [pos + 1] << 8) + (data [pos + 2] << 16) + (data [pos + 3] << 24); + case TypeCode.Boolean: + rpos = pos + 1; + return (data [pos] == 0) ? false : true; + case TypeCode.Object: + int subtype = data [pos]; + pos += 1; + + if (subtype >= 0x02 && subtype <= 0x0e) + return decode_cattr_value (elementTypeToType (subtype), data, pos, out rpos); + else + throw new Exception ("Subtype '" + subtype + "' of type object not yet handled in decode_cattr_value"); + default: + throw new Exception ("FIXME: Type " + t + " not yet handled in decode_cattr_value."); + } + } + + internal struct CustomAttributeInfo { + public ConstructorInfo ctor; + public object[] ctorArgs; + public string[] namedParamNames; + public object[] namedParamValues; + } + + internal static CustomAttributeInfo decode_cattr (CustomAttributeBuilder customBuilder) { + byte[] data = customBuilder.Data; + ConstructorInfo ctor = customBuilder.Ctor; + int pos = 0; + + CustomAttributeInfo info = new CustomAttributeInfo (); + + // Prolog + if (data.Length < 2) + throw new Exception ("Custom attr length is only '" + data.Length + "'"); + if ((data [0] != 0x1) || (data [1] != 0x00)) + throw new Exception ("Prolog invalid"); + pos = 2; + + ParameterInfo [] pi = GetParameters (ctor); + info.ctor = ctor; + info.ctorArgs = new object [pi.Length]; + for (int i = 0; i < pi.Length; ++i) + info.ctorArgs [i] = decode_cattr_value (pi [i].ParameterType, data, pos, out pos); + + int num_named = data [pos] + (data [pos + 1] * 256); + pos += 2; + + info.namedParamNames = new string [num_named]; + info.namedParamValues = new object [num_named]; + for (int i = 0; i < num_named; ++i) { + int named_type = data [pos++]; + int data_type = data [pos++]; + string enum_type_name = null; + + if (data_type == 0x55) { + int len2 = decode_len (data, pos, out pos); + enum_type_name = string_from_bytes (data, pos, len2); + pos += len2; + } + + int len = decode_len (data, pos, out pos); + string name = string_from_bytes (data, pos, len); + info.namedParamNames [i] = name; + pos += len; + + if (named_type == 0x53) { + /* Field */ + FieldInfo fi = ctor.DeclaringType.GetField (name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance); + if (fi == null) + throw new Exception ("Custom attribute type '" + ctor.DeclaringType + "' doesn't contain a field named '" + name + "'"); + + object val = decode_cattr_value (fi.FieldType, data, pos, out pos); + if (enum_type_name != null) { + Type enumType = Type.GetType (enum_type_name); + val = Enum.ToObject (enumType, val); + } + + info.namedParamValues [i] = val; + } + else + // FIXME: + throw new Exception ("Unknown named type: " + named_type); + } + + return info; + } + + static ParameterInfo [] GetParameters (ConstructorInfo ctor) + { + ConstructorBuilder cb = ctor as ConstructorBuilder; + if (cb != null) + return cb.GetParametersInternal (); + + return ctor.GetParametersInternal (); + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DerivedTypes.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DerivedTypes.cs new file mode 100644 index 0000000000..4b0361ce69 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DerivedTypes.cs @@ -0,0 +1,470 @@ +#nullable disable + +// +// System.Reflection.Emit.DerivedTypes.cs +// +// Authors: +// Rodrigo Kumpera +// +// +// Copyright (C) 2009 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System.Reflection; +using System.Reflection.Emit; +using System.Collections; +using System.Runtime.CompilerServices; +using System.Globalization; +using System.Runtime.InteropServices; +using System.Runtime.Serialization; +using System.Text; + + +namespace System.Reflection.Emit +{ + [StructLayout (LayoutKind.Sequential)] + abstract partial class SymbolType : TypeInfo + { + internal Type m_baseType; + + internal SymbolType (Type elementType) + { + this.m_baseType = elementType; + } + + internal abstract String FormatName (string elementName); + + protected override bool IsArrayImpl () + { + return false; + } + + protected override bool IsByRefImpl () + { + return false; + } + + protected override bool IsPointerImpl () + { + return false; + } + + public override Type MakeArrayType () + { + return new ArrayType (this, 0); + } + + public override Type MakeArrayType (int rank) + { + if (rank < 1) + throw new IndexOutOfRangeException (); + return new ArrayType (this, rank); + } + + public override Type MakeByRefType () + { + return new ByRefType (this); + } + + public override Type MakePointerType () + { + return new PointerType (this); + } + + public override string ToString () + { + return FormatName (m_baseType.ToString ()); + } + + public override string AssemblyQualifiedName { + get { + string fullName = FormatName (m_baseType.FullName); + if (fullName == null) + return null; + return fullName + ", " + m_baseType.Assembly.FullName; + } + } + + + public override string FullName { + get { + return FormatName (m_baseType.FullName); + } + } + + public override string Name { + get { + return FormatName (m_baseType.Name); + } + } + + public override Type UnderlyingSystemType { + get { + return this; + } + } + + internal override bool IsUserType { + get { + return m_baseType.IsUserType; + } + } + + // Called from the runtime to return the corresponding finished Type object + internal override Type RuntimeResolve () { + return InternalResolve (); + } + + public override Guid GUID + { + get { throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); } + } + + public override Object InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, + Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override Module Module + { + get + { + Type baseType; + + for (baseType = m_baseType; baseType is SymbolType; baseType = ((SymbolType) baseType).m_baseType); + + return baseType.Module; + } + } + public override Assembly Assembly + { + get + { + Type baseType; + + for (baseType = m_baseType; baseType is SymbolType; baseType = ((SymbolType) baseType).m_baseType); + + return baseType.Assembly; + } + } + + public override RuntimeTypeHandle TypeHandle + { + get { throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); } + } + + public override String Namespace + { + get { return m_baseType.Namespace; } + } + + public override Type BaseType + { + get { return typeof(System.Array); } + } + + protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr,Binder binder, + CallingConventions callConvention, Type[] types,ParameterModifier[] modifiers) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + protected override MethodInfo GetMethodImpl(String name,BindingFlags bindingAttr,Binder binder, + CallingConventions callConvention, Type[] types,ParameterModifier[] modifiers) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override MethodInfo[] GetMethods(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override FieldInfo GetField(String name, BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override FieldInfo[] GetFields(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override Type GetInterface(String name,bool ignoreCase) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override Type[] GetInterfaces() + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override EventInfo GetEvent(String name,BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override EventInfo[] GetEvents() + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + protected override PropertyInfo GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, + Type returnType, Type[] types, ParameterModifier[] modifiers) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override PropertyInfo[] GetProperties(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override Type[] GetNestedTypes(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override Type GetNestedType(String name, BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override MemberInfo[] GetMember(String name, MemberTypes type, BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override MemberInfo[] GetMembers(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override InterfaceMapping GetInterfaceMap(Type interfaceType) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override EventInfo[] GetEvents(BindingFlags bindingAttr) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + protected override TypeAttributes GetAttributeFlagsImpl() + { + // Return the attribute flags of the base type? + Type baseType; + for (baseType = m_baseType; baseType is SymbolType; baseType = ((SymbolType)baseType).m_baseType); + return baseType.Attributes; + } + + protected override bool IsPrimitiveImpl() + { + return false; + } + + protected override bool IsValueTypeImpl() + { + return false; + } + + protected override bool IsCOMObjectImpl() + { + return false; + } + + public override bool IsConstructedGenericType + { + get + { + return false; + } + } + + public override Type GetElementType() + { + return m_baseType; + } + + protected override bool HasElementTypeImpl() + { + return m_baseType != null; + } + + public override Object[] GetCustomAttributes(bool inherit) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override Object[] GetCustomAttributes(Type attributeType, bool inherit) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonReflectedType")); + } + } + + [StructLayout (LayoutKind.Sequential)] + internal class ArrayType : SymbolType + { + int rank; + + internal ArrayType (Type elementType, int rank) : base (elementType) + { + this.rank = rank; + } + + internal int GetEffectiveRank () + { + return rank; + } + + internal override Type InternalResolve () + { + Type et = m_baseType.InternalResolve (); + if (rank == 0) + return et.MakeArrayType (); + return et.MakeArrayType (rank); + } + + internal override Type RuntimeResolve () + { + Type et = m_baseType.RuntimeResolve (); + if (rank == 0) + return et.MakeArrayType (); + return et.MakeArrayType (rank); + } + + protected override bool IsArrayImpl () + { + return true; + } + + public override bool IsSZArray { + get { + return rank == 0; + } + } + + public override int GetArrayRank () + { + return (rank == 0) ? 1 : rank; + } + + internal override String FormatName (string elementName) + { + if (elementName == null) + return null; + StringBuilder sb = new StringBuilder (elementName); + sb.Append ("["); + for (int i = 1; i < rank; ++i) + sb.Append (","); + if (rank == 1) + sb.Append ("*"); + sb.Append ("]"); + return sb.ToString (); + } + } + + [StructLayout (LayoutKind.Sequential)] + internal class ByRefType : SymbolType + { + internal ByRefType (Type elementType) : base (elementType) + { + } + + internal override Type InternalResolve () + { + return m_baseType.InternalResolve ().MakeByRefType (); + } + + protected override bool IsByRefImpl () + { + return true; + } + + internal override String FormatName (string elementName) + { + if (elementName == null) + return null; + return elementName + "&"; + } + + public override Type MakeArrayType () + { + throw new ArgumentException ("Cannot create an array type of a byref type"); + } + + public override Type MakeArrayType (int rank) + { + throw new ArgumentException ("Cannot create an array type of a byref type"); + } + + public override Type MakeByRefType () + { + throw new ArgumentException ("Cannot create a byref type of an already byref type"); + } + + public override Type MakePointerType () + { + throw new ArgumentException ("Cannot create a pointer type of a byref type"); + } + } + + [StructLayout (LayoutKind.Sequential)] + internal class PointerType : SymbolType + { + internal PointerType (Type elementType) : base (elementType) + { + } + + internal override Type InternalResolve () + { + return m_baseType.InternalResolve ().MakePointerType (); + } + + protected override bool IsPointerImpl () + { + return true; + } + + internal override String FormatName (string elementName) + { + if (elementName == null) + return null; + return elementName + "*"; + } + } + +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicILInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicILInfo.cs new file mode 100644 index 0000000000..9501a83f44 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicILInfo.cs @@ -0,0 +1,133 @@ +#nullable disable + +// +// System.Reflection.Emit/DynamicILInfo.cs +// +// Author: +// Zoltan Varga (vargaz@gmail.com) +// +// Copyright (C) 2007 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + + [ComVisible (true)] + public class DynamicILInfo { + + DynamicMethod method; + + internal DynamicILInfo () + { + } + + internal DynamicILInfo (DynamicMethod method) + { + this.method = method; + } + + public DynamicMethod DynamicMethod { + get { + return method; + } + } + + // FIXME: + public int GetTokenFor (byte[] signature) { + throw new NotImplementedException (); + } + + public int GetTokenFor (DynamicMethod method) { + return this.method.GetILGenerator ().TokenGenerator.GetToken (method, false); + } + + public int GetTokenFor (RuntimeFieldHandle field) { + return this.method.GetILGenerator ().TokenGenerator.GetToken (FieldInfo.GetFieldFromHandle (field), false); + } + + public int GetTokenFor (RuntimeMethodHandle method) { + MethodBase mi = MethodBase.GetMethodFromHandle (method); + return this.method.GetILGenerator ().TokenGenerator.GetToken (mi, false); + } + + public int GetTokenFor (RuntimeTypeHandle type) { + Type t = Type.GetTypeFromHandle (type); + return this.method.GetILGenerator ().TokenGenerator.GetToken (t, false); + } + + public int GetTokenFor (string literal) { + return method.GetILGenerator ().TokenGenerator.GetToken (literal); + } + + // FIXME: + public int GetTokenFor (RuntimeMethodHandle method, RuntimeTypeHandle contextType) { + throw new NotImplementedException (); + } + + // FIXME: + public int GetTokenFor (RuntimeFieldHandle field, RuntimeTypeHandle contextType) { + throw new NotImplementedException (); + } + + public void SetCode (byte[] code, int maxStackSize) { + if (code == null) + throw new ArgumentNullException ("code"); + method.GetILGenerator ().SetCode (code, maxStackSize); + } + + [CLSCompliantAttribute(false)] + public unsafe void SetCode (byte* code, int codeSize, int maxStackSize) { + if (code == null) + throw new ArgumentNullException ("code"); + method.GetILGenerator ().SetCode (code, codeSize, maxStackSize); + } + + // FIXME: + public void SetExceptions (byte[] exceptions) { + throw new NotImplementedException (); + } + + // FIXME: + [CLSCompliantAttribute(false)] + public unsafe void SetExceptions (byte* exceptions, int exceptionsSize) { + throw new NotImplementedException (); + } + + // FIXME: + public void SetLocalSignature (byte[] localSignature) { + throw new NotImplementedException (); + } + + [CLSCompliantAttribute(false)] + public unsafe void SetLocalSignature (byte* localSignature, int signatureSize) { + byte[] b = new byte [signatureSize]; + for (int i = 0; i < signatureSize; ++i) + b [i] = localSignature [i]; + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.cs new file mode 100644 index 0000000000..7c565563bc --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.cs @@ -0,0 +1,481 @@ +#nullable disable + +// +// System.Reflection.Emit.DynamicMethod.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// Zoltan Varga (vargaz@freemail.hu) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE + +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + + [ComVisible (true)] + [StructLayout (LayoutKind.Sequential)] + public sealed class DynamicMethod : MethodInfo { + +#pragma warning disable 169, 414, 649 + #region Sync with reflection.h + private RuntimeMethodHandle mhandle; + private string name; + private Type returnType; + private Type[] parameters; + private MethodAttributes attributes; + private CallingConventions callingConvention; + private Module module; + private bool skipVisibility; + private bool init_locals = true; + private ILGenerator ilgen; + private int nrefs; + private object[] refs; + private IntPtr referenced_by; + private Type owner; + #endregion +#pragma warning restore 169, 414, 649 + + private Delegate deleg; + private RuntimeMethodInfo method; + private ParameterBuilder[] pinfo; + internal bool creating; + private DynamicILInfo il_info; + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Module m) : this (name, returnType, parameterTypes, m, false) { + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner) : this (name, returnType, parameterTypes, owner, false) { + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Module m, bool skipVisibility) : this (name, MethodAttributes.Public | MethodAttributes.Static, CallingConventions.Standard, returnType, parameterTypes, m, skipVisibility) { + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility) : this (name, MethodAttributes.Public | MethodAttributes.Static, CallingConventions.Standard, returnType, parameterTypes, owner, skipVisibility) { + } + + public DynamicMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility) : this (name, attributes, callingConvention, returnType, parameterTypes, owner, owner != null ? owner.Module : null, skipVisibility, false, true) { + } + + public DynamicMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Module m, bool skipVisibility) : this (name, attributes, callingConvention, returnType, parameterTypes, null, m, skipVisibility, false, false) { + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes) : this (name, returnType, parameterTypes, false) { + } + + // FIXME: "Visibility is not restricted" + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility) + : this (name, MethodAttributes.Public | MethodAttributes.Static, CallingConventions.Standard, returnType, parameterTypes, null, null, restrictedSkipVisibility, true, false) + { + } + + DynamicMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type [] parameterTypes, Type owner, Module m, bool skipVisibility, bool anonHosted, bool typeOwner) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (returnType == null) + returnType = typeof (void); + if (owner == null && typeOwner) + throw new ArgumentNullException (nameof (owner)); + if ((m == null) && !anonHosted) + throw new ArgumentNullException ("m"); + if (returnType.IsByRef) + throw new ArgumentException ("Return type can't be a byref type", "returnType"); + if (parameterTypes != null) { + for (int i = 0; i < parameterTypes.Length; ++i) + if (parameterTypes [i] == null) + throw new ArgumentException ("Parameter " + i + " is null", "parameterTypes"); + } + if (owner != null && (owner.IsArray || owner.IsInterface)) { + throw new ArgumentException ("Owner can't be an array or an interface."); + } + + if (m == null) + m = AnonHostModuleHolder.AnonHostModule; + + this.name = name; + this.attributes = attributes | MethodAttributes.Static; + this.callingConvention = callingConvention; + this.returnType = returnType; + this.parameters = parameterTypes; + this.owner = owner; + this.module = m; + this.skipVisibility = skipVisibility; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern void create_dynamic_method (DynamicMethod m); + + private void CreateDynMethod () { + // Clearing of ilgen in create_dynamic_method is not yet synchronized for multiple threads + lock (this) { + if (mhandle.Value == IntPtr.Zero) { + if (ilgen == null || ilgen.ILOffset == 0) + throw new InvalidOperationException ("Method '" + name + "' does not have a method body."); + + ilgen.label_fixup (this); + + // Have to create all DynamicMethods referenced by this one + try { + // Used to avoid cycles + creating = true; + if (refs != null) { + for (int i = 0; i < refs.Length; ++i) { + if (refs [i] is DynamicMethod) { + DynamicMethod m = (DynamicMethod)refs [i]; + if (!m.creating) + m.CreateDynMethod (); + } + } + } + } finally { + creating = false; + } + create_dynamic_method (this); + ilgen = null; + } + } + } + + [ComVisible (true)] + sealed override + public Delegate CreateDelegate (Type delegateType) + { + if (delegateType == null) + throw new ArgumentNullException ("delegateType"); + if (deleg != null) + return deleg; + + CreateDynMethod (); + + deleg = Delegate.CreateDelegate (delegateType, null, this); + return deleg; + } + + [ComVisible (true)] + sealed override + public Delegate CreateDelegate (Type delegateType, object target) + { + if (delegateType == null) + throw new ArgumentNullException ("delegateType"); + + CreateDynMethod (); + + /* Can't cache the delegate since it is different for each target */ + return Delegate.CreateDelegate (delegateType, target, this); + } + + public ParameterBuilder DefineParameter (int position, ParameterAttributes attributes, string parameterName) + { + // + // Extension: Mono allows position == 0 for the return attribute + // + if ((position < 0) || (position > parameters.Length)) + throw new ArgumentOutOfRangeException ("position"); + + RejectIfCreated (); + + ParameterBuilder pb = new ParameterBuilder (this, position, attributes, parameterName); + if (pinfo == null) + pinfo = new ParameterBuilder [parameters.Length + 1]; + pinfo [position] = pb; + return pb; + } + + public override MethodInfo GetBaseDefinition () { + return this; + } + + public override object[] GetCustomAttributes (bool inherit) { + // support for MethodImplAttribute PCA + return new Object[] { new MethodImplAttribute((MethodImplOptions)GetMethodImplementationFlags()) }; + } + + public override object[] GetCustomAttributes (Type attributeType, + bool inherit) { + if (attributeType == null) + throw new ArgumentNullException ("attributeType"); + + if (attributeType.IsAssignableFrom (typeof (MethodImplAttribute))) + return new Object[] { new MethodImplAttribute ((MethodImplOptions)GetMethodImplementationFlags()) }; + else + return Array.Empty (); + } + + public DynamicILInfo GetDynamicILInfo () { + if (il_info == null) + il_info = new DynamicILInfo (this); + return il_info; + } + + public ILGenerator GetILGenerator () { + return GetILGenerator (64); + } + + public ILGenerator GetILGenerator (int streamSize) { + if (((GetMethodImplementationFlags () & MethodImplAttributes.CodeTypeMask) != + MethodImplAttributes.IL) || + ((GetMethodImplementationFlags () & MethodImplAttributes.ManagedMask) != + MethodImplAttributes.Managed)) + throw new InvalidOperationException ("Method body should not exist."); + if (ilgen != null) + return ilgen; + ilgen = new ILGenerator (Module, new DynamicMethodTokenGenerator (this), streamSize); + return ilgen; + } + + public override MethodImplAttributes GetMethodImplementationFlags () { + return MethodImplAttributes.IL | MethodImplAttributes.Managed | MethodImplAttributes.NoInlining; + } + + public override ParameterInfo[] GetParameters () + { + return GetParametersInternal (); + } + + internal override ParameterInfo[] GetParametersInternal () + { + if (parameters == null) + return Array.Empty (); + + ParameterInfo[] retval = new ParameterInfo [parameters.Length]; + for (int i = 0; i < parameters.Length; i++) { + retval [i] = RuntimeParameterInfo.New (pinfo?[i + 1], parameters [i], this, i + 1); + } + return retval; + } + + internal override int GetParametersCount () + { + return parameters == null ? 0 : parameters.Length; + } + + internal override Type GetParameterType (int pos) { + return parameters [pos]; + } + + /* + public override object Invoke (object obj, object[] parameters) { + CreateDynMethod (); + if (method == null) + method = new RuntimeMethodInfo (mhandle); + return method.Invoke (obj, parameters); + } + */ + + public override object Invoke (object obj, BindingFlags invokeAttr, + Binder binder, object[] parameters, + CultureInfo culture) + { + try { + CreateDynMethod (); + if (method == null) + method = new RuntimeMethodInfo (mhandle); + + return method.Invoke (obj, invokeAttr, binder, parameters, culture); + } + catch (MethodAccessException mae) { + throw new TargetInvocationException ("Method cannot be invoked.", mae); + } + } + + public override bool IsDefined (Type attributeType, bool inherit) { + if (attributeType == null) + throw new ArgumentNullException ("attributeType"); + + if (attributeType.IsAssignableFrom (typeof (MethodImplAttribute))) + return true; + else + return false; + } + + public override string ToString () { + string parms = String.Empty; + ParameterInfo[] p = GetParametersInternal (); + for (int i = 0; i < p.Length; ++i) { + if (i > 0) + parms = parms + ", "; + parms = parms + p [i].ParameterType.Name; + } + return ReturnType.Name+" "+Name+"("+parms+")"; + } + + public override MethodAttributes Attributes { + get { + return attributes; + } + } + + public override CallingConventions CallingConvention { + get { + return callingConvention; + } + } + + public override Type DeclaringType { + get { + return null; + } + } + + public bool InitLocals { + get { + return init_locals; + } + set { + init_locals = value; + } + } + + public override RuntimeMethodHandle MethodHandle { + get { + return mhandle; + } + } + + public override Module Module { + get { + return module; + } + } + + public override string Name { + get { + return name; + } + } + + public override Type ReflectedType { + get { + return null; + } + } + + public override ParameterInfo ReturnParameter { + get { + if (deleg == null) + return null; + return deleg.Method.ReturnParameter; + } + } + + public override Type ReturnType { + get { + return returnType; + } + } + + // FIXME: "Not implemented" + public override ICustomAttributeProvider ReturnTypeCustomAttributes { + get { + throw new NotImplementedException (); + } + } + +/* + public override int MetadataToken { + get { + return 0; + } + } +*/ + + private void RejectIfCreated () { + if (mhandle.Value != IntPtr.Zero) + throw new InvalidOperationException ("Type definition of the method is complete."); + } + + internal int AddRef (object reference) { + if (refs == null) + refs = new object [4]; + if (nrefs >= refs.Length - 1) { + object [] new_refs = new object [refs.Length * 2]; + System.Array.Copy (refs, new_refs, refs.Length); + refs = new_refs; + } + refs [nrefs] = reference; + /* Reserved by the runtime */ + refs [nrefs + 1] = null; + nrefs += 2; + return nrefs - 1; + } + + // This class takes care of constructing the module in a thread safe manner + static class AnonHostModuleHolder + { + public static readonly Module anon_host_module; + + static AnonHostModuleHolder () { + AssemblyName aname = new AssemblyName (); + aname.Name = "Anonymously Hosted DynamicMethods Assembly"; + AssemblyBuilder ab = AssemblyBuilder.DefineDynamicAssembly (aname, AssemblyBuilderAccess.Run); + + anon_host_module = ab.ManifestModule; + } + + public static Module AnonHostModule { + get { + return anon_host_module; + } + } + } + } + + internal class DynamicMethodTokenGenerator : TokenGenerator { + + private DynamicMethod m; + + public DynamicMethodTokenGenerator (DynamicMethod m) { + this.m = m; + } + + public int GetToken (string str) { + return m.AddRef (str); + } + + public int GetToken (MethodBase method, Type[] opt_param_types) { + throw new InvalidOperationException (); + } + + public int GetToken (MemberInfo member, bool create_open_instance) { + return m.AddRef (member); + } + + public int GetToken (SignatureHelper helper) { + return m.AddRef (helper); + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.notsupported.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.notsupported.cs new file mode 100644 index 0000000000..825790bd32 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/DynamicMethod.notsupported.cs @@ -0,0 +1,156 @@ +#nullable disable + +// +// DynamicMethod.cs +// +// Authors: +// Marek Safar (marek.safar@gmail.com) +// +// Copyright (C) 2016 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if !MONO_FEATURE_SRE + +using System.Globalization; + +namespace System.Reflection.Emit +{ + public sealed class DynamicMethod : MethodInfo + { + public DynamicMethod (string name, Type returnType, Type[] parameterTypes) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Module m) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Module m, bool skipVisibility) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Module m, bool skipVisibility) + { + throw new PlatformNotSupportedException (); + } + + public DynamicMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility) + { + throw new PlatformNotSupportedException (); + } + + public override MethodAttributes Attributes { + get { + throw new PlatformNotSupportedException (); + } + } + + public override CallingConventions CallingConvention { + get { + throw new PlatformNotSupportedException (); + } + } + + public override Type DeclaringType { + get { + throw new PlatformNotSupportedException (); + } + } + + public bool InitLocals { get; set; } + + public override MethodImplAttributes MethodImplementationFlags { + get { + throw new PlatformNotSupportedException (); + } + } + + public override string Name { + get { + throw new PlatformNotSupportedException (); + } + } + + public override ParameterInfo ReturnParameter { + get { + throw new PlatformNotSupportedException (); + } + } + + public override Type ReturnType { + get { + throw new PlatformNotSupportedException (); + } + } + + public ILGenerator GetILGenerator () + { + throw new PlatformNotSupportedException (); + } + + public ILGenerator GetILGenerator (int streamSize) + { + throw new PlatformNotSupportedException (); + } + + public override ParameterInfo[] GetParameters () + { + throw new PlatformNotSupportedException (); + } + + public override RuntimeMethodHandle MethodHandle { get { throw new PlatformNotSupportedException (); } } + public override Type ReflectedType { get { throw new PlatformNotSupportedException (); } } + public override ICustomAttributeProvider ReturnTypeCustomAttributes { get { throw new PlatformNotSupportedException (); } } + + public override object[] GetCustomAttributes (bool inherit) { throw new PlatformNotSupportedException (); } + public override object[] GetCustomAttributes (Type attributeType, bool inherit) { throw new PlatformNotSupportedException (); } + public override MethodImplAttributes GetMethodImplementationFlags () { throw new PlatformNotSupportedException (); } + public override MethodInfo GetBaseDefinition () { throw new PlatformNotSupportedException (); } + + public override object Invoke (object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) { throw new PlatformNotSupportedException (); } + + public override bool IsDefined (Type attributeType, bool inherit) { throw new PlatformNotSupportedException (); } + + public ParameterBuilder DefineParameter (int position, ParameterAttributes attributes, string parameterName) => throw new PlatformNotSupportedException (); + public DynamicILInfo GetDynamicILInfo () => throw new PlatformNotSupportedException (); + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EnumBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EnumBuilder.cs new file mode 100644 index 0000000000..961ea6ad69 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EnumBuilder.cs @@ -0,0 +1,432 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/EnumBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + public sealed partial class EnumBuilder : TypeInfo + { + private TypeBuilder _tb; + private FieldBuilder _underlyingField; + private Type _underlyingType; + + internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType) + { + if ((visibility & ~TypeAttributes.VisibilityMask) != 0) + throw new ArgumentException (SR.Argument_ShouldOnlySetVisibilityFlags, nameof (name)); + if ((visibility & TypeAttributes.VisibilityMask) >= TypeAttributes.NestedPublic && (visibility & TypeAttributes.VisibilityMask) <= TypeAttributes.NestedFamORAssem) + throw new ArgumentException (); + _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed), + typeof(Enum), null, PackingSize.Unspecified, 0, null); + _underlyingType = underlyingType; + _underlyingField = _tb.DefineField ("value__", underlyingType, + (FieldAttributes.SpecialName | FieldAttributes.Private | FieldAttributes.RTSpecialName)); + setup_enum_type (_tb); + } + + internal TypeBuilder GetTypeBuilder () + { + return _tb; + } + + internal override Type InternalResolve () + { + return _tb.InternalResolve (); + } + + internal override Type RuntimeResolve () { + return _tb.RuntimeResolve (); + } + + public override Assembly Assembly { + get { + return _tb.Assembly; + } + } + + public override string AssemblyQualifiedName { + get { + return _tb.AssemblyQualifiedName; + } + } + + public override Type BaseType { + get { + return _tb.BaseType; + } + } + + public override Type DeclaringType { + get { + return _tb.DeclaringType; + } + } + + public override string FullName { + get { + return _tb.FullName; + } + } + + public override Guid GUID { + get { + return _tb.GUID; + } + } + + public override Module Module { + get { + return _tb.Module; + } + } + + public override string Name { + get { + return _tb.Name; + } + } + + public override string Namespace { + get { + return _tb.Namespace; + } + } + + public override Type ReflectedType { + get { + return _tb.ReflectedType; + } + } + + public override RuntimeTypeHandle TypeHandle { + get { + return _tb.TypeHandle; + } + } + + public TypeToken TypeToken { + get { + return _tb.TypeToken; + } + } + + public FieldBuilder UnderlyingField { + get { + return _underlyingField; + } + } + + public override Type UnderlyingSystemType { + get { + return _underlyingType; + } + } + + public Type CreateType () + { + Type res = _tb.CreateType (); + return res; + } + + public TypeInfo CreateTypeInfo() + { + return _tb.CreateTypeInfo (); + } + + public override Type GetEnumUnderlyingType () + { + return _underlyingType; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private extern void setup_enum_type (Type t); + + public FieldBuilder DefineLiteral (string literalName, object literalValue) + { + Type fieldType = this; + FieldBuilder fieldBuilder = _tb.DefineField (literalName, + fieldType, (FieldAttributes.Literal | + (FieldAttributes.Static | FieldAttributes.Public))); + fieldBuilder.SetConstant (literalValue); + return fieldBuilder; + } + + protected override TypeAttributes GetAttributeFlagsImpl () + { + return _tb.attrs; + } + + protected override ConstructorInfo GetConstructorImpl ( + BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, + Type[] types, ParameterModifier[] modifiers) + { + return _tb.GetConstructor (bindingAttr, binder, callConvention, types, + modifiers); + } + + [ComVisible (true)] + public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) + { + return _tb.GetConstructors (bindingAttr); + } + + public override object[] GetCustomAttributes(bool inherit) + { + return _tb.GetCustomAttributes (inherit); + } + + public override object[] GetCustomAttributes(Type attributeType, bool inherit) + { + if (attributeType == null) + return _tb.GetCustomAttributes (inherit); + else + return _tb.GetCustomAttributes (attributeType, inherit); + } + + public override Type GetElementType() + { + return _tb.GetElementType (); + } + + public override EventInfo GetEvent( string name, BindingFlags bindingAttr) + { + return _tb.GetEvent (name, bindingAttr); + } + + public override EventInfo[] GetEvents() + { + return _tb.GetEvents (); + } + + public override EventInfo[] GetEvents( BindingFlags bindingAttr) + { + return _tb.GetEvents (bindingAttr); + } + + public override FieldInfo GetField( string name, BindingFlags bindingAttr) + { + return _tb.GetField (name, bindingAttr); + } + + public override FieldInfo[] GetFields( BindingFlags bindingAttr) + { + return _tb.GetFields (bindingAttr); + } + + public override Type GetInterface (string name, bool ignoreCase) + { + return _tb.GetInterface (name, ignoreCase); + } + + [ComVisible (true)] + public override InterfaceMapping GetInterfaceMap (Type interfaceType) + { + return _tb.GetInterfaceMap (interfaceType); + } + + public override Type[] GetInterfaces() + { + return _tb.GetInterfaces (); + } + + public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr) + { + return _tb.GetMember (name, type, bindingAttr); + } + + public override MemberInfo[] GetMembers(BindingFlags bindingAttr) + { + return _tb.GetMembers (bindingAttr); + } + + protected override MethodInfo GetMethodImpl ( + string name, BindingFlags bindingAttr, Binder binder, + CallingConventions callConvention, Type[] types, + ParameterModifier[] modifiers) + { + if (types == null) { + return _tb.GetMethod (name, bindingAttr); + } + + return _tb.GetMethod (name, bindingAttr, binder, + callConvention, types, modifiers); + } + + public override MethodInfo[] GetMethods (BindingFlags bindingAttr) + { + return _tb.GetMethods (bindingAttr); + } + + public override Type GetNestedType (string name, BindingFlags bindingAttr) + { + return _tb.GetNestedType (name, bindingAttr); + } + + public override Type[] GetNestedTypes (BindingFlags bindingAttr) + { + return _tb.GetNestedTypes (bindingAttr); + } + + public override PropertyInfo[] GetProperties (BindingFlags bindingAttr) + { + return _tb.GetProperties (bindingAttr); + } + + protected override PropertyInfo GetPropertyImpl ( + string name, BindingFlags bindingAttr, Binder binder, + Type returnType, Type[] types, + ParameterModifier[] modifiers) + { + throw CreateNotSupportedException (); + } + + protected override bool HasElementTypeImpl () + { + return _tb.HasElementType; + } + + public override object InvokeMember ( + string name, BindingFlags invokeAttr, Binder binder, + object target, object[] args, + ParameterModifier[] modifiers, CultureInfo culture, + string[] namedParameters) + { + return _tb.InvokeMember (name, invokeAttr, binder, target, + args, modifiers, culture, namedParameters); + } + + protected override bool IsArrayImpl() + { + return false; + } + + protected override bool IsByRefImpl() + { + return false; + } + + protected override bool IsCOMObjectImpl() + { + return false; + } + + protected override bool IsPointerImpl() + { + return false; + } + + protected override bool IsPrimitiveImpl() + { + return false; + } + + protected override bool IsValueTypeImpl() + { + return true; + } + + public override bool IsSZArray { + get { + return false; + } + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return _tb.IsDefined (attributeType, inherit); + } + + public override Type MakeArrayType () + { + return new ArrayType (this, 0); + } + + public override Type MakeArrayType (int rank) + { + if (rank < 1) + throw new IndexOutOfRangeException (); + return new ArrayType (this, rank); + } + + public override Type MakeByRefType () + { + return new ByRefType (this); + } + + public override Type MakePointerType () + { + return new PointerType (this); + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + _tb.SetCustomAttribute (customBuilder); + } + + [ComVisible (true)] + public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute) + { + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + private Exception CreateNotSupportedException () + { + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + + internal override bool IsUserType { + get { + return false; + } + } + + public override bool IsConstructedGenericType { + get { return false; } + } + + public override bool IsAssignableFrom (TypeInfo typeInfo) + { + return base.IsAssignableFrom (typeInfo); + } + + public override bool IsTypeDefinition => true; + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventBuilder.cs new file mode 100644 index 0000000000..5957bce7ed --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventBuilder.cs @@ -0,0 +1,143 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/EventBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public sealed partial class EventBuilder { +#pragma warning disable 169, 414 + internal string name; + Type type; + TypeBuilder typeb; + CustomAttributeBuilder[] cattrs; + internal MethodBuilder add_method; + internal MethodBuilder remove_method; + internal MethodBuilder raise_method; + internal MethodBuilder[] other_methods; + internal EventAttributes attrs; + int table_idx; +#pragma warning restore 169, 414 + + internal EventBuilder (TypeBuilder tb, string eventName, EventAttributes eventAttrs, Type eventType) { + name = eventName; + attrs = eventAttrs; + type = eventType; + typeb = tb; + table_idx = get_next_table_index (this, 0x14, 1); + } + + internal int get_next_table_index (object obj, int table, int count) { + return typeb.get_next_table_index (obj, table, count); + } + + public void AddOtherMethod( MethodBuilder mdBuilder) { + if (mdBuilder == null) + throw new ArgumentNullException ("mdBuilder"); + RejectIfCreated (); + if (other_methods != null) { + MethodBuilder[] newv = new MethodBuilder [other_methods.Length + 1]; + other_methods.CopyTo (newv, 0); + other_methods = newv; + } else { + other_methods = new MethodBuilder [1]; + } + other_methods [other_methods.Length - 1] = mdBuilder; + } + + public EventToken GetEventToken () { + return new EventToken (0x14000000 | table_idx); + } + public void SetAddOnMethod( MethodBuilder mdBuilder) { + if (mdBuilder == null) + throw new ArgumentNullException ("mdBuilder"); + RejectIfCreated (); + add_method = mdBuilder; + } + public void SetRaiseMethod( MethodBuilder mdBuilder) { + if (mdBuilder == null) + throw new ArgumentNullException ("mdBuilder"); + RejectIfCreated (); + raise_method = mdBuilder; + } + public void SetRemoveOnMethod( MethodBuilder mdBuilder) { + if (mdBuilder == null) + throw new ArgumentNullException ("mdBuilder"); + RejectIfCreated (); + remove_method = mdBuilder; + } + + public void SetCustomAttribute( CustomAttributeBuilder customBuilder) { + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + RejectIfCreated (); + string attrname = customBuilder.Ctor.ReflectedType.FullName; + if (attrname == "System.Runtime.CompilerServices.SpecialNameAttribute") { + attrs |= EventAttributes.SpecialName; + return; + } + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) { + if (con == null) + throw new ArgumentNullException ("con"); + if (binaryAttribute == null) + throw new ArgumentNullException ("binaryAttribute"); + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + private void RejectIfCreated () { + if (typeb.is_created) + throw new InvalidOperationException ("Type definition of the method is complete."); + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventOnTypeBuilderInst.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventOnTypeBuilderInst.cs new file mode 100644 index 0000000000..a1dff8fc9d --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/EventOnTypeBuilderInst.cs @@ -0,0 +1,135 @@ +#nullable disable + +// +// System.Reflection.Emit/EventOnTypeBuilderInst.cs +// +// Author: +// Rodrigo Kumpera (rkumpera@novell.com) +// +// +// Copyright (C) 2009 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Collections; +using System.Globalization; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit +{ + /* + * This class represents an event of an instantiation of a generic type builder. + */ + [StructLayout (LayoutKind.Sequential)] + internal class EventOnTypeBuilderInst : EventInfo + { + TypeBuilderInstantiation instantiation; + EventBuilder event_builder; + EventInfo event_info; + + internal EventOnTypeBuilderInst (TypeBuilderInstantiation instantiation, EventBuilder evt) + { + this.instantiation = instantiation; + this.event_builder = evt; + } + + internal EventOnTypeBuilderInst (TypeBuilderInstantiation instantiation, EventInfo evt) + { + this.instantiation = instantiation; + this.event_info = evt; + } + + public override EventAttributes Attributes { + get { return event_builder != null ? event_builder.attrs : event_info.Attributes; } + } + + public override MethodInfo GetAddMethod (bool nonPublic) + { + MethodInfo add = event_builder != null ? event_builder.add_method : event_info.GetAddMethod (nonPublic); + if (add == null || (!nonPublic && !add.IsPublic)) + return null; + return TypeBuilder.GetMethod (instantiation, add); + } + + public override MethodInfo GetRaiseMethod (bool nonPublic) + { + MethodInfo raise = event_builder != null ? event_builder.raise_method : event_info.GetRaiseMethod (nonPublic); + if (raise == null || (!nonPublic && !raise.IsPublic)) + return null; + return TypeBuilder.GetMethod (instantiation, raise); + } + + public override MethodInfo GetRemoveMethod (bool nonPublic) + { + MethodInfo remove = event_builder != null ? event_builder.remove_method : event_info.GetRemoveMethod (nonPublic); + if (remove == null || (!nonPublic && !remove.IsPublic)) + return null; + return TypeBuilder.GetMethod (instantiation, remove); + } + + public override MethodInfo[] GetOtherMethods (bool nonPublic) + { + MethodInfo[] other = event_builder != null ? event_builder.other_methods : event_info.GetOtherMethods (nonPublic); + if (other == null) + return new MethodInfo [0]; + + ArrayList ar = new ArrayList (); + foreach (MethodInfo method in other) { + if (nonPublic || method.IsPublic) + ar.Add (TypeBuilder.GetMethod (instantiation, method)); + } + MethodInfo[] res = new MethodInfo [ar.Count]; + ar.CopyTo (res, 0); + return res; + } + + public override Type DeclaringType { + get { return instantiation; } + } + + public override string Name { + get { return event_builder != null ? event_builder.name : event_info.Name; } + } + + public override Type ReflectedType { + get { return instantiation; } + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldBuilder.cs new file mode 100644 index 0000000000..4f5039ff30 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldBuilder.cs @@ -0,0 +1,241 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/FieldBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001-2002 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public sealed partial class FieldBuilder : FieldInfo { + +#pragma warning disable 169, 414 + private FieldAttributes attrs; + private Type type; + private String name; + private object def_value; + private int offset; + internal TypeBuilder typeb; + private byte[] rva_data; + private CustomAttributeBuilder[] cattrs; + private UnmanagedMarshal marshal_info; + private RuntimeFieldHandle handle; + private Type[] modReq; + private Type[] modOpt; +#pragma warning restore 169, 414 + + internal FieldBuilder (TypeBuilder tb, string fieldName, Type type, FieldAttributes attributes, Type[] modReq, Type[] modOpt) + { + if (type == null) + throw new ArgumentNullException ("type"); + + attrs = attributes; + name = fieldName; + this.type = type; + this.modReq = modReq; + this.modOpt = modOpt; + offset = -1; + typeb = tb; + + ((ModuleBuilder) tb.Module).RegisterToken (this, GetToken ().Token); + } + + public override FieldAttributes Attributes { + get { return attrs; } + } + + public override Type DeclaringType { + get { return typeb; } + } + + public override RuntimeFieldHandle FieldHandle { + get { + throw CreateNotSupportedException (); + } + } + + public override Type FieldType { + get { return type; } + } + + public override string Name { + get { return name; } + } + + public override Type ReflectedType { + get { return typeb; } + } + + public override object[] GetCustomAttributes(bool inherit) { + /* + * On MS.NET, this always returns not_supported, but we can't do this + * since there would be no way to obtain custom attributes of + * dynamically created ctors. + */ + if (typeb.is_created) + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + else + throw CreateNotSupportedException (); + } + + public override object[] GetCustomAttributes(Type attributeType, bool inherit) { + if (typeb.is_created) + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + else + throw CreateNotSupportedException (); + } + + public override int MetadataToken { get { return ((ModuleBuilder) typeb.Module).GetToken (this); } } + + public FieldToken GetToken() { + return new FieldToken (MetadataToken, type); + } + + public override object GetValue(object obj) { + throw CreateNotSupportedException (); + } + + public override bool IsDefined( Type attributeType, bool inherit) { + throw CreateNotSupportedException (); + } + + internal override int GetFieldOffset () { + /* FIXME: */ + return 0; + } + + internal void SetRVAData (byte[] data) { + rva_data = (byte[])data.Clone (); + } + + public void SetConstant( object defaultValue) { + RejectIfCreated (); + + /*if (defaultValue.GetType() != type) + throw new ArgumentException ("Constant doesn't match field type");*/ + def_value = defaultValue; + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) { + RejectIfCreated (); + + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + + string attrname = customBuilder.Ctor.ReflectedType.FullName; + if (attrname == "System.Runtime.InteropServices.FieldOffsetAttribute") { + byte[] data = customBuilder.Data; + offset = (int)data [2]; + offset |= ((int)data [3]) << 8; + offset |= ((int)data [4]) << 16; + offset |= ((int)data [5]) << 24; + return; + } else if (attrname == "System.NonSerializedAttribute") { + attrs |= FieldAttributes.NotSerialized; + return; + } else if (attrname == "System.Runtime.CompilerServices.SpecialNameAttribute") { + attrs |= FieldAttributes.SpecialName; + return; + } else if (attrname == "System.Runtime.InteropServices.MarshalAsAttribute") { + attrs |= FieldAttributes.HasFieldMarshal; + marshal_info = CustomAttributeBuilder.get_umarshal (customBuilder, true); + /* FIXME: check for errors */ + return; + } + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) { + RejectIfCreated (); + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + public void SetOffset( int iOffset) { + RejectIfCreated (); + if (iOffset < 0) + throw new ArgumentException ("Negative field offset is not allowed"); + offset = iOffset; + } + + public override void SetValue( object obj, object val, BindingFlags invokeAttr, Binder binder, CultureInfo culture) { + throw CreateNotSupportedException (); + } + + private Exception CreateNotSupportedException () + { + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + + private void RejectIfCreated () + { + if (typeb.is_created) + throw new InvalidOperationException ("Unable to change after type has been created."); + } + + internal void ResolveUserTypes () { + type = TypeBuilder.ResolveUserType (type); + TypeBuilder.ResolveUserTypes (modReq); + TypeBuilder.ResolveUserTypes (modOpt); + if (marshal_info != null) + marshal_info.marshaltyperef = TypeBuilder.ResolveUserType (marshal_info.marshaltyperef); + } + + internal FieldInfo RuntimeResolve () { + // typeb.CreateType() populates this.handle + var type_handle = new RuntimeTypeHandle (typeb.CreateType () as RuntimeType); + return FieldInfo.GetFieldFromHandle (handle, type_handle); + } + + public override Module Module { + get { + return base.Module; + } + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldOnTypeBuilderInst.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldOnTypeBuilderInst.cs new file mode 100644 index 0000000000..a9fc114d4c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/FieldOnTypeBuilderInst.cs @@ -0,0 +1,140 @@ +#nullable disable + +// +// System.Reflection.Emit/FieldOnTypeBuilderInst.cs +// +// Author: +// Zoltan Varga (vargaz@gmail.com) +// +// +// Copyright (C) 2008 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Globalization; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit +{ + /* + * This class represents a field of an instantiation of a generic type builder. + */ + [StructLayout (LayoutKind.Sequential)] + internal class FieldOnTypeBuilderInst : FieldInfo + { + #region Keep in sync with object-internals.h + internal TypeBuilderInstantiation instantiation; + internal FieldInfo fb; + #endregion + + public FieldOnTypeBuilderInst (TypeBuilderInstantiation instantiation, FieldInfo fb) { + this.instantiation = instantiation; + this.fb = fb; + } + + // + // MemberInfo members + // + + public override Type DeclaringType { + get { + return instantiation; + } + } + + public override string Name { + get { + return fb.Name; + } + } + + public override Type ReflectedType { + get { + return instantiation; + } + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override string ToString () + { + return fb.FieldType.ToString () + " " + Name; + } + // + // FieldInfo members + // + + public override FieldAttributes Attributes { + get { + return fb.Attributes; + } + } + + public override RuntimeFieldHandle FieldHandle { + get { + throw new NotSupportedException (); + } + } + + public override int MetadataToken { + get { + throw new InvalidOperationException (); + } + } + + public override Type FieldType { + get { + throw new NotSupportedException (); + } + } + + public override object GetValue(object obj) { + throw new NotSupportedException (); + } + + public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) { + throw new NotSupportedException (); + } + + // Called from the runtime to return the corresponding finished FieldInfo object + internal FieldInfo RuntimeResolve () { + var type = instantiation.RuntimeResolve (); + return type.GetField (fb); + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/GenericTypeParameterBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/GenericTypeParameterBuilder.cs new file mode 100644 index 0000000000..4d78390b2e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/GenericTypeParameterBuilder.cs @@ -0,0 +1,476 @@ +#nullable disable + +// +// System.Reflection.Emit.GenericTypeParameterBuilder +// +// Martin Baulig (martin@ximian.com) +// +// (C) 2004 Novell, Inc. +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System.Reflection; +using System.Reflection.Emit; +using System.Collections; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Runtime.Serialization; + +namespace System.Reflection.Emit +{ + [ComVisible (true)] + [StructLayout (LayoutKind.Sequential)] + public sealed class GenericTypeParameterBuilder : + TypeInfo + { + #region Sync with reflection.h + private TypeBuilder tbuilder; + private MethodBuilder mbuilder; + private string name; + private int index; + private Type base_type; +#pragma warning disable 414 + private Type[] iface_constraints; + private CustomAttributeBuilder[] cattrs; + private GenericParameterAttributes attrs; +#pragma warning restore + #endregion + + public void SetBaseTypeConstraint (Type baseTypeConstraint) + { + this.base_type = baseTypeConstraint ?? typeof (object); + } + + [ComVisible (true)] + public void SetInterfaceConstraints (params Type[] interfaceConstraints) + { + this.iface_constraints = interfaceConstraints; + } + + public void SetGenericParameterAttributes (GenericParameterAttributes genericParameterAttributes) + { + this.attrs = genericParameterAttributes; + } + + internal GenericTypeParameterBuilder (TypeBuilder tbuilder, + MethodBuilder mbuilder, + string name, int index) + { + this.tbuilder = tbuilder; + this.mbuilder = mbuilder; + this.name = name; + this.index = index; + } + + internal override Type InternalResolve () + { + if (mbuilder != null) + return MethodBase.GetMethodFromHandle (mbuilder.MethodHandleInternal, mbuilder.TypeBuilder.InternalResolve ().TypeHandle).GetGenericArguments () [index]; + return tbuilder.InternalResolve ().GetGenericArguments () [index]; + } + + internal override Type RuntimeResolve () + { + if (mbuilder != null) + return MethodBase.GetMethodFromHandle (mbuilder.MethodHandleInternal, mbuilder.TypeBuilder.RuntimeResolve ().TypeHandle).GetGenericArguments () [index]; + return tbuilder.RuntimeResolve ().GetGenericArguments () [index]; + } + + [ComVisible (true)] + public override bool IsSubclassOf (Type c) + { + throw not_supported (); + } + + protected override TypeAttributes GetAttributeFlagsImpl () + { + return TypeAttributes.Public; + } + + protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, + Binder binder, + CallingConventions callConvention, + Type[] types, + ParameterModifier[] modifiers) + { + throw not_supported (); + } + + [ComVisible (true)] + public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override EventInfo GetEvent (string name, BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override EventInfo[] GetEvents () + { + throw not_supported (); + } + + public override EventInfo[] GetEvents (BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override FieldInfo GetField (string name, BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override FieldInfo[] GetFields (BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override Type GetInterface (string name, bool ignoreCase) + { + throw not_supported (); + } + + public override Type[] GetInterfaces () + { + throw not_supported (); + } + + public override MemberInfo[] GetMembers (BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override MethodInfo [] GetMethods (BindingFlags bindingAttr) + { + throw not_supported (); + } + + protected override MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, + Binder binder, + CallingConventions callConvention, + Type[] types, ParameterModifier[] modifiers) + { + throw not_supported (); + } + + public override Type GetNestedType (string name, BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override Type[] GetNestedTypes (BindingFlags bindingAttr) + { + throw not_supported (); + } + + public override PropertyInfo [] GetProperties (BindingFlags bindingAttr) + { + throw not_supported (); + } + + protected override PropertyInfo GetPropertyImpl (string name, BindingFlags bindingAttr, + Binder binder, Type returnType, + Type[] types, + ParameterModifier[] modifiers) + { + throw not_supported (); + } + + protected override bool HasElementTypeImpl () + { + return false; + } + + public override bool IsAssignableFrom (Type c) + { + throw not_supported (); + } + + public override bool IsAssignableFrom (TypeInfo typeInfo) + { + if (typeInfo == null) + return false; + + return IsAssignableFrom (typeInfo.AsType ()); + } + + public override bool IsInstanceOfType (object o) + { + throw not_supported (); + } + + protected override bool IsArrayImpl () + { + return false; + } + + protected override bool IsByRefImpl () + { + return false; + } + + protected override bool IsCOMObjectImpl () + { + return false; + } + + protected override bool IsPointerImpl () + { + return false; + } + + protected override bool IsPrimitiveImpl () + { + return false; + } + + protected override bool IsValueTypeImpl () + { + return base_type != null ? base_type.IsValueType : false; + } + + public override bool IsSZArray { + get { + return false; + } + } + + public override object InvokeMember (string name, BindingFlags invokeAttr, + Binder binder, object target, object[] args, + ParameterModifier[] modifiers, + CultureInfo culture, string[] namedParameters) + { + throw not_supported (); + } + + public override Type GetElementType () + { + throw not_supported (); + } + + public override Type UnderlyingSystemType { + get { + return this; + } + } + + public override Assembly Assembly { + get { return tbuilder.Assembly; } + } + + public override string AssemblyQualifiedName { + get { return null; } + } + + public override Type BaseType { + get { return base_type; } + } + + public override string FullName { + get { return null; } + } + + public override Guid GUID { + get { throw not_supported (); } + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw not_supported (); + } + + public override object[] GetCustomAttributes (bool inherit) + { + throw not_supported (); + } + + public override object[] GetCustomAttributes (Type attributeType, bool inherit) + { + throw not_supported (); + } + + [ComVisible (true)] + public override InterfaceMapping GetInterfaceMap (Type interfaceType) + { + throw not_supported (); + } + + public override string Name { + get { return name; } + } + + public override string Namespace { + get { return null; } + } + + public override Module Module { + get { return tbuilder.Module; } + } + + public override Type DeclaringType { + get { return mbuilder != null ? mbuilder.DeclaringType : tbuilder; } + } + + public override Type ReflectedType { + get { return DeclaringType; } + } + + public override RuntimeTypeHandle TypeHandle { + get { throw not_supported (); } + } + + public override Type[] GetGenericArguments () + { + throw new InvalidOperationException (); + } + + public override Type GetGenericTypeDefinition () + { + throw new InvalidOperationException (); + } + + public override bool ContainsGenericParameters { + get { return true; } + } + + public override bool IsGenericParameter { + get { return true; } + } + + public override bool IsGenericType { + get { return false; } + } + + public override bool IsGenericTypeDefinition { + get { return false; } + } + + public override GenericParameterAttributes GenericParameterAttributes { + get { + return attrs; + } + } + + public override int GenericParameterPosition { + get { return index; } + } + + public override Type[] GetGenericParameterConstraints () + { + throw new InvalidOperationException (); + } + + public override MethodBase DeclaringMethod { + get { return mbuilder; } + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + // FIXME: "unverified implementation" + public void SetCustomAttribute (ConstructorInfo con, byte [] binaryAttribute) + { + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + private Exception not_supported () + { + return new NotSupportedException (); + } + + public override string ToString () + { + return name; + } + + // FIXME: + public override bool Equals (object o) + { + return base.Equals (o); + } + + // FIXME: + public override int GetHashCode () + { + return base.GetHashCode (); + } + + public override Type MakeArrayType () + { + return new ArrayType (this, 0); + } + + public override Type MakeArrayType (int rank) + { + if (rank < 1) + throw new IndexOutOfRangeException (); + return new ArrayType (this, rank); + } + + public override Type MakeByRefType () + { + return new ByRefType (this); + } + + public override Type MakeGenericType (params Type[] typeArguments) + { + throw new InvalidOperationException (Environment.GetResourceString ("Arg_NotGenericTypeDefinition")); + } + + public override Type MakePointerType () + { + return new PointerType (this); + } + + internal override bool IsUserType { + get { + return false; + } + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ILGenerator.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ILGenerator.cs new file mode 100644 index 0000000000..5f19d65151 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ILGenerator.cs @@ -0,0 +1,1174 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/ILGenerator.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + + internal struct ILExceptionBlock { + public const int CATCH = 0; + public const int FILTER = 1; + public const int FINALLY = 2; + public const int FAULT = 4; + public const int FILTER_START = -1; + + internal Type extype; + internal int type; + internal int start; + internal int len; + internal int filter_offset; + + internal void Debug () { +#if FALSE + System.Console.Write ("\ttype="+type.ToString()+" start="+start.ToString()+" len="+len.ToString()); + if (extype != null) + System.Console.WriteLine (" extype="+extype.ToString()); + else + System.Console.WriteLine (String.Empty); +#endif + } + } + internal struct ILExceptionInfo { +#pragma warning disable 169 +#pragma warning disable 414 + internal ILExceptionBlock[] handlers; + internal int start; + internal int len; + internal Label end; +#pragma warning restore 169 +#pragma warning restore 414 + + internal int NumHandlers () + { + return handlers.Length; + } + + internal void AddCatch (Type extype, int offset) + { + int i; + End (offset); + add_block (offset); + i = handlers.Length - 1; + handlers [i].type = ILExceptionBlock.CATCH; + handlers [i].start = offset; + handlers [i].extype = extype; + } + + internal void AddFinally (int offset) + { + int i; + End (offset); + add_block (offset); + i = handlers.Length - 1; + handlers [i].type = ILExceptionBlock.FINALLY; + handlers [i].start = offset; + handlers [i].extype = null; + } + + internal void AddFault (int offset) + { + int i; + End (offset); + add_block (offset); + i = handlers.Length - 1; + handlers [i].type = ILExceptionBlock.FAULT; + handlers [i].start = offset; + handlers [i].extype = null; + } + + internal void AddFilter (int offset) + { + int i; + End (offset); + add_block (offset); + i = handlers.Length - 1; + handlers [i].type = ILExceptionBlock.FILTER_START; + handlers [i].extype = null; + handlers [i].filter_offset = offset; + } + + internal void End (int offset) + { + if (handlers == null) + return; + int i = handlers.Length - 1; + if (i >= 0) + handlers [i].len = offset - handlers [i].start; + } + + internal int LastClauseType () + { + if (handlers != null) + return handlers [handlers.Length-1].type; + else + return ILExceptionBlock.CATCH; + } + + internal void PatchFilterClause (int start) + { + if (handlers != null && handlers.Length > 0) { + handlers [handlers.Length - 1].start = start; + handlers [handlers.Length - 1].type = ILExceptionBlock.FILTER; + } + } + + internal void Debug (int b) + { +#if FALSE + System.Console.WriteLine ("Handler {0} at {1}, len: {2}", b, start, len); + for (int i = 0; i < handlers.Length; ++i) + handlers [i].Debug (); +#endif + } + + void add_block (int offset) + { + if (handlers != null) { + int i = handlers.Length; + ILExceptionBlock[] new_b = new ILExceptionBlock [i + 1]; + System.Array.Copy (handlers, new_b, i); + handlers = new_b; + handlers [i].len = offset - handlers [i].start; + } else { + handlers = new ILExceptionBlock [1]; + len = offset - start; + } + } + } + + internal struct ILTokenInfo { + public MemberInfo member; + public int code_pos; + } + + internal interface TokenGenerator { + int GetToken (string str); + + int GetToken (MemberInfo member, bool create_open_instance); + + int GetToken (MethodBase method, Type[] opt_param_types); + + int GetToken (SignatureHelper helper); + } + + [StructLayout (LayoutKind.Sequential)] + public partial class ILGenerator { + private struct LabelFixup { + public int offset; // The number of bytes between pos and the + // offset of the jump + public int pos; // Where offset of the label is placed + public int label_idx; // The label to jump to + }; + + struct LabelData { + public LabelData (int addr, int maxStack) + { + this.addr = addr; + this.maxStack = maxStack; + } + + public int addr; + public int maxStack; + } + + #region Sync with reflection.h + private byte[] code; + private int code_len; + private int max_stack; + private int cur_stack; + private LocalBuilder[] locals; + private ILExceptionInfo[] ex_handlers; + private int num_token_fixups; + private object token_fixups; + #endregion + + private LabelData [] labels; + private int num_labels; + private LabelFixup[] fixups; + private int num_fixups; + internal Module module; + private int cur_block; + private Stack open_blocks; + private TokenGenerator token_gen; + + const int defaultFixupSize = 4; + const int defaultLabelsSize = 4; + const int defaultExceptionStackSize = 2; + + ArrayList sequencePointLists; + SequencePointList currentSequence; + + internal ILGenerator (Module m, TokenGenerator token_gen, int size) + { + if (size < 0) + size = 128; + code = new byte [size]; + module = m; + this.token_gen = token_gen; + } + + private void make_room (int nbytes) + { + if (code_len + nbytes < code.Length) + return; + byte[] new_code = new byte [(code_len + nbytes) * 2 + 128]; + System.Array.Copy (code, 0, new_code, 0, code.Length); + code = new_code; + } + + private void emit_int (int val) + { + code [code_len++] = (byte) (val & 0xFF); + code [code_len++] = (byte) ((val >> 8) & 0xFF); + code [code_len++] = (byte) ((val >> 16) & 0xFF); + code [code_len++] = (byte) ((val >> 24) & 0xFF); + } + + /* change to pass by ref to avoid copy */ + private void ll_emit (OpCode opcode) + { + /* + * there is already enough room allocated in code. + */ + if (opcode.Size == 2) + code [code_len++] = (byte)(opcode.Value >> 8); + code [code_len++] = (byte)(opcode.Value & 0xff); + /* + * We should probably keep track of stack needs here. + * Or we may want to run the verifier on the code before saving it + * (this may be needed anyway when the ILGenerator is not used...). + */ + switch (opcode.StackBehaviourPush) { + case StackBehaviour.Push1: + case StackBehaviour.Pushi: + case StackBehaviour.Pushi8: + case StackBehaviour.Pushr4: + case StackBehaviour.Pushr8: + case StackBehaviour.Pushref: + case StackBehaviour.Varpush: /* again we are conservative and assume it pushes 1 */ + cur_stack ++; + break; + case StackBehaviour.Push1_push1: + cur_stack += 2; + break; + } + if (max_stack < cur_stack) + max_stack = cur_stack; + + /* + * Note that we adjust for the pop behaviour _after_ setting max_stack. + */ + switch (opcode.StackBehaviourPop) { + case StackBehaviour.Varpop: + break; /* we are conservative and assume it doesn't decrease the stack needs */ + case StackBehaviour.Pop1: + case StackBehaviour.Popi: + case StackBehaviour.Popref: + cur_stack --; + break; + case StackBehaviour.Pop1_pop1: + case StackBehaviour.Popi_pop1: + case StackBehaviour.Popi_popi: + case StackBehaviour.Popi_popi8: + case StackBehaviour.Popi_popr4: + case StackBehaviour.Popi_popr8: + case StackBehaviour.Popref_pop1: + case StackBehaviour.Popref_popi: + cur_stack -= 2; + break; + case StackBehaviour.Popi_popi_popi: + case StackBehaviour.Popref_popi_popi: + case StackBehaviour.Popref_popi_popi8: + case StackBehaviour.Popref_popi_popr4: + case StackBehaviour.Popref_popi_popr8: + case StackBehaviour.Popref_popi_popref: + cur_stack -= 3; + break; + } + } + + private static int target_len (OpCode opcode) + { + if (opcode.OperandType == OperandType.InlineBrTarget) + return 4; + return 1; + } + + private void InternalEndClause () + { + switch (ex_handlers [cur_block].LastClauseType ()) { + case ILExceptionBlock.CATCH: + case ILExceptionBlock.FILTER: + case ILExceptionBlock.FILTER_START: + // how could we optimize code size here? + Emit (OpCodes.Leave, ex_handlers [cur_block].end); + break; + case ILExceptionBlock.FAULT: + case ILExceptionBlock.FINALLY: + Emit (OpCodes.Endfinally); + break; + } + } + + public virtual void BeginCatchBlock (Type exceptionType) + { + if (open_blocks == null) + open_blocks = new Stack (defaultExceptionStackSize); + + if (open_blocks.Count <= 0) + throw new NotSupportedException ("Not in an exception block"); + if (exceptionType != null && exceptionType.IsUserType) + throw new NotSupportedException ("User defined subclasses of System.Type are not yet supported."); + if (ex_handlers [cur_block].LastClauseType () == ILExceptionBlock.FILTER_START) { + if (exceptionType != null) + throw new ArgumentException ("Do not supply an exception type for filter clause"); + Emit (OpCodes.Endfilter); + ex_handlers [cur_block].PatchFilterClause (code_len); + } else { + InternalEndClause (); + ex_handlers [cur_block].AddCatch (exceptionType, code_len); + } + + cur_stack = 1; // the exception object is on the stack by default + if (max_stack < cur_stack) + max_stack = cur_stack; + + //System.Console.WriteLine ("Begin catch Block: {0} {1}",exceptionType.ToString(), max_stack); + } + + public virtual void BeginExceptFilterBlock () + { + if (open_blocks == null) + open_blocks = new Stack (defaultExceptionStackSize); + + if (open_blocks.Count <= 0) + throw new NotSupportedException ("Not in an exception block"); + InternalEndClause (); + + ex_handlers [cur_block].AddFilter (code_len); + } + + public virtual Label BeginExceptionBlock () + { + //System.Console.WriteLine ("Begin Block"); + if (open_blocks == null) + open_blocks = new Stack (defaultExceptionStackSize); + + if (ex_handlers != null) { + cur_block = ex_handlers.Length; + ILExceptionInfo[] new_ex = new ILExceptionInfo [cur_block + 1]; + System.Array.Copy (ex_handlers, new_ex, cur_block); + ex_handlers = new_ex; + } else { + ex_handlers = new ILExceptionInfo [1]; + cur_block = 0; + } + open_blocks.Push (cur_block); + ex_handlers [cur_block].start = code_len; + return ex_handlers [cur_block].end = DefineLabel (); + } + + public virtual void BeginFaultBlock() + { + if (open_blocks == null) + open_blocks = new Stack (defaultExceptionStackSize); + + if (open_blocks.Count <= 0) + throw new NotSupportedException ("Not in an exception block"); + + if (ex_handlers [cur_block].LastClauseType () == ILExceptionBlock.FILTER_START) { + Emit (OpCodes.Leave, ex_handlers [cur_block].end); + ex_handlers [cur_block].PatchFilterClause (code_len); + } + + InternalEndClause (); + //System.Console.WriteLine ("Begin fault Block"); + ex_handlers [cur_block].AddFault (code_len); + } + + public virtual void BeginFinallyBlock() + { + if (open_blocks == null) + open_blocks = new Stack (defaultExceptionStackSize); + + if (open_blocks.Count <= 0) + throw new NotSupportedException ("Not in an exception block"); + + InternalEndClause (); + + if (ex_handlers [cur_block].LastClauseType () == ILExceptionBlock.FILTER_START) { + Emit (OpCodes.Leave, ex_handlers [cur_block].end); + ex_handlers [cur_block].PatchFilterClause (code_len); + } + + //System.Console.WriteLine ("Begin finally Block"); + ex_handlers [cur_block].AddFinally (code_len); + } + + public virtual void BeginScope () + { } + + public virtual LocalBuilder DeclareLocal (Type localType) + { + return DeclareLocal (localType, false); + } + + + public virtual LocalBuilder DeclareLocal (Type localType, bool pinned) + { + if (localType == null) + throw new ArgumentNullException ("localType"); + if (localType.IsUserType) + throw new NotSupportedException ("User defined subclasses of System.Type are not yet supported."); + LocalBuilder res = new LocalBuilder (localType, this); + res.is_pinned = pinned; + + if (locals != null) { + LocalBuilder[] new_l = new LocalBuilder [locals.Length + 1]; + System.Array.Copy (locals, new_l, locals.Length); + new_l [locals.Length] = res; + locals = new_l; + } else { + locals = new LocalBuilder [1]; + locals [0] = res; + } + res.position = (ushort)(locals.Length - 1); + return res; + } + + public virtual Label DefineLabel () + { + if (labels == null) + labels = new LabelData [defaultLabelsSize]; + else if (num_labels >= labels.Length) { + LabelData [] t = new LabelData [labels.Length * 2]; + Array.Copy (labels, t, labels.Length); + labels = t; + } + + labels [num_labels] = new LabelData (-1, 0); + + return new Label (num_labels++); + } + + public virtual void Emit (OpCode opcode) + { + make_room (2); + ll_emit (opcode); + } + + public virtual void Emit (OpCode opcode, Byte arg) + { + make_room (3); + ll_emit (opcode); + code [code_len++] = arg; + } + + [ComVisible (true)] + public virtual void Emit (OpCode opcode, ConstructorInfo con) + { + int token = token_gen.GetToken (con, true); + make_room (6); + ll_emit (opcode); + emit_int (token); + + if (opcode.StackBehaviourPop == StackBehaviour.Varpop) + cur_stack -= con.GetParametersCount (); + } + + public virtual void Emit (OpCode opcode, double arg) + { + byte[] s = System.BitConverter.GetBytes (arg); + make_room (10); + ll_emit (opcode); + if (BitConverter.IsLittleEndian){ + System.Array.Copy (s, 0, code, code_len, 8); + code_len += 8; + } else { + code [code_len++] = s [7]; + code [code_len++] = s [6]; + code [code_len++] = s [5]; + code [code_len++] = s [4]; + code [code_len++] = s [3]; + code [code_len++] = s [2]; + code [code_len++] = s [1]; + code [code_len++] = s [0]; + } + } + + public virtual void Emit (OpCode opcode, FieldInfo field) + { + int token = token_gen.GetToken (field, true); + make_room (6); + ll_emit (opcode); + emit_int (token); + } + + public virtual void Emit (OpCode opcode, Int16 arg) + { + make_room (4); + ll_emit (opcode); + code [code_len++] = (byte) (arg & 0xFF); + code [code_len++] = (byte) ((arg >> 8) & 0xFF); + } + + public virtual void Emit (OpCode opcode, int arg) + { + make_room (6); + ll_emit (opcode); + emit_int (arg); + } + + public virtual void Emit (OpCode opcode, long arg) + { + make_room (10); + ll_emit (opcode); + code [code_len++] = (byte) (arg & 0xFF); + code [code_len++] = (byte) ((arg >> 8) & 0xFF); + code [code_len++] = (byte) ((arg >> 16) & 0xFF); + code [code_len++] = (byte) ((arg >> 24) & 0xFF); + code [code_len++] = (byte) ((arg >> 32) & 0xFF); + code [code_len++] = (byte) ((arg >> 40) & 0xFF); + code [code_len++] = (byte) ((arg >> 48) & 0xFF); + code [code_len++] = (byte) ((arg >> 56) & 0xFF); + } + + public virtual void Emit (OpCode opcode, Label label) + { + int tlen = target_len (opcode); + make_room (6); + ll_emit (opcode); + if (cur_stack > labels [label.m_label].maxStack) + labels [label.m_label].maxStack = cur_stack; + + if (fixups == null) + fixups = new LabelFixup [defaultFixupSize]; + else if (num_fixups >= fixups.Length) { + LabelFixup[] newf = new LabelFixup [fixups.Length * 2]; + System.Array.Copy (fixups, newf, fixups.Length); + fixups = newf; + } + fixups [num_fixups].offset = tlen; + fixups [num_fixups].pos = code_len; + fixups [num_fixups].label_idx = label.m_label; + num_fixups++; + code_len += tlen; + + } + + public virtual void Emit (OpCode opcode, Label[] labels) + { + if (labels == null) + throw new ArgumentNullException ("labels"); + + /* opcode needs to be switch. */ + int count = labels.Length; + make_room (6 + count * 4); + ll_emit (opcode); + + for (int i = 0; i < count; ++i) + if (cur_stack > this.labels [labels [i].m_label].maxStack) + this.labels [labels [i].m_label].maxStack = cur_stack; + + emit_int (count); + if (fixups == null) + fixups = new LabelFixup [defaultFixupSize + count]; + else if (num_fixups + count >= fixups.Length) { + LabelFixup[] newf = new LabelFixup [count + fixups.Length * 2]; + System.Array.Copy (fixups, newf, fixups.Length); + fixups = newf; + } + + // ECMA 335, Partition III, p94 (7-10) + // + // The switch instruction implements a jump table. The format of + // the instruction is an unsigned int32 representing the number of targets N, + // followed by N int32 values specifying jump targets: these targets are + // represented as offsets (positive or negative) from the beginning of the + // instruction following this switch instruction. + // + // We must make sure it gets an offset from the *end* of the last label + // (eg, the beginning of the instruction following this). + // + // remaining is the number of bytes from the current instruction to the + // instruction that will be emitted. + + for (int i = 0, remaining = count * 4; i < count; ++i, remaining -= 4) { + fixups [num_fixups].offset = remaining; + fixups [num_fixups].pos = code_len; + fixups [num_fixups].label_idx = labels [i].m_label; + num_fixups++; + code_len += 4; + } + } + + public virtual void Emit (OpCode opcode, LocalBuilder local) + { + if (local == null) + throw new ArgumentNullException ("local"); + if (local.ilgen != this) + throw new ArgumentException ("Trying to emit a local from a different ILGenerator."); + + uint pos = local.position; + bool load_addr = false; + bool is_store = false; + bool is_load = false; + make_room (6); + + /* inline the code from ll_emit () to optimize il code size */ + if (opcode.StackBehaviourPop == StackBehaviour.Pop1) { + cur_stack --; + is_store = true; + } else if (opcode.StackBehaviourPush == StackBehaviour.Push1 || opcode.StackBehaviourPush == StackBehaviour.Pushi) { + cur_stack++; + is_load = true; + if (cur_stack > max_stack) + max_stack = cur_stack; + load_addr = opcode.StackBehaviourPush == StackBehaviour.Pushi; + } + if (load_addr) { + if (pos < 256) { + code [code_len++] = (byte)0x12; + code [code_len++] = (byte)pos; + } else { + code [code_len++] = (byte)0xfe; + code [code_len++] = (byte)0x0d; + code [code_len++] = (byte)(pos & 0xff); + code [code_len++] = (byte)((pos >> 8) & 0xff); + } + } else { + if (is_store) { + if (pos < 4) { + code [code_len++] = (byte)(0x0a + pos); + } else if (pos < 256) { + code [code_len++] = (byte)0x13; + code [code_len++] = (byte)pos; + } else { + code [code_len++] = (byte)0xfe; + code [code_len++] = (byte)0x0e; + code [code_len++] = (byte)(pos & 0xff); + code [code_len++] = (byte)((pos >> 8) & 0xff); + } + } else if (is_load) { + if (pos < 4) { + code [code_len++] = (byte)(0x06 + pos); + } else if (pos < 256) { + code [code_len++] = (byte)0x11; + code [code_len++] = (byte)pos; + } else { + code [code_len++] = (byte)0xfe; + code [code_len++] = (byte)0x0c; + code [code_len++] = (byte)(pos & 0xff); + code [code_len++] = (byte)((pos >> 8) & 0xff); + } + } else { + ll_emit (opcode); + } + } + } + + public virtual void Emit (OpCode opcode, MethodInfo meth) + { + if (meth == null) + throw new ArgumentNullException ("meth"); + + // For compatibility with MS + if ((meth is DynamicMethod) && ((opcode == OpCodes.Ldftn) || (opcode == OpCodes.Ldvirtftn) || (opcode == OpCodes.Ldtoken))) + throw new ArgumentException ("Ldtoken, Ldftn and Ldvirtftn OpCodes cannot target DynamicMethods."); + + int token = token_gen.GetToken (meth, true); + make_room (6); + ll_emit (opcode); + Type declaringType = meth.DeclaringType; + emit_int (token); + if (meth.ReturnType != typeof (void)) + cur_stack ++; + + if (opcode.StackBehaviourPop == StackBehaviour.Varpop) + cur_stack -= meth.GetParametersCount (); + } + + private void Emit (OpCode opcode, MethodInfo method, int token) + { + make_room (6); + ll_emit (opcode); + emit_int (token); + if (method.ReturnType != typeof (void)) + cur_stack ++; + + if (opcode.StackBehaviourPop == StackBehaviour.Varpop) + cur_stack -= method.GetParametersCount (); + } + + [CLSCompliant(false)] + public void Emit (OpCode opcode, sbyte arg) + { + make_room (3); + ll_emit (opcode); + code [code_len++] = (byte)arg; + } + + public virtual void Emit (OpCode opcode, SignatureHelper signature) + { + int token = token_gen.GetToken (signature); + make_room (6); + ll_emit (opcode); + emit_int (token); + } + + public virtual void Emit (OpCode opcode, float arg) + { + byte[] s = System.BitConverter.GetBytes (arg); + make_room (6); + ll_emit (opcode); + if (BitConverter.IsLittleEndian){ + System.Array.Copy (s, 0, code, code_len, 4); + code_len += 4; + } else { + code [code_len++] = s [3]; + code [code_len++] = s [2]; + code [code_len++] = s [1]; + code [code_len++] = s [0]; + } + } + + public virtual void Emit (OpCode opcode, string str) + { + int token = token_gen.GetToken (str); + make_room (6); + ll_emit (opcode); + emit_int (token); + } + + public virtual void Emit (OpCode opcode, Type cls) + { + if (cls != null && cls.IsByRef) + throw new ArgumentException ("Cannot get TypeToken for a ByRef type."); + + make_room (6); + ll_emit (opcode); + int token = token_gen.GetToken (cls, opcode != OpCodes.Ldtoken); + emit_int (token); + } + + // FIXME: vararg methods are not supported + public virtual void EmitCall (OpCode opcode, MethodInfo methodInfo, Type[] optionalParameterTypes) + { + if (methodInfo == null) + throw new ArgumentNullException ("methodInfo"); + short value = opcode.Value; + if (!(value == OpCodes.Call.Value || value == OpCodes.Callvirt.Value)) + throw new NotSupportedException ("Only Call and CallVirt are allowed"); + if ((methodInfo.CallingConvention & CallingConventions.VarArgs) == 0) + optionalParameterTypes = null; + if (optionalParameterTypes != null){ + if ((methodInfo.CallingConvention & CallingConventions.VarArgs) == 0){ + throw new InvalidOperationException ("Method is not VarArgs method and optional types were passed"); + } + + int token = token_gen.GetToken (methodInfo, optionalParameterTypes); + Emit (opcode, methodInfo, token); + return; + } + Emit (opcode, methodInfo); + } + + public virtual void EmitCalli (OpCode opcode, CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes) + { + // GetMethodSigHelper expects a ModuleBuilder or null, and module might be + // a normal module when using dynamic methods. + SignatureHelper helper = SignatureHelper.GetMethodSigHelper (module as ModuleBuilder, 0, unmanagedCallConv, returnType, parameterTypes); + Emit (opcode, helper); + } + + public virtual void EmitCalli (OpCode opcode, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes) + { + if (optionalParameterTypes != null) + throw new NotImplementedException (); + + SignatureHelper helper = SignatureHelper.GetMethodSigHelper (module as ModuleBuilder, callingConvention, 0, returnType, parameterTypes); + Emit (opcode, helper); + } + + static Type GetConsoleType () + { + return Type.GetType ("System.Console, System.Console", throwOnError: true); + } + + public virtual void EmitWriteLine (FieldInfo fld) + { + if (fld == null) + throw new ArgumentNullException ("fld"); + + // The MS implementation does not check for valuetypes here but it + // should. Also, it should check that if the field is not static, + // then it is a member of this type. + if (fld.IsStatic) + Emit (OpCodes.Ldsfld, fld); + else { + Emit (OpCodes.Ldarg_0); + Emit (OpCodes.Ldfld, fld); + } + Emit (OpCodes.Call, GetConsoleType ().GetMethod ("WriteLine", new Type[1] { fld.FieldType })); + } + + public virtual void EmitWriteLine (LocalBuilder localBuilder) + { + if (localBuilder == null) + throw new ArgumentNullException ("localBuilder"); + if (localBuilder.LocalType is TypeBuilder) + throw new ArgumentException ("Output streams do not support TypeBuilders."); + // The MS implementation does not check for valuetypes here but it + // should. + Emit (OpCodes.Ldloc, localBuilder); + Emit (OpCodes.Call, GetConsoleType ().GetMethod ("WriteLine", new Type[1] { localBuilder.LocalType })); + } + + public virtual void EmitWriteLine (string value) + { + Emit (OpCodes.Ldstr, value); + Emit (OpCodes.Call, GetConsoleType ().GetMethod ("WriteLine", new Type[1] { typeof(string)})); + } + + public virtual void EndExceptionBlock () + { + if (open_blocks == null) + open_blocks = new Stack (defaultExceptionStackSize); + + if (open_blocks.Count <= 0) + throw new NotSupportedException ("Not in an exception block"); + + if (ex_handlers [cur_block].LastClauseType () == ILExceptionBlock.FILTER_START) + throw new InvalidOperationException ("Incorrect code generation for exception block."); + + InternalEndClause (); + MarkLabel (ex_handlers [cur_block].end); + ex_handlers [cur_block].End (code_len); + ex_handlers [cur_block].Debug (cur_block); + //System.Console.WriteLine ("End Block {0} (handlers: {1})", cur_block, ex_handlers [cur_block].NumHandlers ()); + open_blocks.Pop (); + if (open_blocks.Count > 0) + cur_block = (int)open_blocks.Peek (); + //Console.WriteLine ("curblock restored to {0}", cur_block); + //throw new NotImplementedException (); + } + + public virtual void EndScope () + { } + + public virtual void MarkLabel (Label loc) + { + if (loc.m_label < 0 || loc.m_label >= num_labels) + throw new System.ArgumentException ("The label is not valid"); + if (labels [loc.m_label].addr >= 0) + throw new System.ArgumentException ("The label was already defined"); + labels [loc.m_label].addr = code_len; + if (labels [loc.m_label].maxStack > cur_stack) + cur_stack = labels [loc.m_label].maxStack; + } + + public virtual void MarkSequencePoint (ISymbolDocumentWriter document, int startLine, + int startColumn, int endLine, int endColumn) + { + if (currentSequence == null || currentSequence.Document != document) { + if (sequencePointLists == null) + sequencePointLists = new ArrayList (); + currentSequence = new SequencePointList (document); + sequencePointLists.Add (currentSequence); + } + + currentSequence.AddSequencePoint (code_len, startLine, startColumn, endLine, endColumn); + } + +/* + internal void GenerateDebugInfo (ISymbolWriter symbolWriter) + { + if (sequencePointLists != null) { + SequencePointList first = (SequencePointList) sequencePointLists [0]; + SequencePointList last = (SequencePointList) sequencePointLists [sequencePointLists.Count - 1]; + symbolWriter.SetMethodSourceRange (first.Document, first.StartLine, first.StartColumn, last.Document, last.EndLine, last.EndColumn); + + foreach (SequencePointList list in sequencePointLists) + symbolWriter.DefineSequencePoints (list.Document, list.GetOffsets(), list.GetLines(), list.GetColumns(), list.GetEndLines(), list.GetEndColumns()); + + if (locals != null) { + foreach (LocalBuilder local in locals) { + if (local.Name != null && local.Name.Length > 0) { + SignatureHelper sighelper = SignatureHelper.GetLocalVarSigHelper (module as ModuleBuilder); + sighelper.AddArgument (local.LocalType); + byte[] signature = sighelper.GetSignature (); + symbolWriter.DefineLocalVariable (local.Name, FieldAttributes.Public, signature, SymAddressKind.ILOffset, local.position, 0, 0, local.StartOffset, local.EndOffset); + } + } + } + sequencePointLists = null; + } + } +*/ + + internal bool HasDebugInfo + { + get { return sequencePointLists != null; } + } + + public virtual void ThrowException (Type excType) + { + if (excType == null) + throw new ArgumentNullException ("excType"); + if (! ((excType == typeof (Exception)) || + excType.IsSubclassOf (typeof (Exception)))) + throw new ArgumentException ("Type should be an exception type", "excType"); + ConstructorInfo ctor = excType.GetConstructor (Type.EmptyTypes); + if (ctor == null) + throw new ArgumentException ("Type should have a default constructor", "excType"); + Emit (OpCodes.Newobj, ctor); + Emit (OpCodes.Throw); + } + + // FIXME: "Not implemented" + public virtual void UsingNamespace (String usingNamespace) + { + throw new NotImplementedException (); + } + + internal void label_fixup (MethodBase mb) + { + for (int i = 0; i < num_fixups; ++i) { + if (labels [fixups [i].label_idx].addr < 0) + throw new ArgumentException (string.Format ("Label #{0} is not marked in method `{1}'", fixups [i].label_idx + 1, mb.Name)); + // Diff is the offset from the end of the jump instruction to the address of the label + int diff = labels [fixups [i].label_idx].addr - (fixups [i].pos + fixups [i].offset); + if (fixups [i].offset == 1) { + code [fixups [i].pos] = (byte)((sbyte) diff); + } else { + int old_cl = code_len; + code_len = fixups [i].pos; + emit_int (diff); + code_len = old_cl; + } + } + } + + // Used by DynamicILGenerator and MethodBuilder.SetMethodBody + internal void SetCode (byte[] code, int max_stack) { + // Make a copy to avoid possible security problems + this.code = (byte[])code.Clone (); + this.code_len = code.Length; + this.max_stack = max_stack; + this.cur_stack = 0; + } + + internal unsafe void SetCode (byte *code, int code_size, int max_stack) { + // Make a copy to avoid possible security problems + this.code = new byte [code_size]; + for (int i = 0; i < code_size; ++i) + this.code [i] = code [i]; + this.code_len = code_size; + this.max_stack = max_stack; + this.cur_stack = 0; + } + + internal TokenGenerator TokenGenerator { + get { + return token_gen; + } + } + + public virtual int ILOffset { + get { return code_len; } + } + } + + internal class SequencePointList + { + ISymbolDocumentWriter doc; + SequencePoint[] points; + int count; + const int arrayGrow = 10; + + public SequencePointList (ISymbolDocumentWriter doc) + { + this.doc = doc; + } + + public ISymbolDocumentWriter Document { + get { return doc; } + } + + public int[] GetOffsets() + { + int[] data = new int [count]; + for (int n=0; n= points.Length) { + SequencePoint[] temp = new SequencePoint [count + arrayGrow]; + Array.Copy (points, temp, points.Length); + points = temp; + } + + points [count] = s; + count++; + } + } + + struct SequencePoint { + public int Offset; + public int Line; + public int Col; + public int EndLine; + public int EndCol; + } + + class Stack + { + Object[] _array; + int _size; + int _version; + + private const int _defaultCapacity = 10; + + public Stack() + { + _array = new Object[_defaultCapacity]; + _size = 0; + _version = 0; + } + + public Stack(int initialCapacity) + { + if (initialCapacity < 0) + throw new ArgumentOutOfRangeException(nameof(initialCapacity), SR.ArgumentOutOfRange_NeedNonNegNum); + + if (initialCapacity < _defaultCapacity) + initialCapacity = _defaultCapacity; + _array = new Object[initialCapacity]; + _size = 0; + _version = 0; + } + + public virtual int Count + { + get + { + return _size; + } + } + + public virtual Object Peek() + { + if (_size == 0) + throw new InvalidOperationException (); + + return _array[_size - 1]; + } + + public virtual Object Pop() + { + if (_size == 0) + throw new InvalidOperationException (); + + _version++; + Object obj = _array[--_size]; + _array[_size] = null; + return obj; + } + + public virtual void Push(Object obj) + { + if (_size == _array.Length) + { + Object[] newArray = new Object[2 * _array.Length]; + Array.Copy(_array, 0, newArray, 0, _size); + _array = newArray; + } + _array[_size++] = obj; + _version++; + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/LocalBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/LocalBuilder.cs new file mode 100644 index 0000000000..583600a257 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/LocalBuilder.cs @@ -0,0 +1,111 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/LocalBuilder.cs +// +// Authors: +// Paolo Molaro (lupus@ximian.com) +// Martin Baulig (martin@gnome.org) +// Miguel de Icaza (miguel@ximian.com) +// +// (C) 2001, 2002 Ximian, Inc. http://www.ximian.com +// + +using System; +using System.Reflection; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Diagnostics.SymbolStore; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public sealed partial class LocalBuilder : LocalVariableInfo + { + // Needs to have the same layout as RuntimeLocalVariableInfo + #region Sync with reflection.h + internal Type type; + internal bool is_pinned; + internal ushort position; + private string name; + #endregion + + internal ILGenerator ilgen; + int startOffset; + int endOffset; + + internal LocalBuilder (Type t, ILGenerator ilgen) + { + this.type = t; + this.ilgen = ilgen; + } + + public void SetLocalSymInfo (string name, int startOffset, int endOffset) + { + this.name = name; + this.startOffset = startOffset; + this.endOffset = endOffset; + } + + public void SetLocalSymInfo (string name) + { + SetLocalSymInfo (name, 0, 0); + } + + public override Type LocalType + { + get { + return type; + } + } + + public override bool IsPinned + { + get { + return is_pinned; + } + } + + public override int LocalIndex + { + get { + return position; + } + } + + internal string Name { + get { return name; } + } + + internal int StartOffset { + get { return startOffset; } + } + + internal int EndOffset { + get { return endOffset; } + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodBuilder.cs new file mode 100644 index 0000000000..76082cd6e0 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodBuilder.cs @@ -0,0 +1,743 @@ +#nullable disable + +// +// System.Reflection.Emit/MethodBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Diagnostics.SymbolStore; +using System.Collections.Generic; + +namespace System.Reflection.Emit +{ + [StructLayout (LayoutKind.Sequential)] + public sealed partial class MethodBuilder : MethodInfo + { +#pragma warning disable 169, 414 + private RuntimeMethodHandle mhandle; + private Type rtype; + internal Type[] parameters; + private MethodAttributes attrs; /* It's used directly by MCS */ + private MethodImplAttributes iattrs; + private string name; + private int table_idx; + private byte[] code; + private ILGenerator ilgen; + private TypeBuilder type; + internal ParameterBuilder[] pinfo; + private CustomAttributeBuilder[] cattrs; + private MethodInfo[] override_methods; + private string pi_dll; + private string pi_entry; + private CharSet charset; + private uint extra_flags; /* this encodes set_last_error etc */ + private CallingConvention native_cc; + private CallingConventions call_conv; + private bool init_locals = true; + private IntPtr generic_container; + internal GenericTypeParameterBuilder[] generic_params; + private Type[] returnModReq; + private Type[] returnModOpt; + private Type[][] paramModReq; + private Type[][] paramModOpt; + private object permissions; +#pragma warning restore 169, 414 + RuntimeMethodInfo created; + + internal MethodBuilder (TypeBuilder tb, string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] returnModReq, Type[] returnModOpt, Type[] parameterTypes, Type[][] paramModReq, Type[][] paramModOpt) + { + this.name = name; + this.attrs = attributes; + this.call_conv = callingConvention; + this.rtype = returnType; + this.returnModReq = returnModReq; + this.returnModOpt = returnModOpt; + this.paramModReq = paramModReq; + this.paramModOpt = paramModOpt; + // The MSDN docs does not specify this, but the MS MethodBuilder + // appends a HasThis flag if the method is not static + if ((attributes & MethodAttributes.Static) == 0) + this.call_conv |= CallingConventions.HasThis; + if (parameterTypes != null) { + for (int i = 0; i < parameterTypes.Length; ++i) + if (parameterTypes [i] == null) + throw new ArgumentException ("Elements of the parameterTypes array cannot be null", "parameterTypes"); + + this.parameters = new Type [parameterTypes.Length]; + System.Array.Copy (parameterTypes, this.parameters, parameterTypes.Length); + } + type = tb; + table_idx = get_next_table_index (this, 0x06, 1); + + ((ModuleBuilder)tb.Module).RegisterToken (this, GetToken ().Token); + } + + internal MethodBuilder (TypeBuilder tb, string name, MethodAttributes attributes, + CallingConventions callingConvention, Type returnType, Type[] returnModReq, Type[] returnModOpt, Type[] parameterTypes, Type[][] paramModReq, Type[][] paramModOpt, + String dllName, String entryName, CallingConvention nativeCConv, CharSet nativeCharset) + : this (tb, name, attributes, callingConvention, returnType, returnModReq, returnModOpt, parameterTypes, paramModReq, paramModOpt) + { + pi_dll = dllName; + pi_entry = entryName; + native_cc = nativeCConv; + charset = nativeCharset; + } + + public override bool ContainsGenericParameters { + get { throw new NotSupportedException (); } + } + + public bool InitLocals { + get {return init_locals;} + set {init_locals = value;} + } + + internal TypeBuilder TypeBuilder { + get {return type;} + } + + public override RuntimeMethodHandle MethodHandle { + get { + throw NotSupported (); + } + } + + internal RuntimeMethodHandle MethodHandleInternal { + get { + return mhandle; + } + } + + public override Type ReturnType { + get { return rtype; } + } + + public override Type ReflectedType { + get { return type; } + } + + public override Type DeclaringType { + get { return type; } + } + + public override string Name { + get { return name; } + } + + public override MethodAttributes Attributes { + get { return attrs; } + } + + public override ICustomAttributeProvider ReturnTypeCustomAttributes { + get { return null; } + } + + public override CallingConventions CallingConvention { + get { return call_conv; } + } + + // FIXME: "Not implemented" + public string Signature { + get { + throw new NotImplementedException (); + } + } + + /* Used by mcs */ + internal bool BestFitMapping { + set { + extra_flags = (uint) ((extra_flags & ~0x30) | (uint)(value ? 0x10 : 0x20)); + } + } + + /* Used by mcs */ + internal bool ThrowOnUnmappableChar { + set { + extra_flags = (uint) ((extra_flags & ~0x3000) | (uint)(value ? 0x1000 : 0x2000)); + } + } + + /* Used by mcs */ + internal bool ExactSpelling { + set { + extra_flags = (uint) ((extra_flags & ~0x01) | (uint)(value ? 0x01 : 0x00)); + } + } + + /* Used by mcs */ + internal bool SetLastError { + set { + extra_flags = (uint) ((extra_flags & ~0x40) | (uint)(value ? 0x40 : 0x00)); + } + } + + public MethodToken GetToken() + { + return new MethodToken(0x06000000 | table_idx); + } + + public override MethodInfo GetBaseDefinition() + { + return this; + } + + public override MethodImplAttributes GetMethodImplementationFlags() + { + return iattrs; + } + + public override ParameterInfo[] GetParameters() + { + if (!type.is_created) + throw NotSupported (); + + return GetParametersInternal (); + } + + internal override ParameterInfo[] GetParametersInternal () + { + if (parameters == null) + return null; + + ParameterInfo[] retval = new ParameterInfo [parameters.Length]; + for (int i = 0; i < parameters.Length; i++) { + retval [i] = RuntimeParameterInfo.New (pinfo?[i + 1], parameters [i], this, i + 1); + } + return retval; + } + + internal override int GetParametersCount () + { + if (parameters == null) + return 0; + + return parameters.Length; + } + + internal override Type GetParameterType (int pos) { + return parameters [pos]; + } + + internal MethodBase RuntimeResolve () { + return type.RuntimeResolve ().GetMethod (this); + } + + public Module GetModule () + { + return type.Module; + } + + public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) + { + throw NotSupported (); + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw NotSupported (); + } + + public override object[] GetCustomAttributes (bool inherit) + { + /* + * On MS.NET, this always returns not_supported, but we can't do this + * since there would be no way to obtain custom attributes of + * dynamically created ctors. + */ + if (type.is_created) + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + else + throw NotSupported (); + } + + public override object[] GetCustomAttributes (Type attributeType, bool inherit) + { + if (type.is_created) + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + else + throw NotSupported (); + } + + public ILGenerator GetILGenerator () + { + return GetILGenerator (64); + } + + public ILGenerator GetILGenerator (int size) + { + if (((iattrs & MethodImplAttributes.CodeTypeMask) != + MethodImplAttributes.IL) || + ((iattrs & MethodImplAttributes.ManagedMask) != + MethodImplAttributes.Managed)) + throw new InvalidOperationException ("Method body should not exist."); + if (ilgen != null) + return ilgen; + ilgen = new ILGenerator (type.Module, ((ModuleBuilder)type.Module).GetTokenGenerator (), size); + return ilgen; + } + + public ParameterBuilder DefineParameter (int position, ParameterAttributes attributes, string strParamName) + { + RejectIfCreated (); + + // + // Extension: Mono allows position == 0 for the return attribute + // + if ((position < 0) || parameters == null || (position > parameters.Length)) + throw new ArgumentOutOfRangeException ("position"); + + ParameterBuilder pb = new ParameterBuilder (this, position, attributes, strParamName); + if (pinfo == null) + pinfo = new ParameterBuilder [parameters.Length + 1]; + pinfo [position] = pb; + return pb; + } + + internal void check_override () + { + if (override_methods != null) { + foreach (var m in override_methods) { + if (m.IsVirtual && !IsVirtual) + throw new TypeLoadException (String.Format("Method '{0}' override '{1}' but it is not virtual", name, m)); + } + } + } + + internal void fixup () + { + if (((attrs & (MethodAttributes.Abstract | MethodAttributes.PinvokeImpl)) == 0) && ((iattrs & (MethodImplAttributes.Runtime | MethodImplAttributes.InternalCall)) == 0)) { + // do not allow zero length method body on MS.NET 2.0 (and higher) + if (((ilgen == null) || (ilgen.ILOffset == 0)) && (code == null || code.Length == 0)) + throw new InvalidOperationException ( + String.Format ("Method '{0}.{1}' does not have a method body.", + DeclaringType.FullName, Name)); + } + if (ilgen != null) + ilgen.label_fixup (this); + } + + internal void ResolveUserTypes () { + rtype = TypeBuilder.ResolveUserType (rtype); + TypeBuilder.ResolveUserTypes (parameters); + TypeBuilder.ResolveUserTypes (returnModReq); + TypeBuilder.ResolveUserTypes (returnModOpt); + if (paramModReq != null) { + foreach (var types in paramModReq) + TypeBuilder.ResolveUserTypes (types); + } + if (paramModOpt != null) { + foreach (var types in paramModOpt) + TypeBuilder.ResolveUserTypes (types); + } + } +/* + internal void GenerateDebugInfo (ISymbolWriter symbolWriter) + { + if (ilgen != null && ilgen.HasDebugInfo) { + SymbolToken token = new SymbolToken (GetToken().Token); + symbolWriter.OpenMethod (token); + symbolWriter.SetSymAttribute (token, "__name", System.Text.Encoding.UTF8.GetBytes (Name)); + ilgen.GenerateDebugInfo (symbolWriter); + symbolWriter.CloseMethod (); + } + } +*/ + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + + switch (customBuilder.Ctor.ReflectedType.FullName) { + case "System.Runtime.CompilerServices.MethodImplAttribute": + byte[] data = customBuilder.Data; + int impla; // the (stupid) ctor takes a short or an int ... + impla = (int)data [2]; + impla |= ((int)data [3]) << 8; + iattrs |= (MethodImplAttributes)impla; + return; + + case "System.Runtime.InteropServices.DllImportAttribute": + CustomAttributeBuilder.CustomAttributeInfo attr = CustomAttributeBuilder.decode_cattr (customBuilder); + bool preserveSig = true; + + /* + * It would be easier to construct a DllImportAttribute from + * the custom attribute builder, but the DllImportAttribute + * does not contain all the information required here, ie. + * - some parameters, like BestFitMapping has three values + * ("on", "off", "missing"), but DllImportAttribute only + * contains two (on/off). + * - PreserveSig is true by default, while it is false by + * default in DllImportAttribute. + */ + + pi_dll = (string)attr.ctorArgs[0]; + if (pi_dll == null || pi_dll.Length == 0) + throw new ArgumentException ("DllName cannot be empty"); + + native_cc = System.Runtime.InteropServices.CallingConvention.Winapi; + + for (int i = 0; i < attr.namedParamNames.Length; ++i) { + string name = attr.namedParamNames [i]; + object value = attr.namedParamValues [i]; + + if (name == "CallingConvention") + native_cc = (CallingConvention)value; + else if (name == "CharSet") + charset = (CharSet)value; + else if (name == "EntryPoint") + pi_entry = (string)value; + else if (name == "ExactSpelling") + ExactSpelling = (bool)value; + else if (name == "SetLastError") + SetLastError = (bool)value; + else if (name == "PreserveSig") + preserveSig = (bool)value; + else if (name == "BestFitMapping") + BestFitMapping = (bool)value; + else if (name == "ThrowOnUnmappableChar") + ThrowOnUnmappableChar = (bool)value; + } + + attrs |= MethodAttributes.PinvokeImpl; + if (preserveSig) + iattrs |= MethodImplAttributes.PreserveSig; + return; + + case "System.Runtime.InteropServices.PreserveSigAttribute": + iattrs |= MethodImplAttributes.PreserveSig; + return; + case "System.Runtime.CompilerServices.SpecialNameAttribute": + attrs |= MethodAttributes.SpecialName; + return; + case "System.Security.SuppressUnmanagedCodeSecurityAttribute": + attrs |= MethodAttributes.HasSecurity; + break; + } + + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute) + { + if (con == null) + throw new ArgumentNullException ("con"); + if (binaryAttribute == null) + throw new ArgumentNullException ("binaryAttribute"); + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + public void SetImplementationFlags (MethodImplAttributes attributes) + { + RejectIfCreated (); + iattrs = attributes; + } + + public override string ToString() + { + return "MethodBuilder [" + type.Name + "::" + name + "]"; + } + + // FIXME: + public override bool Equals (object obj) + { + return base.Equals (obj); + } + + public override int GetHashCode () + { + return name.GetHashCode (); + } + + internal override int get_next_table_index (object obj, int table, int count) + { + return type.get_next_table_index (obj, table, count); + } + + void ExtendArray (ref T[] array, T elem) { + if (array == null) { + array = new T [1]; + } else { + var newa = new T [array.Length + 1]; + Array.Copy (array, newa, array.Length); + array = newa; + } + array [array.Length - 1] = elem; + } + + internal void set_override (MethodInfo mdecl) + { + ExtendArray (ref override_methods, mdecl); + } + + private void RejectIfCreated () + { + if (type.is_created) + throw new InvalidOperationException ("Type definition of the method is complete."); + } + + private Exception NotSupported () + { + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + + public override MethodInfo MakeGenericMethod (params Type [] typeArguments) + { + if (!IsGenericMethodDefinition) + throw new InvalidOperationException ("Method is not a generic method definition"); + if (typeArguments == null) + throw new ArgumentNullException ("typeArguments"); + if (generic_params.Length != typeArguments.Length) + throw new ArgumentException ("Incorrect length", "typeArguments"); + foreach (Type type in typeArguments) { + if (type == null) + throw new ArgumentNullException ("typeArguments"); + } + + return new MethodOnTypeBuilderInst (this, typeArguments); + } + + public override bool IsGenericMethodDefinition { + get { + return generic_params != null; + } + } + + public override bool IsGenericMethod { + get { + return generic_params != null; + } + } + + public override MethodInfo GetGenericMethodDefinition () + { + if (!IsGenericMethodDefinition) + throw new InvalidOperationException (); + + return this; + } + + public override Type[] GetGenericArguments () + { + if (generic_params == null) + return null; + + Type[] result = new Type [generic_params.Length]; + for (int i = 0; i < generic_params.Length; i++) + result [i] = generic_params [i]; + + return result; + } + + public GenericTypeParameterBuilder[] DefineGenericParameters (params string[] names) + { + if (names == null) + throw new ArgumentNullException ("names"); + if (names.Length == 0) + throw new ArgumentException ("", "names"); + type.check_not_created (); + generic_params = new GenericTypeParameterBuilder [names.Length]; + for (int i = 0; i < names.Length; i++) { + string item = names [i]; + if (item == null) + throw new ArgumentNullException ("names"); + generic_params [i] = new GenericTypeParameterBuilder (type, this, item, i); + } + + return generic_params; + } + + public void SetReturnType (Type returnType) + { + rtype = returnType; + } + + public void SetParameters (params Type[] parameterTypes) + { + if (parameterTypes != null) { + for (int i = 0; i < parameterTypes.Length; ++i) + if (parameterTypes [i] == null) + throw new ArgumentNullException (nameof (parameterTypes), "Elements of the parameterTypes array cannot be null"); + + this.parameters = new Type [parameterTypes.Length]; + System.Array.Copy (parameterTypes, this.parameters, parameterTypes.Length); + } + } + + public void SetSignature (Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers) + { + SetReturnType (returnType); + SetParameters (parameterTypes); + this.returnModReq = returnTypeRequiredCustomModifiers; + this.returnModOpt = returnTypeOptionalCustomModifiers; + this.paramModReq = parameterTypeRequiredCustomModifiers; + this.paramModOpt = parameterTypeOptionalCustomModifiers; + } + + public override Module Module { + get { + return GetModule (); + } + } + + public override ParameterInfo ReturnParameter { + get { + if (!type.is_created) + throw new InvalidOperationException (SR.InvalidOperation_TypeNotCreated); + if (created == null) + created = (RuntimeMethodInfo)MethodBase.GetMethodFromHandle (mhandle); + return created.ReturnParameter; + } + } + } + + [StructLayout(LayoutKind.Sequential)] + readonly struct ExceptionHandler : IEquatable + { + internal readonly int m_exceptionClass; + internal readonly int m_tryStartOffset; + internal readonly int m_tryEndOffset; + internal readonly int m_filterOffset; + internal readonly int m_handlerStartOffset; + internal readonly int m_handlerEndOffset; + internal readonly ExceptionHandlingClauseOptions m_kind; + + public int ExceptionTypeToken + { + get { return m_exceptionClass; } + } + + public int TryOffset + { + get { return m_tryStartOffset; } + } + + public int TryLength + { + get { return m_tryEndOffset - m_tryStartOffset; } + } + + public int FilterOffset + { + get { return m_filterOffset; } + } + + public int HandlerOffset + { + get { return m_handlerStartOffset; } + } + + public int HandlerLength + { + get { return m_handlerEndOffset - m_handlerStartOffset; } + } + + public ExceptionHandlingClauseOptions Kind + { + get { return m_kind; } + } + + internal ExceptionHandler(int tryStartOffset, int tryEndOffset, int filterOffset, int handlerStartOffset, int handlerEndOffset, + int kind, int exceptionTypeToken) + { + m_tryStartOffset = tryStartOffset; + m_tryEndOffset = tryEndOffset; + m_filterOffset = filterOffset; + m_handlerStartOffset = handlerStartOffset; + m_handlerEndOffset = handlerEndOffset; + m_kind = (ExceptionHandlingClauseOptions)kind; + m_exceptionClass = exceptionTypeToken; + } + + private static bool IsValidKind(ExceptionHandlingClauseOptions kind) + { + switch (kind) + { + case ExceptionHandlingClauseOptions.Clause: + case ExceptionHandlingClauseOptions.Filter: + case ExceptionHandlingClauseOptions.Finally: + case ExceptionHandlingClauseOptions.Fault: + return true; + + default: + return false; + } + } + + public override int GetHashCode() + { + return m_exceptionClass ^ m_tryStartOffset ^ m_tryEndOffset ^ m_filterOffset ^ m_handlerStartOffset ^ m_handlerEndOffset ^ (int)m_kind; + } + + public override bool Equals(Object obj) + { + return obj is ExceptionHandler && Equals((ExceptionHandler)obj); + } + + public bool Equals(ExceptionHandler other) + { + return + other.m_exceptionClass == m_exceptionClass && + other.m_tryStartOffset == m_tryStartOffset && + other.m_tryEndOffset == m_tryEndOffset && + other.m_filterOffset == m_filterOffset && + other.m_handlerStartOffset == m_handlerStartOffset && + other.m_handlerEndOffset == m_handlerEndOffset && + other.m_kind == m_kind; + } + + public static bool operator ==(ExceptionHandler left, ExceptionHandler right) + { + return left.Equals(right); + } + + public static bool operator !=(ExceptionHandler left, ExceptionHandler right) + { + return !left.Equals(right); + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodOnTypeBuilderInst.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodOnTypeBuilderInst.cs new file mode 100644 index 0000000000..49b2d39e96 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MethodOnTypeBuilderInst.cs @@ -0,0 +1,315 @@ +#nullable disable + +// +// System.Reflection.Emit/MethodOnTypeBuilderInst.cs +// +// Author: +// Zoltan Varga (vargaz@gmail.com) +// +// +// Copyright (C) 2008 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Globalization; +using System.Reflection; +using System.Text; +using System.Runtime.InteropServices; + + +namespace System.Reflection.Emit +{ + /* + * This class represents a method of an instantiation of a generic type builder. + */ + [StructLayout (LayoutKind.Sequential)] + internal class MethodOnTypeBuilderInst : MethodInfo + { + #region Keep in sync with object-internals.h + Type instantiation; + MethodInfo base_method; /*This is the base method definition, it must be non-inflated and belong to a non-inflated type.*/ + Type[] method_arguments; + #endregion + MethodInfo generic_method_definition; + + public MethodOnTypeBuilderInst (TypeBuilderInstantiation instantiation, MethodInfo base_method) + { + this.instantiation = instantiation; + this.base_method = base_method; + } + + internal MethodOnTypeBuilderInst (MethodOnTypeBuilderInst gmd, Type[] typeArguments) + { + this.instantiation = gmd.instantiation; + this.base_method = gmd.base_method; + this.method_arguments = new Type [typeArguments.Length]; + typeArguments.CopyTo (this.method_arguments, 0); + this.generic_method_definition = gmd; + } + + internal MethodOnTypeBuilderInst (MethodInfo method, Type[] typeArguments) + { + this.instantiation = method.DeclaringType; + this.base_method = ExtractBaseMethod (method); + this.method_arguments = new Type [typeArguments.Length]; + typeArguments.CopyTo (this.method_arguments, 0); + if (base_method != method) + this.generic_method_definition = method; + } + + static MethodInfo ExtractBaseMethod (MethodInfo info) + { + if (info is MethodBuilder) + return info; + if (info is MethodOnTypeBuilderInst) + return ((MethodOnTypeBuilderInst)info).base_method; + + if (info.IsGenericMethod) + info = info.GetGenericMethodDefinition (); + + Type t = info.DeclaringType; + if (!t.IsGenericType || t.IsGenericTypeDefinition) + return info; + + return (MethodInfo)t.Module.ResolveMethod (info.MetadataToken); + } + + internal Type[] GetTypeArgs () + { + if (!instantiation.IsGenericType || instantiation.IsGenericParameter) + return null; + + return instantiation.GetGenericArguments (); + } + + // Called from the runtime to return the corresponding finished MethodInfo object + internal MethodInfo RuntimeResolve () { + var type = instantiation.InternalResolve (); + var m = type.GetMethod (base_method); + if (method_arguments != null) { + var args = new Type [method_arguments.Length]; + for (int i = 0; i < method_arguments.Length; ++i) + args [i] = method_arguments [i].InternalResolve (); + m = m.MakeGenericMethod (args); + } + return m; + } + + // + // MemberInfo members + // + + public override Type DeclaringType { + get { + return instantiation; + } + } + + public override string Name { + get { + return base_method.Name; + } + } + + public override Type ReflectedType { + get { + return instantiation; + } + } + + public override Type ReturnType { + get { + return base_method.ReturnType; + } + } + + public override Module Module { + get { + return base_method.Module; + } + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override string ToString () + { + //IEnumerable`1 get_Item(TKey) + StringBuilder sb = new StringBuilder (ReturnType.ToString ()); + sb.Append (" "); + sb.Append (base_method.Name); + sb.Append ("("); + sb.Append (")"); + return sb.ToString (); + } + // + // MethodBase members + // + + public override MethodImplAttributes GetMethodImplementationFlags () + { + return base_method.GetMethodImplementationFlags (); + } + + public override ParameterInfo [] GetParameters () + { + return GetParametersInternal (); + } + + internal override ParameterInfo [] GetParametersInternal () + { + throw new NotSupportedException (); + } + + public override int MetadataToken { + get { + return base.MetadataToken; + } + } + + internal override int GetParametersCount () + { + return base_method.GetParametersCount (); + } + + public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) + { + throw new NotSupportedException (); + } + + public override RuntimeMethodHandle MethodHandle { + get { + throw new NotSupportedException (); + } + } + + public override MethodAttributes Attributes { + get { + return base_method.Attributes; + } + } + + public override CallingConventions CallingConvention { + get { + return base_method.CallingConvention; + } + } + + public override MethodInfo MakeGenericMethod (params Type [] methodInstantiation) + { + if (!base_method.IsGenericMethodDefinition || (method_arguments != null)) + throw new InvalidOperationException ("Method is not a generic method definition"); + + if (methodInstantiation == null) + throw new ArgumentNullException ("methodInstantiation"); + + if (base_method.GetGenericArguments ().Length != methodInstantiation.Length) + throw new ArgumentException ("Incorrect length", "methodInstantiation"); + + foreach (Type type in methodInstantiation) { + if (type == null) + throw new ArgumentNullException ("methodInstantiation"); + } + + return new MethodOnTypeBuilderInst (this, methodInstantiation); + } + + public override Type [] GetGenericArguments () + { + if (!base_method.IsGenericMethodDefinition) + return null; + Type[] source = method_arguments ?? base_method.GetGenericArguments (); + Type[] result = new Type [source.Length]; + source.CopyTo (result, 0); + return result; + } + + public override MethodInfo GetGenericMethodDefinition () + { + return generic_method_definition ?? base_method; + } + + public override bool ContainsGenericParameters { + get { + if (base_method.ContainsGenericParameters) + return true; + if (!base_method.IsGenericMethodDefinition) + throw new NotSupportedException (); + if (method_arguments == null) + return true; + foreach (Type t in method_arguments) { + if (t.ContainsGenericParameters) + return true; + } + return false; + } + } + + public override bool IsGenericMethodDefinition { + get { + return base_method.IsGenericMethodDefinition && method_arguments == null; + } + } + + public override bool IsGenericMethod { + get { + return base_method.IsGenericMethodDefinition; + } + } + + // + // MethodInfo members + // + + public override MethodInfo GetBaseDefinition () + { + throw new NotSupportedException (); + } + + public override ParameterInfo ReturnParameter { + get { + throw new NotSupportedException(); + } + } + + public override ICustomAttributeProvider ReturnTypeCustomAttributes { + get { + throw new NotSupportedException (); + } + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ModuleBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ModuleBuilder.cs new file mode 100644 index 0000000000..2c60ac34c8 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ModuleBuilder.cs @@ -0,0 +1,938 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/ModuleBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Diagnostics.SymbolStore; +using System.IO; +using System.Globalization; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public partial class ModuleBuilder : Module { + +#pragma warning disable 169, 414 + #region Sync with object-internals.h + // This class inherits from Module, but the runtime expects it to have the same layout as MonoModule + #region Sync with MonoModule + internal IntPtr _impl; /* a pointer to a MonoImage */ + internal Assembly assembly; + internal string fqname; + internal string name; + internal string scopename; + internal bool is_resource; + internal int token; + #endregion + private UIntPtr dynamic_image; /* GC-tracked */ + private int num_types; + private TypeBuilder[] types; + private CustomAttributeBuilder[] cattrs; + private byte[] guid; + private int table_idx; + internal AssemblyBuilder assemblyb; + private MethodBuilder[] global_methods; + private FieldBuilder[] global_fields; + bool is_main; + private object resources; + private IntPtr unparented_classes; + private int[] table_indexes; + #endregion +#pragma warning restore 169, 414 + + private TypeBuilder global_type; + private Type global_type_created; + // name_cache keys are display names + Dictionary name_cache; + Dictionary us_string_cache; + ModuleBuilderTokenGenerator token_gen; + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern void basic_init (ModuleBuilder ab); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern void set_wrappers_type (ModuleBuilder mb, Type ab); + + internal ModuleBuilder (AssemblyBuilder assb, string name, bool emitSymbolInfo) { + this.name = this.scopename = name; + this.fqname = name; + this.assembly = this.assemblyb = assb; + guid = Guid.NewGuid ().ToByteArray (); + table_idx = get_next_table_index (this, 0x00, 1); + name_cache = new Dictionary (); + us_string_cache = new Dictionary (512); + + basic_init (this); + + CreateGlobalType (); + + TypeBuilder tb = new TypeBuilder (this, TypeAttributes.Abstract, 0xFFFFFF); /*last valid token*/ + Type type = tb.CreateType (); + set_wrappers_type (this, type); + } + + public override string FullyQualifiedName { + get { + string fullyQualifiedName = fqname; + if (fullyQualifiedName == null) + return null; + if (assemblyb.AssemblyDir != null) { + fullyQualifiedName = Path.Combine (assemblyb.AssemblyDir, fullyQualifiedName); + fullyQualifiedName = Path.GetFullPath (fullyQualifiedName); + } + + return fullyQualifiedName; + } + } + + public bool IsTransient () { + return true; + } + + public void CreateGlobalFunctions () + { + if (global_type_created != null) + throw new InvalidOperationException ("global methods already created"); + if (global_type != null) + global_type_created = global_type.CreateType (); + } + + public FieldBuilder DefineInitializedData( string name, byte[] data, FieldAttributes attributes) { + if (data == null) + throw new ArgumentNullException ("data"); + + var maskedAttributes = attributes & ~FieldAttributes.ReservedMask; + FieldBuilder fb = DefineDataImpl (name, data.Length, maskedAttributes | FieldAttributes.HasFieldRVA); + fb.SetRVAData (data); + + return fb; + } + + public FieldBuilder DefineUninitializedData (string name, int size, FieldAttributes attributes) + { + return DefineDataImpl (name, size, attributes & ~FieldAttributes.ReservedMask); + } + + private FieldBuilder DefineDataImpl (string name, int size, FieldAttributes attributes) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name == String.Empty) + throw new ArgumentException ("name cannot be empty", "name"); + if (global_type_created != null) + throw new InvalidOperationException ("global fields already created"); + if ((size <= 0) || (size >= 0x3f0000)) + throw new ArgumentException ("Data size must be > 0 and < 0x3f0000", null as string); + + CreateGlobalType (); + + string typeName = "$ArrayType$" + size; + Type datablobtype = GetType (typeName, false, false); + if (datablobtype == null) { + TypeBuilder tb = DefineType (typeName, + TypeAttributes.Public|TypeAttributes.ExplicitLayout|TypeAttributes.Sealed, + typeof (ValueType), null, PackingSize.Size1, size); + tb.CreateType (); + datablobtype = tb; + } + FieldBuilder fb = global_type.DefineField (name, datablobtype, attributes|FieldAttributes.Static); + + if (global_fields != null) { + FieldBuilder[] new_fields = new FieldBuilder [global_fields.Length+1]; + System.Array.Copy (global_fields, new_fields, global_fields.Length); + new_fields [global_fields.Length] = fb; + global_fields = new_fields; + } else { + global_fields = new FieldBuilder [1]; + global_fields [0] = fb; + } + return fb; + } + + private void addGlobalMethod (MethodBuilder mb) { + if (global_methods != null) { + MethodBuilder[] new_methods = new MethodBuilder [global_methods.Length+1]; + System.Array.Copy (global_methods, new_methods, global_methods.Length); + new_methods [global_methods.Length] = mb; + global_methods = new_methods; + } else { + global_methods = new MethodBuilder [1]; + global_methods [0] = mb; + } + } + + public MethodBuilder DefineGlobalMethod (string name, MethodAttributes attributes, Type returnType, Type[] parameterTypes) + { + return DefineGlobalMethod (name, attributes, CallingConventions.Standard, returnType, parameterTypes); + } + + public MethodBuilder DefineGlobalMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) { + return DefineGlobalMethod (name, attributes, callingConvention, returnType, null, null, parameterTypes, null, null); + } + + public MethodBuilder DefineGlobalMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] requiredReturnTypeCustomModifiers, Type[] optionalReturnTypeCustomModifiers, Type[] parameterTypes, Type[][] requiredParameterTypeCustomModifiers, Type[][] optionalParameterTypeCustomModifiers) + { + if (name == null) + throw new ArgumentNullException ("name"); + if ((attributes & MethodAttributes.Static) == 0) + throw new ArgumentException ("global methods must be static"); + if (global_type_created != null) + throw new InvalidOperationException ("global methods already created"); + CreateGlobalType (); + MethodBuilder mb = global_type.DefineMethod (name, attributes, callingConvention, returnType, requiredReturnTypeCustomModifiers, optionalReturnTypeCustomModifiers, parameterTypes, requiredParameterTypeCustomModifiers, optionalParameterTypeCustomModifiers); + + addGlobalMethod (mb); + return mb; + } + + public MethodBuilder DefinePInvokeMethod (string name, string dllName, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet) { + return DefinePInvokeMethod (name, dllName, name, attributes, callingConvention, returnType, parameterTypes, nativeCallConv, nativeCharSet); + } + + public MethodBuilder DefinePInvokeMethod (string name, string dllName, string entryName, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet) { + if (name == null) + throw new ArgumentNullException ("name"); + if ((attributes & MethodAttributes.Static) == 0) + throw new ArgumentException ("global methods must be static"); + if (global_type_created != null) + throw new InvalidOperationException ("global methods already created"); + CreateGlobalType (); + MethodBuilder mb = global_type.DefinePInvokeMethod (name, dllName, entryName, attributes, callingConvention, returnType, parameterTypes, nativeCallConv, nativeCharSet); + + addGlobalMethod (mb); + return mb; + } + + public TypeBuilder DefineType (string name) { + return DefineType (name, 0); + } + + public TypeBuilder DefineType (string name, TypeAttributes attr) { + if ((attr & TypeAttributes.Interface) != 0) + return DefineType (name, attr, null, null); + return DefineType (name, attr, typeof(object), null); + } + + public TypeBuilder DefineType (string name, TypeAttributes attr, Type parent) { + return DefineType (name, attr, parent, null); + } + + private void AddType (TypeBuilder tb) + { + if (types != null) { + if (types.Length == num_types) { + TypeBuilder[] new_types = new TypeBuilder [types.Length * 2]; + System.Array.Copy (types, new_types, num_types); + types = new_types; + } + } else { + types = new TypeBuilder [1]; + } + types [num_types] = tb; + num_types ++; + } + + private TypeBuilder DefineType (string name, TypeAttributes attr, Type parent, Type[] interfaces, PackingSize packingSize, int typesize) { + if (name == null) + throw new ArgumentNullException ("fullname"); + TypeIdentifier ident = TypeIdentifiers.FromInternal (name); + if (name_cache.ContainsKey (ident)) + throw new ArgumentException ("Duplicate type name within an assembly."); + TypeBuilder res = new TypeBuilder (this, name, attr, parent, interfaces, packingSize, typesize, null); + AddType (res); + + name_cache.Add (ident, res); + + return res; + } + + internal void RegisterTypeName (TypeBuilder tb, TypeName name) + { + name_cache.Add (name, tb); + } + + internal TypeBuilder GetRegisteredType (TypeName name) + { + TypeBuilder result = null; + name_cache.TryGetValue (name, out result); + return result; + } + + [ComVisible (true)] + public TypeBuilder DefineType (string name, TypeAttributes attr, Type parent, Type[] interfaces) { + return DefineType (name, attr, parent, interfaces, PackingSize.Unspecified, TypeBuilder.UnspecifiedTypeSize); + } + + public TypeBuilder DefineType (string name, TypeAttributes attr, Type parent, int typesize) { + return DefineType (name, attr, parent, null, PackingSize.Unspecified, typesize); + } + + public TypeBuilder DefineType (string name, TypeAttributes attr, Type parent, PackingSize packsize) { + return DefineType (name, attr, parent, null, packsize, TypeBuilder.UnspecifiedTypeSize); + } + + public TypeBuilder DefineType (string name, TypeAttributes attr, Type parent, PackingSize packingSize, int typesize) { + return DefineType (name, attr, parent, null, packingSize, typesize); + } + + public MethodInfo GetArrayMethod( Type arrayClass, string methodName, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) { + return new MonoArrayMethod (arrayClass, methodName, callingConvention, returnType, parameterTypes); + } + + public EnumBuilder DefineEnum( string name, TypeAttributes visibility, Type underlyingType) { + TypeIdentifier ident = TypeIdentifiers.FromInternal (name); + if (name_cache.ContainsKey (ident)) + throw new ArgumentException ("Duplicate type name within an assembly."); + + EnumBuilder eb = new EnumBuilder (this, name, visibility, underlyingType); + TypeBuilder res = eb.GetTypeBuilder (); + AddType (res); + name_cache.Add (ident, res); + return eb; + } + + [ComVisible (true)] + public override Type GetType( string className) { + return GetType (className, false, false); + } + + [ComVisible (true)] + public override Type GetType( string className, bool ignoreCase) { + return GetType (className, false, ignoreCase); + } + + private TypeBuilder search_in_array (TypeBuilder[] arr, int validElementsInArray, TypeName className) { + int i; + for (i = 0; i < validElementsInArray; ++i) { + if (String.Compare (className.DisplayName, arr [i].FullName, true, CultureInfo.InvariantCulture) == 0) { + return arr [i]; + } + } + return null; + } + + private TypeBuilder search_nested_in_array (TypeBuilder[] arr, int validElementsInArray, TypeName className) { + int i; + for (i = 0; i < validElementsInArray; ++i) { + if (String.Compare (className.DisplayName, arr [i].Name, true, CultureInfo.InvariantCulture) == 0) + return arr [i]; + } + return null; + } + + private TypeBuilder GetMaybeNested (TypeBuilder t, IEnumerable nested) { + TypeBuilder result = t; + + foreach (TypeName pname in nested) { + if (result.subtypes == null) + return null; + result = search_nested_in_array(result.subtypes, result.subtypes.Length, pname); + if (result == null) + return null; + } + return result; + } + + [ComVisible (true)] + public override Type GetType (string className, bool throwOnError, bool ignoreCase) + { + if (className == null) + throw new ArgumentNullException ("className"); + if (className.Length == 0) + throw new ArgumentException ("className"); + + TypeBuilder result = null; + + if (types == null && throwOnError) + throw new TypeLoadException (className); + + TypeSpec ts = TypeSpec.Parse (className); + + if (!ignoreCase) { + var displayNestedName = ts.TypeNameWithoutModifiers(); + name_cache.TryGetValue (displayNestedName, out result); + } else { + if (types != null) + result = search_in_array (types, num_types, ts.Name); + if (!ts.IsNested && result != null) { + result = GetMaybeNested (result, ts.Nested); + } + } + if ((result == null) && throwOnError) + throw new TypeLoadException (className); + if (result != null && (ts.HasModifiers || ts.IsByRef)) { + Type mt = result; + if (result is TypeBuilder) { + var tb = result as TypeBuilder; + if (tb.is_created) + mt = tb.CreateType (); + } + foreach (var mod in ts.Modifiers) { + if (mod is PointerSpec) + mt = mt.MakePointerType (); + else if (mod is ArraySpec) { + var spec = mod as ArraySpec; + if (spec.IsBound) + return null; + if (spec.Rank == 1) + mt = mt.MakeArrayType (); + else + mt = mt.MakeArrayType (spec.Rank); + } + } + if (ts.IsByRef) + mt = mt.MakeByRefType (); + result = mt as TypeBuilder; + if (result == null) + return mt; + } + if (result != null && result.is_created) + return result.CreateType (); + else + return result; + } + + internal int get_next_table_index (object obj, int table, int count) { + if (table_indexes == null) { + table_indexes = new int [64]; + for (int i=0; i < 64; ++i) + table_indexes [i] = 1; + /* allow room for . in TypeDef table */ + table_indexes [0x02] = 2; + } + // Console.WriteLine ("getindex for table "+table.ToString()+" got "+table_indexes [table].ToString()); + var index = table_indexes [table]; + table_indexes [table] += count; + return index; + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException (nameof (customBuilder)); + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) { + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } +/* + internal ISymbolDocumentWriter DefineDocument (string url, Guid language, Guid languageVendor, Guid documentType) + { + if (symbolWriter != null) + return symbolWriter.DefineDocument (url, language, languageVendor, documentType); + else + return null; + } +*/ + public override Type [] GetTypes () + { + if (types == null) + return Type.EmptyTypes; + + int n = num_types; + Type [] copy = new Type [n]; + Array.Copy (types, copy, n); + + // MS replaces the typebuilders with their created types + for (int i = 0; i < copy.Length; ++i) + if (types [i].is_created) + copy [i] = types [i].CreateType (); + + return copy; + } + + public MethodToken GetMethodToken (MethodInfo method) + { + if (method == null) + throw new ArgumentNullException ("method"); + + return new MethodToken (GetToken (method)); + } + + public MethodToken GetArrayMethodToken (Type arrayClass, string methodName, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) + { + return GetMethodToken (GetArrayMethod (arrayClass, methodName, callingConvention, returnType, parameterTypes)); + } + + [ComVisible (true)] + public MethodToken GetConstructorToken (ConstructorInfo con) + { + if (con == null) + throw new ArgumentNullException ("con"); + + return new MethodToken (GetToken (con)); + } + + public FieldToken GetFieldToken (FieldInfo field) + { + if (field == null) + throw new ArgumentNullException ("field"); + + throw new NotImplementedException (); + //return new FieldToken (GetToken (field)); + } + + // FIXME: + public SignatureToken GetSignatureToken (byte[] sigBytes, int sigLength) + { + throw new NotImplementedException (); + } + + public SignatureToken GetSignatureToken (SignatureHelper sigHelper) + { + if (sigHelper == null) + throw new ArgumentNullException ("sigHelper"); + return new SignatureToken (GetToken (sigHelper)); + } + + public StringToken GetStringConstant (string str) + { + if (str == null) + throw new ArgumentNullException ("str"); + return new StringToken (GetToken (str)); + } + + public TypeToken GetTypeToken (Type type) + { + if (type == null) + throw new ArgumentNullException ("type"); + if (type.IsByRef) + throw new ArgumentException ("type can't be a byref type", "type"); + if (!IsTransient () && (type.Module is ModuleBuilder) && ((ModuleBuilder)type.Module).IsTransient ()) + throw new InvalidOperationException ("a non-transient module can't reference a transient module"); + return new TypeToken (GetToken (type)); + } + + public TypeToken GetTypeToken (string name) + { + return GetTypeToken (GetType (name)); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern int getUSIndex (ModuleBuilder mb, string str); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern int getToken (ModuleBuilder mb, object obj, bool create_open_instance); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern int getMethodToken (ModuleBuilder mb, MethodBase method, + Type[] opt_param_types); + + internal int GetToken (string str) + { + int result; + if (!us_string_cache.TryGetValue (str, out result)) { + result = getUSIndex (this, str); + us_string_cache [str] = result; + } + + return result; + } + + static int typeref_tokengen = 0x01ffffff; + static int typedef_tokengen = 0x02ffffff; + static int typespec_tokengen = 0x1bffffff; + static int memberref_tokengen = 0x0affffff; + static int methoddef_tokengen = 0x06ffffff; + Dictionary inst_tokens, inst_tokens_open; + + // + // Assign a pseudo token to the various TypeBuilderInst objects, so the runtime + // doesn't have to deal with them. + // For Run assemblies, the tokens will not be fixed up, so the runtime will + // still encounter these objects, it will resolve them by calling their + // RuntimeResolve () methods. + // + int GetPseudoToken (MemberInfo member, bool create_open_instance) + { + int token; + var dict = create_open_instance ? inst_tokens_open : inst_tokens; + if (dict == null) { + dict = new Dictionary (ReferenceEqualityComparer.Instance); + if (create_open_instance) + inst_tokens_open = dict; + else + inst_tokens = dict; + } else if (dict.TryGetValue (member, out token)) { + return token; + } + + // Count backwards to avoid collisions with the tokens + // allocated by the runtime + if (member is TypeBuilderInstantiation || member is SymbolType) + token = typespec_tokengen --; + else if (member is FieldOnTypeBuilderInst) + token = memberref_tokengen --; + else if (member is ConstructorOnTypeBuilderInst) + token = memberref_tokengen --; + else if (member is MethodOnTypeBuilderInst) + token = memberref_tokengen --; + else if (member is FieldBuilder) + token = memberref_tokengen --; + else if (member is TypeBuilder) { + if (create_open_instance && (member as TypeBuilder).ContainsGenericParameters) + token = typespec_tokengen --; + else if (member.Module == this) + token = typedef_tokengen --; + else + token = typeref_tokengen --; + } else if (member is EnumBuilder) { + token = GetPseudoToken ((member as EnumBuilder).GetTypeBuilder(), create_open_instance); + dict[member] = token; + // n.b. don't register with the runtime, the TypeBuilder already did it. + return token; + } else if (member is ConstructorBuilder) { + if (member.Module == this && !(member as ConstructorBuilder).TypeBuilder.ContainsGenericParameters) + token = methoddef_tokengen --; + else + token = memberref_tokengen --; + } else if (member is MethodBuilder) { + var mb = member as MethodBuilder; + if (member.Module == this && !mb.TypeBuilder.ContainsGenericParameters && !mb.IsGenericMethodDefinition) + token = methoddef_tokengen --; + else + token = memberref_tokengen --; + } else if (member is GenericTypeParameterBuilder) { + token = typespec_tokengen --; + } else + throw new NotImplementedException (); + + dict [member] = token; + RegisterToken (member, token); + return token; + } + + internal int GetToken (MemberInfo member) { + if (member is ConstructorBuilder || member is MethodBuilder || member is FieldBuilder) + return GetPseudoToken (member, false); + return getToken (this, member, true); + } + + internal int GetToken (MemberInfo member, bool create_open_instance) { + if (member is TypeBuilderInstantiation || member is FieldOnTypeBuilderInst || member is ConstructorOnTypeBuilderInst || member is MethodOnTypeBuilderInst || member is SymbolType || member is FieldBuilder || member is TypeBuilder || member is ConstructorBuilder || member is MethodBuilder || member is GenericTypeParameterBuilder || + member is EnumBuilder) + return GetPseudoToken (member, create_open_instance); + return getToken (this, member, create_open_instance); + } + + internal int GetToken (MethodBase method, IEnumerable opt_param_types) { + if (method is ConstructorBuilder || method is MethodBuilder) + return GetPseudoToken (method, false); + + if (opt_param_types == null) + return getToken (this, method, true); + + var optParamTypes = new List (opt_param_types); + return getMethodToken (this, method, optParamTypes.ToArray ()); + } + + internal int GetToken (MethodBase method, Type[] opt_param_types) { + if (method is ConstructorBuilder || method is MethodBuilder) + return GetPseudoToken (method, false); + return getMethodToken (this, method, opt_param_types); + } + + internal int GetToken (SignatureHelper helper) { + return getToken (this, helper, true); + } + + /* + * Register the token->obj mapping with the runtime so the Module.Resolve... + * methods will work for obj. + */ + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern void RegisterToken (object obj, int token); + + /* + * Returns MemberInfo registered with the given token. + */ + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern object GetRegisteredToken (int token); + + internal TokenGenerator GetTokenGenerator () { + if (token_gen == null) + token_gen = new ModuleBuilderTokenGenerator (this); + return token_gen; + } + + // Called from the runtime to return the corresponding finished reflection object + internal static object RuntimeResolve (object obj) { + if (obj is MethodBuilder) + return (obj as MethodBuilder).RuntimeResolve (); + if (obj is ConstructorBuilder) + return (obj as ConstructorBuilder).RuntimeResolve (); + if (obj is FieldBuilder) + return (obj as FieldBuilder).RuntimeResolve (); + if (obj is GenericTypeParameterBuilder) + return (obj as GenericTypeParameterBuilder).RuntimeResolve (); + if (obj is FieldOnTypeBuilderInst) + return (obj as FieldOnTypeBuilderInst).RuntimeResolve (); + if (obj is MethodOnTypeBuilderInst) + return (obj as MethodOnTypeBuilderInst).RuntimeResolve (); + if (obj is ConstructorOnTypeBuilderInst) + return (obj as ConstructorOnTypeBuilderInst).RuntimeResolve (); + if (obj is Type) + return (obj as Type).RuntimeResolve (); + throw new NotImplementedException (obj.GetType ().FullName); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern void build_metadata (ModuleBuilder mb); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private extern void WriteToFile (IntPtr handle); + + internal string FileName { + get { + return fqname; + } + } + + internal bool IsMain { + set { + is_main = value; + } + } + + internal void CreateGlobalType () { + if (global_type == null) + global_type = new TypeBuilder (this, 0, 1); + } + + public override Assembly Assembly { + get { return assemblyb; } + } + + public override string Name { + get { return name; } + } + + public override string ScopeName { + get { return name; } + } + + public override Guid ModuleVersionId { + get { + return new Guid (guid); + } + } + + public override bool IsResource () + { + return false; + } + + protected override MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) + { + if (global_type_created == null) + return null; + if (types == null) + return global_type_created.GetMethod (name); + return global_type_created.GetMethod (name, bindingAttr, binder, callConvention, types, modifiers); + } + + public override FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return RuntimeModule.ResolveField (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + public override MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return RuntimeModule.ResolveMember (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal MemberInfo ResolveOrGetRegisteredToken (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) + { + ResolveTokenError error; + MemberInfo m = RuntimeModule.ResolveMemberToken (_impl, metadataToken, RuntimeModule.ptrs_from_types (genericTypeArguments), RuntimeModule.ptrs_from_types (genericMethodArguments), out error); + if (m != null) + return m; + + m = GetRegisteredToken (metadataToken) as MemberInfo; + if (m == null) + throw RuntimeModule.resolve_token_exception (Name, metadataToken, error, "MemberInfo"); + else + return m; + } + + public override MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return RuntimeModule.ResolveMethod (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + public override string ResolveString (int metadataToken) { + return RuntimeModule.ResolveString (this, _impl, metadataToken); + } + + public override byte[] ResolveSignature (int metadataToken) { + return RuntimeModule.ResolveSignature (this, _impl, metadataToken); + } + + public override Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return RuntimeModule.ResolveType (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + public override bool Equals (object obj) + { + return base.Equals (obj); + } + + public override int GetHashCode () + { + return base.GetHashCode (); + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return base.IsDefined (attributeType, inherit); + } + + public override object[] GetCustomAttributes (bool inherit) + { + return GetCustomAttributes (null, inherit); + } + + public override object[] GetCustomAttributes (Type attributeType, bool inherit) + { + if (cattrs == null || cattrs.Length == 0) + return Array.Empty (); + + if (attributeType is TypeBuilder) + throw new InvalidOperationException ("First argument to GetCustomAttributes can't be a TypeBuilder"); + + List results = new List (); + for (int i=0; i < cattrs.Length; i++) { + Type t = cattrs [i].Ctor.GetType (); + + if (t is TypeBuilder) + throw new InvalidOperationException ("Can't construct custom attribute for TypeBuilder type"); + + if (attributeType == null || attributeType.IsAssignableFrom (t)) + results.Add (cattrs [i].Invoke ()); + } + + return results.ToArray (); + } + + public override IList GetCustomAttributesData () + { + return CustomAttributeData.GetCustomAttributes (this); + } + + public override FieldInfo GetField (string name, BindingFlags bindingAttr) + { + if (global_type_created == null) + throw new InvalidOperationException ("Module-level fields cannot be retrieved until after the CreateGlobalFunctions method has been called for the module."); + return global_type_created.GetField (name, bindingAttr); + } + + public override FieldInfo[] GetFields (BindingFlags bindingFlags) + { + if (global_type_created == null) + throw new InvalidOperationException ("Module-level fields cannot be retrieved until after the CreateGlobalFunctions method has been called for the module."); + return global_type_created.GetFields (bindingFlags); + } + + public override MethodInfo[] GetMethods (BindingFlags bindingFlags) + { + if (global_type_created == null) + throw new InvalidOperationException ("Module-level methods cannot be retrieved until after the CreateGlobalFunctions method has been called for the module."); + return global_type_created.GetMethods (bindingFlags); + } + + public override int MetadataToken { + get { + return RuntimeModule.get_MetadataToken (this); + } + } + } + + internal class ModuleBuilderTokenGenerator : TokenGenerator { + + private ModuleBuilder mb; + + public ModuleBuilderTokenGenerator (ModuleBuilder mb) { + this.mb = mb; + } + + public int GetToken (string str) { + return mb.GetToken (str); + } + + public int GetToken (MemberInfo member, bool create_open_instance) { + return mb.GetToken (member, create_open_instance); + } + + public int GetToken (MethodBase method, Type[] opt_param_types) { + return mb.GetToken (method, opt_param_types); + } + + public int GetToken (SignatureHelper helper) { + return mb.GetToken (helper); + } + } + + internal sealed class ReferenceEqualityComparer : IEqualityComparer where T : class + { + internal static readonly ReferenceEqualityComparer Instance = new ReferenceEqualityComparer(); + + private ReferenceEqualityComparer() + { + } + + public bool Equals(T x, T y) + { + return ReferenceEquals (x, y); + } + + public int GetHashCode(T obj) + { + return RuntimeHelpers.GetHashCode (obj); + } + } + +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MonoArrayMethod.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MonoArrayMethod.cs new file mode 100644 index 0000000000..d9a1657237 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/MonoArrayMethod.cs @@ -0,0 +1,158 @@ +#nullable disable + +// +// System.Reflection/MonoMethod.cs +// The class used to represent methods from the mono runtime. +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection { + [StructLayout (LayoutKind.Sequential)] + internal class MonoArrayMethod: MethodInfo { +#pragma warning disable 649 + internal RuntimeMethodHandle mhandle; + internal Type parent; + internal Type ret; + internal Type[] parameters; + internal string name; + internal int table_idx; + internal CallingConventions call_conv; +#pragma warning restore 649 + + internal MonoArrayMethod (Type arrayClass, string methodName, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) { + name = methodName; + parent = arrayClass; + ret = returnType; + parameters = (Type[])parameterTypes.Clone(); + call_conv = callingConvention; + } + + // FIXME: "Always returns this" + public override MethodInfo GetBaseDefinition() { + return this; /* FIXME */ + } + public override Type ReturnType { + get { + return ret; + } + } + + // FIXME: "Not implemented. Always returns null" + public override ICustomAttributeProvider ReturnTypeCustomAttributes { + get {return null;} + } + + // FIXME: "Not implemented. Always returns zero" + public override MethodImplAttributes GetMethodImplementationFlags() { + return (MethodImplAttributes)0; + } + + // FIXME: "Not implemented. Always returns an empty array" + public override ParameterInfo[] GetParameters() + { + return GetParametersInternal (); + } + + internal override ParameterInfo[] GetParametersInternal () + { + return Array.Empty (); + } + + // FIXME: "Not implemented. Always returns 0" + internal override int GetParametersCount () + { + return 0; + } + + // FIXME: "Not implemented" + public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) { + throw new NotImplementedException (); + } + + public override RuntimeMethodHandle MethodHandle { + get {return mhandle;} + } + + // FIXME: "Not implemented. Always returns zero" + public override MethodAttributes Attributes { + get { + return (MethodAttributes)0; + } + } + + public override Type ReflectedType { + get { + return parent; + } + } + public override Type DeclaringType { + get { + return parent; + } + } + public override string Name { + get { + return name; + } + } + + public override bool IsDefined (Type attributeType, bool inherit) { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes( bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + public override object[] GetCustomAttributes( Type attributeType, bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override string ToString () { + string parms = String.Empty; + ParameterInfo[] p = GetParameters (); + for (int i = 0; i < p.Length; ++i) { + if (i > 0) + parms = parms + ", "; + parms = parms + p [i].ParameterType.Name; + } + if (ReturnType != null) + return ReturnType.Name+" "+Name+"("+parms+")"; + else + return "void "+Name+"("+parms+")"; + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ParameterBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ParameterBuilder.cs new file mode 100644 index 0000000000..70a8fad045 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/ParameterBuilder.cs @@ -0,0 +1,146 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +// +// System.Reflection.Emit/ParameterBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public partial class ParameterBuilder + { +#pragma warning disable 169, 414 + private MethodBase methodb; /* MethodBuilder, ConstructorBuilder or DynamicMethod */ + private string name; + private CustomAttributeBuilder[] cattrs; + private UnmanagedMarshal marshal_info; + private ParameterAttributes attrs; + private int position; + private int table_idx; + object def_value; +#pragma warning restore 169, 414 + + internal ParameterBuilder (MethodBase mb, int pos, ParameterAttributes attributes, string strParamName) { + name = strParamName; + position = pos; + attrs = attributes; + methodb = mb; + if (mb is DynamicMethod) + table_idx = 0; + else + table_idx = mb.get_next_table_index (this, 0x08, 1); + } + + public virtual int Attributes { + get {return (int)attrs;} + } + public bool IsIn { + get {return ((int)attrs & (int)ParameterAttributes.In) != 0;} + } + public bool IsOut { + get {return ((int)attrs & (int)ParameterAttributes.Out) != 0;} + } + public bool IsOptional { + get {return ((int)attrs & (int)ParameterAttributes.Optional) != 0;} + } + public virtual string Name { + get {return name;} + } + public virtual int Position { + get {return position;} + } + + public virtual ParameterToken GetToken() { + return new ParameterToken (0x08 | table_idx); + } + + public virtual void SetConstant (object defaultValue) + { + if (position > 0) { + TypeBuilder.SetConstantValue (methodb.GetParameterType (position - 1), + defaultValue, ref defaultValue); + } + + def_value = defaultValue; + attrs |= ParameterAttributes.HasDefault; + } + + public void SetCustomAttribute( CustomAttributeBuilder customBuilder) { + string attrname = customBuilder.Ctor.ReflectedType.FullName; + if (attrname == "System.Runtime.InteropServices.InAttribute") { + attrs |= ParameterAttributes.In; + return; + } else if (attrname == "System.Runtime.InteropServices.OutAttribute") { + attrs |= ParameterAttributes.Out; + return; + } else if (attrname == "System.Runtime.InteropServices.OptionalAttribute") { + attrs |= ParameterAttributes.Optional; + return; + } else if (attrname == "System.Runtime.InteropServices.MarshalAsAttribute") { + attrs |= ParameterAttributes.HasFieldMarshal; + marshal_info = CustomAttributeBuilder.get_umarshal (customBuilder, false); + /* FIXME: check for errors */ + return; + } else if (attrname == "System.Runtime.InteropServices.DefaultParameterValueAttribute") { + /* MS.NET doesn't handle this attribute but we handle it for consistency */ + CustomAttributeBuilder.CustomAttributeInfo cinfo = CustomAttributeBuilder.decode_cattr (customBuilder); + /* FIXME: check for type compatibility */ + SetConstant (cinfo.ctorArgs [0]); + return; + } + + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) { + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyBuilder.cs new file mode 100644 index 0000000000..5cd1b5b160 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyBuilder.cs @@ -0,0 +1,218 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/PropertyBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public sealed partial class PropertyBuilder : PropertyInfo { + +// Managed version of MonoReflectionPropertyBuilder +#pragma warning disable 169, 414 + private PropertyAttributes attrs; + private string name; + private Type type; + private Type[] parameters; + private CustomAttributeBuilder[] cattrs; + private object def_value; + private MethodBuilder set_method; + private MethodBuilder get_method; + private int table_idx = 0; + internal TypeBuilder typeb; + private Type[] returnModReq; + private Type[] returnModOpt; + private Type[][] paramModReq; + private Type[][] paramModOpt; + CallingConventions callingConvention; +#pragma warning restore 169, 414 + + internal PropertyBuilder (TypeBuilder tb, string name, PropertyAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] returnModReq, Type[] returnModOpt, Type[] parameterTypes, Type[][] paramModReq, Type[][] paramModOpt) + { + this.name = name; + this.attrs = attributes; + this.callingConvention = callingConvention; + this.type = returnType; + this.returnModReq = returnModReq; + this.returnModOpt = returnModOpt; + this.paramModReq = paramModReq; + this.paramModOpt = paramModOpt; + if (parameterTypes != null) { + this.parameters = new Type [parameterTypes.Length]; + System.Array.Copy (parameterTypes, this.parameters, this.parameters.Length); + } + typeb = tb; + table_idx = tb.get_next_table_index (this, 0x17, 1); + } + + public override PropertyAttributes Attributes { + get {return attrs;} + } + public override bool CanRead { + get {return get_method != null;} + } + public override bool CanWrite { + get {return set_method != null;} + } + public override Type DeclaringType { + get {return typeb;} + } + public override string Name { + get {return name;} + } + public PropertyToken PropertyToken { + get {return new PropertyToken ();} + } + public override Type PropertyType { + get {return type;} + } + public override Type ReflectedType { + get {return typeb;} + } + + public void AddOtherMethod (MethodBuilder mdBuilder) + { + if (mdBuilder == null) + throw new ArgumentNullException (nameof (mdBuilder)); + typeb.check_not_created (); + } + + public override MethodInfo[] GetAccessors( bool nonPublic) { + return null; + } + public override object[] GetCustomAttributes(bool inherit) { + throw not_supported (); + } + public override object[] GetCustomAttributes(Type attributeType, bool inherit) { + throw not_supported (); + } + public override MethodInfo GetGetMethod( bool nonPublic) { + return get_method; + } + public override ParameterInfo[] GetIndexParameters() { + throw not_supported (); + } + public override MethodInfo GetSetMethod( bool nonPublic) { + return set_method; + } + + public override object GetValue (object obj, object[] index) + { + throw not_supported (); + } + + public override object GetValue (object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) + { + throw not_supported (); + } + public override bool IsDefined( Type attributeType, bool inherit) { + throw not_supported (); + } + public void SetConstant (object defaultValue) + { + typeb.check_not_created (); + def_value = defaultValue; + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException (nameof (customBuilder)); + typeb.check_not_created (); + string attrname = customBuilder.Ctor.ReflectedType.FullName; + if (attrname == "System.Runtime.CompilerServices.SpecialNameAttribute") { + attrs |= PropertyAttributes.SpecialName; + return; + } + + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute) { + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + public void SetGetMethod (MethodBuilder mdBuilder) + { + typeb.check_not_created (); + if (mdBuilder == null) + throw new ArgumentNullException (nameof (mdBuilder)); + get_method = mdBuilder; + } + + public void SetSetMethod (MethodBuilder mdBuilder) + { + if (mdBuilder == null) + throw new ArgumentNullException (nameof (mdBuilder)); + set_method = mdBuilder; + } + + public override void SetValue (object obj, object value, object[] index) + { + throw not_supported (); + } + + public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) + { + throw not_supported (); + } + + public override Module Module { + get { + return base.Module; + } + } + + private Exception not_supported () + { + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyOnTypeBuilderInst.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyOnTypeBuilderInst.cs new file mode 100644 index 0000000000..d705521b99 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/PropertyOnTypeBuilderInst.cs @@ -0,0 +1,165 @@ +#nullable disable + +// +// System.Reflection.Emit/PropertyOnTypeBuilderInst.cs +// +// Author: +// Rodrigo Kumpera (rkumpera@novell.com) +// +// +// Copyright (C) 2009 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Globalization; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit +{ + /* + * This class represents a property of an instantiation of a generic type builder. + */ + [StructLayout (LayoutKind.Sequential)] + internal class PropertyOnTypeBuilderInst : PropertyInfo + { + TypeBuilderInstantiation instantiation; + PropertyInfo prop; + + internal PropertyOnTypeBuilderInst (TypeBuilderInstantiation instantiation, PropertyInfo prop) + { + this.instantiation = instantiation; + this.prop = prop; + } + + public override PropertyAttributes Attributes { + get { throw new NotSupportedException (); } + } + + public override bool CanRead { + get { throw new NotSupportedException (); } + } + + public override bool CanWrite { + get { throw new NotSupportedException (); } + } + + public override Type PropertyType { + get { return instantiation.InflateType (prop.PropertyType); } + } + + public override Type DeclaringType { + get { return instantiation.InflateType (prop.DeclaringType); } + } + + public override Type ReflectedType { + get { return instantiation; } + } + + public override string Name { + get { return prop.Name; } + } + + public override MethodInfo[] GetAccessors (bool nonPublic) + { + MethodInfo getter = GetGetMethod (nonPublic); + MethodInfo setter = GetSetMethod (nonPublic); + + int methods = 0; + if (getter != null) + ++methods; + if (setter != null) + ++methods; + + MethodInfo[] res = new MethodInfo [methods]; + + methods = 0; + if (getter != null) + res [methods++] = getter; + if (setter != null) + res [methods] = setter; + + return res; + } + + + public override MethodInfo GetGetMethod (bool nonPublic) + { + MethodInfo mi = prop.GetGetMethod (nonPublic); + if (mi != null && prop.DeclaringType == instantiation.generic_type) { + mi = TypeBuilder.GetMethod (instantiation, mi); + } + return mi; + } + + public override ParameterInfo[] GetIndexParameters() + { + MethodInfo method = GetGetMethod (true); + if (method != null) + return method.GetParameters (); + + return Array.Empty (); + } + + public override MethodInfo GetSetMethod (bool nonPublic) + { + MethodInfo mi = prop.GetSetMethod (nonPublic); + if (mi != null && prop.DeclaringType == instantiation.generic_type) { + mi = TypeBuilder.GetMethod (instantiation, mi); + } + return mi; + } + + public override string ToString () + { + return String.Format("{0} {1}", PropertyType, Name); + } + + public override object GetValue (object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) + { + throw new NotSupportedException (); + } + + public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) + { + throw new NotSupportedException (); + } + + public override bool IsDefined( Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override object[] GetCustomAttributes(bool inherit) + { + throw new NotSupportedException (); + } + + public override object[] GetCustomAttributes(Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + } +} + +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/SignatureHelper.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/SignatureHelper.cs new file mode 100644 index 0000000000..078d9354d9 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/SignatureHelper.cs @@ -0,0 +1,410 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/SignatureHelper.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit { + [StructLayout (LayoutKind.Sequential)] + public sealed class SignatureHelper { + internal enum SignatureHelperType { + HELPER_FIELD, + HELPER_LOCAL, + HELPER_METHOD, + HELPER_PROPERTY + } + + private ModuleBuilder module; // can be null in 2.0 + private Type[] arguments; + private SignatureHelperType type; + private Type returnType; + private CallingConventions callConv; + private CallingConvention unmanagedCallConv; +#pragma warning disable 649 + private Type[][] modreqs; + private Type[][] modopts; +#pragma warning restore 649 + + internal SignatureHelper (ModuleBuilder module, SignatureHelperType type) + { + this.type = type; + this.module = module; + } + + public static SignatureHelper GetFieldSigHelper (Module mod) + { + if (mod != null && !(mod is ModuleBuilder)) + throw new ArgumentException ("ModuleBuilder is expected"); + + return new SignatureHelper ((ModuleBuilder) mod, SignatureHelperType.HELPER_FIELD); + } + + public static SignatureHelper GetLocalVarSigHelper (Module mod) + { + if (mod != null && !(mod is ModuleBuilder)) + throw new ArgumentException ("ModuleBuilder is expected"); + + return new SignatureHelper ((ModuleBuilder) mod, SignatureHelperType.HELPER_LOCAL); + } + + public static SignatureHelper GetLocalVarSigHelper () + { + return new SignatureHelper (null, SignatureHelperType.HELPER_LOCAL); + } + + public static SignatureHelper GetMethodSigHelper (CallingConventions callingConvention, Type returnType) + { + return GetMethodSigHelper (null, callingConvention, (CallingConvention)0, returnType, null); + } + + public static SignatureHelper GetMethodSigHelper (CallingConvention unmanagedCallingConvention, Type returnType) + { + return GetMethodSigHelper (null, CallingConventions.Standard, unmanagedCallingConvention, returnType, null); + } + + public static SignatureHelper GetMethodSigHelper (Module mod, CallingConventions callingConvention, Type returnType) + { + return GetMethodSigHelper (mod, callingConvention, (CallingConvention)0, returnType, null); + } + + public static SignatureHelper GetMethodSigHelper (Module mod, CallingConvention unmanagedCallConv, Type returnType) + { + return GetMethodSigHelper (mod, CallingConventions.Standard, unmanagedCallConv, returnType, null); + } + + public static SignatureHelper GetMethodSigHelper (Module mod, Type returnType, Type[] parameterTypes) + { + return GetMethodSigHelper (mod, CallingConventions.Standard, (CallingConvention)0, returnType, parameterTypes); + } + + // FIXME: "Not implemented" + public static SignatureHelper GetPropertySigHelper (Module mod, Type returnType, Type[] parameterTypes) + { + throw new NotImplementedException (); + } + + // FIXME: "Not implemented" + public static SignatureHelper GetPropertySigHelper (Module mod, Type returnType, + Type [] requiredReturnTypeCustomModifiers, + Type [] optionalReturnTypeCustomModifiers, + Type [] parameterTypes, + Type [] [] requiredParameterTypeCustomModifiers, + Type [] [] optionalParameterTypeCustomModifiers) + { + throw new NotImplementedException (); + } + + // FIXME: "Not implemented" + public static SignatureHelper GetPropertySigHelper (Module mod, + CallingConventions callingConvention, + Type returnType, + Type [] requiredReturnTypeCustomModifiers, + Type [] optionalReturnTypeCustomModifiers, + Type [] parameterTypes, + Type [] [] requiredParameterTypeCustomModifiers, + Type [] [] optionalParameterTypeCustomModifiers) + { + throw new NotImplementedException (); + } + + // + // Grows the given array, and returns the index where the element + // was added + // + static int AppendArray (ref Type [] array, Type t) + { + if (array != null) { + Type[] new_a = new Type [array.Length + 1]; + System.Array.Copy (array, new_a, array.Length); + new_a [array.Length] = t; + array = new_a; + return array.Length-1; + } else { + array = new Type [1]; + array [0] = t; + return 0; + } + } + + // + // Appends the given type array @t into the @array passed at + // position @pos. If there is no array, it gets created + // + // This allows adding data to a null array at position 5 for + // example, creating 4 empty slots before the slot where @t + // is stored. + // + // + static void AppendArrayAt (ref Type [][] array, Type [] t, int pos) + { + int top = Math.Max (pos, array == null ? 0 : array.Length); + Type[][] new_a = new Type [top+1][]; + if (array != null) + System.Array.Copy (array, new_a, top); + new_a [pos] = t; + array = new_a; + } + + static void ValidateParameterModifiers (string name, Type [] parameter_modifiers) + { + foreach (Type modifier in parameter_modifiers){ + if (modifier == null) + throw new ArgumentNullException (name); + if (modifier.IsArray) + throw new ArgumentException ("Array type not permitted", name); + if (modifier.ContainsGenericParameters) + throw new ArgumentException ("Open Generic Type not permitted", name); + } + } + + static void ValidateCustomModifier (int n, Type [][] custom_modifiers, string name) + { + if (custom_modifiers == null) + return; + + if (custom_modifiers.Length != n) + throw new ArgumentException (String.Format ("Custom modifiers length `{0}' does not match the size of the arguments")); + + foreach (Type [] parameter_modifiers in custom_modifiers){ + if (parameter_modifiers == null) + continue; + + ValidateParameterModifiers (name, parameter_modifiers); + } + } + + static Exception MissingFeature () + { + throw new NotImplementedException ("Mono does not currently support setting modOpt/modReq through SignatureHelper"); + } + + // FIXME: "Currently we ignore requiredCustomModifiers and optionalCustomModifiers" + public void AddArguments (Type[] arguments, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers) + { + if (arguments == null) + throw new ArgumentNullException ("arguments"); + + // For now + if (requiredCustomModifiers != null || optionalCustomModifiers != null){ + throw MissingFeature(); + } + + ValidateCustomModifier (arguments.Length, requiredCustomModifiers, "requiredCustomModifiers"); + ValidateCustomModifier (arguments.Length, optionalCustomModifiers, "optionalCustomModifiers"); + + for (int i = 0; i < arguments.Length; i++){ + AddArgument (arguments [i], + requiredCustomModifiers != null ? requiredCustomModifiers [i] : null, + optionalCustomModifiers != null ? optionalCustomModifiers [i] : null); + } + } + + // FIXME: "pinned is ignored" + public void AddArgument (Type argument, bool pinned) + { + AddArgument (argument); + } + + public void AddArgument (Type argument, Type [] requiredCustomModifiers, Type [] optionalCustomModifiers) + { + if (argument == null) + throw new ArgumentNullException ("argument"); + + if (requiredCustomModifiers != null) + ValidateParameterModifiers ("requiredCustomModifiers", requiredCustomModifiers); + if (optionalCustomModifiers != null) + ValidateParameterModifiers ("optionalCustomModifiers", optionalCustomModifiers); + + int p = AppendArray (ref arguments, argument); + if (requiredCustomModifiers != null) + AppendArrayAt (ref modreqs, requiredCustomModifiers, p); + if (optionalCustomModifiers != null) + AppendArrayAt (ref modopts, optionalCustomModifiers, p); + } + + public void AddArgument (Type clsArgument) + { + if (clsArgument == null) + throw new ArgumentNullException ("clsArgument"); + + AppendArray (ref arguments, clsArgument); + } + + // FIXME: "Not implemented" + public void AddSentinel () + { + throw new NotImplementedException (); + } + + static bool CompareOK (Type [][] one, Type [][] two) + { + if (one == null){ + if (two == null) + return true; + return false; + } else if (two == null) + return false; + + if (one.Length != two.Length) + return false; + + for (int i = 0; i < one.Length; i++){ + Type [] tone = one [i]; + Type [] ttwo = two [i]; + + if (tone == null){ + if (ttwo == null) + continue; + } else if (ttwo == null) + return false; + + if (tone.Length != ttwo.Length) + return false; + + for (int j = 0; j < tone.Length; j++){ + Type uone = tone [j]; + Type utwo = ttwo [j]; + + if (uone == null){ + if (utwo == null) + continue; + return false; + } else if (utwo == null) + return false; + + if (!uone.Equals (utwo)) + return false; + } + } + return true; + } + + public override bool Equals (object obj) + { + SignatureHelper other = obj as SignatureHelper; + if (other == null) + return false; + + if (other.module != module || + other.returnType != returnType || + other.callConv != callConv || + other.unmanagedCallConv != unmanagedCallConv) + return false; + + if (arguments != null){ + if (other.arguments == null) + return false; + if (arguments.Length != other.arguments.Length) + return false; + + for (int i = 0; i < arguments.Length; i++) + if (!other.arguments [i].Equals (arguments [i])) + return false; + } else if (other.arguments != null) + return false; + + return CompareOK (other.modreqs, modreqs) && CompareOK (other.modopts, modopts); + } + + public override int GetHashCode () + { + // Lame, but easy, and will work, and chances are + // you will only need a few of these. + return 0; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern byte[] get_signature_local (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern byte[] get_signature_field (); + + public byte[] GetSignature () + { + TypeBuilder.ResolveUserTypes (arguments); + + switch (type) { + case SignatureHelperType.HELPER_LOCAL: + return get_signature_local (); + case SignatureHelperType.HELPER_FIELD: + return get_signature_field (); + default: + throw new NotImplementedException (); + } + } + + public override string ToString() { + return "SignatureHelper"; + } + + internal static SignatureHelper GetMethodSigHelper (Module mod, CallingConventions callingConvention, CallingConvention unmanagedCallingConvention, Type returnType, + Type [] parameters) + { + if (mod != null && !(mod is ModuleBuilder)) + throw new ArgumentException ("ModuleBuilder is expected"); + + if (returnType == null) + returnType = typeof (void); + + if (returnType.IsUserType) + throw new NotSupportedException ("User defined subclasses of System.Type are not yet supported."); + if (parameters != null) { + for (int i = 0; i < parameters.Length; ++i) + if (parameters [i].IsUserType) + throw new NotSupportedException ("User defined subclasses of System.Type are not yet supported."); + + } + + SignatureHelper helper = + new SignatureHelper ((ModuleBuilder)mod, SignatureHelperType.HELPER_METHOD); + helper.returnType = returnType; + helper.callConv = callingConvention; + helper.unmanagedCallConv = unmanagedCallingConvention; + + if (parameters != null) { + helper.arguments = new Type [parameters.Length]; + for (int i = 0; i < parameters.Length; ++i) + helper.arguments [i] = parameters [i]; + } + + return helper; + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilder.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilder.cs new file mode 100644 index 0000000000..852af89694 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilder.cs @@ -0,0 +1,1890 @@ +#nullable disable + +// +// System.Reflection.Emit.TypeBuilder.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// Marek Safar (marek.safar@gmail.com) +// +// (C) 2001 Ximian, Inc. http://www.ximian.com +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System; +using System.Text; +using System.Reflection; +using System.Reflection.Emit; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; + +namespace System.Reflection.Emit +{ + [StructLayout (LayoutKind.Sequential)] + public sealed partial class TypeBuilder : TypeInfo + { +#pragma warning disable 169 + #region Sync with reflection.h + private string tname; // name in internal form + private string nspace; // namespace in internal form + private Type parent; + private Type nesting_type; + internal Type[] interfaces; + internal int num_methods; + internal MethodBuilder[] methods; + internal ConstructorBuilder[] ctors; + internal PropertyBuilder[] properties; + internal int num_fields; + internal FieldBuilder[] fields; + internal EventBuilder[] events; + private CustomAttributeBuilder[] cattrs; + internal TypeBuilder[] subtypes; + internal TypeAttributes attrs; + private int table_idx; + private ModuleBuilder pmodule; + private int class_size; + private PackingSize packing_size; + private IntPtr generic_container; + private GenericTypeParameterBuilder[] generic_params; + private object permissions; + private TypeInfo created; + private int state; + #endregion +#pragma warning restore 169 + + TypeName fullname; + bool createTypeCalled; + private Type underlying_type; + + public const int UnspecifiedTypeSize = 0; + + protected override TypeAttributes GetAttributeFlagsImpl () + { + return attrs; + } + + internal TypeBuilder (ModuleBuilder mb, TypeAttributes attr, int table_idx) + { + this.parent = null; + this.attrs = attr; + this.class_size = UnspecifiedTypeSize; + this.table_idx = table_idx; + this.tname = table_idx == 1 ? "" : "type_" + table_idx.ToString (); + this.nspace = String.Empty; + this.fullname = TypeIdentifiers.WithoutEscape(this.tname); + pmodule = mb; + } + + internal TypeBuilder (ModuleBuilder mb, string name, TypeAttributes attr, Type parent, Type[] interfaces, PackingSize packing_size, int type_size, Type nesting_type) + { + int sep_index; + this.parent = ResolveUserType (parent); + this.attrs = attr; + this.class_size = type_size; + this.packing_size = packing_size; + this.nesting_type = nesting_type; + + check_name ("fullname", name); + + if (parent == null && (attr & TypeAttributes.Interface) != 0 && (attr & TypeAttributes.Abstract) == 0) + throw new InvalidOperationException ("Interface must be declared abstract."); + + sep_index = name.LastIndexOf('.'); + if (sep_index != -1) { + this.tname = name.Substring (sep_index + 1); + this.nspace = name.Substring (0, sep_index); + } else { + this.tname = name; + this.nspace = String.Empty; + } + if (interfaces != null) { + this.interfaces = new Type[interfaces.Length]; + System.Array.Copy (interfaces, this.interfaces, interfaces.Length); + } + pmodule = mb; + + if (((attr & TypeAttributes.Interface) == 0) && (parent == null)) + this.parent = typeof (object); + + // skip . ? + table_idx = mb.get_next_table_index (this, 0x02, 1); + fullname = GetFullName (); + } + + public override Assembly Assembly { + get {return pmodule.Assembly;} + } + + public override string AssemblyQualifiedName { + get { + return fullname.DisplayName + ", " + Assembly.FullName; + } + } + + public override Type BaseType { + get { + return parent; + } + } + + public override Type DeclaringType { + get { return nesting_type; } + } + + [ComVisible (true)] + public override bool IsSubclassOf (Type c) + { + Type t; + if (c == null) + return false; + if (c == this) + return false; + t = parent; + while (t != null) { + if (c == t) + return true; + t = t.BaseType; + } + return false; + } + + public override Type UnderlyingSystemType { + get { + if (is_created) + return created.UnderlyingSystemType; + + if (IsEnum) { + if (underlying_type != null) + return underlying_type; + throw new InvalidOperationException ( + "Enumeration type is not defined."); + } + + return this; + } + } + + TypeName GetFullName () + { + TypeIdentifier ident = TypeIdentifiers.FromInternal (tname); + if (nesting_type != null) + return TypeNames.FromDisplay (nesting_type.FullName).NestedName (ident); + if ((nspace != null) && (nspace.Length > 0)) + return TypeIdentifiers.FromInternal (nspace, ident); + return ident; + } + + public override string FullName { + get { + return fullname.DisplayName; + } + } + + public override Guid GUID { + get { + check_created (); + return created.GUID; + } + } + + public override Module Module { + get {return pmodule;} + } + + public override string Name { + get {return tname;} + } + + public override string Namespace { + get {return nspace;} + } + + public PackingSize PackingSize { + get {return packing_size;} + } + + public int Size { + get { return class_size; } + } + + public override Type ReflectedType { + get { return nesting_type; } + } + + [ComVisible (true)] + public void AddInterfaceImplementation (Type interfaceType) + { + if (interfaceType == null) + throw new ArgumentNullException ("interfaceType"); + if (interfaceType.IsByRef) + throw new ArgumentException (nameof (interfaceType)); + check_not_created (); + + if (interfaces != null) { + // Check for duplicates + foreach (Type t in interfaces) + if (t == interfaceType) + return; + + Type[] ifnew = new Type [interfaces.Length + 1]; + interfaces.CopyTo (ifnew, 0); + ifnew [interfaces.Length] = interfaceType; + interfaces = ifnew; + } else { + interfaces = new Type [1]; + interfaces [0] = interfaceType; + } + } + + protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, Binder binder, + CallingConventions callConvention, Type[] types, + ParameterModifier[] modifiers) + { + check_created (); + + if (created == typeof (object)) { + /* + * This happens when building corlib. Calling created.GetConstructor + * would return constructors from the real mscorlib, instead of the + * newly built one. + */ + + if (ctors == null) + return null; + + ConstructorBuilder found = null; + int count = 0; + + foreach (ConstructorBuilder cb in ctors) { + if (callConvention != CallingConventions.Any && cb.CallingConvention != callConvention) + continue; + found = cb; + count++; + } + + if (count == 0) + return null; + if (types == null) { + if (count > 1) + throw new AmbiguousMatchException (); + return found; + } + MethodBase[] match = new MethodBase [count]; + if (count == 1) + match [0] = found; + else { + count = 0; + foreach (ConstructorInfo m in ctors) { + if (callConvention != CallingConventions.Any && m.CallingConvention != callConvention) + continue; + match [count++] = m; + } + } + if (binder == null) + binder = DefaultBinder; + return (ConstructorInfo) binder.SelectMethod (bindingAttr, match, + types, modifiers); + } + + return created.GetConstructor (bindingAttr, binder, + callConvention, types, modifiers); + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + if (!is_created) + throw new NotSupportedException (); + /* + * MS throws NotSupported here, but we can't because some corlib + * classes make calls to IsDefined. + */ + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes(bool inherit) + { + check_created (); + + return created.GetCustomAttributes (inherit); + } + + public override object[] GetCustomAttributes(Type attributeType, bool inherit) + { + check_created (); + + return created.GetCustomAttributes (attributeType, inherit); + } + + public TypeBuilder DefineNestedType (string name) + { + return DefineNestedType (name, TypeAttributes.NestedPrivate, + typeof (object), null); + } + + public TypeBuilder DefineNestedType (string name, TypeAttributes attr) + { + return DefineNestedType (name, attr, typeof (object), null); + } + + public TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent) + { + return DefineNestedType (name, attr, parent, null); + } + + private TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent, Type[] interfaces, + PackingSize packSize, int typeSize) + { + // Visibility must be NestedXXX + /* This breaks mcs + if (((attrs & TypeAttributes.VisibilityMask) == TypeAttributes.Public) || + ((attrs & TypeAttributes.VisibilityMask) == TypeAttributes.NotPublic)) + throw new ArgumentException ("attr", "Bad type flags for nested type."); + */ + if (interfaces != null) { + foreach (Type iface in interfaces) { + if (iface == null) + throw new ArgumentNullException ("interfaces"); + if (iface.IsByRef) + throw new ArgumentException (nameof (interfaces)); + } + } + + TypeBuilder res = new TypeBuilder (pmodule, name, attr, parent, interfaces, packSize, typeSize, this); + res.fullname = res.GetFullName (); + pmodule.RegisterTypeName (res, res.fullname); + if (subtypes != null) { + TypeBuilder[] new_types = new TypeBuilder [subtypes.Length + 1]; + System.Array.Copy (subtypes, new_types, subtypes.Length); + new_types [subtypes.Length] = res; + subtypes = new_types; + } else { + subtypes = new TypeBuilder [1]; + subtypes [0] = res; + } + return res; + } + + [ComVisible (true)] + public TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent, Type[] interfaces) + { + return DefineNestedType (name, attr, parent, interfaces, PackingSize.Unspecified, UnspecifiedTypeSize); + } + + public TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent, int typeSize) + { + return DefineNestedType (name, attr, parent, null, PackingSize.Unspecified, typeSize); + } + + public TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent, PackingSize packSize) + { + return DefineNestedType (name, attr, parent, null, packSize, UnspecifiedTypeSize); + } + + public TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent, PackingSize packSize, + int typeSize) + { + return DefineNestedType (name, attr, parent, null, packSize, typeSize); + } + + [ComVisible (true)] + public ConstructorBuilder DefineConstructor (MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes) + { + return DefineConstructor (attributes, callingConvention, parameterTypes, null, null); + } + + [ComVisible (true)] + public ConstructorBuilder DefineConstructor (MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers) + { + check_not_created (); + if (IsInterface && (attributes & MethodAttributes.Static) == 0) + throw new InvalidOperationException (); + ConstructorBuilder cb = new ConstructorBuilder (this, attributes, + callingConvention, parameterTypes, requiredCustomModifiers, + optionalCustomModifiers); + if (ctors != null) { + ConstructorBuilder[] new_ctors = new ConstructorBuilder [ctors.Length+1]; + System.Array.Copy (ctors, new_ctors, ctors.Length); + new_ctors [ctors.Length] = cb; + ctors = new_ctors; + } else { + ctors = new ConstructorBuilder [1]; + ctors [0] = cb; + } + return cb; + } + + [ComVisible (true)] + public ConstructorBuilder DefineDefaultConstructor (MethodAttributes attributes) + { + Type parent_type, old_parent_type; + + if (IsInterface) + throw new InvalidOperationException (); + if ((attributes & (MethodAttributes.Static|MethodAttributes.Virtual)) > 0) + throw new ArgumentException (nameof (attributes)); + + if (parent != null) + parent_type = parent; + else + parent_type = typeof (object); + + old_parent_type = parent_type; + parent_type = parent_type.InternalResolve (); + /*This avoids corlib to have self references.*/ + if (parent_type == typeof (object) || parent_type == typeof (ValueType)) + parent_type = old_parent_type; + + ConstructorInfo parent_constructor = + parent_type.GetConstructor ( + BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, + null, Type.EmptyTypes, null); + if (parent_constructor == null) { + throw new NotSupportedException ("Parent does" + + " not have a default constructor." + + " The default constructor must be" + + " explicitly defined."); + } + + ConstructorBuilder cb = DefineConstructor (attributes, + CallingConventions.Standard, Type.EmptyTypes); + ILGenerator ig = cb.GetILGenerator (); + ig.Emit (OpCodes.Ldarg_0); + ig.Emit (OpCodes.Call, parent_constructor); + ig.Emit (OpCodes.Ret); + cb.finished = true; + return cb; + } + + private void append_method (MethodBuilder mb) + { + if (methods != null) { + if (methods.Length == num_methods) { + MethodBuilder[] new_methods = new MethodBuilder [methods.Length * 2]; + System.Array.Copy (methods, new_methods, num_methods); + methods = new_methods; + } + } else { + methods = new MethodBuilder [1]; + } + methods [num_methods] = mb; + num_methods ++; + } + + public MethodBuilder DefineMethod (string name, MethodAttributes attributes, Type returnType, Type[] parameterTypes) + { + return DefineMethod (name, attributes, CallingConventions.Standard, + returnType, parameterTypes); + } + + public MethodBuilder DefineMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) + { + return DefineMethod (name, attributes, callingConvention, returnType, + null, null, parameterTypes, null, null); + } + + public MethodBuilder DefineMethod (string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers) + { + check_name ("name", name); + check_not_created (); + if (IsInterface && ( + !((attributes & MethodAttributes.Abstract) != 0) || + !((attributes & MethodAttributes.Virtual) != 0)) && + !(((attributes & MethodAttributes.Static) != 0))) + throw new ArgumentException ("Interface method must be abstract and virtual."); + + if (returnType == null) + returnType = typeof (void); + MethodBuilder res = new MethodBuilder (this, name, attributes, + callingConvention, returnType, + returnTypeRequiredCustomModifiers, + returnTypeOptionalCustomModifiers, parameterTypes, + parameterTypeRequiredCustomModifiers, + parameterTypeOptionalCustomModifiers); + append_method (res); + return res; + } + + public MethodBuilder DefinePInvokeMethod (string name, string dllName, string entryName, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet) + { + return DefinePInvokeMethod (name, dllName, entryName, attributes, + callingConvention, returnType, null, null, parameterTypes, + null, null, nativeCallConv, nativeCharSet); + } + + public MethodBuilder DefinePInvokeMethod ( + string name, + string dllName, + string entryName, MethodAttributes attributes, + CallingConventions callingConvention, + Type returnType, + Type[] returnTypeRequiredCustomModifiers, + Type[] returnTypeOptionalCustomModifiers, + Type[] parameterTypes, + Type[][] parameterTypeRequiredCustomModifiers, + Type[][] parameterTypeOptionalCustomModifiers, + CallingConvention nativeCallConv, + CharSet nativeCharSet) + { + check_name ("name", name); + check_name ("dllName", dllName); + check_name ("entryName", entryName); + if ((attributes & MethodAttributes.Abstract) != 0) + throw new ArgumentException ("PInvoke methods must be static and native and cannot be abstract."); + if (IsInterface) + throw new ArgumentException ("PInvoke methods cannot exist on interfaces."); + check_not_created (); + + MethodBuilder res + = new MethodBuilder ( + this, + name, + attributes, + callingConvention, + returnType, + returnTypeRequiredCustomModifiers, + returnTypeOptionalCustomModifiers, + parameterTypes, + parameterTypeRequiredCustomModifiers, + parameterTypeOptionalCustomModifiers, + dllName, + entryName, + nativeCallConv, + nativeCharSet); + append_method (res); + return res; + } + + public MethodBuilder DefinePInvokeMethod (string name, string dllName, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet) { + return DefinePInvokeMethod (name, dllName, name, attributes, callingConvention, returnType, parameterTypes, + nativeCallConv, nativeCharSet); + } + + public MethodBuilder DefineMethod (string name, MethodAttributes attributes) + { + return DefineMethod (name, attributes, CallingConventions.Standard); + } + + public MethodBuilder DefineMethod (string name, MethodAttributes attributes, CallingConventions callingConvention) + { + return DefineMethod (name, attributes, callingConvention, null, null); + } + + public void DefineMethodOverride (MethodInfo methodInfoBody, MethodInfo methodInfoDeclaration) + { + if (methodInfoBody == null) + throw new ArgumentNullException ("methodInfoBody"); + if (methodInfoDeclaration == null) + throw new ArgumentNullException ("methodInfoDeclaration"); + check_not_created (); + if (methodInfoBody.DeclaringType != this) + throw new ArgumentException ("method body must belong to this type"); + + if (methodInfoBody is MethodBuilder) { + MethodBuilder mb = (MethodBuilder)methodInfoBody; + mb.set_override (methodInfoDeclaration); + } + } + + public FieldBuilder DefineField (string fieldName, Type type, FieldAttributes attributes) + { + return DefineField (fieldName, type, null, null, attributes); + } + + public FieldBuilder DefineField (string fieldName, Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers, FieldAttributes attributes) + { + check_name ("fieldName", fieldName); + if (type == typeof (void)) + throw new ArgumentException ("Bad field type in defining field."); + check_not_created (); + + FieldBuilder res = new FieldBuilder (this, fieldName, type, attributes, requiredCustomModifiers, optionalCustomModifiers); + if (fields != null) { + if (fields.Length == num_fields) { + FieldBuilder[] new_fields = new FieldBuilder [fields.Length * 2]; + System.Array.Copy (fields, new_fields, num_fields); + fields = new_fields; + } + fields [num_fields] = res; + num_fields ++; + } else { + fields = new FieldBuilder [1]; + fields [0] = res; + num_fields ++; + } + + if (IsEnum) { + if (underlying_type == null && (attributes & FieldAttributes.Static) == 0) + underlying_type = type; + } + + return res; + } + + public PropertyBuilder DefineProperty (string name, PropertyAttributes attributes, Type returnType, Type[] parameterTypes) + { + return DefineProperty (name, attributes, 0, returnType, null, null, parameterTypes, null, null); + } + + public PropertyBuilder DefineProperty (string name, PropertyAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) + { + return DefineProperty (name, attributes, callingConvention, returnType , null, null, parameterTypes, null, null); + } + + public PropertyBuilder DefineProperty (string name, PropertyAttributes attributes, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers) + { + return DefineProperty (name, attributes, 0, returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers); + } + + public PropertyBuilder DefineProperty (string name, PropertyAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers) + { + check_name ("name", name); + if (parameterTypes != null) + foreach (Type param in parameterTypes) + if (param == null) + throw new ArgumentNullException ("parameterTypes"); + check_not_created (); + + PropertyBuilder res = new PropertyBuilder (this, name, attributes, callingConvention, returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers); + + if (properties != null) { + Array.Resize (ref properties, properties.Length + 1); + properties [properties.Length - 1] = res; + } else { + properties = new PropertyBuilder [1] { res }; + } + return res; + } + + [ComVisible (true)] + public ConstructorBuilder DefineTypeInitializer() + { + return DefineConstructor (MethodAttributes.Public | + MethodAttributes.Static | MethodAttributes.SpecialName | + MethodAttributes.RTSpecialName, CallingConventions.Standard, + null); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private extern TypeInfo create_runtime_class (); + + private bool is_nested_in (Type t) + { + while (t != null) { + if (t == this) + return true; + else + t = t.DeclaringType; + } + return false; + } + + // Return whenever this type has a ctor defined using DefineMethod () + private bool has_ctor_method () { + MethodAttributes ctor_attrs = MethodAttributes.SpecialName | MethodAttributes.RTSpecialName; + + for (int i = 0; i < num_methods; ++i) { + MethodBuilder mb = (MethodBuilder)(methods[i]); + + if (mb.Name == ConstructorInfo.ConstructorName && (mb.Attributes & ctor_attrs) == ctor_attrs) + return true; + } + + return false; + } + + public Type CreateType () + { + return CreateTypeInfo (); + } + + public + TypeInfo CreateTypeInfo () + { + /* handle nesting_type */ + if (createTypeCalled) + return created; + + if (!IsInterface && (parent == null) && (this != typeof (object)) && (FullName != "")) { + SetParent (typeof (object)); + } + + // Fire TypeResolve events for fields whose type is an unfinished + // value type. + if (fields != null) { + foreach (FieldBuilder fb in fields) { + if (fb == null) + continue; + Type ft = fb.FieldType; + if (!fb.IsStatic && (ft is TypeBuilder) && ft.IsValueType && (ft != this) && is_nested_in (ft)) { + TypeBuilder tb = (TypeBuilder)ft; + if (!tb.is_created) { + throw new NotImplementedException (); + } + } + } + } + + if (parent != null) { + if (parent.IsByRef) + throw new ArgumentException (); + if (IsInterface) + throw new TypeLoadException (); + } + + // + // On classes, define a default constructor if not provided + // + if (!(IsInterface || IsValueType) && (ctors == null) && (tname != "") && + (GetAttributeFlagsImpl () & TypeAttributes.Abstract | TypeAttributes.Sealed) != (TypeAttributes.Abstract | TypeAttributes.Sealed) && !has_ctor_method ()) + DefineDefaultConstructor (MethodAttributes.Public); + + createTypeCalled = true; + + if (parent != null) { + if (parent.IsSealed) + throw new TypeLoadException ("Could not load type '" + FullName + "' from assembly '" + Assembly + "' because the parent type is sealed."); + if (parent.IsGenericTypeDefinition) + throw new BadImageFormatException (); + } + + if (parent == typeof (Enum) && methods != null) + throw new TypeLoadException ("Could not load type '" + FullName + "' from assembly '" + Assembly + "' because it is an enum with methods."); + if (interfaces != null) { + foreach (var iface in interfaces) { + if (iface.IsNestedPrivate && iface.Assembly != Assembly) + throw new TypeLoadException ("Could not load type '" + FullName + "' from assembly '" + Assembly + "' because it is implements the inaccessible interface '" + iface.FullName + "'."); + if (iface.IsGenericTypeDefinition) + throw new BadImageFormatException (); + if (!iface.IsInterface) + throw new TypeLoadException (); + if (iface is TypeBuilder && !((TypeBuilder)iface).is_created) + throw new TypeLoadException (); + } + } + + if (fields != null) { + foreach (FieldBuilder fb in fields) { + if (fb == null) + continue; + if (fb.FieldType.IsByRef) + throw new COMException (); + } + } + + if (methods != null) { + bool is_concrete = !IsAbstract; + for (int i = 0; i < num_methods; ++i) { + MethodBuilder mb = (MethodBuilder)(methods[i]); + if (is_concrete && mb.IsAbstract) + throw new InvalidOperationException ("Type is concrete but has abstract method " + mb); + mb.check_override (); + mb.fixup (); + } + } + + if (ctors != null){ + foreach (ConstructorBuilder ctor in ctors) + ctor.fixup (); + } + + ResolveUserTypes (); + + created = create_runtime_class (); + if (created != null) + return created; + return this; + } + + void ResolveUserTypes () { + parent = ResolveUserType (parent); + ResolveUserTypes (interfaces); + if (fields != null) { + foreach (var fb in fields) { + if (fb != null) + fb.ResolveUserTypes (); + } + } + if (methods != null) { + foreach (var mb in methods) { + if (mb != null) + mb.ResolveUserTypes (); + } + } + if (ctors != null) { + foreach (var cb in ctors) { + if (cb != null) + cb.ResolveUserTypes (); + } + } + } + + static internal void ResolveUserTypes (Type[] types) { + if (types != null) + for (int i = 0; i < types.Length; ++i) + types [i] = ResolveUserType (types [i]); + } + + static internal Type ResolveUserType (Type t) { + if (t != null && ((t.GetType ().Assembly != typeof (int).Assembly) || (t is TypeDelegator))) { + t = t.UnderlyingSystemType; + if (t != null && ((t.GetType ().Assembly != typeof (int).Assembly) || (t is TypeDelegator))) + throw new NotSupportedException ("User defined subclasses of System.Type are not yet supported."); + return t; + } else { + return t; + } + } +/* + internal void GenerateDebugInfo (ISymbolWriter symbolWriter) + { + symbolWriter.OpenNamespace (this.Namespace); + + if (methods != null) { + for (int i = 0; i < num_methods; ++i) { + MethodBuilder metb = (MethodBuilder) methods[i]; + metb.GenerateDebugInfo (symbolWriter); + } + } + + if (ctors != null) { + foreach (ConstructorBuilder ctor in ctors) + ctor.GenerateDebugInfo (symbolWriter); + } + + symbolWriter.CloseNamespace (); + + if (subtypes != null) { + for (int i = 0; i < subtypes.Length; ++i) + subtypes [i].GenerateDebugInfo (symbolWriter); + } + } +*/ + [ComVisible (true)] + public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr) + { + if (is_created) + return created.GetConstructors (bindingAttr); + + throw new NotSupportedException (); + } + + internal ConstructorInfo[] GetConstructorsInternal (BindingFlags bindingAttr) + { + if (ctors == null) + return new ConstructorInfo [0]; + ArrayList l = new ArrayList (); + bool match; + MethodAttributes mattrs; + + foreach (ConstructorBuilder c in ctors) { + match = false; + mattrs = c.Attributes; + if ((mattrs & MethodAttributes.MemberAccessMask) == MethodAttributes.Public) { + if ((bindingAttr & BindingFlags.Public) != 0) + match = true; + } else { + if ((bindingAttr & BindingFlags.NonPublic) != 0) + match = true; + } + if (!match) + continue; + match = false; + if ((mattrs & MethodAttributes.Static) != 0) { + if ((bindingAttr & BindingFlags.Static) != 0) + match = true; + } else { + if ((bindingAttr & BindingFlags.Instance) != 0) + match = true; + } + if (!match) + continue; + l.Add (c); + } + ConstructorInfo[] result = new ConstructorInfo [l.Count]; + l.CopyTo (result); + return result; + } + + public override Type GetElementType () + { + throw new NotSupportedException (); + } + + public override EventInfo GetEvent (string name, BindingFlags bindingAttr) + { + check_created (); + return created.GetEvent (name, bindingAttr); + } + + /* Needed to keep signature compatibility with MS.NET */ + public override EventInfo[] GetEvents () + { + const BindingFlags DefaultBindingFlags = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance; + return GetEvents (DefaultBindingFlags); + } + + public override EventInfo[] GetEvents (BindingFlags bindingAttr) + { + if (is_created) + return created.GetEvents (bindingAttr); + throw new NotSupportedException (); + } + + public override FieldInfo GetField (string name, BindingFlags bindingAttr) + { + check_created (); + return created.GetField (name, bindingAttr); + } + + public override FieldInfo[] GetFields (BindingFlags bindingAttr) + { + check_created (); + return created.GetFields (bindingAttr); + } + + public override Type GetInterface (string name, bool ignoreCase) + { + check_created (); + return created.GetInterface (name, ignoreCase); + } + + public override Type[] GetInterfaces () + { + if (is_created) + return created.GetInterfaces (); + + if (interfaces != null) { + Type[] ret = new Type [interfaces.Length]; + interfaces.CopyTo (ret, 0); + return ret; + } else { + return Type.EmptyTypes; + } + } + + public override MemberInfo[] GetMember (string name, MemberTypes type, + BindingFlags bindingAttr) + { + check_created (); + return created.GetMember (name, type, bindingAttr); + } + + public override MemberInfo[] GetMembers (BindingFlags bindingAttr) + { + check_created (); + return created.GetMembers (bindingAttr); + } + + private MethodInfo[] GetMethodsByName (string name, BindingFlags bindingAttr, bool ignoreCase, Type reflected_type) + { + MethodInfo[] candidates; + bool match; + MethodAttributes mattrs; + + if (((bindingAttr & BindingFlags.DeclaredOnly) == 0) && (parent != null)) { + MethodInfo [] parent_methods = parent.GetMethods (bindingAttr); + ArrayList parent_candidates = new ArrayList (parent_methods.Length); + + bool flatten = (bindingAttr & BindingFlags.FlattenHierarchy) != 0; + + for (int i = 0; i < parent_methods.Length; i++) { + MethodInfo m = parent_methods [i]; + + mattrs = m.Attributes; + + if (m.IsStatic && !flatten) + continue; + + switch (mattrs & MethodAttributes.MemberAccessMask) { + case MethodAttributes.Public: + match = (bindingAttr & BindingFlags.Public) != 0; + break; + case MethodAttributes.Assembly: + match = (bindingAttr & BindingFlags.NonPublic) != 0; + break; + case MethodAttributes.Private: + match = false; + break; + default: + match = (bindingAttr & BindingFlags.NonPublic) != 0; + break; + } + + if (match) + parent_candidates.Add (m); + } + + if (methods == null) { + candidates = new MethodInfo [parent_candidates.Count]; + parent_candidates.CopyTo (candidates); + } else { + candidates = new MethodInfo [methods.Length + parent_candidates.Count]; + parent_candidates.CopyTo (candidates, 0); + methods.CopyTo (candidates, parent_candidates.Count); + } + } + else + candidates = methods; + + if (candidates == null) + return new MethodInfo [0]; + + ArrayList l = new ArrayList (); + + foreach (MethodInfo c in candidates) { + if (c == null) + continue; + if (name != null) { + if (String.Compare (c.Name, name, ignoreCase) != 0) + continue; + } + match = false; + mattrs = c.Attributes; + if ((mattrs & MethodAttributes.MemberAccessMask) == MethodAttributes.Public) { + if ((bindingAttr & BindingFlags.Public) != 0) + match = true; + } else { + if ((bindingAttr & BindingFlags.NonPublic) != 0) + match = true; + } + if (!match) + continue; + match = false; + if ((mattrs & MethodAttributes.Static) != 0) { + if ((bindingAttr & BindingFlags.Static) != 0) + match = true; + } else { + if ((bindingAttr & BindingFlags.Instance) != 0) + match = true; + } + if (!match) + continue; + l.Add (c); + } + + MethodInfo[] result = new MethodInfo [l.Count]; + l.CopyTo (result); + return result; + } + + public override MethodInfo[] GetMethods (BindingFlags bindingAttr) + { + check_created (); + + return GetMethodsByName (null, bindingAttr, false, this); + } + + protected override MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, + Binder binder, + CallingConventions callConvention, + Type[] types, ParameterModifier[] modifiers) + { + check_created (); + + if (types == null) + return created.GetMethod (name, bindingAttr); + + return created.GetMethod (name, bindingAttr, binder, callConvention, types, modifiers); + } + + public override Type GetNestedType (string name, BindingFlags bindingAttr) + { + check_created (); + + if (subtypes == null) + return null; + + foreach (TypeBuilder t in subtypes) { + if (!t.is_created) + continue; + if ((t.attrs & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic) { + if ((bindingAttr & BindingFlags.Public) == 0) + continue; + } else { + if ((bindingAttr & BindingFlags.NonPublic) == 0) + continue; + } + if (t.Name == name) + return t.created; + } + + return null; + } + + public override Type[] GetNestedTypes (BindingFlags bindingAttr) + { + if (!is_created) + throw new NotSupportedException (); + + bool match; + ArrayList result = new ArrayList (); + + if (subtypes == null) + return Type.EmptyTypes; + foreach (TypeBuilder t in subtypes) { + match = false; + if ((t.attrs & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic) { + if ((bindingAttr & BindingFlags.Public) != 0) + match = true; + } else { + if ((bindingAttr & BindingFlags.NonPublic) != 0) + match = true; + } + if (!match) + continue; + result.Add (t); + } + Type[] r = new Type [result.Count]; + result.CopyTo (r); + return r; + } + + public override PropertyInfo[] GetProperties (BindingFlags bindingAttr) + { + check_created (); + return created.GetProperties (bindingAttr); + } + + protected override PropertyInfo GetPropertyImpl (string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) + { + throw not_supported (); + } + + protected override bool HasElementTypeImpl () + { + // a TypeBuilder can never represent an array, pointer + if (!is_created) + return false; + + return created.HasElementType; + } + + public override object InvokeMember (string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) + { + check_created (); + return created.InvokeMember (name, invokeAttr, binder, target, args, modifiers, culture, namedParameters); + } + + protected override bool IsArrayImpl () + { + return false; /*A TypeBuilder never represents a non typedef type.*/ + } + + protected override bool IsByRefImpl () + { + return false; /*A TypeBuilder never represents a non typedef type.*/ + } + + protected override bool IsCOMObjectImpl () + { + return ((GetAttributeFlagsImpl () & TypeAttributes.Import) != 0); + } + + protected override bool IsPointerImpl () + { + return false; /*A TypeBuilder never represents a non typedef type.*/ + } + + protected override bool IsPrimitiveImpl () + { + // FIXME + return false; + } + + // FIXME: I doubt just removing this still works. + protected override bool IsValueTypeImpl () + { + Type parent_type = parent; + while (parent_type != null) { + if (parent_type == typeof (ValueType)) + return true; + parent_type = parent_type.BaseType; + } + return false; + } + + public override bool IsSZArray { + get { + return false; + } + } + + public override Type MakeArrayType () + { + return new ArrayType (this, 0); + } + + public override Type MakeArrayType (int rank) + { + if (rank < 1) + throw new IndexOutOfRangeException (); + return new ArrayType (this, rank); + } + + public override Type MakeByRefType () + { + return new ByRefType (this); + } + + public override Type MakeGenericType (params Type [] typeArguments) + { + //return base.MakeGenericType (typeArguments); + + if (!IsGenericTypeDefinition) + throw new InvalidOperationException ("not a generic type definition"); + if (typeArguments == null) + throw new ArgumentNullException ("typeArguments"); + + if (generic_params.Length != typeArguments.Length) + throw new ArgumentException (String.Format ("The type or method has {0} generic parameter(s) but {1} generic argument(s) where provided. A generic argument must be provided for each generic parameter.", generic_params.Length, typeArguments.Length), "typeArguments"); + + foreach (Type t in typeArguments) { + if (t == null) + throw new ArgumentNullException ("typeArguments"); + } + + Type[] copy = new Type [typeArguments.Length]; + typeArguments.CopyTo (copy, 0); + return pmodule.assemblyb.MakeGenericType (this, copy); + } + + public override Type MakePointerType () + { + return new PointerType (this); + } + + public override RuntimeTypeHandle TypeHandle { + get { + check_created (); + return created.TypeHandle; + } + } + + public void SetCustomAttribute (CustomAttributeBuilder customBuilder) + { + if (customBuilder == null) + throw new ArgumentNullException ("customBuilder"); + + string attrname = customBuilder.Ctor.ReflectedType.FullName; + if (attrname == "System.Runtime.InteropServices.StructLayoutAttribute") { + byte[] data = customBuilder.Data; + int layout_kind; /* the (stupid) ctor takes a short or an int ... */ + layout_kind = (int)data [2]; + layout_kind |= ((int)data [3]) << 8; + attrs &= ~TypeAttributes.LayoutMask; + switch ((LayoutKind)layout_kind) { + case LayoutKind.Auto: + attrs |= TypeAttributes.AutoLayout; + break; + case LayoutKind.Explicit: + attrs |= TypeAttributes.ExplicitLayout; + break; + case LayoutKind.Sequential: + attrs |= TypeAttributes.SequentialLayout; + break; + default: + // we should ignore it since it can be any value anyway... + throw new Exception ("Error in customattr"); + } + + var ctor_type = customBuilder.Ctor is ConstructorBuilder ? ((ConstructorBuilder)customBuilder.Ctor).parameters[0] : customBuilder.Ctor.GetParametersInternal()[0].ParameterType; + int pos = 6; + if (ctor_type.FullName == "System.Int16") + pos = 4; + int nnamed = (int)data [pos++]; + nnamed |= ((int)data [pos++]) << 8; + for (int i = 0; i < nnamed; ++i) { + //byte named_type = data [pos++]; + pos ++; + byte type = data [pos++]; + int len; + string named_name; + + if (type == 0x55) { + len = CustomAttributeBuilder.decode_len (data, pos, out pos); + //string named_typename = + CustomAttributeBuilder.string_from_bytes (data, pos, len); + pos += len; + // FIXME: Check that 'named_type' and 'named_typename' match, etc. + // See related code/FIXME in mono/mono/metadata/reflection.c + } + + len = CustomAttributeBuilder.decode_len (data, pos, out pos); + named_name = CustomAttributeBuilder.string_from_bytes (data, pos, len); + pos += len; + /* all the fields are integers in StructLayout */ + int value = (int)data [pos++]; + value |= ((int)data [pos++]) << 8; + value |= ((int)data [pos++]) << 16; + value |= ((int)data [pos++]) << 24; + switch (named_name) { + case "CharSet": + switch ((CharSet)value) { + case CharSet.None: + case CharSet.Ansi: + attrs &= ~(TypeAttributes.UnicodeClass | TypeAttributes.AutoClass); + break; + case CharSet.Unicode: + attrs &= ~TypeAttributes.AutoClass; + attrs |= TypeAttributes.UnicodeClass; + break; + case CharSet.Auto: + attrs &= ~TypeAttributes.UnicodeClass; + attrs |= TypeAttributes.AutoClass; + break; + default: + break; // error out... + } + break; + case "Pack": + packing_size = (PackingSize)value; + break; + case "Size": + class_size = value; + break; + default: + break; // error out... + } + } + return; + } else if (attrname == "System.Runtime.CompilerServices.SpecialNameAttribute") { + attrs |= TypeAttributes.SpecialName; + return; + } else if (attrname == "System.SerializableAttribute") { + attrs |= TypeAttributes.Serializable; + return; + } else if (attrname == "System.Runtime.InteropServices.ComImportAttribute") { + attrs |= TypeAttributes.Import; + return; + } else if (attrname == "System.Security.SuppressUnmanagedCodeSecurityAttribute") { + attrs |= TypeAttributes.HasSecurity; + } + + if (cattrs != null) { + CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1]; + cattrs.CopyTo (new_array, 0); + new_array [cattrs.Length] = customBuilder; + cattrs = new_array; + } else { + cattrs = new CustomAttributeBuilder [1]; + cattrs [0] = customBuilder; + } + } + + [ComVisible (true)] + public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute) + { + SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute)); + } + + public EventBuilder DefineEvent (string name, EventAttributes attributes, Type eventtype) + { + check_name ("name", name); + if (eventtype == null) + throw new ArgumentNullException ("type"); + check_not_created (); + if (eventtype.IsByRef) + throw new ArgumentException (nameof (eventtype)); + EventBuilder res = new EventBuilder (this, name, attributes, eventtype); + if (events != null) { + EventBuilder[] new_events = new EventBuilder [events.Length+1]; + System.Array.Copy (events, new_events, events.Length); + new_events [events.Length] = res; + events = new_events; + } else { + events = new EventBuilder [1]; + events [0] = res; + } + return res; + } + + public FieldBuilder DefineInitializedData (string name, byte[] data, FieldAttributes attributes) { + if (data == null) + throw new ArgumentNullException ("data"); + + FieldBuilder res = DefineUninitializedData (name, data.Length, attributes); + res.SetRVAData (data); + return res; + } + + public FieldBuilder DefineUninitializedData (string name, int size, FieldAttributes attributes) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name.Length == 0) + throw new ArgumentException ("Empty name is not legal", "name"); + if ((size <= 0) || (size > 0x3f0000)) + throw new ArgumentException ("Data size must be > 0 and < 0x3f0000"); + check_not_created (); + + string typeName = "$ArrayType$" + size; + TypeIdentifier ident = TypeIdentifiers.WithoutEscape (typeName); + Type datablobtype = pmodule.GetRegisteredType (fullname.NestedName(ident)); + if (datablobtype == null) { + TypeBuilder tb = DefineNestedType (typeName, + TypeAttributes.NestedPrivate|TypeAttributes.ExplicitLayout|TypeAttributes.Sealed, + typeof (ValueType), null, PackingSize.Size1, size); + tb.CreateType (); + datablobtype = tb; + } + return DefineField (name, datablobtype, attributes|FieldAttributes.Static|FieldAttributes.HasFieldRVA); + } + + public TypeToken TypeToken { + get { + return new TypeToken (0x02000000 | table_idx); + } + } + + public void SetParent (Type parent) + { + check_not_created (); + + if (parent == null) { + if ((attrs & TypeAttributes.Interface) != 0) { + if ((attrs & TypeAttributes.Abstract) == 0) + throw new InvalidOperationException ("Interface must be declared abstract."); + this.parent = null; + } else { + this.parent = typeof (object); + } + } else { + if (parent.IsInterface) + throw new ArgumentException (nameof (parent)); + this.parent = parent; + } + this.parent = ResolveUserType (this.parent); + } + + internal int get_next_table_index (object obj, int table, int count) { + return pmodule.get_next_table_index (obj, table, count); + } + + [ComVisible (true)] + public override InterfaceMapping GetInterfaceMap (Type interfaceType) + { + if (created == null) + throw new NotSupportedException ("This method is not implemented for incomplete types."); + + return created.GetInterfaceMap (interfaceType); + } + + internal override Type InternalResolve () + { + check_created (); + return created; + } + + internal override Type RuntimeResolve () + { + check_created (); + return created; + } + + internal bool is_created { + get { + return createTypeCalled; + } + } + + private Exception not_supported () + { + return new NotSupportedException ("The invoked member is not supported in a dynamic module."); + } + + internal void check_not_created () + { + if (is_created) + throw new InvalidOperationException ("Unable to change after type has been created."); + } + + private void check_created () + { + if (!is_created) + throw not_supported (); + } + + private void check_name (string argName, string name) + { + if (name == null) + throw new ArgumentNullException (argName); + if (name.Length == 0) + throw new ArgumentException ("Empty name is not legal", argName); + if (name [0] == ((char)0)) + throw new ArgumentException ("Illegal name", argName); + } + + public override String ToString () + { + return FullName; + } + + // FIXME: + public override bool IsAssignableFrom (Type c) + { + return base.IsAssignableFrom (c); + } + + // FIXME: "arrays" + internal bool IsAssignableTo (Type c) + { + if (c == this) + return true; + + if (c.IsInterface) { + if (parent != null && is_created) { + if (c.IsAssignableFrom (parent)) + return true; + } + + if (interfaces == null) + return false; + foreach (Type t in interfaces) + if (c.IsAssignableFrom (t)) + return true; + if (!is_created) + return false; + } + + if (parent == null) + return c == typeof (object); + else + return c.IsAssignableFrom (parent); + } + + public bool IsCreated () + { + return is_created; + } + + public override Type[] GetGenericArguments () + { + if (generic_params == null) + return null; + Type[] args = new Type [generic_params.Length]; + generic_params.CopyTo (args, 0); + return args; + } + + public override Type GetGenericTypeDefinition () + { + if (generic_params == null) + throw new InvalidOperationException ("Type is not generic"); + return this; + } + + public override bool ContainsGenericParameters { + get { + return generic_params != null; + } + } + + public override bool IsGenericParameter { + get { + return false; + } + } + + public override GenericParameterAttributes GenericParameterAttributes { + get { return GenericParameterAttributes.None; } + } + + public override bool IsGenericTypeDefinition { + get { + return generic_params != null; + } + } + + public override bool IsGenericType { + get { return IsGenericTypeDefinition; } + } + + // FIXME: + public override int GenericParameterPosition { + get { + return 0; + } + } + + public override MethodBase DeclaringMethod { + get { + return null; + } + } + + public GenericTypeParameterBuilder[] DefineGenericParameters (params string[] names) + { + if (names == null) + throw new ArgumentNullException ("names"); + if (names.Length == 0) + throw new ArgumentException ("names"); + + generic_params = new GenericTypeParameterBuilder [names.Length]; + for (int i = 0; i < names.Length; i++) { + string item = names [i]; + if (item == null) + throw new ArgumentNullException ("names"); + generic_params [i] = new GenericTypeParameterBuilder (this, null, item, i); + } + + return generic_params; + } + + public static ConstructorInfo GetConstructor (Type type, ConstructorInfo constructor) + { + /*FIXME I would expect the same checks of GetMethod here*/ + if (type == null) + throw new ArgumentException ("Type is not generic", "type"); + + if (!type.IsGenericType) + throw new ArgumentException ("Type is not a generic type", "type"); + + if (type.IsGenericTypeDefinition) + throw new ArgumentException ("Type cannot be a generic type definition", "type"); + + if (constructor == null) + throw new NullReferenceException (); //MS raises this instead of an ArgumentNullException + + if (!constructor.DeclaringType.IsGenericTypeDefinition) + throw new ArgumentException ("constructor declaring type is not a generic type definition", "constructor"); + if (constructor.DeclaringType != type.GetGenericTypeDefinition ()) + throw new ArgumentException ("constructor declaring type is not the generic type definition of type", "constructor"); + + ConstructorInfo res = type.GetConstructor (constructor); + if (res == null) + throw new ArgumentException ("constructor not found"); + + return res; + } + + static bool IsValidGetMethodType (Type type) + { + if (type is TypeBuilder || type is TypeBuilderInstantiation) + return true; + /*GetMethod() must work with TypeBuilders after CreateType() was called.*/ + if (type.Module is ModuleBuilder) + return true; + if (type.IsGenericParameter) + return false; + + Type[] inst = type.GetGenericArguments (); + if (inst == null) + return false; + for (int i = 0; i < inst.Length; ++i) { + if (IsValidGetMethodType (inst [i])) + return true; + } + return false; + } + + public static MethodInfo GetMethod (Type type, MethodInfo method) + { + if (!IsValidGetMethodType (type)) + throw new ArgumentException ("type is not TypeBuilder but " + type.GetType (), "type"); + + if (type is TypeBuilder && type.ContainsGenericParameters) + type = type.MakeGenericType (type.GetGenericArguments ()); + + if (!type.IsGenericType) + throw new ArgumentException ("type is not a generic type", "type"); + + if (!method.DeclaringType.IsGenericTypeDefinition) + throw new ArgumentException ("method declaring type is not a generic type definition", "method"); + if (method.DeclaringType != type.GetGenericTypeDefinition ()) + throw new ArgumentException ("method declaring type is not the generic type definition of type", "method"); + if (method == null) + throw new NullReferenceException (); //MS raises this instead of an ArgumentNullException + + MethodInfo res = type.GetMethod (method); + if (res == null) + throw new ArgumentException (String.Format ("method {0} not found in type {1}", method.Name, type)); + + return res; + } + + public static FieldInfo GetField (Type type, FieldInfo field) + { + if (!type.IsGenericType) + throw new ArgumentException ("Type is not a generic type", "type"); + + if (type.IsGenericTypeDefinition) + throw new ArgumentException ("Type cannot be a generic type definition", "type"); + + if (field is FieldOnTypeBuilderInst) + throw new ArgumentException ("The specified field must be declared on a generic type definition.", "field"); + + if (field.DeclaringType != type.GetGenericTypeDefinition ()) + throw new ArgumentException ("field declaring type is not the generic type definition of type", "method"); + + FieldInfo res = type.GetField (field); + if (res == null) + throw new System.Exception ("field not found"); + else + return res; + } + + internal override bool IsUserType { + get { + return false; + } + } + + public override bool IsConstructedGenericType { + get { return false; } + } + + public override bool IsAssignableFrom (TypeInfo typeInfo) + { + return base.IsAssignableFrom (typeInfo); + } + + internal static bool SetConstantValue (Type destType, Object value, ref Object destValue) + { + // Mono: This is based on the CoreCLR + // TypeBuilder.SetConstantValue except it writes to an + // out argument instead of doing an icall, and it uses + // TypeCode instead of CorElementType (like + // MonoTypeEnum) which we don't have in our corlib and + // our member fields are different. + + // This is a helper function that is used by ParameterBuilder, PropertyBuilder, + // and FieldBuilder to validate a default value and save it in the meta-data. + + if (value != null) { + Type type = value.GetType (); + + // We should allow setting a constant value on a ByRef parameter + if (destType.IsByRef) + destType = destType.GetElementType (); + + // Convert nullable types to their underlying type. + // This is necessary for nullable enum types to pass the IsEnum check that's coming next. + destType = Nullable.GetUnderlyingType (destType) ?? destType; + + if (destType.IsEnum) + { + // | UnderlyingSystemType | Enum.GetUnderlyingType() | IsEnum + // ----------------------------------|---------------------------|---------------------------|--------- + // runtime Enum Type | self | underlying type of enum | TRUE + // EnumBuilder | underlying type of enum | underlying type of enum* | TRUE + // TypeBuilder of enum types** | underlying type of enum | Exception | TRUE + // TypeBuilder of enum types (baked) | runtime enum type | Exception | TRUE + + // *: the behavior of Enum.GetUnderlyingType(EnumBuilder) might change in the future + // so let's not depend on it. + // **: created with System.Enum as the parent type. + + // The above behaviors might not be the most consistent but we have to live with them. + + Type underlyingType; + EnumBuilder enumBldr; + TypeBuilder typeBldr; + if ((enumBldr = destType as EnumBuilder) != null) { + underlyingType = enumBldr.GetEnumUnderlyingType (); + + // The constant value supplied should match either the baked enum type or its underlying type + // we don't need to compare it with the EnumBuilder itself because you can never have an object of that type + if (!((enumBldr.GetTypeBuilder ().is_created && type == enumBldr.GetTypeBuilder ().created) || + type == underlyingType)) + throw_argument_ConstantDoesntMatch (); + } else if ((typeBldr = destType as TypeBuilder) != null) { + underlyingType = typeBldr.underlying_type; + + // The constant value supplied should match either the baked enum type or its underlying type + // typeBldr.m_enumUnderlyingType is null if the user hasn't created a "value__" field on the enum + if (underlyingType == null || (type != typeBldr.UnderlyingSystemType && type != underlyingType)) + throw_argument_ConstantDoesntMatch (); + } else { + // must be a runtime Enum Type + + // Debug.Assert(destType is RuntimeType, "destType is not a runtime type, an EnumBuilder, or a TypeBuilder."); + + underlyingType = Enum.GetUnderlyingType (destType); + + // The constant value supplied should match either the enum itself or its underlying type + if (type != destType && type != underlyingType) + throw_argument_ConstantDoesntMatch (); + } + + type = underlyingType; + } else { + // Note that it is non CLS compliant if destType != type. But RefEmit never guarantees CLS-Compliance. + if (!destType.IsAssignableFrom (type)) + throw_argument_ConstantDoesntMatch (); + } + + TypeCode corType = Type.GetTypeCode (type); + + switch (corType) + { + case TypeCode.Byte: + case TypeCode.SByte: + case TypeCode.Boolean: + case TypeCode.Int16: + case TypeCode.UInt16: + case TypeCode.Char: + case TypeCode.Int32: + case TypeCode.UInt32: + case TypeCode.Single: + case TypeCode.Int64: + case TypeCode.UInt64: + case TypeCode.Double: + destValue = value; + return true; + case TypeCode.String: + destValue = value; + return true; + case TypeCode.DateTime: + //date is a I8 representation + long ticks = ((DateTime)value).Ticks; + destValue = ticks; + return true; + default: + throw new ArgumentException(type.ToString() + " is not a supported constant type."); + } + } else { + // A null default value in metadata is permissible even for non-nullable value types. + // (See ECMA-335 II.15.4.1.4 "The .param directive" and II.22.9 "Constant" for details.) + // This is how the Roslyn compilers generally encode `default(TValueType)` default values. + + destValue = null; + return true; + } + } + + private static void throw_argument_ConstantDoesntMatch () + { + throw new ArgumentException("Constant does not match the defined type."); + } + + public override bool IsTypeDefinition => true; + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilderInstantiation.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilderInstantiation.cs new file mode 100644 index 0000000000..00b5432b33 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/TypeBuilderInstantiation.cs @@ -0,0 +1,512 @@ +#nullable disable + +// +// System.Reflection.Emit.TypeBuilderInstantiation +// +// Sean MacIsaac (macisaac@ximian.com) +// Paolo Molaro (lupus@ximian.com) +// Patrik Torstensson (patrik.torstensson@labs2.com) +// +// (C) 2001 Ximian, Inc. +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if MONO_FEATURE_SRE +using System.Reflection; +using System.Reflection.Emit; +using System.Collections; +using System.Runtime.CompilerServices; +using System.Globalization; +using System.Runtime.Serialization; +using System.Text; +using System.Runtime.InteropServices; + +namespace System.Reflection.Emit +{ + /* + * TypeBuilderInstantiation represents an instantiation of a generic TypeBuilder. + */ + [StructLayout (LayoutKind.Sequential)] + sealed class TypeBuilderInstantiation : + TypeInfo + { + #region Keep in sync with object-internals.h MonoReflectionGenericClass +#pragma warning disable 649 + internal Type generic_type; + Type[] type_arguments; +#pragma warning restore 649 + #endregion + + Hashtable fields, ctors, methods; + + internal TypeBuilderInstantiation () + { + // this should not be used + throw new InvalidOperationException (); + } + + internal TypeBuilderInstantiation (Type tb, Type[] args) + { + this.generic_type = tb; + this.type_arguments = args; + } + + internal override Type InternalResolve () + { + Type gtd = generic_type.InternalResolve (); + Type[] args = new Type [type_arguments.Length]; + for (int i = 0; i < type_arguments.Length; ++i) + args [i] = type_arguments [i].InternalResolve (); + return gtd.MakeGenericType (args); + } + + // Called from the runtime to return the corresponding finished Type object + internal override Type RuntimeResolve () + { + if (generic_type is TypeBuilder && !(generic_type as TypeBuilder).IsCreated ()) + throw new NotImplementedException (); + for (int i = 0; i < type_arguments.Length; ++i) { + var t = type_arguments [i]; + if (t is TypeBuilder && !(t as TypeBuilder).IsCreated ()) + throw new NotImplementedException (); + } + return InternalResolve (); + } + + internal bool IsCreated { + get { + TypeBuilder tb = generic_type as TypeBuilder; + return tb != null ? tb.is_created : true; + } + } + + private const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | + BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly; + + Type GetParentType () + { + return InflateType (generic_type.BaseType); + } + + internal Type InflateType (Type type) + { + return InflateType (type, type_arguments, null); + } + + internal Type InflateType (Type type, Type[] method_args) + { + return InflateType (type, type_arguments, method_args); + } + + internal static Type InflateType (Type type, Type[] type_args, Type[] method_args) + { + if (type == null) + return null; + if (!type.IsGenericParameter && !type.ContainsGenericParameters) + return type; + if (type.IsGenericParameter) { + if (type.DeclaringMethod == null) + return type_args == null ? type : type_args [type.GenericParameterPosition]; + return method_args == null ? type : method_args [type.GenericParameterPosition]; + } + if (type.IsPointer) + return InflateType (type.GetElementType (), type_args, method_args).MakePointerType (); + if (type.IsByRef) + return InflateType (type.GetElementType (), type_args, method_args).MakeByRefType (); + if (type.IsArray) { + if (type.GetArrayRank () > 1) + return InflateType (type.GetElementType (), type_args, method_args).MakeArrayType (type.GetArrayRank ()); + + if (type.ToString ().EndsWith ("[*]", StringComparison.Ordinal)) /*FIXME, the reflection API doesn't offer a way around this*/ + return InflateType (type.GetElementType (), type_args, method_args).MakeArrayType (1); + return InflateType (type.GetElementType (), type_args, method_args).MakeArrayType (); + } + + Type[] args = type.GetGenericArguments (); + for (int i = 0; i < args.Length; ++i) + args [i] = InflateType (args [i], type_args, method_args); + + Type gtd = type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition (); + return gtd.MakeGenericType (args); + } + + public override Type BaseType { + get { return generic_type.BaseType; } + } + + public override Type[] GetInterfaces () + { + throw new NotSupportedException (); + } + + protected override bool IsValueTypeImpl () + { + return generic_type.IsValueType; + } + + internal override MethodInfo GetMethod (MethodInfo fromNoninstanciated) + { + if (methods == null) + methods = new Hashtable (); + if (!methods.ContainsKey (fromNoninstanciated)) + methods [fromNoninstanciated] = new MethodOnTypeBuilderInst (this, fromNoninstanciated); + return (MethodInfo)methods [fromNoninstanciated]; + } + + internal override ConstructorInfo GetConstructor (ConstructorInfo fromNoninstanciated) + { + if (ctors == null) + ctors = new Hashtable (); + if (!ctors.ContainsKey (fromNoninstanciated)) + ctors [fromNoninstanciated] = new ConstructorOnTypeBuilderInst (this, fromNoninstanciated); + return (ConstructorInfo)ctors [fromNoninstanciated]; + } + + internal override FieldInfo GetField (FieldInfo fromNoninstanciated) + { + if (fields == null) + fields = new Hashtable (); + if (!fields.ContainsKey (fromNoninstanciated)) + fields [fromNoninstanciated] = new FieldOnTypeBuilderInst (this, fromNoninstanciated); + return (FieldInfo)fields [fromNoninstanciated]; + } + + public override MethodInfo[] GetMethods (BindingFlags bf) + { + throw new NotSupportedException (); + } + + public override ConstructorInfo[] GetConstructors (BindingFlags bf) + { + throw new NotSupportedException (); + } + + public override FieldInfo[] GetFields (BindingFlags bf) + { + throw new NotSupportedException (); + } + + public override PropertyInfo[] GetProperties (BindingFlags bf) + { + throw new NotSupportedException (); + } + + public override EventInfo[] GetEvents (BindingFlags bf) + { + throw new NotSupportedException (); + } + + public override Type[] GetNestedTypes (BindingFlags bf) + { + throw new NotSupportedException (); + } + + public override bool IsAssignableFrom (Type c) + { + throw new NotSupportedException (); + } + + public override Type UnderlyingSystemType { + get { return this; } + } + + public override Assembly Assembly { + get { return generic_type.Assembly; } + } + + public override Module Module { + get { return generic_type.Module; } + } + + public override string Name { + get { return generic_type.Name; } + } + + public override string Namespace { + get { return generic_type.Namespace; } + } + + public override string FullName { + get { return format_name (true, false); } + } + + public override string AssemblyQualifiedName { + get { return format_name (true, true); } + } + + public override Guid GUID { + get { throw new NotSupportedException (); } + } + + string format_name (bool full_name, bool assembly_qualified) + { + StringBuilder sb = new StringBuilder (generic_type.FullName); + + sb.Append ("["); + for (int i = 0; i < type_arguments.Length; ++i) { + if (i > 0) + sb.Append (","); + + string name; + if (full_name) { + string assemblyName = type_arguments [i].Assembly.FullName; + name = type_arguments [i].FullName; + if (name != null && assemblyName != null) + name = name + ", " + assemblyName; + } else { + name = type_arguments [i].ToString (); + } + if (name == null) { + return null; + } + if (full_name) + sb.Append ("["); + sb.Append (name); + if (full_name) + sb.Append ("]"); + } + sb.Append ("]"); + if (assembly_qualified) { + sb.Append (", "); + sb.Append (generic_type.Assembly.FullName); + } + return sb.ToString (); + } + + public override string ToString () + { + return format_name (false, false); + } + + public override Type GetGenericTypeDefinition () + { + return generic_type; + } + + public override Type[] GetGenericArguments () + { + Type[] ret = new Type [type_arguments.Length]; + type_arguments.CopyTo (ret, 0); + return ret; + } + + public override bool ContainsGenericParameters { + get { + foreach (Type t in type_arguments) { + if (t.ContainsGenericParameters) + return true; + } + return false; + } + } + + public override bool IsGenericTypeDefinition { + get { return false; } + } + + public override bool IsGenericType { + get { return true; } + } + + public override Type DeclaringType { + get { return generic_type.DeclaringType; } + } + + public override RuntimeTypeHandle TypeHandle { + get { + throw new NotSupportedException (); + } + } + + public override Type MakeArrayType () + { + return new ArrayType (this, 0); + } + + public override Type MakeArrayType (int rank) + { + if (rank < 1) + throw new IndexOutOfRangeException (); + return new ArrayType (this, rank); + } + + public override Type MakeByRefType () + { + return new ByRefType (this); + } + + public override Type MakePointerType () + { + return new PointerType (this); + } + + public override Type GetElementType () + { + throw new NotSupportedException (); + } + + protected override bool HasElementTypeImpl () + { + return false; + } + + protected override bool IsCOMObjectImpl () + { + return false; + } + + protected override bool IsPrimitiveImpl () + { + return false; + } + + protected override bool IsArrayImpl () + { + return false; + } + + protected override bool IsByRefImpl () + { + return false; + } + + protected override bool IsPointerImpl () + { + return false; + } + + protected override TypeAttributes GetAttributeFlagsImpl () + { + return generic_type.Attributes; + } + + //stuff that throws + public override Type GetInterface (string name, bool ignoreCase) + { + throw new NotSupportedException (); + } + + public override EventInfo GetEvent (string name, BindingFlags bindingAttr) + { + throw new NotSupportedException (); + } + + public override FieldInfo GetField( string name, BindingFlags bindingAttr) + { + throw new NotSupportedException (); + } + + public override MemberInfo[] GetMembers (BindingFlags bindingAttr) + { + throw new NotSupportedException (); + } + + public override Type GetNestedType (string name, BindingFlags bindingAttr) + { + throw new NotSupportedException (); + } + + public override object InvokeMember (string name, BindingFlags invokeAttr, + Binder binder, object target, object[] args, + ParameterModifier[] modifiers, + CultureInfo culture, string[] namedParameters) + { + throw new NotSupportedException (); + } + + protected override MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, Binder binder, + CallingConventions callConvention, Type[] types, + ParameterModifier[] modifiers) + { + throw new NotSupportedException (); + } + + protected override PropertyInfo GetPropertyImpl (string name, BindingFlags bindingAttr, Binder binder, + Type returnType, Type[] types, ParameterModifier[] modifiers) + { + throw new NotSupportedException (); + } + + protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, + Binder binder, + CallingConventions callConvention, + Type[] types, + ParameterModifier[] modifiers) + { + throw new NotSupportedException (); + } + + //MemberInfo + public override bool IsDefined (Type attributeType, bool inherit) + { + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (bool inherit) + { + if (IsCreated) + return generic_type.GetCustomAttributes (inherit); + throw new NotSupportedException (); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + if (IsCreated) + return generic_type.GetCustomAttributes (attributeType, inherit); + throw new NotSupportedException (); + } + + internal override bool IsUserType { + get { + foreach (var t in type_arguments) { + if (t.IsUserType) + return true; + } + return false; + } + } + + internal static Type MakeGenericType (Type type, Type[] typeArguments) + { + return new TypeBuilderInstantiation (type, typeArguments); + } + + public override bool IsTypeDefinition => false; + + public override bool IsConstructedGenericType => true; + } +} +#else +namespace System.Reflection.Emit +{ + abstract class TypeBuilderInstantiation : TypeInfo + { + internal static Type MakeGenericType (Type type, Type[] typeArguments) + { + throw new NotSupportedException ("User types are not supported under full aot"); + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Emit/UnmanagedMarshal.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/UnmanagedMarshal.cs new file mode 100644 index 0000000000..bbe9c3894e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Emit/UnmanagedMarshal.cs @@ -0,0 +1,138 @@ +#nullable disable + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// +// System.Reflection.Emit/UnmanagedMarshal.cs +// +// Author: +// Paolo Molaro (lupus@ximian.com) +// +// (C) 2001-2002 Ximian, Inc. http://www.ximian.com +// + +#if MONO_FEATURE_SRE +using System.Reflection.Emit; +using System.Runtime.InteropServices; +using System; + +namespace System.Reflection.Emit { + + [Obsolete ("An alternate API is available: Emit the MarshalAs custom attribute instead.")] + [ComVisible (true)] + [Serializable] + [StructLayout (LayoutKind.Sequential)] + public sealed class UnmanagedMarshal { +#pragma warning disable 169, 414 + private int count; + private UnmanagedType t; + private UnmanagedType tbase; + string guid; + string mcookie; + string marshaltype; + internal Type marshaltyperef; + private int param_num; + private bool has_size; +#pragma warning restore 169, 414 + + private UnmanagedMarshal (UnmanagedType maint, int cnt) { + count = cnt; + t = maint; + tbase = maint; + } + private UnmanagedMarshal (UnmanagedType maint, UnmanagedType elemt) { + count = 0; + t = maint; + tbase = elemt; + } + + public UnmanagedType BaseType { + get { + if (t == UnmanagedType.LPArray) + throw new ArgumentException (); + +#if FEATURE_COMINTEROP + if (t == UnmanagedType.SafeArray) + throw new ArgumentException (); +#endif + return tbase; + } + } + + public int ElementCount { + get {return count;} + } + + public UnmanagedType GetUnmanagedType { + get {return t;} + } + + public Guid IIDGuid { + get {return new Guid (guid);} + } + + public static UnmanagedMarshal DefineByValArray( int elemCount) { + return new UnmanagedMarshal (UnmanagedType.ByValArray, elemCount); + } + + public static UnmanagedMarshal DefineByValTStr( int elemCount) { + return new UnmanagedMarshal (UnmanagedType.ByValTStr, elemCount); + } + + public static UnmanagedMarshal DefineLPArray( UnmanagedType elemType) { + return new UnmanagedMarshal (UnmanagedType.LPArray, elemType); + } +#if FEATURE_COMINTEROP + public static UnmanagedMarshal DefineSafeArray( UnmanagedType elemType) { + return new UnmanagedMarshal (UnmanagedType.SafeArray, elemType); + } +#endif + public static UnmanagedMarshal DefineUnmanagedMarshal( UnmanagedType unmanagedType) { + return new UnmanagedMarshal (unmanagedType, unmanagedType); + } +#if FEATURE_COMINTEROP + internal static UnmanagedMarshal DefineCustom (Type typeref, string cookie, string mtype, Guid id) { + UnmanagedMarshal res = new UnmanagedMarshal (UnmanagedType.CustomMarshaler, UnmanagedType.CustomMarshaler); + res.mcookie = cookie; + res.marshaltype = mtype; + res.marshaltyperef = typeref; + if (id == Guid.Empty) + res.guid = String.Empty; + else + res.guid = id.ToString (); + return res; + } +#endif + // sizeConst and sizeParamIndex can be -1 meaning they are not specified + internal static UnmanagedMarshal DefineLPArrayInternal (UnmanagedType elemType, int sizeConst, int sizeParamIndex) { + UnmanagedMarshal res = new UnmanagedMarshal (UnmanagedType.LPArray, elemType); + res.count = sizeConst; + res.param_num = sizeParamIndex; + res.has_size = true; + + return res; + } + } +} +#endif diff --git a/mcs/class/System.Private.CoreLib/System.Reflection.Metadata/AssemblyExtensions.cs b/mcs/class/System.Private.CoreLib/System.Reflection.Metadata/AssemblyExtensions.cs new file mode 100644 index 0000000000..0c09112e57 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection.Metadata/AssemblyExtensions.cs @@ -0,0 +1,8 @@ +namespace System.Reflection.Metadata +{ + public static class AssemblyExtensions + { + [CLSCompliant(false)] + public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* blob, out int length) => throw new NotImplementedException (); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/Assembly.cs b/mcs/class/System.Private.CoreLib/System.Reflection/Assembly.cs new file mode 100644 index 0000000000..a772f24b4e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/Assembly.cs @@ -0,0 +1,96 @@ +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Loader; +using System.Threading; + +namespace System.Reflection +{ + [StructLayout (LayoutKind.Sequential)] + partial class Assembly + { + internal bool IsRuntimeImplemented () => this is RuntimeAssembly; + + internal virtual IntPtr MonoAssembly { + get { + throw new NotImplementedException (); + } + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Assembly? LoadWithPartialName (string partialName) + { + if (partialName == null) + throw new ArgumentNullException (nameof (partialName)); + + if (partialName.Length == 0 || partialName [0] == '\0') + throw new ArgumentException (SR.Format_StringZeroLength, nameof (partialName)); + + try { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeAssembly.InternalLoad (partialName, ref stackMark, IntPtr.Zero); + } catch (FileNotFoundException) { + return null; + } + } + + [System.Security.DynamicSecurityMethod] + [MethodImplAttribute (MethodImplOptions.NoInlining)] + public static Assembly GetExecutingAssembly() + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return GetExecutingAssembly(ref stackMark); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern RuntimeAssembly GetExecutingAssembly (ref StackCrawlMark stackMark); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern Assembly GetCallingAssembly (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern Assembly GetEntryAssembly (); + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Assembly Load (string assemblyString) + { + if (assemblyString == null) + throw new ArgumentNullException (nameof (assemblyString)); + + var name = new AssemblyName (assemblyString); + // TODO: trigger assemblyFromResolveEvent + + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return Load (name, ref stackMark, AssemblyLoadContext.CurrentContextualReflectionContext); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Assembly Load (AssemblyName assemblyRef) + { + if (assemblyRef == null) + throw new ArgumentNullException (nameof (assemblyRef)); + + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return Load (assemblyRef, ref stackMark, AssemblyLoadContext.CurrentContextualReflectionContext); + } + + internal static Assembly Load (AssemblyName assemblyRef, ref StackCrawlMark stackMark, AssemblyLoadContext assemblyLoadContext) + { + // TODO: pass AssemblyName + // TODO: pass assemblyLoadContext + var assembly = InternalLoad (assemblyRef.FullName, ref stackMark, IntPtr.Zero); + if (assembly == null) + throw new FileNotFoundException (null, assemblyRef.Name); + return assembly; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Assembly InternalLoad (string assemblyName, ref StackCrawlMark stackMark, IntPtr ptrLoadContextBinder); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern Type InternalGetType (Module module, string name, bool throwOnError, bool ignoreCase); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static void InternalGetAssemblyName (string assemblyFile, out Mono.MonoAssemblyName aname, out string codebase); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/AssemblyName.cs b/mcs/class/System.Private.CoreLib/System.Reflection/AssemblyName.cs new file mode 100644 index 0000000000..ec743437be --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/AssemblyName.cs @@ -0,0 +1,129 @@ +using Mono; +using System.Configuration.Assemblies; +using System.Globalization; +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection +{ + [StructLayout (LayoutKind.Sequential)] + partial class AssemblyName + { + public AssemblyName (string assemblyName) + { + if (assemblyName == null) + throw new ArgumentNullException (nameof (assemblyName)); + if (assemblyName.Length == 0 || assemblyName [0] == '\0') + throw new ArgumentException (SR.Format_StringZeroLength); + + using (var name = RuntimeMarshal.MarshalString (assemblyName)) { + // TODO: Should use CoreRT AssemblyNameParser + if (!ParseAssemblyName (name.Value, out var nativeName, out var isVersionDefined, out var isTokenDefined)) + throw new FileLoadException ("The assembly name is invalid."); + + try { + unsafe { + FillName (&nativeName, null, isVersionDefined, false, isTokenDefined); + } + } finally { + RuntimeMarshal.FreeAssemblyName (ref nativeName, false); + } + } + } + + unsafe byte [] ComputePublicKeyToken () + { + if (_publicKey == null || _publicKey.Length == 0) + return Array.Empty(); + + var token = new byte [8]; + fixed (byte* pkt = token) + fixed (byte *pk = _publicKey) + get_public_token (pkt, pk, _publicKey.Length); + return token; + } + + internal static AssemblyName Create (Assembly assembly, bool fillCodebase) + { + AssemblyName aname = new AssemblyName (); + unsafe { + MonoAssemblyName *native = GetNativeName (assembly.MonoAssembly); + aname.FillName (native, fillCodebase ? assembly.CodeBase : null, true, true, true); + } + return aname; + } + + internal unsafe void FillName (MonoAssemblyName *native, string codeBase, bool addVersion, bool addPublickey, bool defaultToken) + { + _name = RuntimeMarshal.PtrToUtf8String (native->name); + + _flags = (AssemblyNameFlags) native->flags; + + _hashAlgorithm = (AssemblyHashAlgorithm) native->hash_alg; + + _versionCompatibility = AssemblyVersionCompatibility.SameMachine; + + if (addVersion) { + var build = native->build == 65535 ? -1 : native->build; + var revision = native->revision == 65535 ? -1 : native->revision; + + if (build == -1) + _version = new Version (native->major, native->minor); + else if (revision == -1) + _version = new Version (native->major, native->minor, build); + else + _version = new Version (native->major, native->minor, build, revision); + } + + _codeBase = codeBase; + + if (native->culture != IntPtr.Zero) + _cultureInfo = CultureInfo.GetCultureInfo (RuntimeMarshal.PtrToUtf8String (native->culture)); + + if (native->public_key != IntPtr.Zero) { + _publicKey = RuntimeMarshal.DecodeBlobArray (native->public_key); + _flags |= AssemblyNameFlags.PublicKey; + } else if (addPublickey) { + _publicKey = Array.Empty (); + _flags |= AssemblyNameFlags.PublicKey; + } + + // MonoAssemblyName keeps the public key token as an hexadecimal string + if (native->public_key_token [0] != 0) { + var keyToken = new byte [8]; + for (int i = 0, j = 0; i < 8; ++i) { + keyToken [i] = (byte) (RuntimeMarshal.AsciHexDigitValue (native->public_key_token [j++]) << 4); + keyToken [i] |= (byte) RuntimeMarshal.AsciHexDigitValue (native->public_key_token [j++]); + } + _publicKeyToken = keyToken; + } else if (defaultToken) { + _publicKeyToken = Array.Empty (); + } + } + + static AssemblyName GetFileInformationCore (string assemblyFile) + { + unsafe { + Assembly.InternalGetAssemblyName (Path.GetFullPath (assemblyFile), out var nativeName, out var codebase); + + var aname = new AssemblyName (); + try { + aname.FillName (&nativeName, codebase, true, false, true); + return aname; + } finally { + RuntimeMarshal.FreeAssemblyName (ref nativeName, false); + } + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern unsafe void get_public_token (byte* token, byte* pubkey, int len); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern unsafe MonoAssemblyName* GetNativeName (IntPtr assemblyPtr); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern bool ParseAssemblyName (IntPtr name, out MonoAssemblyName aname, out bool is_version_definited, out bool is_token_defined); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeData.cs b/mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeData.cs new file mode 100644 index 0000000000..d918706d88 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeData.cs @@ -0,0 +1,160 @@ +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace System.Reflection +{ + public class CustomAttributeData + { + class LazyCAttrData { + internal Assembly assembly; + internal IntPtr data; + internal uint data_length; + } + + ConstructorInfo ctorInfo; + IList ctorArgs; + IList namedArgs; + LazyCAttrData lazyData; + + protected CustomAttributeData () + { + } + + // custom-attrs.c:create_custom_attr_data () + internal CustomAttributeData (ConstructorInfo ctorInfo, Assembly assembly, IntPtr data, uint data_length) + { + this.ctorInfo = ctorInfo; + this.lazyData = new LazyCAttrData (); + this.lazyData.assembly = assembly; + this.lazyData.data = data; + this.lazyData.data_length = data_length; + } + + internal CustomAttributeData (ConstructorInfo ctorInfo) + : this (ctorInfo, Array.Empty (), Array.Empty ()) + { + } + + internal CustomAttributeData (ConstructorInfo ctorInfo, IList ctorArgs, IList namedArgs) + { + this.ctorInfo = ctorInfo; + this.ctorArgs = ctorArgs; + this.namedArgs = namedArgs; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void ResolveArgumentsInternal (ConstructorInfo ctor, Assembly assembly, IntPtr data, uint data_length, out object[] ctorArgs, out object[] namedArgs); + + void ResolveArguments () + { + object[] ctor_args, named_args; + if (lazyData == null) + return; + + ResolveArgumentsInternal (ctorInfo, lazyData.assembly, lazyData.data, lazyData.data_length, out ctor_args, out named_args); + + this.ctorArgs = Array.AsReadOnly + (ctor_args != null ? UnboxValues (ctor_args) : Array.Empty()); + this.namedArgs = Array.AsReadOnly + (named_args != null ? UnboxValues (named_args) : Array.Empty()); + + lazyData = null; + } + + public + virtual + ConstructorInfo Constructor { + get { + return ctorInfo; + } + } + + public + virtual + IList ConstructorArguments { + get { + ResolveArguments (); + return ctorArgs; + } + } + + public + virtual + IList NamedArguments { + get { + ResolveArguments (); + return namedArgs; + } + } + + public static IList GetCustomAttributes (Assembly target) { + return MonoCustomAttrs.GetCustomAttributesData (target); + } + + public static IList GetCustomAttributes (MemberInfo target) { + return MonoCustomAttrs.GetCustomAttributesData (target); + } + + internal static IList GetCustomAttributesInternal (RuntimeType target) { + return MonoCustomAttrs.GetCustomAttributesData (target); + } + + public static IList GetCustomAttributes (Module target) { + return MonoCustomAttrs.GetCustomAttributesData (target); + } + + public static IList GetCustomAttributes (ParameterInfo target) { + return MonoCustomAttrs.GetCustomAttributesData (target); + } + + virtual public Type AttributeType { + get { return ctorInfo.DeclaringType; } + } + + public override string ToString () + { + ResolveArguments (); + + StringBuilder sb = new StringBuilder (); + + sb.Append ("[" + ctorInfo.DeclaringType.FullName + "("); + for (int i = 0; i < ctorArgs.Count; i++) { + sb.Append (ctorArgs [i].ToString ()); + if (i + 1 < ctorArgs.Count) + sb.Append (", "); + } + + if (namedArgs.Count > 0) + sb.Append (", "); + + for (int j = 0; j < namedArgs.Count; j++) { + sb.Append (namedArgs [j].ToString ()); + if (j + 1 < namedArgs.Count) + sb.Append (", "); + } + sb.AppendFormat (")]"); + + return sb.ToString (); + } + + static T [] UnboxValues (object [] values) + { + T [] retval = new T [values.Length]; + for (int i = 0; i < values.Length; i++) + retval [i] = (T) values [i]; + + return retval; + } + + public override int GetHashCode () => base.GetHashCode (); + + public override bool Equals (object? obj) + { + return obj == (object)this; + } + } + +} + diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeTypedArgument.cs b/mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeTypedArgument.cs new file mode 100644 index 0000000000..3046a2af8c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/CustomAttributeTypedArgument.cs @@ -0,0 +1,13 @@ +namespace System.Reflection +{ + partial struct CustomAttributeTypedArgument + { + static object CanonicalizeValue (object value) + { + if (value.GetType ().IsEnum) + return ((Enum) value).GetValue (); + + return value; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/FieldInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/FieldInfo.cs new file mode 100644 index 0000000000..1849ad1f14 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/FieldInfo.cs @@ -0,0 +1,105 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection +{ + partial class FieldInfo + { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern FieldInfo internal_from_handle_type (IntPtr field_handle, IntPtr type_handle); + + public static FieldInfo GetFieldFromHandle (RuntimeFieldHandle handle) + { + if (handle.IsNullHandle ()) + throw new ArgumentException (SR.Argument_InvalidHandle); + return internal_from_handle_type (handle.Value, IntPtr.Zero); + } + + public static FieldInfo GetFieldFromHandle (RuntimeFieldHandle handle, RuntimeTypeHandle declaringType) + { + if (handle.IsNullHandle ()) + throw new ArgumentException (SR.Argument_InvalidHandle); + FieldInfo fi = internal_from_handle_type (handle.Value, declaringType.Value); + if (fi == null) + throw new ArgumentException ("The field handle and the type handle are incompatible."); + return fi; + } + + internal virtual int GetFieldOffset () + { + throw NotImplemented.ByDesign; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private extern MarshalAsAttribute get_marshal_info (); + + internal object[] GetPseudoCustomAttributes () + { + int count = 0; + + if (IsNotSerialized) + count ++; + + if (DeclaringType.IsExplicitLayout) + count ++; + + MarshalAsAttribute marshalAs = get_marshal_info (); + if (marshalAs != null) + count ++; + + if (count == 0) + return null; + object[] attrs = new object [count]; + count = 0; + + if (IsNotSerialized) + attrs [count ++] = new NonSerializedAttribute (); + if (DeclaringType.IsExplicitLayout) + attrs [count ++] = new FieldOffsetAttribute (GetFieldOffset ()); + if (marshalAs != null) + attrs [count ++] = marshalAs; + + return attrs; + } + + internal CustomAttributeData[] GetPseudoCustomAttributesData () + { + int count = 0; + + if (IsNotSerialized) + count++; + + if (DeclaringType.IsExplicitLayout) + count++; + + MarshalAsAttribute marshalAs = get_marshal_info (); + if (marshalAs != null) + count++; + + if (count == 0) + return null; + CustomAttributeData[] attrsData = new CustomAttributeData [count]; + count = 0; + + if (IsNotSerialized) + attrsData [count++] = new CustomAttributeData ((typeof (NonSerializedAttribute)).GetConstructor (Type.EmptyTypes)); + if (DeclaringType.IsExplicitLayout) { + var ctorArgs = new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument (typeof (int), GetFieldOffset ()) }; + attrsData [count++] = new CustomAttributeData ( + (typeof (FieldOffsetAttribute)).GetConstructor (new[] { typeof (int) }), + ctorArgs, + Array.Empty ()); + } + + if (marshalAs != null) { + var ctorArgs = new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument (typeof (UnmanagedType), marshalAs.Value) }; + attrsData [count++] = new CustomAttributeData ( + (typeof (MarshalAsAttribute)).GetConstructor (new[] { typeof (UnmanagedType) }), + ctorArgs, + Array.Empty ());//FIXME Get named params + } + + return attrsData; + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/MemberInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/MemberInfo.cs new file mode 100644 index 0000000000..4925b980d6 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/MemberInfo.cs @@ -0,0 +1,24 @@ +namespace System.Reflection +{ + public abstract partial class MemberInfo + { + internal bool HasSameMetadataDefinitionAsCore(MemberInfo other) where TOther : MemberInfo + { + if (other == null) + throw new ArgumentNullException(nameof(other)); + + // Ensure that "other" is a runtime-implemented MemberInfo. Do this check before calling any methods on it! + if (!(other is TOther)) + return false; + + if (MetadataToken != other.MetadataToken) + return false; + + if (!(Module.Equals(other.Module))) + return false; + + return true; + } + } +} + diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/MethodBase.cs b/mcs/class/System.Private.CoreLib/System.Reflection/MethodBase.cs new file mode 100644 index 0000000000..1efd5a0baa --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/MethodBase.cs @@ -0,0 +1,74 @@ +using System.Runtime.CompilerServices; +using System.Reflection.Emit; + +namespace System.Reflection +{ + partial class MethodBase + { + public static MethodBase GetMethodFromHandle (RuntimeMethodHandle handle) + { + if (handle.IsNullHandle ()) + throw new ArgumentException (SR.Argument_InvalidHandle); + + MethodBase m = RuntimeMethodInfo.GetMethodFromHandleInternalType (handle.Value, IntPtr.Zero); + if (m == null) + throw new ArgumentException (SR.Argument_InvalidHandle); + + Type declaringType = m.DeclaringType; + if (declaringType != null && declaringType.IsGenericType) + throw new ArgumentException (String.Format (SR.Argument_MethodDeclaringTypeGeneric, + m, declaringType.GetGenericTypeDefinition ())); + + return m; + } + + public static MethodBase GetMethodFromHandle (RuntimeMethodHandle handle, RuntimeTypeHandle declaringType) + { + if (handle.IsNullHandle ()) + throw new ArgumentException (SR.Argument_InvalidHandle); + MethodBase m = RuntimeMethodInfo.GetMethodFromHandleInternalType (handle.Value, declaringType.Value); + if (m == null) + throw new ArgumentException (SR.Argument_InvalidHandle); + return m; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static MethodBase GetCurrentMethod (); + + internal virtual ParameterInfo[] GetParametersNoCopy () + { + return GetParametersInternal (); + } + + internal virtual ParameterInfo[] GetParametersInternal () + { + throw new NotImplementedException (); + } + + internal virtual int GetParametersCount () + { + throw new NotImplementedException (); + } + + internal virtual Type GetParameterType (int pos) + { + throw new NotImplementedException (); + } + + internal virtual Type[] GetParameterTypes () + { + ParameterInfo[] paramInfo = GetParametersNoCopy (); + + Type[] parameterTypes = new Type [paramInfo.Length]; + for (int i = 0; i < paramInfo.Length; i++) + parameterTypes [i] = paramInfo [i].ParameterType; + + return parameterTypes; + } + + internal virtual int get_next_table_index (object obj, int table, int count) + { + throw new NotImplementedException (); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeAssembly.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeAssembly.cs new file mode 100644 index 0000000000..425c1ddcda --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeAssembly.cs @@ -0,0 +1,397 @@ +#nullable disable +using System.IO; +using System.Globalization; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Loader; +using System.Threading; + +namespace System.Reflection +{ + [StructLayout (LayoutKind.Sequential)] + sealed class RuntimeAssembly : Assembly + { + private sealed class ResolveEventHolder + { + public event ModuleResolveEventHandler ModuleResolve; + } + + private sealed class UnmanagedMemoryStreamForModule : UnmanagedMemoryStream + { + Module module; + + public unsafe UnmanagedMemoryStreamForModule (byte* pointer, long length, Module module) + : base (pointer, length) + { + this.module = module; + } + } + + // + // KEEP IN SYNC WITH mcs/class/corlib/System.Reflection/RuntimeAssembly.cs + // + #region VM dependency + IntPtr _mono_assembly; + object _evidence; // Unused, kept for layout compatibility + #endregion + + ResolveEventHolder resolve_event_holder; + + public override extern MethodInfo? EntryPoint { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + public override bool ReflectionOnly => false; + + public override string? CodeBase { + get { + return get_code_base (this, false); + } + } + + public override string? FullName { + get { + return get_fullname (this); + } + } + + // + // We can't store the event directly in this class, since the + // compiler would silently insert the fields before _mono_assembly + // + public override event ModuleResolveEventHandler ModuleResolve { + add { + resolve_event_holder.ModuleResolve += value; + } + remove { + resolve_event_holder.ModuleResolve -= value; + } + } + + public override Module? ManifestModule => GetManifestModuleInternal (); + + public override bool GlobalAssemblyCache => false; + + public override long HostContext => 0; + + public override string ImageRuntimeVersion => InternalImageRuntimeVersion (this); + + public override string Location { + get { + return get_location (); + } + } + + // TODO: + public override bool IsCollectible => false; + + internal static AssemblyName CreateAssemblyName (string assemblyString, out RuntimeAssembly assemblyFromResolveEvent) + { + if (assemblyString == null) + throw new ArgumentNullException (nameof (assemblyString)); + + if ((assemblyString.Length == 0) || + (assemblyString[0] == '\0')) + throw new ArgumentException (SR.Format_StringZeroLength); + + assemblyFromResolveEvent = null; + try { + return new AssemblyName (assemblyString); + } catch (Exception) { + assemblyFromResolveEvent = (RuntimeAssembly)AssemblyLoadContext.DoAssemblyResolve (assemblyString); + if (assemblyFromResolveEvent == null) + throw new FileLoadException (assemblyString); + return null; + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public override extern String[] GetManifestResourceNames (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public override extern Type[] GetExportedTypes (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public override extern Type[] GetForwardedTypes (); + + public override ManifestResourceInfo GetManifestResourceInfo (string resourceName) + { + if (resourceName == null) + throw new ArgumentNullException ("resourceName"); + if (resourceName.Length == 0) + throw new ArgumentException ("String cannot have zero length."); + ManifestResourceInfo result = new ManifestResourceInfo (null, null, 0); + bool found = GetManifestResourceInfoInternal (resourceName, result); + if (found) + return result; + else + return null; + } + + public override Stream GetManifestResourceStream (string name) + { + if (name == null) + throw new ArgumentNullException (nameof (name)); + + if (name.Length == 0) + throw new ArgumentException ("String cannot have zero length.", + "name"); + + unsafe { + byte* data = (byte*) GetManifestResourceInternal (name, out int length, out Module resourceModule); + if (data == null) + return null; + + // It cannot use SafeBuffer mode because not all methods are supported in this + // mode (e.g. UnmanagedMemoryStream.get_PositionPointer) + return new UnmanagedMemoryStreamForModule (data, length, resourceModule); + } + } + + public override Stream GetManifestResourceStream (Type type, string name) + { + if (type == null && name == null) + throw new ArgumentNullException (nameof (type)); + + string nameSpace = type?.Namespace; + + string resourceName = nameSpace != null && name != null ? + nameSpace + Type.Delimiter + name : + nameSpace + name; + + return GetManifestResourceStream (resourceName); + } + + public override AssemblyName GetName(bool copiedName) + { + return AssemblyName.Create (this, true); + } + + public override Type GetType (string name, bool throwOnError, bool ignoreCase) + { + if (name == null) + throw new ArgumentNullException (nameof (name)); + + if (name.Length == 0) + throw new ArgumentException ("name", "Name cannot be empty"); + + return InternalGetType (null, name, throwOnError, ignoreCase); + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override IList GetCustomAttributesData () + { + return CustomAttributeData.GetCustomAttributes (this); + } + + public override object[] GetCustomAttributes (bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public override object[] GetCustomAttributes (Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override Module GetModule (string name) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name.Length == 0) + throw new ArgumentException ("Name can't be empty"); + + Module[] modules = GetModules (true); + foreach (Module module in modules) { + if (module.ScopeName == name) + return module; + } + + return null; + } + + public override Module[] GetModules (bool getResourceModules) + { + Module[] modules = GetModulesInternal (); + + if (!getResourceModules) { + var result = new List (modules.Length); + foreach (Module m in modules) + if (!m.IsResource ()) + result.Add (m); + return result.ToArray (); + } + else + return modules; + } + + public override Module[] GetLoadedModules (bool getResourceModules) + { + return GetModules (getResourceModules); + } + + public override AssemblyName[] GetReferencedAssemblies () + { + using (var nativeNames = new Mono.SafeGPtrArrayHandle (InternalGetReferencedAssemblies (this))) { + var numAssemblies = nativeNames.Length; + try { + AssemblyName [] result = new AssemblyName[numAssemblies]; + const bool addVersion = true; + const bool addPublicKey = false; + const bool defaultToken = true; + for (int i = 0; i < numAssemblies; i++) { + AssemblyName name = new AssemblyName (); + unsafe { + Mono.MonoAssemblyName *nativeName = (Mono.MonoAssemblyName*) nativeNames[i]; + name.FillName (nativeName, null, addVersion, addPublicKey, defaultToken); + result[i] = name; + } + } + return result; + } finally { + for (int i = 0; i < numAssemblies; i++) { + unsafe { + Mono.MonoAssemblyName* nativeName = (Mono.MonoAssemblyName*) nativeNames[i]; + Mono.RuntimeMarshal.FreeAssemblyName (ref *nativeName, true); + } + } + } + } + } + + public override Assembly GetSatelliteAssembly (CultureInfo culture) + { + return GetSatelliteAssembly (culture, null); + } + + public override Assembly GetSatelliteAssembly (CultureInfo culture, Version version) + { + if (culture == null) + throw new ArgumentNullException (nameof (culture)); + + return InternalGetSatelliteAssembly (culture, version, true); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + internal Assembly InternalGetSatelliteAssembly (CultureInfo culture, Version version, bool throwOnFileNotFound) + { + var aname = GetName (); + + var an = new AssemblyName (); + if (version == null) + an.Version = aname.Version; + else + an.Version = version; + + an.CultureInfo = culture; + an.Name = aname.Name + ".resources"; + + Assembly res = null; + try { + StackCrawlMark unused = default; + res = Assembly.Load (an, ref unused, null); + } catch { + } + + if (res == this) + res = null; + if (res == null && throwOnFileNotFound) + throw new FileNotFoundException (String.Format (culture, SR.IO_FileNotFound_FileName, an.Name)); + return res; + } + + public override FileStream GetFile (string name) + { + if (name == null) + throw new ArgumentNullException (nameof (name), SR.ArgumentNull_FileName); + if (name.Length == 0) + throw new ArgumentException (SR.Argument_EmptyFileName); + + string location = Location; + if (location != null && Path.GetFileName (location) == name) + return new FileStream (location, FileMode.Open, FileAccess.Read); + string filename = (string)GetFilesInternal (name, true); + if (filename != null) + return new FileStream (filename, FileMode.Open, FileAccess.Read); + else + return null; + } + + public override FileStream[] GetFiles (bool getResourceModules) + { + string[] names = (string[]) GetFilesInternal (null, getResourceModules); + if (names == null) + return Array.Empty (); + + string location = Location; + + FileStream[] res; + if (location != String.Empty) { + res = new FileStream [names.Length + 1]; + res [0] = new FileStream (location, FileMode.Open, FileAccess.Read); + for (int i = 0; i < names.Length; ++i) + res [i + 1] = new FileStream (names [i], FileMode.Open, FileAccess.Read); + } else { + res = new FileStream [names.Length]; + for (int i = 0; i < names.Length; ++i) + res [i] = new FileStream (names [i], FileMode.Open, FileAccess.Read); + } + return res; + } + + internal static RuntimeAssembly InternalLoadAssemblyName (AssemblyName assemblyRef, ref StackCrawlMark stackMark, AssemblyLoadContext assemblyLoadContext) + { + // TODO: Use assemblyLoadContext + return (RuntimeAssembly) InternalLoad (assemblyRef.FullName, ref stackMark, IntPtr.Zero); + } + + public override Module LoadModule (string moduleName, byte[] rawModule, byte[] rawSymbolStore) + { + throw new NotImplementedException (); + } + + internal override IntPtr MonoAssembly { + get { + return _mono_assembly; + } + } + + // FIXME: Merge some of these + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern string get_location (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static string get_code_base (Assembly a, bool escaped); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static string get_fullname (Assembly a); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static string InternalImageRuntimeVersion (Assembly a); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern bool GetManifestResourceInfoInternal (string name, ManifestResourceInfo info); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern IntPtr /* byte* */ GetManifestResourceInternal (string name, out int size, out Module module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern Module GetManifestModuleInternal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern Module[] GetModulesInternal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern IntPtr InternalGetReferencedAssemblies (Assembly module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern object GetFilesInternal (String name, bool getResourceModules); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeEventInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeEventInfo.cs new file mode 100644 index 0000000000..93eff0dfd8 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeEventInfo.cs @@ -0,0 +1,196 @@ +#nullable disable +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection +{ + internal struct MonoEventInfo + { + public Type declaring_type; + public Type reflected_type; + public String name; + public MethodInfo add_method; + public MethodInfo remove_method; + public MethodInfo raise_method; + public EventAttributes attrs; + public MethodInfo[] other_methods; + } + + [StructLayout (LayoutKind.Sequential)] + internal sealed class RuntimeEventInfo : EventInfo + { +#pragma warning disable 169 + IntPtr klass; + IntPtr handle; +#pragma warning restore 169 + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void get_event_info (RuntimeEventInfo ev, out MonoEventInfo info); + + internal static MonoEventInfo GetEventInfo (RuntimeEventInfo ev) + { + MonoEventInfo mei; + get_event_info (ev, out mei); + return mei; + } + + public override Module Module { + get { + return GetRuntimeModule (); + } + } + + internal BindingFlags BindingFlags { + get { + return GetBindingFlags (); + } + } + + internal RuntimeType GetDeclaringTypeInternal () + { + return (RuntimeType) DeclaringType; + } + + RuntimeType ReflectedTypeInternal { + get { + return (RuntimeType) ReflectedType; + } + } + + internal RuntimeModule GetRuntimeModule () + { + return GetDeclaringTypeInternal ().GetRuntimeModule (); + } + + internal BindingFlags GetBindingFlags () + { + MonoEventInfo info = GetEventInfo (this); + + MethodInfo method = info.add_method; + if (method == null) + method = info.remove_method; + if (method == null) + method = info.raise_method; + + return RuntimeType.FilterPreCalculate (method != null && method.IsPublic, GetDeclaringTypeInternal () != ReflectedType , method != null && method.IsStatic); + } + + public override EventAttributes Attributes { + get { + return GetEventInfo (this).attrs; + } + } + + public override MethodInfo GetAddMethod (bool nonPublic) + { + MonoEventInfo info = GetEventInfo (this); + if (nonPublic || (info.add_method != null && info.add_method.IsPublic)) + return info.add_method; + return null; + } + + public override MethodInfo GetRaiseMethod (bool nonPublic) + { + MonoEventInfo info = GetEventInfo (this); + if (nonPublic || (info.raise_method != null && info.raise_method.IsPublic)) + return info.raise_method; + return null; + } + + public override MethodInfo GetRemoveMethod (bool nonPublic) + { + MonoEventInfo info = GetEventInfo (this); + if (nonPublic || (info.remove_method != null && info.remove_method.IsPublic)) + return info.remove_method; + return null; + } + + public override MethodInfo[] GetOtherMethods (bool nonPublic) + { + MonoEventInfo info = GetEventInfo (this); + if (nonPublic) + return info.other_methods; + int num_public = 0; + foreach (MethodInfo m in info.other_methods) { + if (m.IsPublic) + num_public++; + } + if (num_public == info.other_methods.Length) + return info.other_methods; + MethodInfo[] res = new MethodInfo [num_public]; + num_public = 0; + foreach (MethodInfo m in info.other_methods) { + if (m.IsPublic) + res [num_public++] = m; + } + return res; + } + + public override Type DeclaringType { + get { + return GetEventInfo (this).declaring_type; + } + } + + public override Type ReflectedType { + get { + return GetEventInfo (this).reflected_type; + } + } + + public override string Name { + get { + return GetEventInfo (this).name; + } + } + + public override string ToString () + { + return EventHandlerType + " " + Name; + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes( bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public override object[] GetCustomAttributes( Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } + + public override int MetadataToken { + get { + return get_metadata_token (this); + } + } + + public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore (other); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern int get_metadata_token (RuntimeEventInfo monoEvent); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern EventInfo internal_from_handle_type (IntPtr event_handle, IntPtr type_handle); + + internal static EventInfo GetEventFromHandle (Mono.RuntimeEventHandle handle, RuntimeTypeHandle reflectedType) + { + if (handle.Value == IntPtr.Zero) + throw new ArgumentException ("The handle is invalid."); + EventInfo ei = internal_from_handle_type (handle.Value, reflectedType.Value); + if (ei == null) + throw new ArgumentException ("The event handle and the type handle are incompatible."); + return ei; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeExceptionHandlingClause.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeExceptionHandlingClause.cs new file mode 100644 index 0000000000..3e538dd3c5 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeExceptionHandlingClause.cs @@ -0,0 +1,27 @@ +using System.Runtime.InteropServices; + +namespace System.Reflection +{ + [StructLayout (LayoutKind.Sequential)] + internal sealed class RuntimeExceptionHandlingClause : ExceptionHandlingClause + { + #region Keep in sync with MonoReflectionExceptionHandlingClause in object-internals.h + internal Type catch_type; + internal int filter_offset; + internal ExceptionHandlingClauseOptions flags; + internal int try_offset; + internal int try_length; + internal int handler_offset; + internal int handler_length; + #endregion + + public override ExceptionHandlingClauseOptions Flags => flags; + public override int TryOffset => try_offset; + public override int TryLength => try_length; + public override int HandlerOffset => handler_offset; + public override int HandlerLength => handler_length; + public override int FilterOffset => filter_offset; + public override Type? CatchType => catch_type; + } + +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeFieldInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeFieldInfo.cs new file mode 100644 index 0000000000..3b848a384d --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeFieldInfo.cs @@ -0,0 +1,264 @@ +#nullable disable +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Diagnostics; + +namespace System.Reflection +{ + abstract class RtFieldInfo : FieldInfo + { + internal abstract object UnsafeGetValue (object obj); + internal abstract void UnsafeSetValue (Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture); + internal abstract void CheckConsistency(Object target); + } + + [StructLayout (LayoutKind.Sequential)] + class RuntimeFieldInfo : RtFieldInfo + { +#pragma warning disable 649 + internal IntPtr klass; + internal RuntimeFieldHandle fhandle; + string name; + Type type; + FieldAttributes attrs; +#pragma warning restore 649 + + internal BindingFlags BindingFlags { + get { + return 0; + } + } + + public override Module Module { + get { + return GetRuntimeModule (); + } + } + + internal RuntimeType GetDeclaringTypeInternal () + { + return (RuntimeType) DeclaringType; + } + + RuntimeType ReflectedTypeInternal { + get { + return (RuntimeType) ReflectedType; + } + } + + internal RuntimeModule GetRuntimeModule () + { + return GetDeclaringTypeInternal ().GetRuntimeModule (); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal override extern object UnsafeGetValue (object obj); + + internal override void CheckConsistency(Object target) + { + // only test instance fields + if ((Attributes & FieldAttributes.Static) != FieldAttributes.Static) + { + if (!DeclaringType.IsInstanceOfType(target)) + { + if (target == null) + { + throw new TargetException(Environment.GetResourceString("RFLCT.Targ_StatFldReqTarg")); + } + else + { + throw new ArgumentException( + String.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Arg_FieldDeclTarget"), + Name, DeclaringType, target.GetType())); + } + } + } + } + + [DebuggerStepThroughAttribute] + [Diagnostics.DebuggerHidden] + internal override void UnsafeSetValue (Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) + { + bool domainInitialized = false; + RuntimeFieldHandle.SetValue (this, obj, value, null, Attributes, null, ref domainInitialized); + } + + [DebuggerStepThroughAttribute] + [Diagnostics.DebuggerHidden] + public override void SetValueDirect(TypedReference obj, Object value) + { + if (obj.IsNull) + throw new ArgumentException(Environment.GetResourceString("Arg_TypedReference_Null")); + + unsafe + { + // Passing TypedReference by reference is easier to make correct in native code + RuntimeFieldHandle.SetValueDirect(this, (RuntimeType)FieldType, &obj, value, (RuntimeType)DeclaringType); + } + } + + [DebuggerStepThroughAttribute] + [Diagnostics.DebuggerHidden] + public override Object GetValueDirect(TypedReference obj) + { + if (obj.IsNull) + throw new ArgumentException(Environment.GetResourceString("Arg_TypedReference_Null")); + + unsafe + { + // Passing TypedReference by reference is easier to make correct in native code + return RuntimeFieldHandle.GetValueDirect(this, (RuntimeType)FieldType, &obj, (RuntimeType)DeclaringType); + } + } + + public override FieldAttributes Attributes { + get { + return attrs; + } + } + public override RuntimeFieldHandle FieldHandle { + get { + return fhandle; + } + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern Type ResolveType (); + + public override Type FieldType { + get { + if (type == null) + type = ResolveType (); + return type; + } + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private extern Type GetParentType (bool declaring); + + public override Type ReflectedType { + get { + return GetParentType (false); + } + } + public override Type DeclaringType { + get { + return GetParentType (true); + } + } + public override string Name { + get { + return name; + } + } + + public override bool IsDefined (Type attributeType, bool inherit) { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes( bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + public override object[] GetCustomAttributes( Type attributeType, bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal override extern int GetFieldOffset (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private extern object GetValueInternal (object obj); + + public override object GetValue (object obj) + { + if (!IsStatic) { + if (obj == null) + throw new TargetException ("Non-static field requires a target"); + if (!DeclaringType.IsAssignableFrom (obj.GetType ())) + throw new ArgumentException (string.Format ( + "Field {0} defined on type {1} is not a field on the target object which is of type {2}.", + Name, DeclaringType, obj.GetType ()), + "obj"); + } + + if (!IsLiteral) + CheckGeneric (); + return GetValueInternal (obj); + } + + public override string ToString () { + return String.Format ("{0} {1}", FieldType, name); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern void SetValueInternal (FieldInfo fi, object obj, object value); + + public override void SetValue (object obj, object val, BindingFlags invokeAttr, Binder binder, CultureInfo culture) + { + if (!IsStatic) { + if (obj == null) + throw new TargetException ("Non-static field requires a target"); + if (!DeclaringType.IsAssignableFrom (obj.GetType ())) + throw new ArgumentException (string.Format ( + "Field {0} defined on type {1} is not a field on the target object which is of type {2}.", + Name, DeclaringType, obj.GetType ()), + "obj"); + } + if (IsLiteral) + throw new FieldAccessException ("Cannot set a constant field"); + if (binder == null) + binder = Type.DefaultBinder; + CheckGeneric (); + if (val != null) { + RuntimeType fieldType = (RuntimeType) FieldType; + val = fieldType.CheckValue (val, binder, culture, invokeAttr); + } + SetValueInternal (this, obj, val); + } + + internal RuntimeFieldInfo Clone (string newName) + { + RuntimeFieldInfo field = new RuntimeFieldInfo (); + field.name = newName; + field.type = type; + field.attrs = attrs; + field.klass = klass; + field.fhandle = fhandle; + return field; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public override extern object GetRawConstantValue (); + + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } + + void CheckGeneric () { + if (DeclaringType.ContainsGenericParameters) + throw new InvalidOperationException ("Late bound operations cannot be performed on fields with types for which Type.ContainsGenericParameters is true."); + } + + public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore (other); + + public override int MetadataToken { + get { + return get_metadata_token (this); + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int get_metadata_token (RuntimeFieldInfo monoField); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern Type[] GetTypeModifiers (bool optional); + + public override Type[] GetOptionalCustomModifiers () => GetCustomModifiers (true); + + public override Type[] GetRequiredCustomModifiers () => GetCustomModifiers (false); + + private Type[] GetCustomModifiers (bool optional) => GetTypeModifiers (optional) ?? Type.EmptyTypes; + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeLocalVariableInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeLocalVariableInfo.cs new file mode 100644 index 0000000000..5336b7bb17 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeLocalVariableInfo.cs @@ -0,0 +1,22 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection { + [StructLayout (LayoutKind.Sequential)] + internal sealed class RuntimeLocalVariableInfo : LocalVariableInfo { + #region Keep in sync with MonoReflectionLocalVariableInfo in object-internals.h + internal Type type; + internal bool is_pinned; + internal ushort position; + #endregion + + public override bool IsPinned => is_pinned; + + public override int LocalIndex => position; + + public override Type LocalType => type; + } + +} + diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodBody.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodBody.cs new file mode 100644 index 0000000000..ef1c0ce39b --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodBody.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Reflection { + + internal sealed class RuntimeMethodBody : MethodBody + { + ExceptionHandlingClause[] clauses; + LocalVariableInfo[] locals; + byte[] il; + bool init_locals; + int sig_token; + int max_stack; + + // Called by the runtime + internal RuntimeMethodBody (ExceptionHandlingClause[] clauses, LocalVariableInfo[] locals, + byte[] il, bool init_locals, int sig_token, int max_stack) + { + this.clauses = clauses; + this.locals = locals; + this.il = il; + this.init_locals = init_locals; + this.sig_token = sig_token; + this.max_stack = max_stack; + } + + public override int LocalSignatureMetadataToken => sig_token; + public override IList LocalVariables => Array.AsReadOnly (locals); + public override int MaxStackSize => max_stack; + public override bool InitLocals => init_locals; + public override byte[] GetILAsByteArray() => il; + public override IList ExceptionHandlingClauses => Array.AsReadOnly (clauses); + } + +} + + diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodInfo.cs new file mode 100644 index 0000000000..a0eeeaf8b9 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeMethodInfo.cs @@ -0,0 +1,892 @@ +#nullable disable +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Reflection.Emit; +using System.Text; +using System.Diagnostics; +using InteropServicesCallingConvention = System.Runtime.InteropServices.CallingConvention; + +namespace System.Reflection +{ + + [Flags] + internal enum PInvokeAttributes + { + NoMangle = 0x0001, + + CharSetMask = 0x0006, + CharSetNotSpec = 0x0000, + CharSetAnsi = 0x0002, + CharSetUnicode = 0x0004, + CharSetAuto = 0x0006, + + BestFitUseAssem = 0x0000, + BestFitEnabled = 0x0010, + BestFitDisabled = 0x0020, + BestFitMask = 0x0030, + + ThrowOnUnmappableCharUseAssem = 0x0000, + ThrowOnUnmappableCharEnabled = 0x1000, + ThrowOnUnmappableCharDisabled = 0x2000, + ThrowOnUnmappableCharMask = 0x3000, + + SupportsLastError = 0x0040, + + CallConvMask = 0x0700, + CallConvWinapi = 0x0100, + CallConvCdecl = 0x0200, + CallConvStdcall = 0x0300, + CallConvThiscall = 0x0400, + CallConvFastcall = 0x0500, + + MaxValue = 0xFFFF, + } + + internal struct MonoMethodInfo + { +#pragma warning disable 649 + private Type parent; + private Type ret; + internal MethodAttributes attrs; + internal MethodImplAttributes iattrs; + private CallingConventions callconv; +#pragma warning restore 649 + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void get_method_info (IntPtr handle, out MonoMethodInfo info); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern int get_method_attributes (IntPtr handle); + + internal static MonoMethodInfo GetMethodInfo (IntPtr handle) + { + MonoMethodInfo info; + MonoMethodInfo.get_method_info (handle, out info); + return info; + } + + internal static Type GetDeclaringType (IntPtr handle) + { + return GetMethodInfo (handle).parent; + } + + internal static Type GetReturnType (IntPtr handle) + { + return GetMethodInfo (handle).ret; + } + + internal static MethodAttributes GetAttributes (IntPtr handle) + { + return (MethodAttributes)get_method_attributes (handle); + } + + internal static CallingConventions GetCallingConvention (IntPtr handle) + { + return GetMethodInfo (handle).callconv; + } + + internal static MethodImplAttributes GetMethodImplementationFlags (IntPtr handle) + { + return GetMethodInfo (handle).iattrs; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern ParameterInfo[] get_parameter_info (IntPtr handle, MemberInfo member); + + static internal ParameterInfo[] GetParametersInfo (IntPtr handle, MemberInfo member) + { + return get_parameter_info (handle, member); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern MarshalAsAttribute get_retval_marshal (IntPtr handle); + + static internal ParameterInfo GetReturnParameterInfo (RuntimeMethodInfo method) + { + return RuntimeParameterInfo.New (GetReturnType (method.mhandle), method, get_retval_marshal (method.mhandle)); + } + } + + [StructLayout (LayoutKind.Sequential)] + class RuntimeMethodInfo : MethodInfo + { +#pragma warning disable 649 + internal IntPtr mhandle; + string name; + Type reftype; +#pragma warning restore 649 + + internal BindingFlags BindingFlags { + get { + return 0; + } + } + + public override Module Module { + get { + return GetRuntimeModule (); + } + } + + RuntimeType ReflectedTypeInternal { + get { + return (RuntimeType) ReflectedType; + } + } + + string FormatNameAndSig (bool serialization) + { + // Serialization uses ToString to resolve MethodInfo overloads. + StringBuilder sbName = new StringBuilder(Name); + + // serialization == true: use unambiguous (except for assembly name) type names to distinguish between overloads. + // serialization == false: use basic format to maintain backward compatibility of MethodInfo.ToString(). + TypeNameFormatFlags format = serialization ? TypeNameFormatFlags.FormatSerialization : TypeNameFormatFlags.FormatBasic; + + if (IsGenericMethod) + sbName.Append(RuntimeMethodHandle.ConstructInstantiation(this, format)); + + sbName.Append("("); + RuntimeParameterInfo.FormatParameters (sbName, GetParametersNoCopy (), CallingConvention, serialization); + sbName.Append(")"); + + return sbName.ToString(); + } + + public override Delegate CreateDelegate (Type delegateType) + { + return Delegate.CreateDelegate (delegateType, this); + } + + public override Delegate CreateDelegate (Type delegateType, object target) + { + return Delegate.CreateDelegate (delegateType, target, this); + } + + public override String ToString() + { + return ReturnType.FormatTypeName() + " " + FormatNameAndSig(false); + } + + internal RuntimeModule GetRuntimeModule () + { + return ((RuntimeType)DeclaringType).GetRuntimeModule(); + } + + internal static MethodBase GetMethodFromHandleNoGenericCheck (RuntimeMethodHandle handle) + { + return GetMethodFromHandleInternalType_native (handle.Value, IntPtr.Zero, false); + } + + internal static MethodBase GetMethodFromHandleNoGenericCheck (RuntimeMethodHandle handle, RuntimeTypeHandle reflectedType) + { + return GetMethodFromHandleInternalType_native (handle.Value, reflectedType.Value, false); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + [PreserveDependency(".ctor(System.Reflection.ExceptionHandlingClause[],System.Reflection.LocalVariableInfo[],System.Byte[],System.Boolean,System.Int32,System.Int32)", "System.Reflection.RuntimeMethodBody")] + internal extern static MethodBody GetMethodBodyInternal (IntPtr handle); + + internal static MethodBody GetMethodBody (IntPtr handle) + { + return GetMethodBodyInternal (handle); + } + + internal static MethodBase GetMethodFromHandleInternalType (IntPtr method_handle, IntPtr type_handle) { + return GetMethodFromHandleInternalType_native (method_handle, type_handle, true); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static MethodBase GetMethodFromHandleInternalType_native (IntPtr method_handle, IntPtr type_handle, bool genericCheck); + + internal RuntimeMethodInfo () { + } + + internal RuntimeMethodInfo (RuntimeMethodHandle mhandle) { + this.mhandle = mhandle.Value; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern string get_name (MethodBase method); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern RuntimeMethodInfo get_base_method (RuntimeMethodInfo method, bool definition); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern int get_metadata_token (RuntimeMethodInfo method); + + public override MethodInfo GetBaseDefinition () + { + return get_base_method (this, true); + } + + // TODO: Remove, needed only for MonoCustomAttribute + internal MethodInfo GetBaseMethod () + { + return get_base_method (this, false); + } + + public override ParameterInfo ReturnParameter { + get { + return MonoMethodInfo.GetReturnParameterInfo (this); + } + } + + public override Type ReturnType { + get { + return MonoMethodInfo.GetReturnType (mhandle); + } + } + public override ICustomAttributeProvider ReturnTypeCustomAttributes { + get { + return MonoMethodInfo.GetReturnParameterInfo (this); + } + } + + public override int MetadataToken { + get { + return get_metadata_token (this); + } + } + + public override MethodImplAttributes GetMethodImplementationFlags () + { + return MonoMethodInfo.GetMethodImplementationFlags (mhandle); + } + + public override ParameterInfo[] GetParameters () + { + var src = MonoMethodInfo.GetParametersInfo (mhandle, this); + if (src.Length == 0) + return src; + + // Have to clone because GetParametersInfo icall returns cached value + var dest = new ParameterInfo [src.Length]; + Array.FastCopy (src, 0, dest, 0, src.Length); + return dest; + } + + internal override ParameterInfo[] GetParametersInternal () + { + return MonoMethodInfo.GetParametersInfo (mhandle, this); + } + + internal override int GetParametersCount () + { + return MonoMethodInfo.GetParametersInfo (mhandle, this).Length; + } + + /* + * InternalInvoke() receives the parameters correctly converted by the + * binder to match the types of the method signature. + * The exc argument is used to capture exceptions thrown by the icall. + * Exceptions thrown by the called method propagate normally. + */ + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern Object InternalInvoke (Object obj, Object[] parameters, out Exception exc); + + [DebuggerHidden] + [DebuggerStepThrough] + public override Object Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) + { + if (!IsStatic) { + if (!DeclaringType.IsInstanceOfType (obj)) { + if (obj == null) + throw new TargetException ("Non-static method requires a target."); + else + throw new TargetException ("Object does not match target type."); + } + } + + if (binder == null) + binder = Type.DefaultBinder; + + /*Avoid allocating an array every time*/ + ParameterInfo[] pinfo = GetParametersInternal (); + ConvertValues (binder, parameters, pinfo, culture, invokeAttr); + + if (ContainsGenericParameters) + throw new InvalidOperationException ("Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true."); + + Exception exc; + object o = null; + + if ((invokeAttr & BindingFlags.DoNotWrapExceptions) == 0) { + try { + o = InternalInvoke (obj, parameters, out exc); + } catch (Mono.NullByRefReturnException) { + throw new NullReferenceException (); + } catch (OverflowException) { + throw; + } catch (Exception e) { + throw new TargetInvocationException (e); + } + } + else + { + try { + o = InternalInvoke (obj, parameters, out exc); + } catch (Mono.NullByRefReturnException) { + throw new NullReferenceException (); + } + } + + if (exc != null) + throw exc; + return o; + } + + internal static void ConvertValues (Binder binder, object[] args, ParameterInfo[] pinfo, CultureInfo culture, BindingFlags invokeAttr) + { + if (args == null) { + if (pinfo.Length == 0) + return; + + throw new TargetParameterCountException (); + } + + if (pinfo.Length != args.Length) + throw new TargetParameterCountException (); + + for (int i = 0; i < args.Length; ++i) { + var arg = args [i]; + var pi = pinfo [i]; + if (arg == Type.Missing) { + if (pi.DefaultValue == System.DBNull.Value) + throw new ArgumentException(Environment.GetResourceString("Arg_VarMissNull"),"parameters"); + + args [i] = pi.DefaultValue; + continue; + } + + var rt = (RuntimeType) pi.ParameterType; + args [i] = rt.CheckValue (arg, binder, culture, invokeAttr); + } + } + + public override RuntimeMethodHandle MethodHandle { + get { + return new RuntimeMethodHandle (mhandle); + } + } + + public override MethodAttributes Attributes { + get { + return MonoMethodInfo.GetAttributes (mhandle); + } + } + + public override CallingConventions CallingConvention { + get { + return MonoMethodInfo.GetCallingConvention (mhandle); + } + } + + public override Type ReflectedType { + get { + return reftype; + } + } + public override Type DeclaringType { + get { + return MonoMethodInfo.GetDeclaringType (mhandle); + } + } + public override string Name { + get { + if (name != null) + return name; + return get_name (this); + } + } + + public override bool IsDefined (Type attributeType, bool inherit) { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes( bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + public override object[] GetCustomAttributes( Type attributeType, bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern void GetPInvoke (out PInvokeAttributes flags, out string entryPoint, out string dllName); + + internal object[] GetPseudoCustomAttributes () + { + int count = 0; + + /* MS.NET doesn't report MethodImplAttribute */ + + MonoMethodInfo info = MonoMethodInfo.GetMethodInfo (mhandle); + if ((info.iattrs & MethodImplAttributes.PreserveSig) != 0) + count ++; + if ((info.attrs & MethodAttributes.PinvokeImpl) != 0) + count ++; + + if (count == 0) + return null; + object[] attrs = new object [count]; + count = 0; + + if ((info.iattrs & MethodImplAttributes.PreserveSig) != 0) + attrs [count ++] = new PreserveSigAttribute (); + if ((info.attrs & MethodAttributes.PinvokeImpl) != 0) { + attrs [count ++] = GetDllImportAttribute (); + } + + return attrs; + } + + Attribute GetDllImportAttribute () + { + string entryPoint, dllName = null; + int token = MetadataToken; + PInvokeAttributes flags = 0; + + GetPInvoke (out flags, out entryPoint, out dllName); + + CharSet charSet = CharSet.None; + + switch (flags & PInvokeAttributes.CharSetMask) { + case PInvokeAttributes.CharSetNotSpec: charSet = CharSet.None; break; + case PInvokeAttributes.CharSetAnsi: charSet = CharSet.Ansi; break; + case PInvokeAttributes.CharSetUnicode: charSet = CharSet.Unicode; break; + case PInvokeAttributes.CharSetAuto: charSet = CharSet.Auto; break; + + // Invalid: default to CharSet.None + default: break; + } + + CallingConvention callingConvention = InteropServicesCallingConvention.Cdecl; + + switch (flags & PInvokeAttributes.CallConvMask) { + case PInvokeAttributes.CallConvWinapi: callingConvention = InteropServicesCallingConvention.Winapi; break; + case PInvokeAttributes.CallConvCdecl: callingConvention = InteropServicesCallingConvention.Cdecl; break; + case PInvokeAttributes.CallConvStdcall: callingConvention = InteropServicesCallingConvention.StdCall; break; + case PInvokeAttributes.CallConvThiscall: callingConvention = InteropServicesCallingConvention.ThisCall; break; + case PInvokeAttributes.CallConvFastcall: callingConvention = InteropServicesCallingConvention.FastCall; break; + + // Invalid: default to CallingConvention.Cdecl + default: break; + } + + bool exactSpelling = (flags & PInvokeAttributes.NoMangle) != 0; + bool setLastError = (flags & PInvokeAttributes.SupportsLastError) != 0; + bool bestFitMapping = (flags & PInvokeAttributes.BestFitMask) == PInvokeAttributes.BestFitEnabled; + bool throwOnUnmappableChar = (flags & PInvokeAttributes.ThrowOnUnmappableCharMask) == PInvokeAttributes.ThrowOnUnmappableCharEnabled; + bool preserveSig = (GetMethodImplementationFlags() & MethodImplAttributes.PreserveSig) != 0; + + return new DllImportAttribute (dllName) { EntryPoint = entryPoint, CharSet = charSet, SetLastError = setLastError, + ExactSpelling = exactSpelling, PreserveSig = preserveSig, BestFitMapping = bestFitMapping, + ThrowOnUnmappableChar = throwOnUnmappableChar, CallingConvention = callingConvention }; + } + + internal CustomAttributeData[] GetPseudoCustomAttributesData () + { + int count = 0; + + /* MS.NET doesn't report MethodImplAttribute */ + + MonoMethodInfo info = MonoMethodInfo.GetMethodInfo (mhandle); + if ((info.iattrs & MethodImplAttributes.PreserveSig) != 0) + count++; + if ((info.attrs & MethodAttributes.PinvokeImpl) != 0) + count++; + + if (count == 0) + return null; + CustomAttributeData[] attrsData = new CustomAttributeData [count]; + count = 0; + + if ((info.iattrs & MethodImplAttributes.PreserveSig) != 0) + attrsData [count++] = new CustomAttributeData ((typeof (PreserveSigAttribute)).GetConstructor (Type.EmptyTypes)); + if ((info.attrs & MethodAttributes.PinvokeImpl) != 0) + attrsData [count++] = GetDllImportAttributeData (); + + return attrsData; + } + + private CustomAttributeData GetDllImportAttributeData () + { + if ((Attributes & MethodAttributes.PinvokeImpl) == 0) + return null; + + string entryPoint, dllName = null; + PInvokeAttributes flags = 0; + + GetPInvoke (out flags, out entryPoint, out dllName); + + CharSet charSet; + + switch (flags & PInvokeAttributes.CharSetMask) { + case PInvokeAttributes.CharSetNotSpec: + charSet = CharSet.None; + break; + case PInvokeAttributes.CharSetAnsi: + charSet = CharSet.Ansi; + break; + case PInvokeAttributes.CharSetUnicode: + charSet = CharSet.Unicode; + break; + case PInvokeAttributes.CharSetAuto: + charSet = CharSet.Auto; + break; + // Invalid: default to CharSet.None + default: + charSet = CharSet.None; + break; + } + + InteropServicesCallingConvention callingConvention; + + switch (flags & PInvokeAttributes.CallConvMask) { + case PInvokeAttributes.CallConvWinapi: + callingConvention = InteropServicesCallingConvention.Winapi; + break; + case PInvokeAttributes.CallConvCdecl: + callingConvention = InteropServicesCallingConvention.Cdecl; + break; + case PInvokeAttributes.CallConvStdcall: + callingConvention = InteropServicesCallingConvention.StdCall; + break; + case PInvokeAttributes.CallConvThiscall: + callingConvention = InteropServicesCallingConvention.ThisCall; + break; + case PInvokeAttributes.CallConvFastcall: + callingConvention = InteropServicesCallingConvention.FastCall; + break; + // Invalid: default to CallingConvention.Cdecl + default: + callingConvention = InteropServicesCallingConvention.Cdecl; + break; + } + + bool exactSpelling = (flags & PInvokeAttributes.NoMangle) != 0; + bool setLastError = (flags & PInvokeAttributes.SupportsLastError) != 0; + bool bestFitMapping = (flags & PInvokeAttributes.BestFitMask) == PInvokeAttributes.BestFitEnabled; + bool throwOnUnmappableChar = (flags & PInvokeAttributes.ThrowOnUnmappableCharMask) == PInvokeAttributes.ThrowOnUnmappableCharEnabled; + bool preserveSig = (GetMethodImplementationFlags () & MethodImplAttributes.PreserveSig) != 0; + + var ctorArgs = new CustomAttributeTypedArgument [] { + new CustomAttributeTypedArgument (typeof (string), dllName), + }; + + var attrType = typeof (DllImportAttribute); + + var namedArgs = new CustomAttributeNamedArgument [] { + new CustomAttributeNamedArgument (attrType.GetField ("EntryPoint"), entryPoint), + new CustomAttributeNamedArgument (attrType.GetField ("CharSet"), charSet), + new CustomAttributeNamedArgument (attrType.GetField ("ExactSpelling"), exactSpelling), + new CustomAttributeNamedArgument (attrType.GetField ("SetLastError"), setLastError), + new CustomAttributeNamedArgument (attrType.GetField ("PreserveSig"), preserveSig), + new CustomAttributeNamedArgument (attrType.GetField ("CallingConvention"), callingConvention), + new CustomAttributeNamedArgument (attrType.GetField ("BestFitMapping"), bestFitMapping), + new CustomAttributeNamedArgument (attrType.GetField ("ThrowOnUnmappableChar"), throwOnUnmappableChar) + }; + + return new CustomAttributeData ( + attrType.GetConstructor (new[] { typeof (string) }), + ctorArgs, + namedArgs); + } + + public override MethodInfo MakeGenericMethod (Type [] methodInstantiation) + { + if (methodInstantiation == null) + throw new ArgumentNullException ("methodInstantiation"); + + if (!IsGenericMethodDefinition) + throw new InvalidOperationException ("not a generic method definition"); + + /*FIXME add GetGenericArgumentsLength() internal vcall to speed this up*/ + if (GetGenericArguments ().Length != methodInstantiation.Length) + throw new ArgumentException ("Incorrect length"); + + bool hasUserType = false; + foreach (Type type in methodInstantiation) { + if (type == null) + throw new ArgumentNullException (); + if (!(type is RuntimeType)) + hasUserType = true; + } + + if (hasUserType) { + if (RuntimeFeature.IsDynamicCodeSupported) + return new MethodOnTypeBuilderInst (this, methodInstantiation); + + throw new NotSupportedException ("User types are not supported under full aot"); + } + + MethodInfo ret = MakeGenericMethod_impl (methodInstantiation); + if (ret == null) + throw new ArgumentException (String.Format ("The method has {0} generic parameter(s) but {1} generic argument(s) were provided.", GetGenericArguments ().Length, methodInstantiation.Length)); + return ret; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern MethodInfo MakeGenericMethod_impl (Type [] types); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public override extern Type [] GetGenericArguments (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern MethodInfo GetGenericMethodDefinition_impl (); + + public override MethodInfo GetGenericMethodDefinition () + { + MethodInfo res = GetGenericMethodDefinition_impl (); + if (res == null) + throw new InvalidOperationException (); + + return res; + } + + public override extern bool IsGenericMethodDefinition { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + get; + } + + public override extern bool IsGenericMethod { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + get; + } + + public override bool ContainsGenericParameters { + get { + if (IsGenericMethod) { + foreach (Type arg in GetGenericArguments ()) + if (arg.ContainsGenericParameters) + return true; + } + return DeclaringType.ContainsGenericParameters; + } + } + + public override MethodBody GetMethodBody () { + return GetMethodBody (mhandle); + } + + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } + + public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore (other); + } + + [StructLayout (LayoutKind.Sequential)] + class RuntimeConstructorInfo : ConstructorInfo + { +#pragma warning disable 649 + internal IntPtr mhandle; + string name; + Type reftype; +#pragma warning restore 649 + + public override Module Module { + get { + return GetRuntimeModule (); + } + } + + internal RuntimeModule GetRuntimeModule () + { + return RuntimeTypeHandle.GetModule((RuntimeType)DeclaringType); + } + + internal BindingFlags BindingFlags { + get { + return 0; + } + } + + RuntimeType ReflectedTypeInternal { + get { + return (RuntimeType) ReflectedType; + } + } + + public override MethodImplAttributes GetMethodImplementationFlags () + { + return MonoMethodInfo.GetMethodImplementationFlags (mhandle); + } + + public override ParameterInfo[] GetParameters () + { + return MonoMethodInfo.GetParametersInfo (mhandle, this); + } + + internal override ParameterInfo[] GetParametersInternal () + { + return MonoMethodInfo.GetParametersInfo (mhandle, this); + } + + internal override int GetParametersCount () + { + var pi = MonoMethodInfo.GetParametersInfo (mhandle, this); + return pi == null ? 0 : pi.Length; + } + + /* + * InternalInvoke() receives the parameters correctly converted by the binder + * to match the types of the method signature. + */ + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern Object InternalInvoke (Object obj, Object[] parameters, out Exception exc); + + [DebuggerHidden] + [DebuggerStepThrough] + public override object Invoke (object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) + { + if (obj == null) { + if (!IsStatic) + throw new TargetException ("Instance constructor requires a target"); + } else if (!DeclaringType.IsInstanceOfType (obj)) { + throw new TargetException ("Constructor does not match target type"); + } + + return DoInvoke (obj, invokeAttr, binder, parameters, culture); + } + + object DoInvoke (object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) + { + if (binder == null) + binder = Type.DefaultBinder; + + ParameterInfo[] pinfo = MonoMethodInfo.GetParametersInfo (mhandle, this); + + RuntimeMethodInfo.ConvertValues (binder, parameters, pinfo, culture, invokeAttr); + + if (obj == null && DeclaringType.ContainsGenericParameters) + throw new MemberAccessException ("Cannot create an instance of " + DeclaringType + " because Type.ContainsGenericParameters is true."); + + if ((invokeAttr & BindingFlags.CreateInstance) != 0 && DeclaringType.IsAbstract) { + throw new MemberAccessException (String.Format ("Cannot create an instance of {0} because it is an abstract class", DeclaringType)); + } + + return InternalInvoke (obj, parameters, (invokeAttr & BindingFlags.DoNotWrapExceptions) == 0); + } + + public object InternalInvoke (object obj, object[] parameters, bool wrapExceptions) + { + Exception exc; + object o = null; + + if (wrapExceptions) { + try { + o = InternalInvoke (obj, parameters, out exc); + } catch (MethodAccessException) { + throw; + } catch (OverflowException) { + throw; + } catch (Exception e) { + throw new TargetInvocationException (e); + } + } else { + o = InternalInvoke (obj, parameters, out exc); + } + + if (exc != null) + throw exc; + + return obj == null ? o : null; + } + + [DebuggerHidden] + [DebuggerStepThrough] + public override Object Invoke (BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) + { + return DoInvoke (null, invokeAttr, binder, parameters, culture); + } + + public override RuntimeMethodHandle MethodHandle { + get { + return new RuntimeMethodHandle (mhandle); + } + } + + public override MethodAttributes Attributes { + get { + return MonoMethodInfo.GetAttributes (mhandle); + } + } + + public override CallingConventions CallingConvention { + get { + return MonoMethodInfo.GetCallingConvention (mhandle); + } + } + + public override bool ContainsGenericParameters { + get { + return DeclaringType.ContainsGenericParameters; + } + } + + public override Type ReflectedType { + get { + return reftype; + } + } + public override Type DeclaringType { + get { + return MonoMethodInfo.GetDeclaringType (mhandle); + } + } + public override string Name { + get { + if (name != null) + return name; + return RuntimeMethodInfo.get_name (this); + } + } + + public override bool IsDefined (Type attributeType, bool inherit) { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object[] GetCustomAttributes( bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public override object[] GetCustomAttributes( Type attributeType, bool inherit) { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override MethodBody GetMethodBody () { + return RuntimeMethodInfo.GetMethodBody (mhandle); + } + + public override string ToString () + { + StringBuilder sbName = new StringBuilder(Name); + sbName.Append ("Void "); + + sbName.Append("("); + RuntimeParameterInfo.FormatParameters (sbName, GetParametersNoCopy (), CallingConvention, false); + sbName.Append(")"); + + return sbName.ToString(); + } + + public override IList GetCustomAttributesData () + { + return CustomAttributeData.GetCustomAttributes (this); + } + + public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore (other); + + public override int MetadataToken { + get { + return get_metadata_token (this); + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int get_metadata_token (RuntimeConstructorInfo method); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeModule.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeModule.cs new file mode 100644 index 0000000000..9f8147d986 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeModule.cs @@ -0,0 +1,368 @@ +#nullable disable +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; + +namespace System.Reflection { + + [StructLayout (LayoutKind.Sequential)] + class RuntimeModule : Module + { +#pragma warning disable 649 + #region Sync with object-internals.h + #region Sync with ModuleBuilder + internal IntPtr _impl; /* a pointer to a MonoImage */ + internal Assembly assembly; + internal string fqname; + internal string name; + internal string scopename; + internal bool is_resource; + internal int token; + #endregion + #endregion +#pragma warning restore 649 + + public + override + Assembly Assembly { + get { return assembly; } + } + + public + override + // Note: we do not ask for PathDiscovery because no path is returned here. + // However MS Fx requires it (see FDBK23572 for details). + string Name { + get { return name; } + } + + public + override + string ScopeName { + get { return scopename; } + } + + public + override + int MDStreamVersion { + get { + if (_impl == IntPtr.Zero) + throw new NotSupportedException (); + return GetMDStreamVersion (_impl); + } + } + + public + override + Guid ModuleVersionId { + get { + return GetModuleVersionId (); + } + } + + public override + string FullyQualifiedName { + get { + return fqname; + } + } + + public + override + bool IsResource() + { + return is_resource; + } + + public override + Type[] FindTypes(TypeFilter filter, object filterCriteria) + { + var filtered = new List (); + Type[] types = GetTypes (); + foreach (Type t in types) + if (filter (t, filterCriteria)) + filtered.Add (t); + return filtered.ToArray (); + } + + public override + object[] GetCustomAttributes(bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public override + object[] GetCustomAttributes(Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override + FieldInfo GetField (string name, BindingFlags bindingAttr) + { + if (name == null) + throw new ArgumentNullException("name"); + + if (IsResource ()) + return null; + + Type globalType = GetGlobalType (_impl); + return (globalType != null) ? globalType.GetField (name, bindingAttr) : null; + } + + public override + FieldInfo[] GetFields (BindingFlags bindingFlags) + { + if (IsResource ()) + return new FieldInfo [0]; + + Type globalType = GetGlobalType (_impl); + return (globalType != null) ? globalType.GetFields (bindingFlags) : new FieldInfo [0]; + } + + public override + int MetadataToken { + get { + return get_MetadataToken (this); + } + } + + protected + override + MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) + { + if (IsResource ()) + return null; + + Type globalType = GetGlobalType (_impl); + if (globalType == null) + return null; + if (types == null) + return globalType.GetMethod (name); + return globalType.GetMethod (name, bindingAttr, binder, callConvention, types, modifiers); + } + + public + override + MethodInfo[] GetMethods (BindingFlags bindingFlags) { + if (IsResource ()) + return new MethodInfo [0]; + + Type globalType = GetGlobalType (_impl); + return (globalType != null) ? globalType.GetMethods (bindingFlags) : new MethodInfo [0]; + } + + public override + void GetPEKind (out PortableExecutableKinds peKind, out ImageFileMachine machine) { + RuntimeModule.GetPEKind (_impl, out peKind, out machine); + } + + public override + Type GetType(string className, bool throwOnError, bool ignoreCase) + { + if (className == null) + throw new ArgumentNullException ("className"); + if (className == String.Empty) + throw new ArgumentException ("Type name can't be empty"); + return assembly.InternalGetType (this, className, throwOnError, ignoreCase); + } + + public override + bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public + override + FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveField (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static FieldInfo ResolveField (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError error; + + IntPtr handle = ResolveFieldToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + if (handle == IntPtr.Zero) + throw resolve_token_exception (module.Name, metadataToken, error, "Field"); + else + return FieldInfo.GetFieldFromHandle (new RuntimeFieldHandle (handle)); + } + + public + override + MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveMember (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static MemberInfo ResolveMember (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError error; + + MemberInfo m = ResolveMemberToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + if (m == null) + throw resolve_token_exception (module.Name, metadataToken, error, "MemberInfo"); + else + return m; + } + + public + override + MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveMethod (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static MethodBase ResolveMethod (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError error; + + IntPtr handle = ResolveMethodToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + if (handle == IntPtr.Zero) + throw resolve_token_exception (module.Name, metadataToken, error, "MethodBase"); + else + return RuntimeMethodInfo.GetMethodFromHandleNoGenericCheck (new RuntimeMethodHandle (handle)); + } + + public + override + string ResolveString (int metadataToken) { + return ResolveString (this, _impl, metadataToken); + } + + internal static string ResolveString (Module module, IntPtr monoModule, int metadataToken) { + ResolveTokenError error; + + string s = ResolveStringToken (monoModule, metadataToken, out error); + if (s == null) + throw resolve_token_exception (module.Name, metadataToken, error, "string"); + else + return s; + } + + public + override + Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveType (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static Type ResolveType (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError error; + + IntPtr handle = ResolveTypeToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + if (handle == IntPtr.Zero) + throw resolve_token_exception (module.Name, metadataToken, error, "Type"); + else + return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle)); + } + + public + override + byte[] ResolveSignature (int metadataToken) { + return ResolveSignature (this, _impl, metadataToken); + } + + internal static byte[] ResolveSignature (Module module, IntPtr monoModule, int metadataToken) { + ResolveTokenError error; + + byte[] res = ResolveSignature (monoModule, metadataToken, out error); + if (res == null) + throw resolve_token_exception (module.Name, metadataToken, error, "signature"); + else + return res; + } + + public override + Type[] GetTypes() + { + return InternalGetTypes (_impl); + } + + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } + + internal RuntimeAssembly GetRuntimeAssembly () + { + return (RuntimeAssembly)assembly; + } + + internal IntPtr MonoModule { + get { + return _impl; + } + } + + internal Guid GetModuleVersionId () + { + var guid = new byte [16]; + GetGuidInternal (_impl, guid); + return new Guid (guid); + } + + internal static Exception resolve_token_exception (string name, int metadataToken, ResolveTokenError error, string tokenType) { + if (error == ResolveTokenError.OutOfRange) + return new ArgumentOutOfRangeException ("metadataToken", String.Format ("Token 0x{0:x} is not valid in the scope of module {1}", metadataToken, name)); + else + return new ArgumentException (String.Format ("Token 0x{0:x} is not a valid {1} token in the scope of module {2}", metadataToken, tokenType, name), "metadataToken"); + } + + internal static IntPtr[] ptrs_from_types (Type[] types) { + if (types == null) + return null; + else { + IntPtr[] res = new IntPtr [types.Length]; + for (int i = 0; i < types.Length; ++i) { + if (types [i] == null) + throw new ArgumentException (); + res [i] = types [i].TypeHandle.Value; + } + return res; + } + } + + // This calls ves_icall_reflection_get_token, so needs a Module argument + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int get_MetadataToken (Module module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int GetMDStreamVersion (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Type[] InternalGetTypes (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr GetHINSTANCE (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private static extern void GetGuidInternal (IntPtr module, byte[] guid); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Type GetGlobalType (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern string ResolveStringToken (IntPtr module, int token, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern byte[] ResolveSignature (IntPtr module, int metadataToken, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern void GetPEKind (IntPtr module, out PortableExecutableKinds peKind, out ImageFileMachine machine); + } + + internal enum ResolveTokenError { + OutOfRange, + BadTable, + Other + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeParameterInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeParameterInfo.cs new file mode 100644 index 0000000000..526b651d95 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimeParameterInfo.cs @@ -0,0 +1,290 @@ +#nullable disable +using System.Reflection.Emit; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using System.Text; + +namespace System.Reflection +{ + class RuntimeParameterInfo : ParameterInfo + { + internal MarshalAsAttribute marshalAs; + + // Called by the runtime + internal RuntimeParameterInfo (string name, Type type, int position, int attrs, object defaultValue, MemberInfo member, MarshalAsAttribute marshalAs) { + NameImpl = name; + ClassImpl = type; + PositionImpl = position; + AttrsImpl = (ParameterAttributes)attrs; + DefaultValueImpl = defaultValue; + MemberImpl = member; + this.marshalAs = marshalAs; + } + + internal static void FormatParameters (StringBuilder sb, ParameterInfo[] p, CallingConventions callingConvention, bool serialization) + { + for (int i = 0; i < p.Length; ++i) { + if (i > 0) + sb.Append (", "); + + Type t = p[i].ParameterType; + + string typeName = t.FormatTypeName (serialization); + + // Legacy: Why use "ByRef" for by ref parameters? What language is this? + // VB uses "ByRef" but it should precede (not follow) the parameter name. + // Why don't we just use "&"? + if (t.IsByRef && !serialization) { + sb.Append (typeName.TrimEnd (new char[] { '&' })); + sb.Append (" ByRef"); + } else { + sb.Append (typeName); + } + } + + if ((callingConvention & CallingConventions.VarArgs) != 0) { + if (p.Length > 0) + sb.Append (", "); + sb.Append ("..."); + } + } + + internal RuntimeParameterInfo (ParameterBuilder pb, Type type, MemberInfo member, int position) { + this.ClassImpl = type; + this.MemberImpl = member; + if (pb != null) { + this.NameImpl = pb.Name; + this.PositionImpl = pb.Position - 1; // ParameterInfo.Position is zero-based + this.AttrsImpl = (ParameterAttributes) pb.Attributes; + } else { + this.NameImpl = null; + this.PositionImpl = position - 1; + this.AttrsImpl = ParameterAttributes.None; + } + } + + internal static ParameterInfo New (ParameterBuilder pb, Type type, MemberInfo member, int position) + { + return new RuntimeParameterInfo (pb, type, member, position); + } + + /*FIXME this constructor looks very broken in the position parameter*/ + internal RuntimeParameterInfo (ParameterInfo pinfo, Type type, MemberInfo member, int position) { + this.ClassImpl = type; + this.MemberImpl = member; + if (pinfo != null) { + this.NameImpl = pinfo.Name; + this.PositionImpl = pinfo.Position - 1; // ParameterInfo.Position is zero-based + this.AttrsImpl = (ParameterAttributes) pinfo.Attributes; + } else { + this.NameImpl = null; + this.PositionImpl = position - 1; + this.AttrsImpl = ParameterAttributes.None; + } + } + + internal RuntimeParameterInfo (ParameterInfo pinfo, MemberInfo member) { + this.ClassImpl = pinfo.ParameterType; + this.MemberImpl = member; + this.NameImpl = pinfo.Name; + this.PositionImpl = pinfo.Position; + this.AttrsImpl = pinfo.Attributes; + this.DefaultValueImpl = GetDefaultValueImpl (pinfo); + } + + /* to build a ParameterInfo for the return type of a method */ + internal RuntimeParameterInfo (Type type, MemberInfo member, MarshalAsAttribute marshalAs) { + this.ClassImpl = type; + this.MemberImpl = member; + this.NameImpl = null; + this.PositionImpl = -1; // since parameter positions are zero-based, return type pos is -1 + this.AttrsImpl = ParameterAttributes.Retval; + this.marshalAs = marshalAs; + } + + public override + object DefaultValue { + get { + if (ClassImpl == typeof (Decimal) || ClassImpl == typeof (Decimal?)) { + /* default values for decimals are encoded using a custom attribute */ + DecimalConstantAttribute[] attrs = (DecimalConstantAttribute[])GetCustomAttributes (typeof (DecimalConstantAttribute), false); + if (attrs.Length > 0) + return attrs [0].Value; + } else if (ClassImpl == typeof (DateTime) || ClassImpl == typeof (DateTime?)) { + /* default values for DateTime are encoded using a custom attribute */ + DateTimeConstantAttribute[] attrs = (DateTimeConstantAttribute[])GetCustomAttributes (typeof (DateTimeConstantAttribute), false); + if (attrs.Length > 0) + return attrs [0].Value; + } + return DefaultValueImpl; + } + } + + public override + object RawDefaultValue { + get { + if (DefaultValue != null && DefaultValue.GetType ().IsEnum) + return ((Enum)DefaultValue).GetValue (); + /*FIXME right now DefaultValue doesn't throw for reflection-only assemblies. Change this once the former is fixed.*/ + return DefaultValue; + } + } + + public + override + int MetadataToken { + get { + if (MemberImpl is PropertyInfo) { + PropertyInfo prop = (PropertyInfo)MemberImpl; + MethodInfo mi = prop.GetGetMethod (true); + if (mi == null) + mi = prop.GetSetMethod (true); + + return mi.GetParametersInternal () [PositionImpl].MetadataToken; + } else if (MemberImpl is MethodBase) { + return GetMetadataToken (); + } + throw new ArgumentException ("Can't produce MetadataToken for member of type " + MemberImpl.GetType ()); + } + } + + + public + override + object[] GetCustomAttributes (bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public + override + object[] GetCustomAttributes (Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + internal object GetDefaultValueImpl (ParameterInfo pinfo) + { + FieldInfo field = typeof (ParameterInfo).GetField ("DefaultValueImpl", BindingFlags.Instance | BindingFlags.NonPublic); + return field.GetValue (pinfo); + } + + public + override + bool IsDefined( Type attributeType, bool inherit) { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern int GetMetadataToken (); + + public override Type[] GetOptionalCustomModifiers () => GetCustomModifiers (true); + + internal object[] GetPseudoCustomAttributes () + { + int count = 0; + + if (IsIn) + count ++; + if (IsOut) + count ++; + if (IsOptional) + count ++; + if (marshalAs != null) + count ++; + + if (count == 0) + return null; + object[] attrs = new object [count]; + count = 0; + + if (IsIn) + attrs [count ++] = new InAttribute (); + if (IsOut) + attrs [count ++] = new OutAttribute (); + if (IsOptional) + attrs [count ++] = new OptionalAttribute (); + + if (marshalAs != null) { + attrs [count ++] = (MarshalAsAttribute)marshalAs.CloneInternal (); + } + + return attrs; + } + + internal CustomAttributeData[] GetPseudoCustomAttributesData () + { + int count = 0; + + if (IsIn) + count++; + if (IsOut) + count++; + if (IsOptional) + count++; + if (marshalAs != null) + count++; + + if (count == 0) + return null; + CustomAttributeData[] attrsData = new CustomAttributeData [count]; + count = 0; + + if (IsIn) + attrsData [count++] = new CustomAttributeData ((typeof (InAttribute)).GetConstructor (Type.EmptyTypes)); + if (IsOut) + attrsData [count++] = new CustomAttributeData ((typeof (OutAttribute)).GetConstructor (Type.EmptyTypes)); + if (IsOptional) + attrsData [count++] = new CustomAttributeData ((typeof (OptionalAttribute)).GetConstructor (Type.EmptyTypes)); + if (marshalAs != null) { + var ctorArgs = new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument (typeof (UnmanagedType), marshalAs.Value) }; + attrsData [count++] = new CustomAttributeData ( + (typeof (MarshalAsAttribute)).GetConstructor (new[] { typeof (UnmanagedType) }), + ctorArgs, + Array.Empty ());//FIXME Get named params + } + + return attrsData; + } + + public override Type[] GetRequiredCustomModifiers () => GetCustomModifiers (false); + + public override bool HasDefaultValue { + get { + object defaultValue = DefaultValue; + if (defaultValue == null) + return true; + + if (defaultValue.GetType () == typeof(DBNull) || defaultValue.GetType () == typeof(Missing)) + return false; + + return true; + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Type[] GetTypeModifiers (Type type, MemberInfo member, int position, bool optional); + + internal static ParameterInfo New (ParameterInfo pinfo, Type type, MemberInfo member, int position) + { + return new RuntimeParameterInfo (pinfo, type, member, position); + } + + internal static ParameterInfo New (ParameterInfo pinfo, MemberInfo member) + { + return new RuntimeParameterInfo (pinfo, member); + } + + internal static ParameterInfo New (Type type, MemberInfo member, MarshalAsAttribute marshalAs) + { + return new RuntimeParameterInfo (type, member, marshalAs); + } + + private Type[] GetCustomModifiers (bool optional) => GetTypeModifiers (ParameterType, Member, Position, optional) ?? Type.EmptyTypes; + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Reflection/RuntimePropertyInfo.cs b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimePropertyInfo.cs new file mode 100644 index 0000000000..1e5acdb163 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Reflection/RuntimePropertyInfo.cs @@ -0,0 +1,434 @@ +#nullable disable +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using Mono; + +namespace System.Reflection +{ + internal struct MonoPropertyInfo { + public Type parent; + public Type declaring_type; + public String name; + public MethodInfo get_method; + public MethodInfo set_method; + public PropertyAttributes attrs; + } + + [Flags] + internal enum PInfo { + Attributes = 1, + GetMethod = 1 << 1, + SetMethod = 1 << 2, + ReflectedType = 1 << 3, + DeclaringType = 1 << 4, + Name = 1 << 5 + + } + + internal delegate object GetterAdapter (object _this); + internal delegate R Getter (T _this); + + [StructLayout (LayoutKind.Sequential)] + internal class RuntimePropertyInfo : PropertyInfo + { +#pragma warning disable 649 + internal IntPtr klass; + internal IntPtr prop; + MonoPropertyInfo info; + PInfo cached; + GetterAdapter cached_getter; +#pragma warning restore 649 + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern void get_property_info (RuntimePropertyInfo prop, ref MonoPropertyInfo info, + PInfo req_info); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Type[] GetTypeModifiers (RuntimePropertyInfo prop, bool optional); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern object get_default_value (RuntimePropertyInfo prop); + + + internal BindingFlags BindingFlags { + get { + CachePropertyInfo (PInfo.GetMethod | PInfo.SetMethod); + bool isPublic = info.set_method?.IsPublic == true || info.get_method?.IsPublic == true; + bool isStatic = info.set_method?.IsStatic == true || info.get_method?.IsStatic == true; + bool isInherited = DeclaringType != ReflectedType; + return FilterPreCalculate (isPublic, isInherited, isStatic); + } + } + + // Copied from https://github.com/dotnet/coreclr/blob/7a24a538cd265993e5864179f51781398c28ecdf/src/System.Private.CoreLib/src/System/RtType.cs#L2022 + static BindingFlags FilterPreCalculate (bool isPublic, bool isInherited, bool isStatic) + { + BindingFlags bindingFlags = isPublic ? BindingFlags.Public : BindingFlags.NonPublic; + if (isInherited) { + // We arrange things so the DeclaredOnly flag means "include inherited members" + bindingFlags |= BindingFlags.DeclaredOnly; + if (isStatic) + bindingFlags |= BindingFlags.Static | BindingFlags.FlattenHierarchy; + else + bindingFlags |= BindingFlags.Instance; + } + else { + if (isStatic) + bindingFlags |= BindingFlags.Static; + else + bindingFlags |= BindingFlags.Instance; + } + return bindingFlags; + } + + public override Module Module { + get { + return GetRuntimeModule (); + } + } + + internal RuntimeType GetDeclaringTypeInternal () + { + return (RuntimeType) DeclaringType; + } + + RuntimeType ReflectedTypeInternal { + get { + return (RuntimeType) ReflectedType; + } + } + + internal RuntimeModule GetRuntimeModule () + { + return GetDeclaringTypeInternal ().GetRuntimeModule (); + } + + #region Object Overrides + public override String ToString() + { + return FormatNameAndSig(false); + } + + private string FormatNameAndSig(bool serialization) + { + StringBuilder sbName = new StringBuilder(PropertyType.FormatTypeName(serialization)); + + sbName.Append(" "); + sbName.Append(Name); + + var pi = GetIndexParameters (); + if (pi.Length > 0) { + sbName.Append (" ["); + RuntimeParameterInfo.FormatParameters (sbName, pi, 0, serialization); + sbName.Append ("]"); + } + + return sbName.ToString(); + } + #endregion + + void CachePropertyInfo (PInfo flags) + { + if ((cached & flags) != flags) { + get_property_info (this, ref info, flags); + cached |= flags; + } + } + + public override PropertyAttributes Attributes { + get { + CachePropertyInfo (PInfo.Attributes); + return info.attrs; + } + } + + public override bool CanRead { + get { + CachePropertyInfo (PInfo.GetMethod); + return (info.get_method != null); + } + } + + public override bool CanWrite { + get { + CachePropertyInfo (PInfo.SetMethod); + return (info.set_method != null); + } + } + + public override Type PropertyType { + get { + CachePropertyInfo (PInfo.GetMethod | PInfo.SetMethod); + + if (info.get_method != null) { + return info.get_method.ReturnType; + } else { + ParameterInfo[] parameters = info.set_method.GetParametersInternal (); + + return parameters [parameters.Length - 1].ParameterType; + } + } + } + + public override Type ReflectedType { + get { + CachePropertyInfo (PInfo.ReflectedType); + return info.parent; + } + } + + public override Type DeclaringType { + get { + CachePropertyInfo (PInfo.DeclaringType); + return info.declaring_type; + } + } + + public override string Name { + get { + CachePropertyInfo (PInfo.Name); + return info.name; + } + } + + public override MethodInfo[] GetAccessors (bool nonPublic) + { + int nget = 0; + int nset = 0; + + CachePropertyInfo (PInfo.GetMethod | PInfo.SetMethod); + + if (info.set_method != null && (nonPublic || info.set_method.IsPublic)) + nset = 1; + if (info.get_method != null && (nonPublic || info.get_method.IsPublic)) + nget = 1; + + MethodInfo[] res = new MethodInfo [nget + nset]; + int n = 0; + if (nset != 0) + res [n++] = info.set_method; + if (nget != 0) + res [n++] = info.get_method; + return res; + } + + public override MethodInfo GetGetMethod (bool nonPublic) + { + CachePropertyInfo (PInfo.GetMethod); + if (info.get_method != null && (nonPublic || info.get_method.IsPublic)) + return info.get_method; + else + return null; + } + + public override ParameterInfo[] GetIndexParameters () + { + CachePropertyInfo (PInfo.GetMethod | PInfo.SetMethod); + ParameterInfo[] src; + int length; + if (info.get_method != null) { + src = info.get_method.GetParametersInternal (); + length = src.Length; + } else if (info.set_method != null) { + src = info.set_method.GetParametersInternal (); + length = src.Length - 1; + } else + return Array.Empty (); + + var dest = new ParameterInfo [length]; + for (int i = 0; i < length; ++i) { + dest [i] = RuntimeParameterInfo.New (src [i], this); + } + return dest; + } + + public override MethodInfo GetSetMethod (bool nonPublic) + { + CachePropertyInfo (PInfo.SetMethod); + if (info.set_method != null && (nonPublic || info.set_method.IsPublic)) + return info.set_method; + else + return null; + } + + + /*TODO verify for attribute based default values, just like ParameterInfo*/ + public override object GetConstantValue () + { + return get_default_value (this); + } + + public override object GetRawConstantValue() { + return get_default_value (this); + } + + // According to MSDN the inherit parameter is ignored here and + // the behavior always defaults to inherit = false + // + public override bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, false); + } + + public override object[] GetCustomAttributes (bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, false); + } + + public override object[] GetCustomAttributes (Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, false); + } + + + delegate object GetterAdapter (object _this); + delegate R Getter (T _this); + delegate R StaticGetter (); + +#pragma warning disable 169 + // Used via reflection + static object GetterAdapterFrame (Getter getter, object obj) + { + return getter ((T)obj); + } + + static object StaticGetterAdapterFrame (StaticGetter getter, object obj) + { + return getter (); + } +#pragma warning restore 169 + + /* + * The idea behing this optimization is to use a pair of delegates to simulate the same effect of doing a reflection call. + * The first delegate cast the this argument to the right type and the second does points to the target method. + */ + static GetterAdapter CreateGetterDelegate (MethodInfo method) + { + Type[] typeVector; + Type getterType; + object getterDelegate; + MethodInfo adapterFrame; + Type getterDelegateType; + string frameName; + + if (method.IsStatic) { + typeVector = new Type[] { method.ReturnType }; + getterDelegateType = typeof (StaticGetter<>); + frameName = "StaticGetterAdapterFrame"; + } else { + typeVector = new Type[] { method.DeclaringType, method.ReturnType }; + getterDelegateType = typeof (Getter<,>); + frameName = "GetterAdapterFrame"; + } + + getterType = getterDelegateType.MakeGenericType (typeVector); + getterDelegate = Delegate.CreateDelegate (getterType, method); + adapterFrame = typeof (RuntimePropertyInfo).GetMethod (frameName, BindingFlags.Static | BindingFlags.NonPublic); + adapterFrame = adapterFrame.MakeGenericMethod (typeVector); + return (GetterAdapter)Delegate.CreateDelegate (typeof (GetterAdapter), getterDelegate, adapterFrame, true); + } + + public override object GetValue (object obj, object[] index) + { + if (index == null || index.Length == 0) { + /*FIXME we should check if the number of arguments matches the expected one, otherwise the error message will be pretty criptic.*/ +#if !FULL_AOT_RUNTIME + if (cached_getter == null) { + MethodInfo method = GetGetMethod (true); + if (method == null) + throw new ArgumentException ($"Get Method not found for '{Name}'"); + if (!DeclaringType.IsValueType && !PropertyType.IsByRef && !method.ContainsGenericParameters) { //FIXME find a way to build an invoke delegate for value types. + cached_getter = CreateGetterDelegate (method); + // The try-catch preserves the .Invoke () behaviour + try { + return cached_getter (obj); + } catch (Exception ex) { + throw new TargetInvocationException (ex); + } + } + } else { + try { + return cached_getter (obj); + } catch (Exception ex) { + throw new TargetInvocationException (ex); + } + } +#endif + } + + return GetValue (obj, BindingFlags.Default, null, index, null); + } + + public override object GetValue (object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) + { + object ret = null; + + MethodInfo method = GetGetMethod (true); + if (method == null) + throw new ArgumentException ($"Get Method not found for '{Name}'"); + + if (index == null || index.Length == 0) + ret = method.Invoke (obj, invokeAttr, binder, null, culture); + else + ret = method.Invoke (obj, invokeAttr, binder, index, culture); + + return ret; + } + + public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) + { + MethodInfo method = GetSetMethod (true); + if (method == null) + throw new ArgumentException ("Set Method not found for '" + Name + "'"); + + object [] parms; + if (index == null || index.Length == 0) + parms = new object [] {value}; + else { + int ilen = index.Length; + parms = new object [ilen+ 1]; + index.CopyTo (parms, 0); + parms [ilen] = value; + } + + method.Invoke (obj, invokeAttr, binder, parms, culture); + } + + public override Type[] GetOptionalCustomModifiers () => GetCustomModifiers (true); + + public override Type[] GetRequiredCustomModifiers () => GetCustomModifiers (false); + + private Type[] GetCustomModifiers (bool optional) => GetTypeModifiers (this, optional) ?? Type.EmptyTypes; + + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } + + public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore (other); + + public override int MetadataToken { + get { + return get_metadata_token (this); + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int get_metadata_token (RuntimePropertyInfo monoProperty); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern PropertyInfo internal_from_handle_type (IntPtr event_handle, IntPtr type_handle); + + internal static PropertyInfo GetPropertyFromHandle (RuntimePropertyHandle handle, RuntimeTypeHandle reflectedType) + { + if (handle.Value == IntPtr.Zero) + throw new ArgumentException ("The handle is invalid."); + PropertyInfo pi = internal_from_handle_type (handle.Value, reflectedType.Value); + if (pi == null) + throw new ArgumentException ("The property handle and the type handle are incompatible."); + return pi; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Resources/ManifestBasedResourceGroveler.cs b/mcs/class/System.Private.CoreLib/System.Resources/ManifestBasedResourceGroveler.cs new file mode 100644 index 0000000000..abfae2a345 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Resources/ManifestBasedResourceGroveler.cs @@ -0,0 +1,18 @@ +using System.Globalization; +using System.Reflection; + +namespace System.Resources +{ + partial class ManifestBasedResourceGroveler + { + static Assembly InternalGetSatelliteAssembly (Assembly mainAssembly, CultureInfo culture, Version version) + { + return ((RuntimeAssembly)mainAssembly).InternalGetSatelliteAssembly (culture, version, throwOnFileNotFound: false); + } + + static bool GetNeutralResourcesLanguageAttribute (Assembly assemblyHandle, ref string cultureName, out short fallbackLocation) + { + throw new NotImplementedException (); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/DependentHandle.cs b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/DependentHandle.cs new file mode 100644 index 0000000000..c4ff3d909f --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/DependentHandle.cs @@ -0,0 +1,69 @@ +namespace System.Runtime.CompilerServices +{ + struct Ephemeron + { + public object key; + public object value; + } + + // + // Instead of dependent handles, mono uses arrays of Ephemeron objects. + // + struct DependentHandle + { + Ephemeron[] data; + + public DependentHandle (object primary, object secondary) + { + data = new Ephemeron [1]; + data [0].key = primary; + data [0].value = secondary; + GC.register_ephemeron_array (data); + } + + public bool IsAllocated => data != null; + + // Getting the secondary object is more expensive than getting the first so + // we provide a separate primary-only accessor for those times we only want the + // primary. + public object GetPrimary () + { + if (!IsAllocated) + throw new NotSupportedException (); + if (data [0].key == GC.EPHEMERON_TOMBSTONE) + return null; + return data [0].key; + } + + public object GetPrimaryAndSecondary (out object secondary) + { + if (!IsAllocated) + throw new NotSupportedException (); + if (data [0].key == GC.EPHEMERON_TOMBSTONE) { + secondary = null; + return null; + } + secondary = data [0].value; + return data [0].key; + } + + public void SetPrimary (object primary) + { + if (!IsAllocated) + throw new NotSupportedException (); + data [0].key = primary; + } + + public void SetSecondary (object secondary) + { + if (!IsAllocated) + throw new NotSupportedException (); + data [0].value = secondary; + } + + public void Free () + { + data = null; + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/JitHelpers.cs b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/JitHelpers.cs new file mode 100644 index 0000000000..e688265b97 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/JitHelpers.cs @@ -0,0 +1,11 @@ +namespace System.Runtime.CompilerServices +{ + static class JitHelpers + { + [Intrinsic] + public static bool EnumEquals (T x, T y) where T : struct, Enum => throw new NotImplementedException (); + + [Intrinsic] + public static int EnumCompareTo (T x, T y) where T : struct, Enum => throw new NotImplementedException (); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeFeature.cs b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeFeature.cs new file mode 100644 index 0000000000..e2d7db6476 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeFeature.cs @@ -0,0 +1,8 @@ +namespace System.Runtime.CompilerServices +{ + partial class RuntimeFeature + { + public static bool IsDynamicCodeSupported => true; + public static bool IsDynamicCodeCompiled => true; + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeHelpers.cs b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeHelpers.cs new file mode 100644 index 0000000000..c3bd45a033 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.CompilerServices/RuntimeHelpers.cs @@ -0,0 +1,140 @@ +namespace System.Runtime.CompilerServices +{ + partial class RuntimeHelpers + { + public static void InitializeArray (Array array, RuntimeFieldHandle fldHandle) + { + if (array == null || fldHandle.Value == IntPtr.Zero) + throw new ArgumentNullException (); + + InitializeArray (array, fldHandle.Value); + } + + public static extern int OffsetToStringData { + [MethodImpl (MethodImplOptions.InternalCall)] + get; + } + + public static int GetHashCode (object o) + { + return Object.InternalGetHashCode (o); + } + + public static new bool Equals (object? o1, object? o2) + { + if (o1 == o2) + return true; + + if (o1 == null || o2 == null) + return false; + + if (o1 is ValueType) + return ValueType.DefaultEquals (o1, o2); + + return false; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern object GetObjectValue (object obj); + + public static void RunClassConstructor (RuntimeTypeHandle type) + { + if (type.Value == IntPtr.Zero) + throw new ArgumentException ("Handle is not initialized.", "type"); + + RunClassConstructor (type.Value); + } + + public static void EnsureSufficientExecutionStack () + { + if (SufficientExecutionStack ()) + return; + + throw new InsufficientExecutionStackException (); + } + + public static bool TryEnsureSufficientExecutionStack () + { + return SufficientExecutionStack (); + } + + public static void ExecuteCodeWithGuaranteedCleanup (TryCode code, CleanupCode backoutCode, Object userData) + { + } + + public static void PrepareDelegate (Delegate d) + { + } + + public static void PrepareMethod (RuntimeMethodHandle method) + { + if (method.IsNullHandle ()) + throw new ArgumentException (SR.Argument_InvalidHandle); + unsafe { + PrepareMethod (method.Value, null, 0); + } + } + + public static void PrepareMethod (RuntimeMethodHandle method, RuntimeTypeHandle[] instantiation) + { + if (method.IsNullHandle ()) + throw new ArgumentException (SR.Argument_InvalidHandle); + unsafe { + IntPtr[] instantiations = RuntimeTypeHandle.CopyRuntimeTypeHandles (instantiation, out int length); + fixed (IntPtr* pinst = instantiations) { + PrepareMethod (method.Value, pinst, length); + GC.KeepAlive (instantiation); + } + } + } + + public static void RunModuleConstructor (ModuleHandle module) + { + if (module == ModuleHandle.EmptyHandle) + throw new ArgumentException ("Handle is not initialized.", "module"); + + RunModuleConstructor (module.Value); + } + + [Intrinsic] + public static bool IsReferenceOrContainsReferences () + { + return !typeof (T).IsValueType || RuntimeTypeHandle.HasReferences ((typeof (T) as RuntimeType)); + } + + [Intrinsic] + internal static bool IsBitwiseEquatable () + { + throw new NotImplementedException (); + } + + [Intrinsic] + internal static unsafe bool ObjectHasComponentSize (object obj) + { + throw new NotImplementedException (); + } + + static object GetUninitializedObjectInternal (Type type) + { + return GetUninitializedObjectInternal (new RuntimeTypeHandle ((RuntimeType)type).Value); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern unsafe void PrepareMethod (IntPtr method, IntPtr* instantiations, int ninst); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern object GetUninitializedObjectInternal (IntPtr type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void InitializeArray (Array array, IntPtr fldHandle); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void RunClassConstructor (IntPtr type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void RunModuleConstructor (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool SufficientExecutionStack (); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/CriticalHandle.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/CriticalHandle.cs new file mode 100644 index 0000000000..a7a5a822fc --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/CriticalHandle.cs @@ -0,0 +1,9 @@ +namespace System.Runtime.InteropServices +{ + partial class CriticalHandle + { + void ReleaseHandleFailed () + { + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/GCHandle.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/GCHandle.cs new file mode 100644 index 0000000000..bd847a20be --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/GCHandle.cs @@ -0,0 +1,19 @@ +using System.Runtime.CompilerServices; + +namespace System.Runtime.InteropServices +{ + partial struct GCHandle + { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern IntPtr InternalAlloc (object value, GCHandleType type); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void InternalFree (IntPtr handle); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern object InternalGet (IntPtr handle); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void InternalSet (IntPtr handle, object value); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/InteropExtensions.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/InteropExtensions.cs new file mode 100644 index 0000000000..c471488bba --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/InteropExtensions.cs @@ -0,0 +1,17 @@ +namespace System.Runtime.InteropServices +{ + public static class InteropExtensions + { + public static bool IsBlittable (this object obj) + { + throw new NotImplementedException (); + } + + public static int GetElementSize (this Array array) + { + if (array == null) + throw new ArgumentNullException (nameof (array)); + return Marshal.GetArrayElementSize (array.GetType ()); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/Marshal.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/Marshal.cs new file mode 100644 index 0000000000..247dd0ed3a --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/Marshal.cs @@ -0,0 +1,451 @@ +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace System.Runtime.InteropServices +{ + partial class Marshal + { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static IntPtr AllocCoTaskMem (int cb); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static IntPtr AllocHGlobal (IntPtr cb); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void FreeBSTR (IntPtr ptr); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void FreeCoTaskMem (IntPtr ptr); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void FreeHGlobal (IntPtr hglobal); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern int GetLastWin32Error (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void DestroyStructure (IntPtr ptr, Type structuretype); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static IntPtr OffsetOf (Type t, string fieldName); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static string PtrToStringBSTR (IntPtr ptr); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static IntPtr ReAllocCoTaskMem (IntPtr pv, int cb); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static IntPtr ReAllocHGlobal (IntPtr pv, IntPtr cb); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void StructureToPtr (object structure, IntPtr ptr, bool fDeleteOld); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static int GetArrayElementSize (Type type); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern unsafe static IntPtr BufferToBSTR (char* ptr, int slen); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static bool IsPinnableType (Type type); + + internal static bool IsPinnable (object obj) + { + if (obj == null || obj is string) + return true; + return IsPinnableType (obj.GetType ()); + //Type type = obj.GetType (); + //return !type.IsValueType || RuntimeTypeHandle.HasReferences (type as RuntimeType); + } + + // TODO: Should be called from Windows only code + internal static void SetLastWin32Error (int error) + { + } + + static Exception GetExceptionForHRInternal (int errorCode, IntPtr errorInfo) + { + switch (errorCode) { + case HResults.S_OK: + case HResults.S_FALSE: + return null; + case HResults.COR_E_AMBIGUOUSMATCH: + return new System.Reflection.AmbiguousMatchException (); + case HResults.COR_E_APPLICATION: + return new System.ApplicationException (); + case HResults.COR_E_ARGUMENT: + return new System.ArgumentException (); + case HResults.COR_E_ARGUMENTOUTOFRANGE: + return new System.ArgumentOutOfRangeException (); + case HResults.COR_E_ARITHMETIC: + return new System.ArithmeticException (); + case HResults.COR_E_ARRAYTYPEMISMATCH: + return new System.ArrayTypeMismatchException (); + case HResults.COR_E_BADEXEFORMAT: + return new System.BadImageFormatException (); + case HResults.COR_E_BADIMAGEFORMAT: + return new System.BadImageFormatException (); + //case HResults.COR_E_CODECONTRACTFAILED: + //return new System.Diagnostics.Contracts.ContractException (); + //case HResults.COR_E_COMEMULATE: + case HResults.COR_E_CUSTOMATTRIBUTEFORMAT: + return new System.Reflection.CustomAttributeFormatException (); + case HResults.COR_E_DATAMISALIGNED: + return new System.DataMisalignedException (); + case HResults.COR_E_DIRECTORYNOTFOUND: + return new System.IO.DirectoryNotFoundException (); + case HResults.COR_E_DIVIDEBYZERO: + return new System.DivideByZeroException (); + case HResults.COR_E_DLLNOTFOUND: + return new System.DllNotFoundException (); + case HResults.COR_E_DUPLICATEWAITOBJECT: + return new System.DuplicateWaitObjectException (); + case HResults.COR_E_ENDOFSTREAM: + return new System.IO.EndOfStreamException (); + case HResults.COR_E_ENTRYPOINTNOTFOUND: + return new System.EntryPointNotFoundException (); + case HResults.COR_E_EXCEPTION: + return new System.Exception (); + case HResults.COR_E_EXECUTIONENGINE: + return new System.ExecutionEngineException (); + case HResults.COR_E_FIELDACCESS: + return new System.FieldAccessException (); + case HResults.COR_E_FILELOAD: + return new System.IO.FileLoadException (); + case HResults.COR_E_FILENOTFOUND: + return new System.IO.FileNotFoundException (); + case HResults.COR_E_FORMAT: + return new System.FormatException (); + case HResults.COR_E_INDEXOUTOFRANGE: + return new System.IndexOutOfRangeException (); + case HResults.COR_E_INSUFFICIENTEXECUTIONSTACK: + return new System.InsufficientExecutionStackException (); + case HResults.COR_E_INVALIDCAST: + return new System.InvalidCastException (); + case HResults.COR_E_INVALIDFILTERCRITERIA: + return new System.Reflection.InvalidFilterCriteriaException (); + case HResults.COR_E_INVALIDOLEVARIANTTYPE: + return new System.Runtime.InteropServices.InvalidOleVariantTypeException (); + case HResults.COR_E_INVALIDOPERATION: + return new System.InvalidOperationException (); + case HResults.COR_E_INVALIDPROGRAM: + return new System.InvalidProgramException (); + case HResults.COR_E_IO: + return new System.IO.IOException (); + case HResults.COR_E_MARSHALDIRECTIVE: + return new System.Runtime.InteropServices.MarshalDirectiveException (); + case HResults.COR_E_MEMBERACCESS: + return new System.MemberAccessException (); + case HResults.COR_E_METHODACCESS: + return new System.MethodAccessException (); + case HResults.COR_E_MISSINGFIELD: + return new System.MissingFieldException (); + case HResults.COR_E_MISSINGMANIFESTRESOURCE: + return new System.Resources.MissingManifestResourceException (); + case HResults.COR_E_MISSINGMEMBER: + return new System.MissingMemberException (); + case HResults.COR_E_MISSINGMETHOD: + return new System.MissingMethodException (); + case HResults.COR_E_MULTICASTNOTSUPPORTED: + return new System.MulticastNotSupportedException (); + case HResults.COR_E_NOTFINITENUMBER: + return new System.NotFiniteNumberException (); + case HResults.COR_E_NOTSUPPORTED: + return new System.NotSupportedException (); + case HResults.COR_E_NULLREFERENCE: + return new System.NullReferenceException (); + case HResults.COR_E_OBJECTDISPOSED: + return new System.ObjectDisposedException (""); + case HResults.COR_E_OPERATIONCANCELED: + return new System.OperationCanceledException (); + case HResults.COR_E_OUTOFMEMORY: + return new System.OutOfMemoryException (); + case HResults.COR_E_OVERFLOW: + return new System.OverflowException (); + case HResults.COR_E_PATHTOOLONG: + return new System.IO.PathTooLongException (); + case HResults.COR_E_PLATFORMNOTSUPPORTED: + return new System.PlatformNotSupportedException (); + case HResults.COR_E_RANK: + return new System.RankException (); + case HResults.COR_E_REFLECTIONTYPELOAD: + return new System.MissingMethodException (); + case HResults.COR_E_RUNTIMEWRAPPED: + return new System.MissingMethodException (); + case HResults.COR_E_SECURITY: + return new System.Security.SecurityException (); + case HResults.COR_E_SERIALIZATION: + return new System.Runtime.Serialization.SerializationException (); + case HResults.COR_E_STACKOVERFLOW: + return new System.StackOverflowException (); + case HResults.COR_E_SYNCHRONIZATIONLOCK: + return new System.Threading.SynchronizationLockException (); + case HResults.COR_E_SYSTEM: + return new System.SystemException (); + case HResults.COR_E_TARGET: + return new System.Reflection.TargetException (); + case HResults.COR_E_TARGETINVOCATION: + return new System.MissingMethodException (); + case HResults.COR_E_TARGETPARAMCOUNT: + return new System.Reflection.TargetParameterCountException (); + case HResults.COR_E_THREADABORTED: + return new System.Threading.ThreadAbortException (); + case HResults.COR_E_THREADINTERRUPTED: + return new System.Threading.ThreadInterruptedException (); + case HResults.COR_E_THREADSTART: + return new System.Threading.ThreadStartException (); + case HResults.COR_E_THREADSTATE: + return new System.Threading.ThreadStateException (); + case HResults.COR_E_TYPEACCESS: + return new System.TypeAccessException (); + case HResults.COR_E_TYPEINITIALIZATION: + return new System.TypeInitializationException (""); + case HResults.COR_E_TYPELOAD: + return new System.TypeLoadException (); + case HResults.COR_E_TYPEUNLOADED: + return new System.TypeUnloadedException (); + case HResults.COR_E_UNAUTHORIZEDACCESS: + return new System.UnauthorizedAccessException (); + //case HResults.COR_E_UNSUPPORTEDFORMAT: + case HResults.COR_E_VERIFICATION: + return new System.Security.VerificationException (); + //case HResults.E_INVALIDARG: + case HResults.E_NOTIMPL: + return new System.NotImplementedException (); + //case HResults.E_POINTER: + case HResults.RO_E_CLOSED: + return new System.ObjectDisposedException (""); + case HResults.COR_E_ABANDONEDMUTEX: + case HResults.COR_E_AMBIGUOUSIMPLEMENTATION: + case HResults.COR_E_CANNOTUNLOADAPPDOMAIN: + case HResults.COR_E_CONTEXTMARSHAL: + case HResults.COR_E_HOSTPROTECTION: + case HResults.COR_E_INSUFFICIENTMEMORY: + case HResults.COR_E_INVALIDCOMOBJECT: + case HResults.COR_E_KEYNOTFOUND: + case HResults.COR_E_MISSINGSATELLITEASSEMBLY: + case HResults.COR_E_SAFEARRAYRANKMISMATCH: + case HResults.COR_E_SAFEARRAYTYPEMISMATCH: + case HResults.COR_E_SAFEHANDLEMISSINGATTRIBUTE: + case HResults.COR_E_SEMAPHOREFULL: + case HResults.COR_E_THREADSTOP: + case HResults.COR_E_TIMEOUT: + case HResults.COR_E_WAITHANDLECANNOTBEOPENED: + case HResults.DISP_E_OVERFLOW: + case HResults.E_BOUNDS: + case HResults.E_CHANGED_STATE: + case HResults.E_FAIL: + case HResults.E_HANDLE: + case HResults.ERROR_MRM_MAP_NOT_FOUND: + case HResults.TYPE_E_TYPEMISMATCH: + case HResults.CO_E_NOTINITIALIZED: + case HResults.RPC_E_CHANGED_MODE: + return new COMException ("", errorCode); + + case HResults.STG_E_PATHNOTFOUND: + case HResults.CTL_E_PATHNOTFOUND: { + return new System.IO.DirectoryNotFoundException { + HResult = errorCode + }; + } + case HResults.FUSION_E_INVALID_PRIVATE_ASM_LOCATION: + case HResults.FUSION_E_SIGNATURE_CHECK_FAILED: + case HResults.FUSION_E_LOADFROM_BLOCKED: + case HResults.FUSION_E_CACHEFILE_FAILED: + case HResults.FUSION_E_ASM_MODULE_MISSING: + case HResults.FUSION_E_INVALID_NAME: + case HResults.FUSION_E_PRIVATE_ASM_DISALLOWED: + case HResults.FUSION_E_HOST_GAC_ASM_MISMATCH: + case HResults.COR_E_MODULE_HASH_CHECK_FAILED: + case HResults.FUSION_E_REF_DEF_MISMATCH: + case HResults.SECURITY_E_INCOMPATIBLE_SHARE: + case HResults.SECURITY_E_INCOMPATIBLE_EVIDENCE: + case HResults.SECURITY_E_UNVERIFIABLE: + case HResults.COR_E_FIXUPSINEXE: + case HResults.ERROR_TOO_MANY_OPEN_FILES: + case HResults.ERROR_SHARING_VIOLATION: + case HResults.ERROR_LOCK_VIOLATION: + case HResults.ERROR_OPEN_FAILED: + case HResults.ERROR_DISK_CORRUPT: + case HResults.ERROR_UNRECOGNIZED_VOLUME: + case HResults.ERROR_DLL_INIT_FAILED: + case HResults.FUSION_E_CODE_DOWNLOAD_DISABLED: + case HResults.CORSEC_E_MISSING_STRONGNAME: + case HResults.MSEE_E_ASSEMBLYLOADINPROGRESS: + case HResults.ERROR_FILE_INVALID: { + return new System.IO.FileLoadException { + HResult = errorCode + }; + } + case HResults.CTL_E_FILENOTFOUND: { + return new System.IO.FileNotFoundException { + HResult = errorCode + }; + } + default: + return new COMException ("", errorCode); + } + } + + static void PrelinkCore (MethodInfo m) + { + if (!(m is RuntimeMethodInfo)) + { + throw new ArgumentException (SR.Argument_MustBeRuntimeMethodInfo, nameof(m)); + } + + PrelinkInternal (m); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static void PtrToStructureInternal (IntPtr ptr, object structure, bool allowValueClasses); + + static void PtrToStructureHelper (IntPtr ptr, object structure, bool allowValueClasses) + { + if (ptr == null) + throw new ArgumentNullException (nameof (ptr)); + if (structure == null) + throw new ArgumentNullException (nameof (structure)); + PtrToStructureInternal (ptr, structure, allowValueClasses); + } + + static object PtrToStructureHelper (IntPtr ptr, Type structureType) + { + var obj = Activator.CreateInstance (structureType); + PtrToStructureHelper (ptr, obj, true); + return obj; + } + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern Delegate GetDelegateForFunctionPointerInternal (IntPtr ptr, Type t); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern IntPtr GetFunctionPointerForDelegateInternal (Delegate d); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void PrelinkInternal (MethodInfo m); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern int SizeOfHelper (Type t, bool throwIfNotMarshalable); + + public static IntPtr GetExceptionPointers () + { + throw new NotImplementedException (); + } + + internal unsafe static IntPtr AllocBSTR (int length) + { + var res = BufferToBSTR ((char*)IntPtr.Zero, length); + if (res == IntPtr.Zero) + throw new OutOfMemoryException (); + return res; + } + + public unsafe static IntPtr StringToBSTR (string s) + { + if (s == null) + return IntPtr.Zero; + fixed (char* fixed_s = s) + return BufferToBSTR (fixed_s, s.Length); + } + + #region PlatformNotSupported + + public static int GetExceptionCode() + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static byte ReadByte(Object ptr, int ofs) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static short ReadInt16(Object ptr, int ofs) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static int ReadInt32(Object ptr, int ofs) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static long ReadInt64(Object ptr, int ofs) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static void WriteByte(Object ptr, int ofs, byte val) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static void WriteInt16(Object ptr, int ofs, short val) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static void WriteInt32(Object ptr, int ofs, int val) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + public static void WriteInt64(Object ptr, int ofs, long val) + { + // Obsolete + throw new PlatformNotSupportedException (); + } + + #endregion + } +} + +namespace System +{ + internal static partial class HResults + { + // DirectoryNotFoundException + public const int STG_E_PATHNOTFOUND = unchecked((int)0x80030003); + public const int CTL_E_PATHNOTFOUND = unchecked((int)0x800A004C); + + // FileNotFoundException + public const int CTL_E_FILENOTFOUND = unchecked((int)0x800A0035); + + public const int FUSION_E_INVALID_PRIVATE_ASM_LOCATION = unchecked((int)0x80131041); + public const int FUSION_E_SIGNATURE_CHECK_FAILED = unchecked((int)0x80131045); + public const int FUSION_E_LOADFROM_BLOCKED = unchecked((int)0x80131051); + public const int FUSION_E_CACHEFILE_FAILED = unchecked((int)0x80131052); + public const int FUSION_E_ASM_MODULE_MISSING = unchecked((int)0x80131042); + public const int FUSION_E_INVALID_NAME = unchecked((int)0x80131047); + public const int FUSION_E_PRIVATE_ASM_DISALLOWED = unchecked((int)0x80131044); + public const int FUSION_E_HOST_GAC_ASM_MISMATCH = unchecked((int)0x80131050); + public const int COR_E_MODULE_HASH_CHECK_FAILED = unchecked((int)0x80131039); + public const int FUSION_E_REF_DEF_MISMATCH = unchecked((int)0x80131040); + public const int SECURITY_E_INCOMPATIBLE_SHARE = unchecked((int)0x80131401); + public const int SECURITY_E_INCOMPATIBLE_EVIDENCE = unchecked((int)0x80131403); + public const int SECURITY_E_UNVERIFIABLE = unchecked((int)0x80131402); + public const int COR_E_FIXUPSINEXE = unchecked((int)0x80131019); + public const int ERROR_TOO_MANY_OPEN_FILES = unchecked((int)0x80070004); + public const int ERROR_SHARING_VIOLATION = unchecked((int)0x80070020); + public const int ERROR_LOCK_VIOLATION = unchecked((int)0x80070021); + public const int ERROR_OPEN_FAILED = unchecked((int)0x8007006E); + public const int ERROR_DISK_CORRUPT = unchecked((int)0x80070571); + public const int ERROR_UNRECOGNIZED_VOLUME = unchecked((int)0x800703ED); + public const int ERROR_DLL_INIT_FAILED = unchecked((int)0x8007045A); + public const int FUSION_E_CODE_DOWNLOAD_DISABLED = unchecked((int)0x80131048); + public const int CORSEC_E_MISSING_STRONGNAME = unchecked((int)0x8013141b); + public const int MSEE_E_ASSEMBLYLOADINPROGRESS = unchecked((int)0x80131016); + public const int ERROR_FILE_INVALID = unchecked((int)0x800703EE); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/MarshalAsAttribute.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/MarshalAsAttribute.cs new file mode 100644 index 0000000000..89353dbdd2 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/MarshalAsAttribute.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.InteropServices +{ + [StructLayout (LayoutKind.Sequential)] + partial class MarshalAsAttribute + { + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Unix.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Unix.cs new file mode 100644 index 0000000000..4d20c23104 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Unix.cs @@ -0,0 +1,30 @@ +using System.IO; +using System.Reflection; + +namespace System.Runtime.InteropServices +{ + partial class NativeLibrary + { + [DllImport ("libdl")] + static extern IntPtr dlopen (string libName, int flags); + + static IntPtr LoadLibraryByName (string libraryName, Assembly assembly, DllImportSearchPath? searchPath, bool throwOnError) => throw new NotImplementedException (); + + static IntPtr LoadFromPath (string libraryName, bool throwOnError) + { + const int RTLD_LAZY = 0x001; + + IntPtr ptr = dlopen (libraryName, RTLD_LAZY); + if (ptr == IntPtr.Zero && throwOnError) { + throw new DllNotFoundException(); + } + return ptr; + } + + static IntPtr LoadByName (string libraryName, RuntimeAssembly callingAssembly, bool hasDllImportSearchPathFlag, uint dllImportSearchPathFlag, bool throwOnError) => throw new NotImplementedException (); + + static void FreeLib (IntPtr handle) => throw new NotImplementedException (); + + static IntPtr GetSymbol (IntPtr handle, string symbolName, bool throwOnError) => throw new NotImplementedException (); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Windows.cs b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Windows.cs new file mode 100644 index 0000000000..68480950a5 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.InteropServices/NativeLibrary.Windows.cs @@ -0,0 +1,24 @@ +using System.IO; +using System.Reflection; + +namespace System.Runtime.InteropServices +{ + partial class NativeLibrary + { + static IntPtr LoadLibraryByName (string libraryName, Assembly assembly, DllImportSearchPath? searchPath, bool throwOnError) => throw new NotImplementedException (); + + static IntPtr LoadFromPath (string libraryName, bool throwOnError) { + // TODO: implement + if (throwOnError) { + throw new DllNotFoundException(); + } + return IntPtr.Zero; + } + + static IntPtr LoadByName (string libraryName, RuntimeAssembly callingAssembly, bool hasDllImportSearchPathFlag, uint dllImportSearchPathFlag, bool throwOnError) => throw new NotImplementedException (); + + static void FreeLib (IntPtr handle) => throw new NotImplementedException (); + + static IntPtr GetSymbol (IntPtr handle, string symbolName, bool throwOnError) => throw new NotImplementedException (); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyDependencyResolver.cs b/mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyDependencyResolver.cs new file mode 100644 index 0000000000..bf98e7e891 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyDependencyResolver.cs @@ -0,0 +1,19 @@ +namespace System.Runtime.Loader +{ + public sealed class AssemblyDependencyResolver + { + public AssemblyDependencyResolver (string componentAssemblyPath) + { + } + + public string ResolveAssemblyToPath (System.Reflection.AssemblyName assemblyName) + { + throw new NotImplementedException (); + } + + public string ResolveUnmanagedDllToPath (string unmanagedDllName) + { + throw new NotImplementedException (); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyLoadContext.cs b/mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyLoadContext.cs new file mode 100644 index 0000000000..e119f8b0ab --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.Loader/AssemblyLoadContext.cs @@ -0,0 +1,65 @@ +using System.IO; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace System.Runtime.Loader +{ + partial class AssemblyLoadContext + { + static IntPtr InitializeAssemblyLoadContext (IntPtr assemblyLoadContext, bool representsTPALoadContext, bool isCollectible) + { + return IntPtr.Zero; + } + + static void PrepareForAssemblyLoadContextRelease (IntPtr nativeAssemblyLoadContext, IntPtr assemblyLoadContextStrong) + { + } + + static IntPtr InternalLoadUnmanagedDllFromPath (string unmanagedDllPath) + { + throw new NotImplementedException (); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + Assembly InternalLoadFromPath (string assemblyPath, string nativeImagePath) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + + assemblyPath = assemblyPath.Replace ('\\', Path.DirectorySeparatorChar); + // TODO: Handle nativeImagePath + return InternalLoadFile (assemblyPath, ref stackMark); + } + + internal Assembly InternalLoad (byte[] arrAssembly, byte[] arrSymbols) + { + throw new NotImplementedException (); + } + + public static Assembly[] GetLoadedAssemblies () + { + throw new NotImplementedException (); + } + + public static AssemblyLoadContext GetLoadContext (Assembly assembly) + { + throw new NotImplementedException (); + } + + public void SetProfileOptimizationRoot (string directoryPath) + { + } + + public void StartProfileOptimization (string profile) + { + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static Assembly InternalLoadFile (string assemblyFile, ref StackCrawlMark stackMark); + + internal static Assembly DoAssemblyResolve (string name) + { + return AssemblyResolve (null, new ResolveEventArgs (name)); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Runtime.Remoting.Contexts/Context.cs b/mcs/class/System.Private.CoreLib/System.Runtime.Remoting.Contexts/Context.cs new file mode 100644 index 0000000000..218eb7f4e8 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime.Remoting.Contexts/Context.cs @@ -0,0 +1,40 @@ +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; + +namespace System.Runtime.Remoting.Contexts { + + [StructLayout (LayoutKind.Sequential)] + /* FIXME: Mono: this was public in mscorlib */ + internal class Context + { +#pragma warning disable 169, 414 + #region Sync with domain-internals.h + int domain_id; + int context_id; + UIntPtr static_data; /* GC-tracked */ + UIntPtr data; + #endregion +#pragma warning restore 169, 414 + + [MethodImpl (MethodImplOptions.InternalCall)] + extern static void RegisterContext (Context ctx); + + [MethodImpl (MethodImplOptions.InternalCall)] + extern static void ReleaseContext (Context ctx); + + public Context () + { +#if false + domain_id = Thread.GetDomainID(); + context_id = Interlocked.Increment (ref global_count); + + RegisterContext (this); +#endif + } + + ~Context () + { + ReleaseContext (this); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Runtime/GCSettings.cs b/mcs/class/System.Private.CoreLib/System.Runtime/GCSettings.cs new file mode 100644 index 0000000000..cbd57b1149 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime/GCSettings.cs @@ -0,0 +1,25 @@ +namespace System.Runtime +{ + partial class GCSettings + { + public static bool IsServerGC => false; + + static GCLatencyMode GetGCLatencyMode() => GCLatencyMode.Batch; + + static SetLatencyModeStatus SetGCLatencyMode(GCLatencyMode newLatencyMode) + { + if (newLatencyMode != GCLatencyMode.Batch) + throw new PlatformNotSupportedException (); + + return SetLatencyModeStatus.Succeeded; + } + + static GCLargeObjectHeapCompactionMode GetLOHCompactionMode() => GCLargeObjectHeapCompactionMode.Default; + + static void SetLOHCompactionMode (GCLargeObjectHeapCompactionMode newLOHCompactionMode) + { + if (newLOHCompactionMode != GCLargeObjectHeapCompactionMode.Default) + throw new PlatformNotSupportedException (); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Runtime/RuntimeImports.cs b/mcs/class/System.Private.CoreLib/System.Runtime/RuntimeImports.cs new file mode 100644 index 0000000000..ca8ae3e48c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Runtime/RuntimeImports.cs @@ -0,0 +1,28 @@ +using System.Runtime.CompilerServices; + +#if BIT64 +using nuint = System.UInt64; +#else +using nuint = System.UInt32; +#endif + +namespace System.Runtime +{ + static class RuntimeImports + { + internal static unsafe void RhZeroMemory (ref byte b, nuint byteLength) + { + fixed (byte* bytePointer = &b) { + ZeroMemory (bytePointer, byteLength); + } + } + + internal static unsafe void RhZeroMemory (IntPtr p, UIntPtr byteLength) => ZeroMemory ((void*) p, (nuint) byteLength); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern unsafe void ZeroMemory (void* p, nuint byteLength); + + [MethodImpl (MethodImplOptions.InternalCall)] + internal extern static void RhBulkMoveWithWriteBarrier (ref byte dmem, ref byte smem, nuint size); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Security/DynamicSecurityMethodAttribute.cs b/mcs/class/System.Private.CoreLib/System.Security/DynamicSecurityMethodAttribute.cs new file mode 100644 index 0000000000..83be902a2c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Security/DynamicSecurityMethodAttribute.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Runtime.InteropServices; + +namespace System.Security +{ + // DynamicSecurityMethodAttribute: + // All methods that use StackCrawlMark should be marked with this attribute. This attribute + // disables inlining of the calling method to allow stackwalking to find the exact caller. + // + // This attribute used to indicate that the target method requires space for a security object + // to be allocated on the callers stack. It is not used for this purpose anymore because of security + // stackwalks are not ever done in CoreCLR. + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, AllowMultiple = true, Inherited = false)] + internal sealed class DynamicSecurityMethodAttribute : Attribute + { + public DynamicSecurityMethodAttribute() { } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Threading/EventWaitHandle.Unix.cs b/mcs/class/System.Private.CoreLib/System.Threading/EventWaitHandle.Unix.cs new file mode 100644 index 0000000000..d95ac99397 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/EventWaitHandle.Unix.cs @@ -0,0 +1,87 @@ +using Microsoft.Win32.SafeHandles; +using System.Runtime.CompilerServices; + +namespace System.Threading +{ + partial class EventWaitHandle + { + public bool Set () + { + SafeWaitHandle handle = ValidateHandle (out bool release); + + try { + return SetEventInternal (handle.DangerousGetHandle ()); + } finally { + if (release) + handle.DangerousRelease (); + } + } + + public bool Reset () + { + SafeWaitHandle handle = ValidateHandle (out bool release); + + try { + return ResetEventInternal (handle.DangerousGetHandle ()); + } finally { + if (release) + handle.DangerousRelease (); + } + } + + unsafe void CreateEventCore (bool initialState, EventResetMode mode, string name, out bool createdNew) + { + if (name != null) + throw new PlatformNotSupportedException (SR.PlatformNotSupported_NamedSynchronizationPrimitives); + + SafeWaitHandle handle = new SafeWaitHandle (CreateEventInternal (mode == EventResetMode.ManualReset, initialState, null, 0, out int errorCode), ownsHandle: true); + if (errorCode != 0) + throw new NotImplementedException ("errorCode"); + SafeWaitHandle = handle; + + createdNew = true; + } + + static OpenExistingResult OpenExistingWorker (string name, out EventWaitHandle result) + { + throw new PlatformNotSupportedException (SR.PlatformNotSupported_NamedSynchronizationPrimitives); + } + + internal static bool Set (SafeWaitHandle waitHandle) + { + bool release = false; + try { + waitHandle.DangerousAddRef (ref release); + return SetEventInternal (waitHandle.DangerousGetHandle ()); + } finally { + if (release) + waitHandle.DangerousRelease (); + } + } + + SafeWaitHandle ValidateHandle (out bool success) + { + // The field value is modifiable via the public property, save it locally + // to ensure that one instance is used in all places in this method + SafeWaitHandle waitHandle = SafeWaitHandle; + if (waitHandle.IsInvalid) + { + throw new InvalidOperationException (); + } + + success = false; + waitHandle.DangerousAddRef (ref success); + return waitHandle; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + unsafe static extern IntPtr CreateEventInternal (bool manual, bool initialState, char *name, int name_length, out int errorCode); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool ResetEventInternal (IntPtr handle); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool SetEventInternal (IntPtr handle); + + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/Interlocked.cs b/mcs/class/System.Private.CoreLib/System.Threading/Interlocked.cs new file mode 100644 index 0000000000..5d81de146c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/Interlocked.cs @@ -0,0 +1,75 @@ +using System.Runtime.CompilerServices; + +namespace System.Threading +{ + public static class Interlocked + { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static int CompareExchange (ref int location1, int value, int comparand); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static object CompareExchange (ref object location1, object value, object comparand); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static float CompareExchange (ref float location1, float value, float comparand); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static int Decrement (ref int location); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static long Decrement (ref long location); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static int Increment (ref int location); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static long Increment (ref long location); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static int Exchange (ref int location1, int value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static object Exchange (ref object location1, object value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static float Exchange (ref float location1, float value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static long CompareExchange (ref long location1, long value, long comparand); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static IntPtr CompareExchange (ref IntPtr location1, IntPtr value, IntPtr comparand); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static double CompareExchange (ref double location1, double value, double comparand); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static T CompareExchange (ref T location1, T value, T comparand) where T : class; + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static long Exchange (ref long location1, long value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static IntPtr Exchange (ref IntPtr location1, IntPtr value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static double Exchange (ref double location1, double value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static T Exchange (ref T location1, T value) where T : class; + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static long Read (ref long location); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static int Add (ref int location1, int value); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static long Add (ref long location1, long value); + + public static void MemoryBarrier () => Thread.MemoryBarrier (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static void MemoryBarrierProcessWide (); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/Monitor.cs b/mcs/class/System.Private.CoreLib/System.Threading/Monitor.cs new file mode 100644 index 0000000000..9fa17690eb --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/Monitor.cs @@ -0,0 +1,173 @@ +using System.Runtime.CompilerServices; + +namespace System.Threading +{ + public static partial class Monitor + { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern void Enter (object obj); + + public static void Enter (object obj, ref bool lockTaken) + { + if (lockTaken) + throw new ArgumentException (SR.Argument_MustBeFalse, nameof (lockTaken)); + + ReliableEnter (obj, ref lockTaken); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern void Exit (object obj); + + public static bool TryEnter (object obj) + { + bool lockTaken = false; + TryEnter (obj, 0, ref lockTaken); + return lockTaken; + } + + public static void TryEnter (object obj, ref bool lockTaken) + { + if (lockTaken) + throw new ArgumentException (SR.Argument_MustBeFalse, nameof (lockTaken)); + + ReliableEnterTimeout (obj, 0, ref lockTaken); + } + + public static bool TryEnter (object obj, int millisecondsTimeout) + { + bool lockTaken = false; + TryEnter (obj, millisecondsTimeout, ref lockTaken); + return lockTaken; + } + + static int MillisecondsTimeoutFromTimeSpan (TimeSpan timeout) + { + long tm = (long) timeout.TotalMilliseconds; + if (tm < -1 || tm > (long) int.MaxValue) + throw new ArgumentOutOfRangeException (nameof (timeout), SR.ArgumentOutOfRange_NeedNonNegOrNegative1); + return (int) tm; + } + + public static bool TryEnter (object obj, TimeSpan timeout) + { + return TryEnter (obj, MillisecondsTimeoutFromTimeSpan (timeout)); + } + + public static void TryEnter (object obj, int millisecondsTimeout, ref bool lockTaken) + { + if (lockTaken) + throw new ArgumentException (SR.Argument_MustBeFalse, nameof (lockTaken)); + ReliableEnterTimeout (obj, millisecondsTimeout, ref lockTaken); + } + + public static void TryEnter(object obj, TimeSpan timeout, ref bool lockTaken) + { + if (lockTaken) + throw new ArgumentException (SR.Argument_MustBeFalse, nameof (lockTaken)); + ReliableEnterTimeout (obj, MillisecondsTimeoutFromTimeSpan (timeout), ref lockTaken); + } + + public static bool IsEntered (object obj) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + return IsEnteredNative (obj); + } + + public static bool Wait (object obj, int millisecondsTimeout, bool exitContext) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + return ObjWait (exitContext, millisecondsTimeout, obj); + } + + public static bool Wait (object obj, TimeSpan timeout, bool exitContext) => Wait (obj, MillisecondsTimeoutFromTimeSpan (timeout), exitContext); + + public static bool Wait (object obj, int millisecondsTimeout) => Wait (obj, millisecondsTimeout, false); + + public static bool Wait(object obj, TimeSpan timeout) => Wait (obj, MillisecondsTimeoutFromTimeSpan (timeout), false); + + public static bool Wait(object obj) => Wait (obj, Timeout.Infinite, false); + + public static void Pulse (object obj) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + ObjPulse (obj); + } + + public static void PulseAll (object obj) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + ObjPulseAll (obj); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static bool Monitor_test_synchronised (object obj); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void Monitor_pulse (object obj); + + static void ObjPulse (object obj) + { + if (!Monitor_test_synchronised (obj)) + throw new SynchronizationLockException ("Object is not synchronized"); + + Monitor_pulse (obj); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void Monitor_pulse_all (object obj); + + static void ObjPulseAll (object obj) + { + if (!Monitor_test_synchronised (obj)) + throw new SynchronizationLockException ("Object is not synchronized"); + + Monitor_pulse_all (obj); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static bool Monitor_wait (object obj, int ms); + + static bool ObjWait (bool exitContext, int millisecondsTimeout, object obj) + { + if (millisecondsTimeout < 0 && millisecondsTimeout != (int) Timeout.Infinite) + throw new ArgumentOutOfRangeException ("millisecondsTimeout"); + if (!Monitor_test_synchronised (obj)) + throw new SynchronizationLockException ("Object is not synchronized"); + + return Monitor_wait (obj, millisecondsTimeout); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void try_enter_with_atomic_var (object obj, int millisecondsTimeout, ref bool lockTaken); + + static void ReliableEnterTimeout (object obj, int timeout, ref bool lockTaken) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + + if (timeout < 0 && timeout != (int) Timeout.Infinite) + throw new ArgumentOutOfRangeException (nameof (timeout)); + + try_enter_with_atomic_var (obj, timeout, ref lockTaken); + } + + static void ReliableEnter (object obj, ref bool lockTaken) + { + ReliableEnterTimeout (obj, (int) Timeout.Infinite, ref lockTaken); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static bool Monitor_test_owner (object obj); + + static bool IsEnteredNative (object obj) + { + return Monitor_test_owner (obj); + } + + public static long LockContentionCount => throw new PlatformNotSupportedException (); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Threading/Mutex.Unix.cs b/mcs/class/System.Private.CoreLib/System.Threading/Mutex.Unix.cs new file mode 100644 index 0000000000..edcb220d3b --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/Mutex.Unix.cs @@ -0,0 +1,68 @@ +using System.Runtime.CompilerServices; +using System.IO; + +namespace System.Threading +{ + partial class Mutex + { + Mutex (IntPtr handle) => Handle = handle; + + public void ReleaseMutex () + { + if (!ReleaseMutex_internal (Handle)) + throw new ApplicationException (SR.Arg_SynchronizationLockException); + } + + void CreateMutexCore (bool initiallyOwned, string name, out bool createdNew) => + Handle = CreateMutex_internal (initiallyOwned, name, out createdNew); + + unsafe static IntPtr CreateMutex_internal (bool initiallyOwned, string name, out bool created) + { + fixed (char *fixed_name = name) + return CreateMutex_icall (initiallyOwned, fixed_name, + name?.Length ?? 0, out created); + } + + static OpenExistingResult OpenExistingWorker (string name, out Mutex result) + { + if (name == null) + throw new ArgumentNullException (nameof (name)); + + result = null; + if ((name.Length == 0) || + (name.Length > 260)) { + return OpenExistingResult.NameInvalid; + } + + MonoIOError error; + IntPtr handle = OpenMutex_internal (name, out error); + if (handle == IntPtr.Zero) { + if (error == MonoIOError.ERROR_FILE_NOT_FOUND) { + return OpenExistingResult.NameNotFound; + } else if (error == MonoIOError.ERROR_ACCESS_DENIED) { + throw new UnauthorizedAccessException (); + } else { + return OpenExistingResult.PathNotFound; + } + } + + result = new Mutex (handle); + return OpenExistingResult.Success; + } + + unsafe static IntPtr OpenMutex_internal (string name, out MonoIOError error) + { + fixed (char *fixed_name = name) + return OpenMutex_icall (fixed_name, name?.Length ?? 0, 0x000001 /* MutexRights.Modify */, out error); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private unsafe static extern IntPtr CreateMutex_icall (bool initiallyOwned, char *name, int name_length, out bool created); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private unsafe static extern IntPtr OpenMutex_icall (char *name, int name_length, int rights, out MonoIOError error); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern bool ReleaseMutex_internal (IntPtr handle); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/Overlapped.cs b/mcs/class/System.Private.CoreLib/System.Threading/Overlapped.cs new file mode 100644 index 0000000000..6dd0ea8e4a --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/Overlapped.cs @@ -0,0 +1,30 @@ +namespace System.Threading +{ + public class Overlapped + { + public Overlapped() { } + [System.ObsoleteAttribute("This constructor is not 64-bit compatible. Use the constructor that takes an IntPtr for the event handle. https://go.microsoft.com/fwlink/?linkid=14202")] + public Overlapped(int offsetLo, int offsetHi, int hEvent, System.IAsyncResult ar) { } + public Overlapped(int offsetLo, int offsetHi, System.IntPtr hEvent, System.IAsyncResult ar) { } + public System.IAsyncResult AsyncResult { get { throw null; } set { } } + [System.ObsoleteAttribute("This property is not 64-bit compatible. Use EventHandleIntPtr instead. https://go.microsoft.com/fwlink/?linkid=14202")] + public int EventHandle { get { throw null; } set { } } + public System.IntPtr EventHandleIntPtr { get { throw null; } set { } } + public int OffsetHigh { get { throw null; } set { } } + public int OffsetLow { get { throw null; } set { } } + [System.CLSCompliantAttribute(false)] + public static unsafe void Free(System.Threading.NativeOverlapped* nativeOverlappedPtr) { } + [System.CLSCompliantAttribute(false)] + [System.ObsoleteAttribute("This method is not safe. Use Pack (iocb, userData) instead. https://go.microsoft.com/fwlink/?linkid=14202")] + public unsafe System.Threading.NativeOverlapped* Pack(System.Threading.IOCompletionCallback iocb) { throw null; } + [System.CLSCompliantAttribute(false)] + public unsafe System.Threading.NativeOverlapped* Pack(System.Threading.IOCompletionCallback iocb, object userData) { throw null; } + [System.CLSCompliantAttribute(false)] + public static unsafe System.Threading.Overlapped Unpack(System.Threading.NativeOverlapped* nativeOverlappedPtr) { throw null; } + [System.CLSCompliantAttribute(false)] + [System.ObsoleteAttribute("This method is not safe. Use UnsafePack (iocb, userData) instead. https://go.microsoft.com/fwlink/?linkid=14202")] + public unsafe System.Threading.NativeOverlapped* UnsafePack(System.Threading.IOCompletionCallback iocb) { throw null; } + [System.CLSCompliantAttribute(false)] + public unsafe System.Threading.NativeOverlapped* UnsafePack(System.Threading.IOCompletionCallback iocb, object userData) { throw null; } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/PreAllocatedOverlapped.cs b/mcs/class/System.Private.CoreLib/System.Threading/PreAllocatedOverlapped.cs new file mode 100644 index 0000000000..0d146985f5 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/PreAllocatedOverlapped.cs @@ -0,0 +1,9 @@ +namespace System.Threading +{ + public sealed class PreAllocatedOverlapped : System.IDisposable + { + [System.CLSCompliantAttribute(false)] + public PreAllocatedOverlapped(System.Threading.IOCompletionCallback callback, object state, object pinData) { } + public void Dispose() { } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/RegisteredWaitHandle.cs b/mcs/class/System.Private.CoreLib/System.Threading/RegisteredWaitHandle.cs new file mode 100644 index 0000000000..ab8929cf61 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/RegisteredWaitHandle.cs @@ -0,0 +1,91 @@ +using System.Runtime.InteropServices; + +namespace System.Threading +{ + public sealed class RegisteredWaitHandle : MarshalByRefObject + { + WaitHandle _waitObject; + WaitOrTimerCallback _callback; + object _state; + WaitHandle _finalEvent; + ManualResetEvent _cancelEvent; + TimeSpan _timeout; + int _callsInProcess; + bool _executeOnlyOnce; + bool _unregistered; + + internal RegisteredWaitHandle (WaitHandle waitObject, WaitOrTimerCallback callback, object state, TimeSpan timeout, bool executeOnlyOnce) + { + _waitObject = waitObject; + _callback = callback; + _state = state; + _timeout = timeout; + _executeOnlyOnce = executeOnlyOnce; + _cancelEvent = new ManualResetEvent (false); + } + + internal void Wait (object? state) + { + bool release = false; + try { + _waitObject.SafeWaitHandle.DangerousAddRef (ref release); + try { + WaitHandle[] waits = new WaitHandle[] {_waitObject, _cancelEvent}; + do { + int signal = WaitHandle.WaitAny (waits, _timeout, false); + if (!_unregistered) { + lock (this) { + _callsInProcess++; + } + ThreadPool.QueueUserWorkItem (new WaitCallback (DoCallBack), (signal == WaitHandle.WaitTimeout)); + } + } while (!_unregistered && !_executeOnlyOnce); + } catch { + } + + lock (this) { + _unregistered = true; + if (_callsInProcess == 0 && _finalEvent != null) + throw new NotImplementedException (); + } + } catch (ObjectDisposedException) { + // Can happen if we called Unregister before we had time to execute Wait + if (release) + throw; + } finally { + if (release) + _waitObject.SafeWaitHandle.DangerousRelease (); + } + } + + void DoCallBack (object? timedOut) + { + try { + if (_callback != null) + _callback (_state, (bool)timedOut!); + } finally { + lock (this) { + _callsInProcess--; + if (_unregistered && _callsInProcess == 0 && _finalEvent != null) { + EventWaitHandle.Set (_finalEvent.SafeWaitHandle); + _finalEvent = null; + } + } + } + } + + public bool Unregister(WaitHandle waitObject) + { + lock (this) { + if (_unregistered) + return false; + + _finalEvent = waitObject; + _unregistered = true; + _cancelEvent.Set(); + + return true; + } + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Threading/Semaphore.Unix.cs b/mcs/class/System.Private.CoreLib/System.Threading/Semaphore.Unix.cs new file mode 100644 index 0000000000..2a4ccf2aac --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/Semaphore.Unix.cs @@ -0,0 +1,98 @@ +using System.Runtime.CompilerServices; +using Microsoft.Win32.SafeHandles; +using System.IO; + +namespace System.Threading +{ + partial class Semaphore + { + const int MAX_PATH = 260; + + Semaphore (SafeWaitHandle handle) => this.SafeWaitHandle = handle; + + int ReleaseCore (int releaseCount) + { + if (!ReleaseSemaphore_internal (SafeWaitHandle.DangerousGetHandle (), releaseCount, out int previousCount)) + throw new SemaphoreFullException (); + + return previousCount; + } + + static OpenExistingResult OpenExistingWorker (string name, out Semaphore result) + { + if (name == null) + throw new ArgumentNullException (nameof (name)); + + if (name.Length == 0) + throw new ArgumentException (SR.Argument_StringZeroLength, nameof (name)); + + if (name.Length > MAX_PATH) + throw new ArgumentException (SR.Argument_WaitHandleNameTooLong); + + var myHandle = new SafeWaitHandle (OpenSemaphore_internal (name, + /*SemaphoreRights.Modify | SemaphoreRights.Synchronize*/ 0x000002 | 0x100000, + out MonoIOError errorCode), true); + + if (myHandle.IsInvalid) { + result = null; + switch (errorCode) { + case MonoIOError.ERROR_FILE_NOT_FOUND: + case MonoIOError.ERROR_INVALID_NAME: + return OpenExistingResult.NameNotFound; + case MonoIOError.ERROR_PATH_NOT_FOUND: + return OpenExistingResult.PathNotFound; + case MonoIOError.ERROR_INVALID_HANDLE when !string.IsNullOrEmpty (name): + return OpenExistingResult.NameInvalid; + default: + //this is for passed through NativeMethods Errors + throw new IOException ($"Unknown Error '{errorCode}'"); + } + } + + result = new Semaphore (myHandle); + return OpenExistingResult.Success; + } + + void CreateSemaphoreCore (int initialCount, int maximumCount, string name, out bool createdNew) + { + if (name?.Length > MAX_PATH) + throw new ArgumentException (SR.Argument_WaitHandleNameTooLong); + + var myHandle = new SafeWaitHandle (CreateSemaphore_internal (initialCount, maximumCount, name, out MonoIOError errorCode), true); + + if (myHandle.IsInvalid) { + if (errorCode == MonoIOError.ERROR_INVALID_HANDLE && !string.IsNullOrEmpty (name)) + throw new WaitHandleCannotBeOpenedException (SR.Format (SR.Threading_WaitHandleCannotBeOpenedException_InvalidHandle, name)); + + throw new IOException ($"Unknown Error '{errorCode}'"); + } + + this.SafeWaitHandle = myHandle; + createdNew = errorCode != MonoIOError.ERROR_ALREADY_EXISTS; + } + + unsafe static IntPtr CreateSemaphore_internal (int initialCount, int maximumCount, string name, out MonoIOError errorCode) + { + // FIXME Check for embedded nuls in name. + fixed (char *fixed_name = name) + return CreateSemaphore_icall (initialCount, maximumCount, + fixed_name, name?.Length ?? 0, out errorCode); + } + + unsafe static IntPtr OpenSemaphore_internal (string name, int rights, out MonoIOError errorCode) + { + // FIXME Check for embedded nuls in name. + fixed (char *fixed_name = name) + return OpenSemaphore_icall (fixed_name, name?.Length ?? 0, rights, out errorCode); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + unsafe static extern IntPtr CreateSemaphore_icall (int initialCount, int maximumCount, char* name, int nameLength, out MonoIOError errorCode); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + unsafe static extern IntPtr OpenSemaphore_icall (char* name, int nameLength, int rights, out MonoIOError errorCode); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool ReleaseSemaphore_internal (IntPtr handle, int releaseCount, out int previousCount); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Threading/StackCrawlMark.cs b/mcs/class/System.Private.CoreLib/System.Threading/StackCrawlMark.cs new file mode 100644 index 0000000000..b24754a4af --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/StackCrawlMark.cs @@ -0,0 +1,13 @@ +namespace System.Threading +{ + // declaring a local var of this enum type and passing it by ref into a function that needs to do a + // stack crawl will both prevent inlining of the calle and pass an ESP point to stack crawl to + // Declaring these in EH clauses is illegal; they must declared in the main method body + internal enum StackCrawlMark + { + LookForMe = 0, + LookForMyCaller = 1, + LookForMyCallersCaller = 2, + LookForThread = 3 + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/Thread.cs b/mcs/class/System.Private.CoreLib/System.Threading/Thread.cs new file mode 100644 index 0000000000..58e42a7d2b --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/Thread.cs @@ -0,0 +1,316 @@ +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Threading +{ + // + // Under netcore, there is only one thread object per thread + // + [StructLayout (LayoutKind.Sequential)] + partial class Thread + { +#pragma warning disable 169, 414, 649 + #region Sync with metadata/object-internals.h and InternalThread in mcs/class/corlib/System.Threading/Thread.cs + int lock_thread_id; + // stores a thread handle + IntPtr handle; + IntPtr native_handle; // used only on Win32 + IntPtr unused3; + /* accessed only from unmanaged code */ + private IntPtr name; + private int name_len; + private ThreadState state; + private object abort_exc; + private int abort_state_handle; + /* thread_id is only accessed from unmanaged code */ + internal Int64 thread_id; + private IntPtr debugger_thread; // FIXME switch to bool as soon as CI testing with corlib version bump works + private UIntPtr static_data; /* GC-tracked */ + private IntPtr runtime_thread_info; + /* current System.Runtime.Remoting.Contexts.Context instance + keep as an object to avoid triggering its class constructor when not needed */ + private object current_appcontext; + private object root_domain_thread; + internal byte[] _serialized_principal; + internal int _serialized_principal_version; + private IntPtr appdomain_refs; + private int interruption_requested; + private IntPtr longlived; + internal bool threadpool_thread; + private bool thread_interrupt_requested; + /* These are used from managed code */ + internal int stack_size; + internal byte apartment_state; + internal volatile int critical_region_level; + internal int managed_id; + private int small_id; + private IntPtr manage_callback; + private IntPtr unused4; + private IntPtr flags; + private IntPtr thread_pinning_ref; + private IntPtr abort_protected_block_count; + private int priority; + private IntPtr owned_mutex; + private IntPtr suspended_event; + private int self_suspended; + private IntPtr thread_state; + private Thread self; + private object pending_exception; + private object start_obj; + + /* This is used only to check that we are in sync between the representation + * of MonoInternalThread in native and InternalThread in managed + * + * DO NOT RENAME! DO NOT ADD FIELDS AFTER! */ + private IntPtr last; + #endregion +#pragma warning restore 169, 414, 649 + + string _name; + Delegate m_start; + object m_start_arg; + CultureInfo culture, ui_culture; + internal ExecutionContext _executionContext; + internal SynchronizationContext _synchronizationContext; + + Thread () + { + InitInternal (this); + } + + ~Thread () + { + FreeInternal (); + } + + internal static ulong CurrentOSThreadId { + get { + throw new NotImplementedException (); + } + } + + public bool IsAlive { + get { + var state = GetState (this); + return (state & (ThreadState.Unstarted | ThreadState.Stopped | ThreadState.Aborted)) == 0; + } + } + + public bool IsBackground { + get { + var state = ValidateThreadState (); + return (state & ThreadState.Background) != 0; + } + set { + ValidateThreadState (); + if (value) { + SetState (this, ThreadState.Background); + } else { + ClrState (this, ThreadState.Background); + } + } + } + + public bool IsThreadPoolThread { + get { + ValidateThreadState (); + return threadpool_thread; + } + } + + public int ManagedThreadId => managed_id; + + internal static int OptimalMaxSpinWaitsPerSpinIteration { + get { + // Default from coreclr (src/utilcode/yieldprocessornormalized.cpp) + return 7; + } + } + + public ThreadPriority Priority { + get { + ValidateThreadState (); + return (ThreadPriority) priority; + } + set { + // TODO: arguments check + SetPriority (this, (int) value); + } + } + + internal SynchronizationContext SynchronizationContext { get; set; } + + public ThreadState ThreadState => GetState (this); + + void Create (ThreadStart start) => SetStartHelper ((Delegate) start, 0); // 0 will setup Thread with default stackSize + + void Create (ThreadStart start, int maxStackSize) => SetStartHelper ((Delegate) start, maxStackSize); + + void Create (ParameterizedThreadStart start) => SetStartHelper ((Delegate) start, 0); + + void Create (ParameterizedThreadStart start, int maxStackSize) => SetStartHelper ((Delegate) start, maxStackSize); + + public ApartmentState GetApartmentState () => ApartmentState.Unknown; + + public void DisableComObjectEagerCleanup () + { + // no-op + } + + public static int GetCurrentProcessorId () + { + // TODO: Implement correctly + return Environment.CurrentManagedThreadId; + } + + public void Interrupt () + { + InterruptInternal (this); + } + + public bool Join (int millisecondsTimeout) + { + if (millisecondsTimeout < Timeout.Infinite) + throw new ArgumentOutOfRangeException (nameof (millisecondsTimeout), millisecondsTimeout, SR.ArgumentOutOfRange_NeedNonNegOrNegative1); + return JoinInternal (this, millisecondsTimeout); + } + + public void ResetThreadPoolThread () + { + } + + void SetCultureOnUnstartedThreadNoCheck (CultureInfo value, bool uiCulture) + { + if (uiCulture) + ui_culture = value; + else + culture = value; + } + + void SetStartHelper (Delegate start, int maxStackSize) + { + m_start = start; + stack_size = maxStackSize; + } + + public static void SpinWait (int iterations) + { + if (iterations < 0) + return; + + while (iterations-- > 0) + SpinWait_nop (); + } + + public static void Sleep (int millisecondsTimeout) + { + if (millisecondsTimeout < Timeout.Infinite) + throw new ArgumentOutOfRangeException (nameof (millisecondsTimeout), millisecondsTimeout, SR.ArgumentOutOfRange_NeedNonNegOrNegative1); + + SleepInternal (millisecondsTimeout); + } + + public void Start () + { + StartInternal (this); + } + + public void Start (object parameter) + { + if (m_start is ThreadStart) + throw new InvalidOperationException (SR.InvalidOperation_ThreadWrongThreadStart); + + m_start_arg = parameter; + StartInternal (this); + } + + // Called from the runtime + internal void StartCallback () + { + if (culture != null) + CurrentCulture = culture; + if (ui_culture != null) + CurrentUICulture = ui_culture; + if (m_start is ThreadStart del) { + m_start = null; + del (); + } else { + var pdel = (ParameterizedThreadStart) m_start; + var arg = m_start_arg; + m_start = null; + m_start_arg = null; + pdel (arg); + } + } + + partial void ThreadNameChanged (string value) + { + // TODO: Should only raise the events + SetName (this, value); + } + + public static bool Yield () + { + return YieldInternal (); + } + + public bool TrySetApartmentStateUnchecked (ApartmentState state) => state == ApartmentState.Unknown; + + ThreadState ValidateThreadState () + { + var state = GetState (this); + if ((state & ThreadState.Stopped) != 0) + throw new ThreadStateException ("Thread is dead; state can not be accessed."); + return state; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void InitInternal (Thread thread); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static Thread InitializeCurrentThread (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern void FreeInternal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static ThreadState GetState (Thread thread); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void SetState (Thread thread, ThreadState set); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void ClrState (Thread thread, ThreadState clr); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static string GetName (Thread thread); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static void SetName (Thread thread, String name); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static bool YieldInternal (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static void SleepInternal (int millisecondsTimeout); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void SpinWait_nop (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static Thread CreateInternal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void StartInternal (Thread runtime_thread); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static bool JoinInternal (Thread thread, int millisecondsTimeout); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static void InterruptInternal (Thread thread); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static void SetPriority (Thread thread, int priority); + } +} diff --git a/mcs/class/System.Private.CoreLib/System.Threading/ThreadPool.cs b/mcs/class/System.Private.CoreLib/System.Threading/ThreadPool.cs new file mode 100644 index 0000000000..854926fdb6 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/ThreadPool.cs @@ -0,0 +1,131 @@ +using System.Runtime.CompilerServices; + +namespace System.Threading +{ + partial class ThreadPool + { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void InitializeVMTp (ref bool enableWorkerTracking); + + static void EnsureInitialized () + { + if (!ThreadPoolGlobals.threadPoolInitialized) { + ThreadPool.InitializeVMTp (ref ThreadPoolGlobals.enableWorkerTracking); + ThreadPoolGlobals.threadPoolInitialized = true; + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern bool RequestWorkerThread (); + + internal static bool KeepDispatching (int startTickCount) => true; + + internal static void NotifyWorkItemProgress () + { + EnsureInitialized (); + NotifyWorkItemProgressNative (); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern void NotifyWorkItemProgressNative (); + + static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject, WaitOrTimerCallback callBack, object state, + uint millisecondsTimeOutInterval, bool executeOnlyOnce, bool compressStack) + { + if (waitObject == null) + throw new ArgumentNullException ("waitObject"); + if (callBack == null) + throw new ArgumentNullException ("callBack"); + if (millisecondsTimeOutInterval != Timeout.UnsignedInfinite && millisecondsTimeOutInterval > Int32.MaxValue) + throw new NotSupportedException ("Timeout is too big. Maximum is Int32.MaxValue"); + + RegisteredWaitHandle waiter = new RegisteredWaitHandle (waitObject, callBack, state, new TimeSpan (0, 0, 0, 0, (int) millisecondsTimeOutInterval), executeOnlyOnce); + if (compressStack) + QueueUserWorkItem (new WaitCallback (waiter.Wait), null); + else + UnsafeQueueUserWorkItem (new WaitCallback (waiter.Wait), null); + + return waiter; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern void ReportThreadStatus (bool isWorking); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern bool NotifyWorkItemComplete (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool SetMinThreadsNative (int workerThreads, int completionPortThreads); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool SetMaxThreadsNative (int workerThreads, int completionPortThreads); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void GetMinThreadsNative (out int workerThreads, out int completionPortThreads); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void GetMaxThreadsNative (out int workerThreads, out int completionPortThreads); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern void GetAvailableThreadsNative (out int workerThreads, out int completionPortThreads); + + public static bool SetMaxThreads (int workerThreads, int completionPortThreads) + { + return SetMaxThreadsNative (workerThreads, completionPortThreads); + } + + public static void GetMaxThreads (out int workerThreads, out int completionPortThreads) + { + GetMaxThreadsNative (out workerThreads, out completionPortThreads); + } + + public static bool SetMinThreads (int workerThreads, int completionPortThreads) + { + return SetMinThreadsNative (workerThreads, completionPortThreads); + } + + public static void GetMinThreads (out int workerThreads, out int completionPortThreads) + { + GetMinThreadsNative (out workerThreads, out completionPortThreads); + } + + public static void GetAvailableThreads(out int workerThreads, out int completionPortThreads) + { + GetAvailableThreadsNative (out workerThreads, out completionPortThreads); + } + + public static bool BindHandle (IntPtr osHandle) => throw new NotImplementedException (); + public static bool BindHandle (System.Runtime.InteropServices.SafeHandle osHandle) => throw new NotImplementedException (); + + [CLSCompliant (false)] + public static unsafe bool UnsafeQueueNativeOverlapped (NativeOverlapped* overlapped) => throw new NotImplementedException (); + + static long PendingUnmanagedWorkItemCount => 0; + + public static long CompletedWorkItemCount => throw new PlatformNotSupportedException (); + + public static int ThreadCount => throw new NotImplementedException (); + } + + internal static class _ThreadPoolWaitCallback + { + // This feature is used by Xamarin.iOS to use an NSAutoreleasePool + // for every task done by the threadpool. + static Func, bool> dispatcher; + + internal static void SetDispatcher (Func, bool> value) + { + dispatcher = value; + } + + static internal bool PerformWaitCallback () + { + // store locally first to ensure another thread doesn't clear the field between checking for null and using it. + var dispatcher = _ThreadPoolWaitCallback.dispatcher; + if (dispatcher != null) + return dispatcher (ThreadPoolWorkQueue.Dispatch); + + return ThreadPoolWorkQueue.Dispatch (); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/ThreadPoolBoundHandle.cs b/mcs/class/System.Private.CoreLib/System.Threading/ThreadPoolBoundHandle.cs new file mode 100644 index 0000000000..1ad47219fd --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/ThreadPoolBoundHandle.cs @@ -0,0 +1,18 @@ +namespace System.Threading +{ + public sealed partial class ThreadPoolBoundHandle : System.IDisposable + { + internal ThreadPoolBoundHandle() { } + public System.Runtime.InteropServices.SafeHandle Handle { get { throw null; } } + [System.CLSCompliantAttribute(false)] + public unsafe System.Threading.NativeOverlapped* AllocateNativeOverlapped(System.Threading.IOCompletionCallback callback, object state, object pinData) { throw null; } + [System.CLSCompliantAttribute(false)] + public unsafe System.Threading.NativeOverlapped* AllocateNativeOverlapped(System.Threading.PreAllocatedOverlapped preAllocated) { throw null; } + public static System.Threading.ThreadPoolBoundHandle BindHandle(System.Runtime.InteropServices.SafeHandle handle) { throw null; } + public void Dispose() { } + [System.CLSCompliantAttribute(false)] + public unsafe void FreeNativeOverlapped(System.Threading.NativeOverlapped* overlapped) { } + [System.CLSCompliantAttribute(false)] + public static unsafe object GetNativeOverlappedState(System.Threading.NativeOverlapped* overlapped) { throw null; } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System.Threading/WaitHandle.cs b/mcs/class/System.Private.CoreLib/System.Threading/WaitHandle.cs new file mode 100644 index 0000000000..39c1904b6a --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System.Threading/WaitHandle.cs @@ -0,0 +1,43 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Threading +{ + partial class WaitHandle + { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + unsafe static extern int Wait_internal(IntPtr* handles, int numHandles, bool waitAll, int ms); + + static int WaitOneCore (IntPtr waitHandle, int millisecondsTimeout) + { + unsafe { + return Wait_internal (&waitHandle, 1, false, millisecondsTimeout); + } + } + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern int SignalAndWait_Internal (IntPtr waitHandleToSignal, IntPtr waitHandleToWaitOn, int millisecondsTimeout); + + const int ERROR_TOO_MANY_POSTS = 0x12A; + const int ERROR_NOT_OWNED_BY_CALLER = 0x12B; + + static int SignalAndWaitCore (IntPtr waitHandleToSignal, IntPtr waitHandleToWaitOn, int millisecondsTimeout) + { + int ret = SignalAndWait_Internal (waitHandleToSignal, waitHandleToWaitOn, millisecondsTimeout); + if (ret == ERROR_TOO_MANY_POSTS) + throw new InvalidOperationException (SR.Threading_WaitHandleTooManyPosts); + if (ret == ERROR_NOT_OWNED_BY_CALLER) + throw new ApplicationException("Attempt to release mutex not owned by caller"); + return ret; + } + + internal static int WaitMultipleIgnoringSyncContext (Span waitHandles, bool waitAll, int millisecondsTimeout) + { + unsafe { + fixed (IntPtr* handles = &MemoryMarshal.GetReference (waitHandles)) { + return Wait_internal (handles, waitHandles.Length, waitAll, millisecondsTimeout); + } + } + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/AppContext.cs b/mcs/class/System.Private.CoreLib/System/AppContext.cs new file mode 100644 index 0000000000..121acd2665 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/AppContext.cs @@ -0,0 +1,25 @@ +using System.IO; +using System.Reflection; + +namespace System +{ + partial class AppContext + { + // Called by the runtime + internal static unsafe void Setup (char** pNames, char** pValues, int count) + { + for (int i = 0; i < count; i++) + s_dataStore.Add (new string ((sbyte*)pNames[i]), new string ((sbyte*)pValues[i])); + } + + static string? GetBaseDirectoryCore () + { + // Fallback path for hosts that do not set APP_CONTEXT_BASE_DIRECTORY explicitly + var directory = Path.GetDirectoryName (Assembly.GetEntryAssembly()?.Location); + if (directory != null && !Path.EndsInDirectorySeparator (directory)) + directory += Path.DirectorySeparatorChar; + + return directory; + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/ArgIterator.cs b/mcs/class/System.Private.CoreLib/System/ArgIterator.cs new file mode 100644 index 0000000000..3b4d0a8805 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/ArgIterator.cs @@ -0,0 +1,104 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System +{ + [StructLayout (LayoutKind.Auto)] + public ref struct ArgIterator + { +#pragma warning disable 169, 414 + IntPtr sig; + IntPtr args; + int next_arg; + int num_args; +#pragma warning restore 169, 414 + + [MethodImpl (MethodImplOptions.InternalCall)] + extern void Setup (IntPtr argsp, IntPtr start); + + public ArgIterator (RuntimeArgumentHandle arglist) + { + sig = IntPtr.Zero; + args = IntPtr.Zero; + next_arg = num_args = 0; + if (arglist.args == IntPtr.Zero) + throw new PlatformNotSupportedException (); + Setup (arglist.args, IntPtr.Zero); + } + + [CLSCompliant (false)] + unsafe public ArgIterator (RuntimeArgumentHandle arglist, void *ptr) + { + sig = IntPtr.Zero; + args = IntPtr.Zero; + next_arg = num_args = 0; + if (arglist.args == IntPtr.Zero) + throw new PlatformNotSupportedException (); + Setup (arglist.args, (IntPtr) ptr); + } + + public void End () + { + next_arg = num_args; + } + + public override bool Equals (object? o) + { + throw new NotSupportedException ("ArgIterator does not support Equals."); + } + + public override int GetHashCode () + { + return sig.GetHashCode (); + } + + [CLSCompliant (false)] + public TypedReference GetNextArg () + { + if (num_args == next_arg) + throw new InvalidOperationException ("Invalid iterator position."); + TypedReference result = new TypedReference (); + unsafe { + IntGetNextArg (&result); + } + return result; + } + + [MethodImpl (MethodImplOptions.InternalCall)] + extern unsafe void IntGetNextArg (void *res); + + [CLSCompliant (false)] + public TypedReference GetNextArg (RuntimeTypeHandle rth) + { + if (num_args == next_arg) + throw new InvalidOperationException ("Invalid iterator position."); + TypedReference result = new TypedReference (); + unsafe { + IntGetNextArgWithType (&result, rth.Value); + } + return result; + } + + [MethodImpl (MethodImplOptions.InternalCall)] + extern unsafe void IntGetNextArgWithType (void *res, IntPtr rth); + + public RuntimeTypeHandle GetNextArgType () + { + if (num_args == next_arg) + throw new InvalidOperationException ("Invalid iterator position."); + return new RuntimeTypeHandle (IntGetNextArgType ()); + } + + [MethodImpl (MethodImplOptions.InternalCall)] + extern IntPtr IntGetNextArgType (); + + public int GetRemainingCount () + { + return num_args - next_arg; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Array.cs b/mcs/class/System.Private.CoreLib/System/Array.cs new file mode 100644 index 0000000000..39f520f285 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Array.cs @@ -0,0 +1,598 @@ +using Internal.Runtime.CompilerServices; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System +{ + partial class Array + { + [StructLayout(LayoutKind.Sequential)] + private class RawData + { + public IntPtr Bounds; + public IntPtr Count; + public byte Data; + } + + public int Length { + get { + int length = GetLength (0); + + for (int i = 1; i < Rank; i++) { + length *= GetLength (i); + } + return length; + } + } + + public long LongLength { + get { + long length = GetLength (0); + + for (int i = 1; i < Rank; i++) { + length *= GetLength (i); + } + return length; + } + } + + public int Rank { + get { + return GetRank (); + } + } + + public static void Clear (Array array, int index, int length) + { + if (array == null) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); + if (length < 0) + ThrowHelper.ThrowIndexOutOfRangeException(); + + int low = array!.GetLowerBound (0); + if (index < low) + ThrowHelper.ThrowIndexOutOfRangeException(); + + index = index - low; + + // re-ordered to avoid possible integer overflow + if (index > array.Length - length) + ThrowHelper.ThrowIndexOutOfRangeException(); + + ClearInternal (array, index, length); + } + + public static void ConstrainedCopy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length) + { + Copy (sourceArray, sourceIndex, destinationArray, destinationIndex, length, true); + } + + public static void Copy (Array sourceArray, Array destinationArray, int length) + { + if (sourceArray == null) + throw new ArgumentNullException ("sourceArray"); + + if (destinationArray == null) + throw new ArgumentNullException ("destinationArray"); + + Copy (sourceArray, sourceArray.GetLowerBound (0), destinationArray, + destinationArray.GetLowerBound (0), length); + } + + public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length) + { + Copy (sourceArray, sourceIndex, destinationArray, destinationIndex, length, false); + } + + private static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable) + { + if (sourceArray == null) + throw new ArgumentNullException (nameof (sourceArray)); + + if (destinationArray == null) + throw new ArgumentNullException (nameof (destinationArray)); + + if (length < 0) + throw new ArgumentOutOfRangeException (nameof (length), "Value has to be >= 0."); + + if (sourceArray.Rank != destinationArray.Rank) + throw new RankException(SR.Rank_MultiDimNotSupported); + + if (sourceIndex < 0) + throw new ArgumentOutOfRangeException (nameof (sourceIndex), "Value has to be >= 0."); + + if (destinationIndex < 0) + throw new ArgumentOutOfRangeException (nameof (destinationIndex), "Value has to be >= 0."); + + if (FastCopy (sourceArray, sourceIndex, destinationArray, destinationIndex, length)) + return; + + int source_pos = sourceIndex - sourceArray.GetLowerBound (0); + int dest_pos = destinationIndex - destinationArray.GetLowerBound (0); + + if (source_pos < 0) + throw new ArgumentOutOfRangeException (nameof (sourceIndex), "Index was less than the array's lower bound in the first dimension."); + + if (dest_pos < 0) + throw new ArgumentOutOfRangeException (nameof (destinationIndex), "Index was less than the array's lower bound in the first dimension."); + + // re-ordered to avoid possible integer overflow + if (source_pos > sourceArray.Length - length) + throw new ArgumentException (SR.Arg_LongerThanSrcArray, nameof (sourceArray)); + + if (dest_pos > destinationArray.Length - length) { + throw new ArgumentException ("Destination array was not long enough. Check destIndex and length, and the array's lower bounds", nameof (destinationArray)); + } + + Type src_type = sourceArray.GetType ().GetElementType ()!; + Type dst_type = destinationArray.GetType ().GetElementType ()!; + var dst_type_vt = dst_type.IsValueType && Nullable.GetUnderlyingType (dst_type) == null; + + if (src_type.IsEnum) + src_type = Enum.GetUnderlyingType (src_type); + if (dst_type.IsEnum) + dst_type = Enum.GetUnderlyingType (dst_type); + + if (reliable) { + if (!dst_type.Equals (src_type)) { + throw new ArrayTypeMismatchException (SR.ArrayTypeMismatch_CantAssignType); + } + } else { + if (!CanAssignArrayElement (src_type, dst_type)) { + throw new ArrayTypeMismatchException (SR.ArrayTypeMismatch_CantAssignType); + } + } + + if (!Object.ReferenceEquals (sourceArray, destinationArray) || source_pos > dest_pos) { + for (int i = 0; i < length; i++) { + Object srcval = sourceArray.GetValueImpl (source_pos + i); + + if (dst_type_vt && (srcval == null || (src_type == typeof (object) && srcval.GetType () != dst_type))) + throw new InvalidCastException (); + + try { + destinationArray.SetValueImpl (srcval, dest_pos + i); + } catch (ArgumentException) { + throw CreateArrayTypeMismatchException (); + } + } + } else { + for (int i = length - 1; i >= 0; i--) { + Object srcval = sourceArray.GetValueImpl (source_pos + i); + + try { + destinationArray.SetValueImpl (srcval, dest_pos + i); + } catch (ArgumentException) { + throw CreateArrayTypeMismatchException (); + } + } + } + } + + static ArrayTypeMismatchException CreateArrayTypeMismatchException () + { + return new ArrayTypeMismatchException (); + } + + static bool CanAssignArrayElement (Type source, Type target) + { + if (!target.IsValueType && !target.IsPointer) { + if (!source.IsValueType && !source.IsPointer) { + // Reference to reference copy + return + source.IsInterface || target.IsInterface || + source.IsAssignableFrom (target) || target.IsAssignableFrom (source); + } else { + // Value to reference copy + if (source.IsPointer) + return false; + return target.IsAssignableFrom (source); + } + } else { + if (source.IsEquivalentTo (target)) { + return true; + } else if (source.IsPointer && target.IsPointer) { + return true; + } else if (source.IsPrimitive && target.IsPrimitive) { + + // Special case: normally C# doesn't allow implicit ushort->char cast). + if (source == typeof (ushort) && target == typeof (char)) + return true; + + // Allow primitive type widening + return DefaultBinder.CanChangePrimitive (source, target); + } else if (!source.IsValueType && !source.IsPointer) { + // Source is base class or interface of destination type + if (target.IsPointer) + return false; + return source.IsAssignableFrom (target); + } + } + + return false; + } + + public static Array CreateInstance (Type elementType, int length) + { + if (length < 0) + throw new ArgumentOutOfRangeException (nameof (length)); + + int[] lengths = {length}; + + return CreateInstance (elementType, lengths); + } + + public static Array CreateInstance (Type elementType, int length1, int length2) + { + if (length1 < 0) + throw new ArgumentOutOfRangeException (nameof (length1)); + if (length2 < 0) + throw new ArgumentOutOfRangeException (nameof (length2)); + + int[] lengths = {length1, length2}; + + return CreateInstance (elementType, lengths); + } + + public static Array CreateInstance (Type elementType, int length1, int length2, int length3) + { + if (length1 < 0) + throw new ArgumentOutOfRangeException (nameof (length1)); + if (length2 < 0) + throw new ArgumentOutOfRangeException (nameof (length2)); + if (length3 < 0) + throw new ArgumentOutOfRangeException (nameof (length3)); + + int[] lengths = {length1, length2, length3}; + + return CreateInstance (elementType, lengths); + } + + public static Array CreateInstance (Type elementType, params int[] lengths) + { + if (elementType == null) + throw new ArgumentNullException ("elementType"); + if (lengths == null) + throw new ArgumentNullException ("lengths"); + if (lengths.Length == 0) + throw new ArgumentException (nameof (lengths)); + if (lengths.Length > 255) + throw new TypeLoadException (); + for (int i = 0; i < lengths.Length; ++i) { + if (lengths [i] < 0) + throw new ArgumentOutOfRangeException ($"lengths[{i}]", SR.ArgumentOutOfRange_NeedNonNegNum); + } + + if (!(elementType.UnderlyingSystemType is RuntimeType et)) + throw new ArgumentException ("Type must be a type provided by the runtime.", "elementType"); + if (et.Equals (typeof (void))) + throw new NotSupportedException ("Array type can not be void"); + if (et.ContainsGenericParameters) + throw new NotSupportedException ("Array type can not be an open generic type"); + if (et.IsByRef) + throw new NotSupportedException (SR.NotSupported_Type); + + return CreateInstanceImpl (et, lengths, null); + } + + public static Array CreateInstance (Type elementType, int[] lengths, int [] lowerBounds) + { + if (elementType == null) + throw new ArgumentNullException ("elementType"); + if (lengths == null) + throw new ArgumentNullException ("lengths"); + if (lowerBounds == null) + throw new ArgumentNullException ("lowerBounds"); + + if (!(elementType.UnderlyingSystemType is RuntimeType rt)) + throw new ArgumentException ("Type must be a type provided by the runtime.", "elementType"); + if (rt.Equals (typeof (void))) + throw new NotSupportedException ("Array type can not be void"); + if (rt.ContainsGenericParameters) + throw new NotSupportedException ("Array type can not be an open generic type"); + if (rt.IsByRef) + throw new NotSupportedException (SR.NotSupported_Type); + + if (lengths.Length < 1) + throw new ArgumentException ("Arrays must contain >= 1 elements."); + + if (lengths.Length != lowerBounds.Length) + throw new ArgumentException ("Arrays must be of same size."); + + for (int j = 0; j < lowerBounds.Length; j ++) { + if (lengths [j] < 0) + throw new ArgumentOutOfRangeException ($"lengths[{j}]", "Each value has to be >= 0."); + if ((long)lowerBounds [j] + (long)lengths [j] > (long)Int32.MaxValue) + throw new ArgumentOutOfRangeException (null, "Length + bound must not exceed Int32.MaxValue."); + } + + if (lengths.Length > 255) + throw new TypeLoadException (); + + return CreateInstanceImpl (elementType, lengths, lowerBounds); + } + + public object GetValue (int index) + { + if (Rank != 1) + ThrowHelper.ThrowArgumentException (ExceptionResource.Arg_Need1DArray); + + var lb = GetLowerBound (0); + if (index < lb || index > GetUpperBound (0)) + throw new IndexOutOfRangeException ("Index has to be between upper and lower bound of the array."); + + if (GetType ().GetElementType ()!.IsPointer) + throw new NotSupportedException (SR.NotSupported_Type); + + return GetValueImpl (index - lb); + } + + public object GetValue (int index1, int index2) + { + if (Rank != 2) + ThrowHelper.ThrowArgumentException (ExceptionResource.Arg_Need2DArray); + + int[] ind = {index1, index2}; + return GetValue (ind); + } + + public object GetValue (int index1, int index2, int index3) + { + if (Rank != 3) + ThrowHelper.ThrowArgumentException (ExceptionResource.Arg_Need3DArray); + + int[] ind = {index1, index2, index3}; + return GetValue (ind); + } + + public void Initialize () + { + } + + static int IndexOfImpl(T[] array, T value, int startIndex, int count) + { + return EqualityComparer.Default.IndexOf (array, value, startIndex, count); + } + + static int LastIndexOfImpl(T[] array, T value, int startIndex, int count) + { + return EqualityComparer.Default.LastIndexOf (array, value, startIndex, count); + } + + public void SetValue (object? value, int index) + { + if (Rank != 1) + ThrowHelper.ThrowArgumentException (ExceptionResource.Arg_Need1DArray); + + var lb = GetLowerBound (0); + if (index < lb || index > GetUpperBound (0)) + throw new IndexOutOfRangeException ("Index has to be >= lower bound and <= upper bound of the array."); + + if (GetType ().GetElementType ()!.IsPointer) + throw new NotSupportedException (SR.NotSupported_Type); + + SetValueImpl (value, index - lb); + } + + public void SetValue (object? value, int index1, int index2) + { + if (Rank != 2) + ThrowHelper.ThrowArgumentException (ExceptionResource.Arg_Need2DArray); + + int[] ind = {index1, index2}; + SetValue (value, ind); + } + + public void SetValue (object? value, int index1, int index2, int index3) + { + if (Rank != 3) + ThrowHelper.ThrowArgumentException (ExceptionResource.Arg_Need3DArray); + + int[] ind = {index1, index2, index3}; + SetValue (value, ind); + } + + static void SortImpl (Array keys, Array? items, int index, int length, IComparer comparer) + { + /* TODO: CoreCLR optimizes this case via an internal call + if (comparer == Comparer.Default) + { + bool r = TrySZSort(keys, items, index, index + length - 1); + if (r) + return; + }*/ + + object[]? objKeys = keys as object[]; + object[]? objItems = null; + if (objKeys != null) + objItems = items as object[]; + if (objKeys != null && (items == null || objItems != null)) { + SorterObjectArray sorter = new SorterObjectArray (objKeys, objItems, comparer); + sorter.Sort(index, length); + } else { + SorterGenericArray sorter = new SorterGenericArray (keys, items, comparer); + sorter.Sort(index, length); + } + } + + public int GetUpperBound (int dimension) + { + return GetLowerBound (dimension) + GetLength (dimension) - 1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal ref byte GetRawSzArrayData() + { + return ref Unsafe.As(this).Data; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal ref byte GetRawArrayData () + { + return ref Unsafe.As(this).Data; + } + + // + // Moved value from instance into target of different type with no checks (JIT intristics) + // + // Restrictions: + // + // S and R must either: + // both be blitable valuetypes + // both be reference types (IOW, an unsafe cast) + // S and R cannot be float or double + // S and R must either: + // both be a struct + // both be a scalar + // S and R must either: + // be of same size + // both be a scalar of size <= 4 + // + internal static R UnsafeMov (S instance) + { + return (R)(object) instance; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void ClearInternal (Array a, int index, int count); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static Array CreateInstanceImpl (Type elementType, int[] lengths, int[]? bounds); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool FastCopy (Array source, int source_idx, Array dest, int dest_idx, int length); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern int GetRank (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern int GetLength (int dimension); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern int GetLowerBound (int dimension); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern object GetValue (params int[] indices); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern void SetValue (object? value, params int[] indices); + + // CAUTION! No bounds checking! + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern void GetGenericValueImpl (int pos, out T value); + + // CAUTION! No bounds checking! + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern object GetValueImpl (int pos); + + // CAUTION! No bounds checking! + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern void SetGenericValueImpl (int pos, ref T value); + + // CAUTION! No bounds checking! + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern void SetValueImpl (object? value, int pos); + + /* + * These methods are used to implement the implicit generic interfaces + * implemented by arrays in NET 2.0. + * Only make those methods generic which really need it, to avoid + * creating useless instantiations. + */ + internal int InternalArray__ICollection_get_Count () + { + return Length; + } + + internal bool InternalArray__ICollection_get_IsReadOnly () + { + return true; + } + + internal IEnumerator InternalArray__IEnumerable_GetEnumerator () + { + return Length == 0 ? SZGenericArrayEnumerator.Empty : new SZGenericArrayEnumerator (Unsafe.As (this)); + } + + internal void InternalArray__ICollection_Clear () + { + ThrowHelper.ThrowNotSupportedException (ExceptionResource.NotSupported_ReadOnlyCollection); + } + + internal void InternalArray__ICollection_Add (T item) + { + ThrowHelper.ThrowNotSupportedException (ExceptionResource.NotSupported_FixedSizeCollection); + } + + internal bool InternalArray__ICollection_Remove (T item) + { + ThrowHelper.ThrowNotSupportedException (ExceptionResource.NotSupported_FixedSizeCollection); + return default; + } + + internal bool InternalArray__ICollection_Contains (T item) + { + return IndexOf (this, item, 0, Length) >= 0; + } + + internal void InternalArray__ICollection_CopyTo (T[] array, int arrayIndex) + { + Copy (this, GetLowerBound (0), array, arrayIndex, Length); + } + + internal T InternalArray__IReadOnlyList_get_Item (int index) + { + if ((uint)index >= (uint)Length) + ThrowHelper.ThrowArgumentOutOfRange_IndexException (); + + T value; + GetGenericValueImpl (index, out value); + return value; + } + + internal int InternalArray__IReadOnlyCollection_get_Count () + { + return Length; + } + + internal void InternalArray__Insert (int index, T item) + { + ThrowHelper.ThrowNotSupportedException (ExceptionResource.NotSupported_FixedSizeCollection); + } + + internal void InternalArray__RemoveAt (int index) + { + ThrowHelper.ThrowNotSupportedException (ExceptionResource.NotSupported_FixedSizeCollection); + } + + internal int InternalArray__IndexOf (T item) + { + return IndexOf (this, item, 0, Length); + } + + internal T InternalArray__get_Item (int index) + { + if ((uint)index >= (uint)Length) + ThrowHelper.ThrowArgumentOutOfRange_IndexException (); + + T value; + GetGenericValueImpl (index, out value); + return value; + } + + internal void InternalArray__set_Item (int index, T item) + { + if ((uint)index >= (uint)Length) + ThrowHelper.ThrowArgumentOutOfRange_IndexException(); + + if (this is object[] oarray) { + oarray! [index] = (object)item; + return; + } + + SetGenericValueImpl (index, ref item); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Attribute.cs b/mcs/class/System.Private.CoreLib/System/Attribute.cs new file mode 100644 index 0000000000..792c90ecf5 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Attribute.cs @@ -0,0 +1,78 @@ +#nullable disable +using System.Reflection; + +namespace System +{ + partial class Attribute + { + static Attribute? GetAttr (ICustomAttributeProvider element, Type attributeType, bool inherit) + { + if (attributeType == null) + throw new ArgumentNullException (nameof (attributeType)); + if (!attributeType.IsSubclassOf (typeof (Attribute)) && attributeType != typeof (Attribute) && attributeType != typeof (MonoCustomAttrs)) + throw new ArgumentException (SR.Argument_MustHaveAttributeBaseClass + " " + attributeType.FullName); + + var attrs = MonoCustomAttrs.GetCustomAttributes (element, attributeType, inherit); + if (attrs == null || attrs.Length == 0) + return null; + if (attrs.Length != 1) + throw new AmbiguousMatchException (); + return (Attribute)(attrs [0]); + } + + public static Attribute GetCustomAttribute (Assembly element, Type attributeType) => GetAttr (element, attributeType, true); + public static Attribute GetCustomAttribute(Assembly element, Type attributeType, bool inherit) => GetAttr (element, attributeType, inherit); + public static Attribute GetCustomAttribute(MemberInfo element, Type attributeType) => GetAttr (element, attributeType, true); + public static Attribute GetCustomAttribute(MemberInfo element, Type attributeType, bool inherit) => GetAttr (element, attributeType, inherit); + public static Attribute GetCustomAttribute(Module element, Type attributeType) => GetAttr (element, attributeType, true); + public static Attribute GetCustomAttribute(Module element, Type attributeType, bool inherit) => GetAttr (element, attributeType, inherit); + public static Attribute GetCustomAttribute(ParameterInfo element, Type attributeType) => GetAttr (element, attributeType, true); + public static Attribute GetCustomAttribute(ParameterInfo element, Type attributeType, bool inherit) => GetAttr (element, attributeType, inherit); + + public static Attribute[] GetCustomAttributes (Assembly element) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, true); + public static Attribute[] GetCustomAttributes (Assembly element, bool inherit) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, inherit); + public static Attribute[] GetCustomAttributes (Assembly element, Type attributeType) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, true); + public static Attribute[] GetCustomAttributes (Assembly element, Type attributeType, bool inherit) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, inherit); + public static Attribute[] GetCustomAttributes (MemberInfo element) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, true); + public static Attribute[] GetCustomAttributes (MemberInfo element, bool inherit) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, inherit); + public static Attribute[] GetCustomAttributes (MemberInfo element, Type attributeType) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, true); + public static Attribute[] GetCustomAttributes (MemberInfo element, Type attributeType, bool inherit) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, inherit); + public static Attribute[] GetCustomAttributes (Module element) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, true); + public static Attribute[] GetCustomAttributes (Module element, bool inherit) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, inherit); + public static Attribute[] GetCustomAttributes (Module element, Type attributeType) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, true); + public static Attribute[] GetCustomAttributes (Module element, Type attributeType, bool inherit) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, inherit); + public static Attribute[] GetCustomAttributes (ParameterInfo element) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, true); + public static Attribute[] GetCustomAttributes (ParameterInfo element, bool inherit) => (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, inherit); + public static Attribute[] GetCustomAttributes (ParameterInfo element, Type attributeType) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, true); + public static Attribute[] GetCustomAttributes (ParameterInfo element, Type attributeType, bool inherit) => (Attribute[])GetCustomAttributes ((ICustomAttributeProvider)element, attributeType, inherit); + + internal static Attribute[] GetCustomAttributes (ICustomAttributeProvider element, Type attributeType, bool inherit) + { + if (attributeType == null) + throw new ArgumentNullException (nameof (attributeType)); + if (!attributeType.IsSubclassOf (typeof (Attribute)) && attributeType != typeof (Attribute)) + throw new ArgumentException (SR.Argument_MustHaveAttributeBaseClass + " " + attributeType.FullName); + + return (Attribute[])MonoCustomAttrs.GetCustomAttributes (element, attributeType, inherit); + } + + public static bool IsDefined (Assembly element, Type attributeType) => IsDefined ((ICustomAttributeProvider)element, attributeType, true); + public static bool IsDefined (Assembly element, Type attributeType, bool inherit) => IsDefined ((ICustomAttributeProvider)element, attributeType, inherit); + public static bool IsDefined (MemberInfo element, Type attributeType) => IsDefined ((ICustomAttributeProvider)element, attributeType, true); + public static bool IsDefined (MemberInfo element, Type attributeType, bool inherit) => IsDefined ((ICustomAttributeProvider)element, attributeType, inherit); + public static bool IsDefined (Module element, Type attributeType) => IsDefined ((ICustomAttributeProvider)element, attributeType, true); + public static bool IsDefined (Module element, Type attributeType, bool inherit) => IsDefined ((ICustomAttributeProvider)element, attributeType, inherit); + public static bool IsDefined (ParameterInfo element, Type attributeType) => IsDefined ((ICustomAttributeProvider)element, attributeType, true); + public static bool IsDefined (ParameterInfo element, Type attributeType, bool inherit) => IsDefined ((ICustomAttributeProvider)element, attributeType, inherit); + + internal static bool IsDefined (ICustomAttributeProvider element, Type attributeType, bool inherit) + { + if (attributeType == null) + throw new ArgumentNullException (nameof (attributeType)); + if (!attributeType.IsSubclassOf (typeof (Attribute)) && attributeType != typeof (Attribute)) + throw new ArgumentException (SR.Argument_MustHaveAttributeBaseClass + " " + attributeType.FullName); + + return MonoCustomAttrs.IsDefined (element, attributeType, inherit); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Buffer.cs b/mcs/class/System.Private.CoreLib/System/Buffer.cs new file mode 100644 index 0000000000..fc714389d8 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Buffer.cs @@ -0,0 +1,68 @@ +using System.Runtime; +using System.Runtime.CompilerServices; +using Internal.Runtime.CompilerServices; + +#if BIT64 +using nuint = System.UInt64; +#else +using nuint = System.UInt32; +#endif + +namespace System +{ + partial class Buffer + { + public static void BlockCopy (Array src, int srcOffset, Array dst, int dstOffset, int count) + { + if (src == null) + throw new ArgumentNullException (nameof (src)); + if (dst == null) + throw new ArgumentNullException ("dst"); + + if (srcOffset < 0) + throw new ArgumentOutOfRangeException (nameof (srcOffset), SR.ArgumentOutOfRange_MustBeNonNegInt32); + if (dstOffset < 0) + throw new ArgumentOutOfRangeException (nameof (dstOffset), SR.ArgumentOutOfRange_MustBeNonNegInt32); + if (count < 0) + throw new ArgumentOutOfRangeException (nameof (count), SR.ArgumentOutOfRange_MustBeNonNegInt32); + if (!IsPrimitiveTypeArray (src)) + throw new ArgumentException (SR.Arg_MustBePrimArray, nameof (src)); + if (!IsPrimitiveTypeArray (dst)) + throw new ArgumentException (SR.Arg_MustBePrimArray, nameof (dst)); + + var uCount = (nuint) count; + var uSrcOffset = (nuint) srcOffset; + var uDstOffset = (nuint) dstOffset; + + var uSrcLen = (nuint) ByteLength (src); + var uDstLen = (nuint) ByteLength (dst); + + if (uSrcLen < uSrcOffset + uCount) + throw new ArgumentException (SR.Argument_InvalidOffLen, ""); + if (uDstLen < uDstOffset + uCount) + throw new ArgumentException (SR.Argument_InvalidOffLen, ""); + + if (uCount != 0) { + unsafe { + fixed (byte* pSrc = &src.GetRawArrayData (), pDst = &dst.GetRawArrayData ()) { + Memmove (pDst + uDstOffset, pSrc + uSrcOffset, uCount); + } + } + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern int _ByteLength (Array array); + + static bool IsPrimitiveTypeArray (Array array) + { + // TODO: optimize + return array.GetType ().GetElementType ()!.IsPrimitive; + } + + internal static unsafe void Memcpy (byte* dest, byte* src, int len) => Memmove (dest, src, (nuint) len); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern unsafe void __Memmove (byte* dest, byte* src, nuint len); + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Delegate.cs b/mcs/class/System.Private.CoreLib/System/Delegate.cs new file mode 100644 index 0000000000..e62788d8d1 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Delegate.cs @@ -0,0 +1,483 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Serialization; + +namespace System +{ + /* Contains the rarely used fields of Delegate */ + sealed class DelegateData + { + public Type? target_type; + public string? method_name; + public bool curried_first_arg; + } + + [StructLayout (LayoutKind.Sequential)] + partial class Delegate + { + #region Sync with object-internals.h + IntPtr method_ptr; + IntPtr invoke_impl; + object? _target; + IntPtr method; + IntPtr delegate_trampoline; + IntPtr extra_arg; + IntPtr method_code; + IntPtr interp_method; + IntPtr interp_invoke_impl; + MethodInfo? method_info; + + // Keep a ref of the MethodInfo passed to CreateDelegate. + // Used to keep DynamicMethods alive. + MethodInfo? original_method_info; + + DelegateData data; + + bool method_is_virtual; + #endregion + + protected Delegate (object target, string method) + { + if (target is null) + throw new ArgumentNullException (nameof (target)); + + if (method is null) + throw new ArgumentNullException (nameof (method)); + + this._target = target; + this.data = new DelegateData () { + method_name = method + }; + } + + protected Delegate (Type target, string method) + { + if (target is null) + throw new ArgumentNullException (nameof (target)); + + if (target.ContainsGenericParameters) + throw new ArgumentException (SR.Arg_UnboundGenParam, nameof (target)); + + if (method is null) + throw new ArgumentNullException (nameof (method)); + + if (!target.IsRuntimeImplemented ()) + throw new ArgumentException (SR.Argument_MustBeRuntimeType, nameof (target)); + + this.data = new DelegateData () { + method_name = method, + target_type = target + }; + } + + public object? Target => GetTarget (); + + internal virtual object? GetTarget () => _target; + + public static Delegate CreateDelegate (Type type, object? firstArgument, MethodInfo method, bool throwOnBindFailure) + { + return CreateDelegate (type, firstArgument, method, throwOnBindFailure, true)!; + } + + public static Delegate? CreateDelegate (Type type, MethodInfo method, bool throwOnBindFailure) + { + return CreateDelegate (type, null, method, throwOnBindFailure, false); + } + + static Delegate? CreateDelegate (Type type, object? firstArgument, MethodInfo method, bool throwOnBindFailure, bool allowClosed) + { + if (type is null) + throw new ArgumentNullException (nameof (type)); + if (method is null) + throw new ArgumentNullException (nameof (method)); + + if (!(type is RuntimeType rtType)) + throw new ArgumentException (SR.Argument_MustBeRuntimeType, nameof (type)); + if (!(method is RuntimeMethodInfo || method is System.Reflection.Emit.DynamicMethod)) + throw new ArgumentException (SR.Argument_MustBeRuntimeMethodInfo, nameof (method)); + + if (!rtType.IsDelegate ()) + throw new ArgumentException (SR.Arg_MustBeDelegate, nameof (type)); + + if (!IsMatchingCandidate (type, firstArgument, method, allowClosed, out DelegateData? delegate_data)) { + if (throwOnBindFailure) + throw new ArgumentException (SR.Arg_DlgtTargMeth); + + return null; + } + + Delegate? d = CreateDelegate_internal (type, firstArgument, method, throwOnBindFailure); + if (d != null) { + d.original_method_info = method; + d.data = delegate_data!; + } + + return d; + } + + public static Delegate? CreateDelegate (Type type, object target, string method, bool ignoreCase, bool throwOnBindFailure) + { + if (type is null) + throw new ArgumentNullException (nameof (type)); + if (target is null) + throw new ArgumentNullException (nameof (target)); + if (method is null) + throw new ArgumentNullException (nameof (method)); + + if (!(type is RuntimeType rtType)) + throw new ArgumentException (SR.Argument_MustBeRuntimeType, nameof (type)); + if (!rtType.IsDelegate ()) + throw new ArgumentException (SR.Arg_MustBeDelegate, nameof (type)); + + MethodInfo? info = GetCandidateMethod (type, target.GetType (), method, BindingFlags.Instance, ignoreCase); + if (info is null) { + if (throwOnBindFailure) + throw new ArgumentException (SR.Arg_DlgtTargMeth); + + return null; + } + + return CreateDelegate_internal (type, null, info, throwOnBindFailure); + } + + public static Delegate? CreateDelegate (Type type, Type target, string method, bool ignoreCase, bool throwOnBindFailure) + { + if (type is null) + throw new ArgumentNullException (nameof (type)); + if (target is null) + throw new ArgumentNullException (nameof (target)); + if (target.ContainsGenericParameters) + throw new ArgumentException (SR.Arg_UnboundGenParam, nameof (target)); + if (method is null) + throw new ArgumentNullException (nameof (method)); + + if (!(type is RuntimeType rtType)) + throw new ArgumentException (SR.Argument_MustBeRuntimeType, nameof (type)); + + if (!target.IsRuntimeImplemented ()) + throw new ArgumentException (SR.Argument_MustBeRuntimeType, nameof (target)); + if (!rtType.IsDelegate ()) + throw new ArgumentException (SR.Arg_MustBeDelegate, nameof (type)); + + MethodInfo? info = GetCandidateMethod (type, target, method, BindingFlags.Static, ignoreCase); + if (info is null) { + if (throwOnBindFailure) + throw new ArgumentException (SR.Arg_DlgtTargMeth); + + return null; + } + + return CreateDelegate_internal (type, null, info, throwOnBindFailure); + } + + static MethodInfo? GetCandidateMethod (Type type, Type target, string method, BindingFlags bflags, bool ignoreCase) + { + MethodInfo? invoke = type.GetMethod ("Invoke"); + if (invoke is null) + return null; + + ParameterInfo [] delargs = invoke.GetParametersInternal (); + Type[] delargtypes = new Type [delargs.Length]; + + for (int i = 0; i < delargs.Length; i++) + delargtypes [i] = delargs [i].ParameterType; + + /* + * since we need to walk the inheritance chain anyway to + * find private methods, adjust the bindingflags to ignore + * inherited methods + */ + BindingFlags flags = BindingFlags.ExactBinding | + BindingFlags.Public | BindingFlags.NonPublic | + BindingFlags.DeclaredOnly | bflags; + + if (ignoreCase) + flags |= BindingFlags.IgnoreCase; + + for (Type? targetType = target; targetType != null; targetType = targetType.BaseType) { + MethodInfo? mi = targetType.GetMethod (method, flags, null, delargtypes, Array.Empty()); + + if (mi != null && IsReturnTypeMatch (invoke.ReturnType!, mi.ReturnType!)) { + return mi; + } + } + + return null; + } + + static bool IsMatchingCandidate (Type type, object? target, MethodInfo method, bool allowClosed, out DelegateData? delegateData) + { + MethodInfo? invoke = type.GetMethod ("Invoke"); + + if (invoke == null || !IsReturnTypeMatch (invoke.ReturnType!, method.ReturnType!)) { + delegateData = null; + return false; + } + + ParameterInfo[] delargs = invoke.GetParametersInternal (); + ParameterInfo[] args = method.GetParametersInternal (); + + bool argLengthMatch; + + if (target != null) { + // delegate closed over target + if (!method.IsStatic) + // target is passed as this + argLengthMatch = (args.Length == delargs.Length); + else + // target is passed as the first argument to the static method + argLengthMatch = (args.Length == delargs.Length + 1); + } else { + if (!method.IsStatic) { + // + // Net 2.0 feature. The first argument of the delegate is passed + // as the 'this' argument to the method. + // + argLengthMatch = (args.Length + 1 == delargs.Length); + + if (!argLengthMatch) + // closed over a null reference + argLengthMatch = (args.Length == delargs.Length); + } else { + argLengthMatch = (args.Length == delargs.Length); + + if (!argLengthMatch) + // closed over a null reference + argLengthMatch = args.Length == delargs.Length + 1; + } + } + + if (!argLengthMatch) { + delegateData = null; + return false; + } + + bool argsMatch; + delegateData = new DelegateData (); + + if (target != null) { + if (!method.IsStatic) { + argsMatch = IsArgumentTypeMatchWithThis (target.GetType (), method.DeclaringType!, true); + for (int i = 0; i < args.Length; i++) + argsMatch &= IsArgumentTypeMatch (delargs [i].ParameterType, args [i].ParameterType); + } else { + argsMatch = IsArgumentTypeMatch (target.GetType (), args [0].ParameterType); + for (int i = 1; i < args.Length; i++) + argsMatch &= IsArgumentTypeMatch (delargs [i - 1].ParameterType, args [i].ParameterType); + + delegateData.curried_first_arg = true; + } + } else { + if (!method.IsStatic) { + if (args.Length + 1 == delargs.Length) { + // The first argument should match this + argsMatch = IsArgumentTypeMatchWithThis (delargs [0].ParameterType, method.DeclaringType!, false); + for (int i = 0; i < args.Length; i++) + argsMatch &= IsArgumentTypeMatch (delargs [i + 1].ParameterType, args [i].ParameterType); + } else { + // closed over a null reference + argsMatch = allowClosed; + for (int i = 0; i < args.Length; i++) + argsMatch &= IsArgumentTypeMatch (delargs [i].ParameterType, args [i].ParameterType); + } + } else { + if (delargs.Length + 1 == args.Length) { + // closed over a null reference + argsMatch = !(args [0].ParameterType.IsValueType || args [0].ParameterType.IsByRef) && allowClosed; + for (int i = 0; i < delargs.Length; i++) + argsMatch &= IsArgumentTypeMatch (delargs [i].ParameterType, args [i + 1].ParameterType); + + delegateData.curried_first_arg = true; + } else { + argsMatch = true; + for (int i = 0; i < args.Length; i++) + argsMatch &= IsArgumentTypeMatch (delargs [i].ParameterType, args [i].ParameterType); + } + } + } + + return argsMatch; + } + + static bool IsReturnTypeMatch (Type delReturnType, Type returnType) + { + bool returnMatch = returnType == delReturnType; + + if (!returnMatch) { + // Delegate covariance + if (!returnType.IsValueType && delReturnType.IsAssignableFrom (returnType)) + returnMatch = true; + } + + return returnMatch; + } + + static bool IsArgumentTypeMatch (Type delArgType, Type argType) + { + bool match = delArgType == argType; + + // Delegate contravariance + if (!match) { + if (!argType.IsValueType && argType.IsAssignableFrom (delArgType)) + match = true; + } + // enum basetypes + if (!match) { + if (delArgType.IsEnum && Enum.GetUnderlyingType (delArgType) == argType) + match = true; + else if (argType.IsEnum && Enum.GetUnderlyingType (argType) == delArgType) + match = true; + } + + return match; + } + + static bool IsArgumentTypeMatchWithThis (Type delArgType, Type argType, bool boxedThis) + { + bool match; + if (argType.IsValueType) + match = delArgType.IsByRef && delArgType.GetElementType () == argType || + (boxedThis && delArgType == argType); + else + match = delArgType == argType || argType.IsAssignableFrom (delArgType); + + return match; + } + + protected virtual object? DynamicInvokeImpl (object?[]? args) + { + if (Method is null) { +#nullable disable + // FIXME: This code cannot handle null argument values + Type[] mtypes = new Type [args.Length]; + for (int i = 0; i < args.Length; ++i) { + mtypes [i] = args [i].GetType (); + } + method_info = _target.GetType ().GetMethod (data.method_name, mtypes); +#nullable restore + } + + var target = _target; + + if (data is null) + data = CreateDelegateData (); + + // replace all Type.Missing with default values defined on parameters of the delegate if any + MethodInfo? invoke = GetType ().GetMethod ("Invoke"); + if (invoke != null && args != null) { + ParameterInfo[] delegateParameters = invoke.GetParameters (); + for (int i = 0; i < args.Length; i++) { + if (args [i] == Type.Missing) { + ParameterInfo dlgParam = delegateParameters [i]; + if (dlgParam.HasDefaultValue) { + args [i] = dlgParam.DefaultValue; + } + } + } + } + + if (Method.IsStatic) { + // + // The delegate is bound to _target + // + if (data.curried_first_arg) { + if (args is null) { + args = new object?[] { target }; + } else { + Array.Resize (ref args, args.Length + 1); + Array.Copy (args, 0, args, 1, args.Length - 1); + args [0] = target; + } + + target = null; + } + } else { + if (_target is null && args?.Length > 0) { + target = args [0]; + Array.Copy (args, 1, args, 0, args.Length - 1); + Array.Resize (ref args, args.Length - 1); + } + } + + return Method.Invoke (target, args); + } + + public override bool Equals (object? obj) + { + if (!(obj is Delegate d) || !InternalEqualTypes (this, obj)) + return false; + + // Do not compare method_ptr, since it can point to a trampoline + if (d._target == _target && d.Method == Method) { + if (d.data != null || data != null) { + /* Uncommon case */ + if (d.data != null && data != null) + return (d.data.target_type == data.target_type && d.data.method_name == data.method_name); + else { + if (d.data != null) + return d.data.target_type is null; + if (data != null) + return data.target_type is null; + return false; + } + } + return true; + } + + return false; + } + + public override int GetHashCode () + { + MethodInfo? m = Method; + + return (m != null ? m.GetHashCode () : GetType ().GetHashCode ()) ^ RuntimeHelpers.GetHashCode (_target); + } + + protected virtual MethodInfo GetMethodImpl () + { + if (method_info != null) + return method_info; + + if (method != IntPtr.Zero) { + if (!method_is_virtual) + method_info = (MethodInfo) RuntimeMethodInfo.GetMethodFromHandleNoGenericCheck (new RuntimeMethodHandle (method)); + else + method_info = GetVirtualMethod_internal (); + } + + return method_info; + } + + DelegateData CreateDelegateData () + { + DelegateData delegate_data = new DelegateData (); + if (method_info.IsStatic) { + if (_target != null) { + delegate_data.curried_first_arg = true; + } else { + MethodInfo? invoke = GetType ().GetMethod ("Invoke"); + if (invoke != null && invoke.GetParametersCount () + 1 == method_info.GetParametersCount ()) + delegate_data.curried_first_arg = true; + } + } + + return delegate_data; + } + + static bool InternalEqualTypes (object source, object value) + { + return source.GetType () == value.GetType (); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private protected extern static MulticastDelegate AllocDelegateLike_internal (Delegate d); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern Delegate? CreateDelegate_internal (Type type, object? target, MethodInfo info, bool throwOnBindFailure); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern MethodInfo GetVirtualMethod_internal (); + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Enum.cs b/mcs/class/System.Private.CoreLib/System/Enum.cs new file mode 100644 index 0000000000..1060793d4e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Enum.cs @@ -0,0 +1,147 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace System +{ + partial class Enum + { + sealed class EnumInfo + { + public readonly bool HasFlagsAttribute; + public readonly ulong[] Values; + public readonly string[] Names; + + // Each entry contains a list of sorted pair of enum field names and values, sorted by values + public EnumInfo (bool hasFlagsAttribute, ulong[] values, string[] names) + { + HasFlagsAttribute = hasFlagsAttribute; + Values = values; + Names = names; + } + } + + public int CompareTo (object? target) + { + const int retIncompatibleMethodTables = 2; // indicates that the method tables did not match + + int ret = InternalCompareTo (this, target); + + if (ret < retIncompatibleMethodTables) + // -1, 0 and 1 are the normal return codes + return ret; + + if (ret == retIncompatibleMethodTables) + throw new ArgumentException (SR.Format (SR.Arg_EnumAndObjectMustBeSameType, target!.GetType (), GetType ())); + + throw new InvalidOperationException (SR.InvalidOperation_UnknownEnumType); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern bool InternalHasFlag (Enum flags); + + [Intrinsic] + public bool HasFlag (Enum flag) + { + if (flag is null) + throw new ArgumentNullException (nameof (flag)); + if (!this.GetType ().IsEquivalentTo (flag.GetType ())) + throw new ArgumentException (SR.Format (SR.Argument_EnumTypeDoesNotMatch, flag.GetType (), this.GetType ())); + + return InternalHasFlag (flag); + } + + public static string? GetName (Type enumType, object value) + { + if (enumType is null) + throw new ArgumentNullException (nameof(enumType)); + + return enumType.GetEnumName (value); + } + + public static string[] GetNames (Type enumType) + { + if (enumType is null) + throw new ArgumentNullException (nameof (enumType)); + + return enumType.GetEnumNames (); + } + + public static Type GetUnderlyingType (Type enumType) + { + if (enumType is null) + throw new ArgumentNullException (nameof (enumType)); + + return enumType.GetEnumUnderlyingType (); + } + + public static Array GetValues (Type enumType) + { + if (enumType is null) + throw new ArgumentNullException (nameof (enumType)); + + return enumType.GetEnumValues (); + } + + public static bool IsDefined (Type enumType, object value) + { + if (enumType is null) + throw new ArgumentNullException (nameof (enumType)); + + return enumType.IsEnumDefined (value); + } + + internal static ulong[] InternalGetValues (RuntimeType enumType) + { + // Get all of the values + return GetEnumInfo (enumType, false).Values; + } + + internal static string[] InternalGetNames (RuntimeType enumType) + { + // Get all of the names + return GetEnumInfo (enumType, true).Names; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool GetEnumValuesAndNames (RuntimeType enumType, out ulong[] values, out string[] names); + + static EnumInfo GetEnumInfo (RuntimeType enumType, bool getNames = true) + { + var entry = enumType.GenericCache as EnumInfo; + + if (entry == null || (getNames && entry.Names == null)) { + if (!GetEnumValuesAndNames (enumType, out var values, out var names)) + Array.Sort (values, names, System.Collections.Generic.Comparer.Default); + + bool hasFlagsAttribute = enumType.IsDefined (typeof(FlagsAttribute), inherit: false); + entry = new EnumInfo (hasFlagsAttribute, values, names); + enumType.GenericCache = entry; + } + + return entry; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern object InternalBoxEnum (RuntimeType enumType, long value); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern int InternalCompareTo (object o1, object? o2); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern CorElementType InternalGetCorElementType (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern RuntimeType InternalGetUnderlyingType (RuntimeType enumType); + + static RuntimeType ValidateRuntimeType (Type enumType) + { + if (enumType is null) + throw new ArgumentNullException (nameof (enumType)); + if (!enumType.IsEnum) + throw new ArgumentException (SR.Arg_MustBeEnum, nameof (enumType)); + if (!(enumType is RuntimeType rtType)) + throw new ArgumentException (SR.Arg_MustBeType, nameof (enumType)); + return rtType; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Environment.Unix.cs b/mcs/class/System.Private.CoreLib/System/Environment.Unix.cs new file mode 100644 index 0000000000..948239e624 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Environment.Unix.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Globalization; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Threading; +using Mono; + +namespace System +{ + partial class Environment + { + static string GetEnvironmentVariableCore (string variable) + { + using (var h = RuntimeMarshal.MarshalString (variable)) { + return internalGetEnvironmentVariable_native (h.Value); + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static string internalGetEnvironmentVariable_native (IntPtr variable); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern static string [] GetEnvironmentVariableNames (); + + public static IDictionary GetEnvironmentVariables () + { + Hashtable vars = new Hashtable (); + foreach (string name in GetEnvironmentVariableNames ()) { + vars [name] = GetEnvironmentVariableCore (name); + } + return vars; + } + + static unsafe void SetEnvironmentVariableCore (string variable, string value) + { + fixed (char *fixed_variable = variable) + fixed (char *fixed_value = value) + InternalSetEnvironmentVariable (fixed_variable, variable.Length, fixed_value, value?.Length ?? 0); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern unsafe void InternalSetEnvironmentVariable (char *variable, int variable_length, char *value, int value_length); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/Environment.cs b/mcs/class/System.Private.CoreLib/System/Environment.cs new file mode 100644 index 0000000000..487143d5b8 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Environment.cs @@ -0,0 +1,86 @@ +using System.Collections; +using System.Globalization; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Threading; +using Mono; + +namespace System +{ + partial class Environment + { + // This is the version of the corlib-runtime interface (defined in configure.ac) + private const string mono_corlib_version = Consts.MonoCorlibVersion; + + public static int CurrentManagedThreadId => Thread.CurrentThread.ManagedThreadId; + + public extern static int ExitCode { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + [MethodImplAttribute (MethodImplOptions.InternalCall)] + set; + } + + public static extern bool HasShutdownStarted { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + public static extern int ProcessorCount { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + public static string StackTrace { + [MethodImpl (MethodImplOptions.NoInlining)] // Prevent inlining from affecting where the stacktrace starts + get => new StackTrace (true).ToString (System.Diagnostics.StackTrace.TraceFormat.Normal); + } + + public extern static int TickCount { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void Exit (int exitCode); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static string[] GetCommandLineArgs (); + + public static void FailFast (string message) + { + throw new NotImplementedException (); + } + + public static void FailFast(string message, Exception exception) + { + throw new NotImplementedException (); + } + + public static void FailFast (string message, Exception exception, string errorMessage) + { + throw new NotImplementedException (); + } + } + +#region referencesource dependencies - to be removed + + partial class Environment + { + internal static string GetResourceString (string key) + { + return key; + } + + internal static string GetResourceString (string key, CultureInfo culture) + { + return key; + } + + internal static string GetResourceString (string key, params object[] values) + { + return string.Format (CultureInfo.InvariantCulture, key, values); + } + } +#endregion +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/Exception.cs b/mcs/class/System.Private.CoreLib/System/Exception.cs new file mode 100644 index 0000000000..e191a91f92 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Exception.cs @@ -0,0 +1,121 @@ +using System.Collections; +using System.Reflection; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace System +{ + [StructLayout (LayoutKind.Sequential)] + partial class Exception + { + internal readonly struct DispatchState + { + public readonly MonoStackFrame[] StackFrames; + + public DispatchState (MonoStackFrame[] stackFrames) + { + StackFrames = stackFrames; + } + } + + # region Keep in sync with MonoException in object-internals.h + string? _unused1; + internal string _message; + IDictionary _data; + Exception _innerException; + string _helpURL; + object _traceIPs; + string? _stackTraceString; + string? _unused3; + int _unused4; + object _dynamicMethods; // Dynamic methods referenced by the stack trace + int _HResult; + string _source; + object? _unused6; + internal MonoStackFrame[] foreignExceptionsFrames; + IntPtr[] native_trace_ips; + int caught_in_unmanaged; + #endregion + + public MethodBase? TargetSite { + get { + StackTrace st = new StackTrace (this, true); + if (st.FrameCount > 0) + return st.GetFrame (0)?.GetMethod (); + + return null; + } + } + + public virtual string? StackTrace => GetStackTrace (true); + + string? GetStackTrace (bool needFileInfo) + { + if (_stackTraceString != null) + return _stackTraceString; + if (_traceIPs == null) + return null; + + return new StackTrace (this, needFileInfo).ToString (System.Diagnostics.StackTrace.TraceFormat.Normal); + } + + internal DispatchState CaptureDispatchState () + { + MonoStackFrame[] stackFrames; + + if (_traceIPs != null) { + stackFrames = System.Diagnostics.StackTrace.get_trace (this, 0, true); + stackFrames [stackFrames.Length - 1].isLastFrameFromForeignException = true; + + if (foreignExceptionsFrames != null) { + var combinedStackFrames = new MonoStackFrame [stackFrames.Length + foreignExceptionsFrames.Length]; + Array.Copy (foreignExceptionsFrames, 0, combinedStackFrames, 0, foreignExceptionsFrames.Length); + Array.Copy (stackFrames, 0, combinedStackFrames, foreignExceptionsFrames.Length, stackFrames.Length); + + stackFrames = combinedStackFrames; + } + } else { + stackFrames = foreignExceptionsFrames; + } + + return new DispatchState (stackFrames); + } + + internal void RestoreDispatchState (in DispatchState state) + { + foreignExceptionsFrames = state.StackFrames; + + _stackTraceString = null; + } + + string? CreateSourceName () + { + var st = new StackTrace (this, fNeedFileInfo: false); + if (st.FrameCount > 0) { + StackFrame sf = st.GetFrame (0)!; + MethodBase method = sf.GetMethod (); + + Module module = method.Module; + RuntimeModule rtModule = module as RuntimeModule; + + if (rtModule == null) { + var moduleBuilder = module as System.Reflection.Emit.ModuleBuilder; + if (moduleBuilder != null) + throw new NotImplementedException (); // TODO: rtModule = moduleBuilder.InternalModule; + else + throw new ArgumentException (SR.Argument_MustBeRuntimeReflectionObject); + } + + return rtModule.GetRuntimeAssembly ().GetName ().Name; // TODO: GetSimpleName (); + } + + return null; + } + + static IDictionary CreateDataContainer () => new ListDictionaryInternal (); + + static string? SerializationWatsonBuckets => null; + static string? SerializationRemoteStackTraceString => null; + string? SerializationStackTraceString => GetStackTrace (true); + } +} diff --git a/mcs/class/System.Private.CoreLib/System/GC.cs b/mcs/class/System.Private.CoreLib/System/GC.cs new file mode 100644 index 0000000000..d8cdb53813 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/GC.cs @@ -0,0 +1,244 @@ +using System.Runtime.CompilerServices; + +namespace System +{ + public enum GCCollectionMode + { + Default = 0, + Forced = 1, + Optimized = 2 + } + + public enum GCNotificationStatus + { + Succeeded = 0, + Failed = 1, + Canceled = 2, + Timeout = 3, + NotApplicable = 4 + } + + public static partial class GC + { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static int GetCollectionCount (int generation); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static int GetMaxGeneration (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void InternalCollect (int generation); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static void RecordPressure (long bytesAllocated); + + // TODO: Move following to ConditionalWeakTable + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static void register_ephemeron_array (Ephemeron[] array); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static object get_ephemeron_tombstone (); + + internal static readonly object EPHEMERON_TOMBSTONE = get_ephemeron_tombstone (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern long GetAllocatedBytesForCurrentThread (); + + public static long GetTotalAllocatedBytes (bool precise = false) => 0; + + public static void AddMemoryPressure (long bytesAllocated) + { + if (bytesAllocated <= 0) + throw new ArgumentOutOfRangeException (nameof (bytesAllocated), SR.ArgumentOutOfRange_NeedPosNum); + if (IntPtr.Size == 4 && bytesAllocated > Int32.MaxValue) + throw new ArgumentOutOfRangeException (nameof (bytesAllocated), SR.ArgumentOutOfRange_MustBeNonNegInt32); + RecordPressure (bytesAllocated); + } + + public static void RemoveMemoryPressure (long bytesAllocated) + { + if (bytesAllocated <= 0) + throw new ArgumentOutOfRangeException (nameof (bytesAllocated), SR.ArgumentOutOfRange_NeedPosNum); + if (IntPtr.Size == 4 && bytesAllocated > Int32.MaxValue) + throw new ArgumentOutOfRangeException (nameof (bytesAllocated), SR.ArgumentOutOfRange_MustBeNonNegInt32); + RecordPressure (-bytesAllocated); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public static extern int GetGeneration (object obj); + + public static void Collect (int generation) + { + Collect (generation, GCCollectionMode.Default); + } + + public static void Collect () + { + InternalCollect (MaxGeneration); + } + + public static void Collect (int generation, GCCollectionMode mode) => Collect (generation, mode, true); + + public static void Collect (int generation, GCCollectionMode mode, bool blocking) => Collect (generation, mode, blocking, false); + + public static void Collect (int generation, GCCollectionMode mode, bool blocking, bool compacting) + { + if (generation < 0) + throw new ArgumentOutOfRangeException (nameof (generation), "generation", SR.ArgumentOutOfRange_GenericPositive); + if ((mode < GCCollectionMode.Default) || (mode > GCCollectionMode.Optimized)) + throw new ArgumentOutOfRangeException (nameof (mode), SR.ArgumentOutOfRange_Enum); + + InternalCollect (generation); + } + + public static int CollectionCount (int generation) + { + if (generation < 0) + throw new ArgumentOutOfRangeException (nameof (generation), SR.ArgumentOutOfRange_GenericPositive); + return GetCollectionCount (generation); + } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] // disable optimizations + public static void KeepAlive (object obj) + { + } + + public static int GetGeneration (WeakReference wo) + { + object obj = wo.Target; + if (obj == null) + throw new ArgumentException (); + return GetGeneration (obj); + } + + public static int MaxGeneration { + get { + return GetMaxGeneration (); + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public static extern void WaitForPendingFinalizers (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void _SuppressFinalize (object o); + + public static void SuppressFinalize (object obj) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + _SuppressFinalize (obj); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void _ReRegisterForFinalize (object o); + + public static void ReRegisterForFinalize (object obj) + { + if (obj == null) + throw new ArgumentNullException (nameof (obj)); + _ReRegisterForFinalize (obj); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static long GetTotalMemory (bool forceFullCollection); + + static bool _RegisterForFullGCNotification(int maxGenerationPercentage, int largeObjectHeapPercentage) + { + throw new NotImplementedException (); + } + + static bool _CancelFullGCNotification () + { + throw new NotImplementedException (); + } + + static GCNotificationStatus _WaitForFullGCApproach (int millisecondsTimeout) + { + throw new NotImplementedException (); + } + + static GCNotificationStatus _WaitForFullGCComplete (int millisecondsTimeout) + { + throw new NotImplementedException (); + } + + public static void RegisterForFullGCNotification (int maxGenerationThreshold, int largeObjectHeapThreshold) + { + if ((maxGenerationThreshold <= 0) || (maxGenerationThreshold >= 100)) + throw new ArgumentOutOfRangeException (nameof (maxGenerationThreshold), + String.Format (SR.ArgumentOutOfRange_Bounds_Lower_Upper, 1, 99)); + if ((largeObjectHeapThreshold <= 0) || (largeObjectHeapThreshold >= 100)) + throw new ArgumentOutOfRangeException (nameof (largeObjectHeapThreshold), + String.Format (SR.ArgumentOutOfRange_Bounds_Lower_Upper, 1, 99)); + + if (!_RegisterForFullGCNotification(maxGenerationThreshold, largeObjectHeapThreshold)) + throw new InvalidOperationException (SR.InvalidOperation_NotWithConcurrentGC); + } + + public static void CancelFullGCNotification () + { + if (!_CancelFullGCNotification ()) + throw new InvalidOperationException (SR.InvalidOperation_NotWithConcurrentGC); + } + + public static GCNotificationStatus WaitForFullGCApproach () + { + return (GCNotificationStatus)_WaitForFullGCApproach (-1); + } + + public static GCNotificationStatus WaitForFullGCApproach (int millisecondsTimeout) + { + if (millisecondsTimeout < -1) + throw new ArgumentOutOfRangeException (nameof (millisecondsTimeout), SR.ArgumentOutOfRange_NeedNonNegOrNegative1); + + return _WaitForFullGCApproach (millisecondsTimeout); + } + + public static GCNotificationStatus WaitForFullGCComplete () + { + return _WaitForFullGCComplete(-1); + } + + public static GCNotificationStatus WaitForFullGCComplete (int millisecondsTimeout) + { + if (millisecondsTimeout < -1) + throw new ArgumentOutOfRangeException (nameof (millisecondsTimeout), SR.ArgumentOutOfRange_NeedNonNegOrNegative1); + return _WaitForFullGCComplete (millisecondsTimeout); + } + + static bool StartNoGCRegion (long totalSize, bool hasLohSize, long lohSize, bool disallowFullBlockingGC) + { + throw new NotImplementedException (); + } + + public static bool TryStartNoGCRegion (long totalSize) => StartNoGCRegion (totalSize, false, 0, false); + + public static bool TryStartNoGCRegion (long totalSize, long lohSize) => StartNoGCRegion (totalSize, true, lohSize, false); + + public static bool TryStartNoGCRegion (long totalSize, bool disallowFullBlockingGC) => StartNoGCRegion (totalSize, false, 0, disallowFullBlockingGC); + + public static bool TryStartNoGCRegion (long totalSize, long lohSize, bool disallowFullBlockingGC) => StartNoGCRegion (totalSize, true, lohSize, disallowFullBlockingGC); + + public static void EndNoGCRegion () + { + throw new NotImplementedException (); + } + + internal static ulong GetSegmentSize () + { + // coreclr default + return 1024 * 1024 * 16; + } + + public static GCMemoryInfo GetGCMemoryInfo () + { + return default; + } + + internal static T[] AllocateUninitializedArray (int length) + { + return new T [length]; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Math.cs b/mcs/class/System.Private.CoreLib/System/Math.cs new file mode 100644 index 0000000000..2a516cb2a7 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Math.cs @@ -0,0 +1,95 @@ +using System.Runtime.CompilerServices; + +namespace System +{ + partial class Math + { + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Abs (double value); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Abs (float value); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Acos (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Acosh (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Asin (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Asinh (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Atan (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Atan2 (double y, double x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Atanh (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Cbrt (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Ceiling (double a); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Cos (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Cosh (double value); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Exp (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Floor (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Log (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Log10 (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Pow (double x, double y); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Sin (double a); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Sinh (double value); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Sqrt (double d); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Tan (double a); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Tanh (double value); + + // [Intrinsic] TODO: implement FMA intrinsic + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double FusedMultiplyAdd (double x, double y, double z); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern int ILogB (double x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double Log2 (double x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern double ScaleB (double x, int n); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern double FMod(double x, double y); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern unsafe double ModF(double x, double* intptr); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/MathF.cs b/mcs/class/System.Private.CoreLib/System/MathF.cs new file mode 100644 index 0000000000..566f5398e3 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/MathF.cs @@ -0,0 +1,89 @@ +using System.Runtime.CompilerServices; + +namespace System +{ + partial class MathF + { + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Acos (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Acosh (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Asin (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Asinh (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Atan (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Atan2 (float y, float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Atanh (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Cbrt (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Ceiling (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Cos (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Cosh (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Exp (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Floor (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Log (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Log10 (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Pow (float x, float y); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Sin (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Sinh (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Sqrt (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Tan (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Tanh (float x); + + // [Intrinsic] TODO: implement intrinsic (FMA) + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float FusedMultiplyAdd (float x, float y, float z); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern int ILogB (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float Log2 (float x); + + [MethodImpl (MethodImplOptions.InternalCall)] + public static extern float ScaleB (float x, int n); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern float FMod (float x, float y); + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern unsafe float ModF (float x, float* intptr); + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/MissingMemberException.cs b/mcs/class/System.Private.CoreLib/System/MissingMemberException.cs new file mode 100644 index 0000000000..2e3d4bcffb --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/MissingMemberException.cs @@ -0,0 +1,10 @@ +namespace System +{ + partial class MissingMemberException + { + internal static string FormatSignature (byte[] signature) + { + return ""; + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/ModuleHandle.cs b/mcs/class/System.Private.CoreLib/System/ModuleHandle.cs new file mode 100644 index 0000000000..9b6d2eb743 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/ModuleHandle.cs @@ -0,0 +1,142 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace System +{ + public readonly struct ModuleHandle + { + readonly IntPtr value; + + public static readonly ModuleHandle EmptyHandle = new ModuleHandle (IntPtr.Zero); + + internal ModuleHandle (IntPtr v) + { + value = v; + } + + internal IntPtr Value { + get { + return value; + } + } + + public int MDStreamVersion { + get { + if (value == IntPtr.Zero) + throw new ArgumentNullException (String.Empty, "Invalid handle"); + return RuntimeModule.GetMDStreamVersion (value); + } + } + + public RuntimeFieldHandle ResolveFieldHandle (int fieldToken) + { + return ResolveFieldHandle (fieldToken, null, null); + } + + public RuntimeMethodHandle ResolveMethodHandle (int methodToken) + { + return ResolveMethodHandle (methodToken, null, null); + } + + public RuntimeTypeHandle ResolveTypeHandle (int typeToken) + { + return ResolveTypeHandle (typeToken, null, null); + } + + static IntPtr[]? ptrs_from_handles (RuntimeTypeHandle[]? handles) + { + if (handles == null) + return null; + + var res = new IntPtr [handles.Length]; + for (int i = 0; i < handles.Length; ++i) + res [i] = handles [i].Value; + return res; + } + + public RuntimeTypeHandle ResolveTypeHandle (int typeToken, RuntimeTypeHandle[]? typeInstantiationContext, RuntimeTypeHandle[]? methodInstantiationContext) + { + ResolveTokenError error; + if (value == IntPtr.Zero) + throw new ArgumentNullException (String.Empty, "Invalid handle"); + IntPtr res = RuntimeModule.ResolveTypeToken (value, typeToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); + if (res == IntPtr.Zero) + throw new TypeLoadException (String.Format ("Could not load type '0x{0:x}' from assembly '0x{1:x}'", typeToken, value.ToInt64 ())); + else + return new RuntimeTypeHandle (res); + } + + public RuntimeMethodHandle ResolveMethodHandle (int methodToken, RuntimeTypeHandle[]? typeInstantiationContext, RuntimeTypeHandle[]? methodInstantiationContext) + { + ResolveTokenError error; + if (value == IntPtr.Zero) + throw new ArgumentNullException (String.Empty, "Invalid handle"); + IntPtr res = RuntimeModule.ResolveMethodToken (value, methodToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); + if (res == IntPtr.Zero) + throw new Exception (String.Format ("Could not load method '0x{0:x}' from assembly '0x{1:x}'", methodToken, value.ToInt64 ())); + else + return new RuntimeMethodHandle (res); + } + + public RuntimeFieldHandle ResolveFieldHandle (int fieldToken, RuntimeTypeHandle[]? typeInstantiationContext, RuntimeTypeHandle[]? methodInstantiationContext) + { + ResolveTokenError error; + if (value == IntPtr.Zero) + throw new ArgumentNullException (String.Empty, "Invalid handle"); + + IntPtr res = RuntimeModule.ResolveFieldToken (value, fieldToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); + if (res == IntPtr.Zero) + throw new Exception (String.Format ("Could not load field '0x{0:x}' from assembly '0x{1:x}'", fieldToken, value.ToInt64 ())); + else + return new RuntimeFieldHandle (res); + } + + public RuntimeFieldHandle GetRuntimeFieldHandleFromMetadataToken (int fieldToken) + { + return ResolveFieldHandle (fieldToken); + } + + public RuntimeMethodHandle GetRuntimeMethodHandleFromMetadataToken (int methodToken) + { + return ResolveMethodHandle (methodToken); + } + + public RuntimeTypeHandle GetRuntimeTypeHandleFromMetadataToken (int typeToken) + { + return ResolveTypeHandle (typeToken); + } + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((ModuleHandle)obj).Value; + } + + public bool Equals (ModuleHandle handle) + { + return value == handle.Value; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public static bool operator == (ModuleHandle left, ModuleHandle right) + { + return Equals (left, right); + } + + public static bool operator != (ModuleHandle left, ModuleHandle right) + { + return !Equals (left, right); + } + } +} + diff --git a/mcs/class/System.Private.CoreLib/System/MulticastDelegate.cs b/mcs/class/System.Private.CoreLib/System/MulticastDelegate.cs new file mode 100644 index 0000000000..5205ef060e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/MulticastDelegate.cs @@ -0,0 +1,262 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.Serialization; +using System.Runtime.InteropServices; + +namespace System +{ + [StructLayout (LayoutKind.Sequential)] + public abstract class MulticastDelegate : Delegate + { + Delegate[]? delegates; + + protected MulticastDelegate (object target, string method) + : base (target, method) + { + } + + protected MulticastDelegate (Type target, string method) + : base (target, method) + { + } + + public override void GetObjectData (SerializationInfo info, StreamingContext context) + { + throw new SerializationException (SR.Serialization_DelegatesNotSupported); + } + + protected sealed override object? DynamicInvokeImpl (object?[]? args) + { + if (delegates == null) { + return base.DynamicInvokeImpl (args); + } else { + object r; + int i = 0, len = delegates.Length; + do { + r = delegates [i].DynamicInvoke (args); + } while (++i < len); + return r; + } + } + + // Some high-performance applications use this internal property + // to avoid using a slow path to determine if there is more than one handler + // This brings an API that we removed in f410e545e2db0e0dc338673a6b10a5cfd2d3340f + // which some users depeneded on + // + // This is an example of code that used this: + // https://gist.github.com/migueldeicaza/cd99938c2a4372e7e5d5 + // + // Do not remove this API + internal bool HasSingleTarget { + get { return delegates == null; } + } + + // + // Equals: two multicast delegates are equal if their base is equal + // and their invocations list is equal. + // + public sealed override bool Equals (object? obj) + { + if (!base.Equals (obj)) + return false; + + if (!(obj is MulticastDelegate d)) + return false; + + if (delegates == null && d.delegates == null) { + return true; + } else if (delegates == null ^ d.delegates == null) { + return false; + } else { + if (delegates.Length != d.delegates.Length) + return false; + + for (int i = 0; i < delegates.Length; ++i) { + if (!delegates [i].Equals (d.delegates [i])) + return false; + } + + return true; + } + } + + // + // FIXME: This could use some improvements. + // + public sealed override int GetHashCode () + { + return base.GetHashCode (); + } + + protected override MethodInfo GetMethodImpl () + { + if (delegates != null) + return delegates [delegates.Length - 1].Method; + + return base.GetMethodImpl (); + } + + // + // Return, in order of invocation, the invocation list + // of a MulticastDelegate + // + public sealed override Delegate[] GetInvocationList () + { + if (delegates != null) + return (Delegate[]) delegates.Clone (); + else + return new Delegate[1] { this }; + } + + // + // Combines this MulticastDelegate with the (Multicast)Delegate `follow'. + // This does _not_ combine with Delegates. ECMA states the whole delegate + // thing should have better been a simple System.Delegate class. + // Compiler generated delegates are always MulticastDelegates. + // + protected sealed override Delegate CombineImpl (Delegate? follow) + { + if (follow == null) + return this; + + MulticastDelegate other = (MulticastDelegate) follow; + + MulticastDelegate ret = AllocDelegateLike_internal (this); + + if (delegates == null && other.delegates == null) { + ret.delegates = new Delegate [2] { this, other }; + } else if (delegates == null) { + ret.delegates = new Delegate [1 + other.delegates.Length]; + + ret.delegates [0] = this; + Array.Copy (other.delegates, 0, ret.delegates, 1, other.delegates.Length); + } else if (other.delegates == null) { + ret.delegates = new Delegate [delegates.Length + 1]; + + Array.Copy (delegates, 0, ret.delegates, 0, delegates.Length); + ret.delegates [ret.delegates.Length - 1] = other; + } else { + ret.delegates = new Delegate [delegates.Length + other.delegates.Length]; + + Array.Copy (delegates, 0, ret.delegates, 0, delegates.Length); + Array.Copy (other.delegates, 0, ret.delegates, delegates.Length, other.delegates.Length); + } + + return ret; + } + + /* Based on the Boyer–Moore string search algorithm */ + int LastIndexOf (Delegate[] haystack, Delegate[] needle) + { + if (haystack.Length < needle.Length) + return -1; + + if (haystack.Length == needle.Length) { + for (int i = 0; i < haystack.Length; ++i) + if (!haystack [i].Equals (needle [i])) + return -1; + + return 0; + } + + for (int i = haystack.Length - needle.Length, j; i >= 0;) { + for (j = 0; needle [j].Equals (haystack [i]); ++i, ++j) { + if (j == needle.Length - 1) + return i - j; + } + + i -= j + 1; + } + + return -1; + } + + protected sealed override Delegate RemoveImpl (Delegate value) + { + if (value == null) + return this; + + MulticastDelegate other = (MulticastDelegate) value; + + if (delegates == null && other.delegates == null) { + /* if they are not equal and the current one is not + * a multicastdelegate then we cannot delete it */ + return this.Equals (other) ? null : this; + } else if (delegates == null) { + foreach (var d in other.delegates) { + if (this.Equals (d)) + return null; + } + return this; + } else if (other.delegates == null) { + int idx = Array.LastIndexOf (delegates, other); + if (idx == -1) + return this; + + if (delegates.Length <= 1) { + /* delegates.Length should never be equal or + * lower than 1, it should be 2 or greater */ + throw new InvalidOperationException (); + } + + if (delegates.Length == 2) + return delegates [idx == 0 ? 1 : 0]; + + MulticastDelegate ret = AllocDelegateLike_internal (this); + ret.delegates = new Delegate [delegates.Length - 1]; + + Array.Copy (delegates, ret.delegates, idx); + Array.Copy (delegates, idx + 1, ret.delegates, idx, delegates.Length - idx - 1); + + return ret; + } else { + /* wild case : remove MulticastDelegate from MulticastDelegate + * complexity is O(m + n), with n the number of elements in + * this.delegates and m the number of elements in other.delegates */ + + if (delegates.Equals (other.delegates)) + return null; + + /* we need to remove elements from the end to the beginning, as + * the addition and removal of delegates behaves like a stack */ + int idx = LastIndexOf (delegates, other.delegates); + if (idx == -1) + return this; + + MulticastDelegate ret = AllocDelegateLike_internal (this); + ret.delegates = new Delegate [delegates.Length - other.delegates.Length]; + + Array.Copy (delegates, ret.delegates, idx); + Array.Copy (delegates, idx + other.delegates.Length, ret.delegates, idx, delegates.Length - idx - other.delegates.Length); + + return ret; + } + } + + public static bool operator == (MulticastDelegate d1, MulticastDelegate d2) + { + if (d1 == null) + return d2 == null; + + return d1.Equals (d2); + } + + public static bool operator != (MulticastDelegate d1, MulticastDelegate d2) + { + if (d1 == null) + return d2 != null; + + return !d1.Equals (d2); + } + + internal override object GetTarget() + { + return delegates?.Length > 0 ? delegates [delegates.Length - 1].GetTarget () : base.GetTarget (); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/NotImplemented.cs b/mcs/class/System.Private.CoreLib/System/NotImplemented.cs new file mode 100644 index 0000000000..82f4e18ddc --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/NotImplemented.cs @@ -0,0 +1,34 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System +{ + // + // This simple class enables one to throw a NotImplementedException using the following + // idiom: + // + // throw NotImplemented.ByDesign; + // + // Used by methods whose intended implementation is to throw a NotImplementedException (typically + // virtual methods in public abstract classes that intended to be subclassed by third parties.) + // + // This makes it distinguishable both from human eyes and CCI from NYI's that truly represent undone work. + // + internal static class NotImplemented + { + internal static Exception ByDesign + { + get + { + return new NotImplementedException(); + } + } + + internal static Exception ByDesignWithMessage(string message) + { + return new NotImplementedException(message); + } + } +} + diff --git a/mcs/class/System.Private.CoreLib/System/Nullable.cs b/mcs/class/System.Private.CoreLib/System/Nullable.cs new file mode 100644 index 0000000000..3c94a5c24a --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Nullable.cs @@ -0,0 +1,37 @@ +namespace System +{ + partial struct Nullable + { + // + // These are called by the JIT + // + + // + // JIT implementation of box valuetype System.Nullable`1 + // + static object? Box (T? o) + { + if (!o.hasValue) + return null; + + return o.value; + } + + static T? Unbox (object o) + { + if (o == null) + return null; + return (T) o; + } + + static T? UnboxExact (object o) + { + if (o == null) + return null; + if (o.GetType() != typeof (T)) + throw new InvalidCastException(); + + return (T) o; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/Object.cs b/mcs/class/System.Private.CoreLib/System/Object.cs new file mode 100644 index 0000000000..16fe9e5aeb --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Object.cs @@ -0,0 +1,22 @@ +using System.Runtime.CompilerServices; + +namespace System +{ + partial class Object + { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern Type GetType (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + protected extern object MemberwiseClone (); + + // TODO: Move to RuntimeHelpers + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int InternalGetHashCode (object o); + + [Intrinsic] + internal ref byte GetRawData () => throw new NotImplementedException (); + + internal object CloneInternal () => MemberwiseClone (); + } +} diff --git a/mcs/class/System.Private.CoreLib/System/RuntimeArgumentHandle.cs b/mcs/class/System.Private.CoreLib/System/RuntimeArgumentHandle.cs new file mode 100644 index 0000000000..983606c90b --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/RuntimeArgumentHandle.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +// + +namespace System +{ + public ref struct RuntimeArgumentHandle + { + internal IntPtr args; + } +} diff --git a/mcs/class/System.Private.CoreLib/System/RuntimeFieldHandle.cs b/mcs/class/System.Private.CoreLib/System/RuntimeFieldHandle.cs new file mode 100644 index 0000000000..4c0e865285 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/RuntimeFieldHandle.cs @@ -0,0 +1,81 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; + +namespace System +{ + [Serializable] + public readonly struct RuntimeFieldHandle : ISerializable + { + readonly IntPtr value; + + internal RuntimeFieldHandle (IntPtr v) + { + value = v; + } + + RuntimeFieldHandle (SerializationInfo info, StreamingContext context) + { + throw new PlatformNotSupportedException (); + } + + public void GetObjectData (SerializationInfo info, StreamingContext context) + { + throw new PlatformNotSupportedException (); + } + + public IntPtr Value { + get { + return value; + } + } + + internal bool IsNullHandle () + { + return value == IntPtr.Zero; + } + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((RuntimeFieldHandle)obj).Value; + } + + public bool Equals (RuntimeFieldHandle handle) + { + return value == handle.Value; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public static bool operator == (RuntimeFieldHandle left, RuntimeFieldHandle right) + { + return left.Equals (right); + } + + public static bool operator != (RuntimeFieldHandle left, RuntimeFieldHandle right) + { + return !left.Equals (right); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void SetValueInternal (FieldInfo fi, object obj, object value); + + internal static void SetValue (RuntimeFieldInfo field, Object obj, Object value, RuntimeType fieldType, FieldAttributes fieldAttr, RuntimeType declaringType, ref bool domainInitialized) + { + SetValueInternal (field, obj, value); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static unsafe extern internal Object GetValueDirect (RuntimeFieldInfo field, RuntimeType fieldType, void *pTypedRef, RuntimeType contextType); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static unsafe extern internal void SetValueDirect (RuntimeFieldInfo field, RuntimeType fieldType, void* pTypedRef, Object value, RuntimeType contextType); + } + +} diff --git a/mcs/class/System.Private.CoreLib/System/RuntimeMethodHandle.cs b/mcs/class/System.Private.CoreLib/System/RuntimeMethodHandle.cs new file mode 100644 index 0000000000..b80c11c61c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/RuntimeMethodHandle.cs @@ -0,0 +1,86 @@ +using System.Reflection; +using System.Runtime.Serialization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace System +{ + [Serializable] + public readonly struct RuntimeMethodHandle : ISerializable + { + readonly IntPtr value; + + internal RuntimeMethodHandle (IntPtr v) + { + value = v; + } + + RuntimeMethodHandle (SerializationInfo info, StreamingContext context) + { + throw new PlatformNotSupportedException (); + } + + public IntPtr Value => value; + + public void GetObjectData (SerializationInfo info, StreamingContext context) + { + throw new PlatformNotSupportedException (); + } + + [MethodImpl (MethodImplOptions.InternalCall)] + static extern IntPtr GetFunctionPointer (IntPtr m); + + public IntPtr GetFunctionPointer () + { + return GetFunctionPointer (value); + } + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((RuntimeMethodHandle)obj).Value; + } + + public bool Equals (RuntimeMethodHandle handle) + { + return value == handle.Value; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public static bool operator == (RuntimeMethodHandle left, RuntimeMethodHandle right) + { + return left.Equals (right); + } + + public static bool operator != (RuntimeMethodHandle left, RuntimeMethodHandle right) + { + return !left.Equals (right); + } + + internal static string ConstructInstantiation (RuntimeMethodInfo method, TypeNameFormatFlags format) + { + var sb = new StringBuilder (); + var gen_params = method.GetGenericArguments (); + sb.Append ("["); + for (int j = 0; j < gen_params.Length; j++) { + if (j > 0) + sb.Append (","); + sb.Append (gen_params [j].Name); + } + sb.Append ("]"); + return sb.ToString (); + } + + internal bool IsNullHandle () + { + return value == IntPtr.Zero; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/RuntimeType.cs b/mcs/class/System.Private.CoreLib/System/RuntimeType.cs new file mode 100644 index 0000000000..05919dd21d --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/RuntimeType.cs @@ -0,0 +1,772 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Security; +using System.Runtime.Serialization; + +namespace System +{ + // Contains information about the type which is expensive to compute + [StructLayout (LayoutKind.Sequential)] + internal class MonoTypeInfo { + // this is the displayed form: special characters + // ,+*&*[]\ in the identifier portions of the names + // have been escaped with a leading backslash (\) + public string full_name; + public RuntimeConstructorInfo default_ctor; + } + + [StructLayout (LayoutKind.Sequential)] + partial class RuntimeType + { +#region keep in sync with object-internals.h + [NonSerialized] + MonoTypeInfo type_info; +#endregion + + internal Object GenericCache; + + internal RuntimeType (Object obj) + { + throw new NotImplementedException (); + } + + internal RuntimeConstructorInfo GetDefaultConstructor () + { + RuntimeConstructorInfo ctor = null; + + if (type_info == null) + type_info = new MonoTypeInfo (); + else + ctor = type_info.default_ctor; + + if (ctor == null) { + var ctors = GetConstructors (BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); + + for (int i = 0; i < ctors.Length; ++i) { + if (ctors [i].GetParametersCount () == 0) { + type_info.default_ctor = ctor = (RuntimeConstructorInfo) ctors [i]; + break; + } + } + } + + return ctor; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern MethodInfo GetCorrespondingInflatedMethod (MethodInfo generic); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern ConstructorInfo GetCorrespondingInflatedConstructor (ConstructorInfo generic); + + internal override MethodInfo GetMethod (MethodInfo fromNoninstanciated) + { + if (fromNoninstanciated == null) + throw new ArgumentNullException ("fromNoninstanciated"); + return GetCorrespondingInflatedMethod (fromNoninstanciated); + } + + internal override ConstructorInfo GetConstructor (ConstructorInfo fromNoninstanciated) + { + if (fromNoninstanciated == null) + throw new ArgumentNullException ("fromNoninstanciated"); + return GetCorrespondingInflatedConstructor (fromNoninstanciated); + } + + internal override FieldInfo GetField (FieldInfo fromNoninstanciated) + { + /* create sensible flags from given FieldInfo */ + BindingFlags flags = fromNoninstanciated.IsStatic ? BindingFlags.Static : BindingFlags.Instance; + flags |= fromNoninstanciated.IsPublic ? BindingFlags.Public : BindingFlags.NonPublic; + return GetField (fromNoninstanciated.Name, flags); + } + + string GetDefaultMemberName () + { + object [] att = GetCustomAttributes (typeof (DefaultMemberAttribute), true); + return att.Length != 0 ? ((DefaultMemberAttribute) att [0]).MemberName : null; + } + + RuntimeConstructorInfo m_serializationCtor; + internal RuntimeConstructorInfo GetSerializationCtor() + { + if (m_serializationCtor == null) { + var s_SICtorParamTypes = new Type[] { typeof(SerializationInfo), typeof(StreamingContext) }; + + m_serializationCtor = GetConstructor( + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, + null, + CallingConventions.Any, + s_SICtorParamTypes, + null) as RuntimeConstructorInfo; + } + + return m_serializationCtor; + } + + internal Object CreateInstanceSlow(bool publicOnly, bool wrapExceptions, bool skipCheckThis, bool fillCache) + { + //bool bNeedSecurityCheck = true; + //bool bCanBeCached = false; + //bool bSecurityCheckOff = false; + + if (!skipCheckThis) + CreateInstanceCheckThis(); + + //if (!fillCache) + // bSecurityCheckOff = true; + + return CreateInstanceMono (!publicOnly, wrapExceptions); + } + + object CreateInstanceMono (bool nonPublic, bool wrapExceptions) + { + var ctor = GetDefaultConstructor (); + if (!nonPublic && ctor != null && !ctor.IsPublic) { + throw new MissingMethodException(SR.Format(SR.Arg_NoDefCTor, FullName)); + } + + if (ctor == null) { + Type elementType = this.GetRootElementType(); + if (ReferenceEquals (elementType, typeof (TypedReference)) || ReferenceEquals (elementType, typeof (RuntimeArgumentHandle))) + throw new NotSupportedException (Environment.GetResourceString ("NotSupported_ContainsStackPtr")); + + if (IsValueType) + return CreateInstanceInternal (this); + + throw new MissingMethodException ("Default constructor not found for type " + FullName); + } + + // TODO: .net does more checks in unmanaged land in RuntimeTypeHandle::CreateInstance + if (IsAbstract) { + throw new MissingMethodException ("Cannot create an abstract class '{0}'.", FullName); + } + + return ctor.InternalInvoke (null, null, wrapExceptions); + } + + internal Object CheckValue (Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) + { + bool failed = false; + var res = TryConvertToType (value, ref failed); + if (!failed) + return res; + + if ((invokeAttr & BindingFlags.ExactBinding) == BindingFlags.ExactBinding) + throw new ArgumentException(String.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Arg_ObjObjEx"), value.GetType(), this)); + + if (binder != null && binder != Type.DefaultBinder) + return binder.ChangeType (value, this, culture); + + throw new ArgumentException(String.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Arg_ObjObjEx"), value.GetType(), this)); + } + + object TryConvertToType (object value, ref bool failed) + { + if (IsInstanceOfType (value)) { + return value; + } + + if (IsByRef) { + var elementType = GetElementType (); + if (value == null || elementType.IsInstanceOfType (value)) { + return value; + } + } + + if (value == null) + return value; + + if (IsEnum) { + var type = Enum.GetUnderlyingType (this); + if (type == value.GetType ()) + return value; + var res = IsConvertibleToPrimitiveType (value, this); + if (res != null) + return res; + } else if (IsPrimitive) { + var res = IsConvertibleToPrimitiveType (value, this); + if (res != null) + return res; + } else if (IsPointer) { + var vtype = value.GetType (); + if (vtype == typeof (IntPtr) || vtype == typeof (UIntPtr)) + return value; + if (value is Pointer pointer) { + Type pointerType = pointer.GetPointerType (); + if (pointerType == this) + return pointer.GetPointerValue (); + } + } + + failed = true; + return null; + } + + // Binder uses some incompatible conversion rules. For example + // int value cannot be used with decimal parameter but in other + // ways it's more flexible than normal convertor, for example + // long value can be used with int based enum + static object IsConvertibleToPrimitiveType (object value, Type targetType) + { + var type = value.GetType (); + if (type.IsEnum) { + type = Enum.GetUnderlyingType (type); + if (type == targetType) + return value; + } + + var from = Type.GetTypeCode (type); + var to = Type.GetTypeCode (targetType); + + switch (to) { + case TypeCode.Char: + switch (from) { + case TypeCode.Byte: + return (Char) (Byte) value; + case TypeCode.UInt16: + return value; + } + break; + case TypeCode.Int16: + switch (from) { + case TypeCode.Byte: + return (Int16) (Byte) value; + case TypeCode.SByte: + return (Int16) (SByte) value; + } + break; + case TypeCode.UInt16: + switch (from) { + case TypeCode.Byte: + return (UInt16) (Byte) value; + case TypeCode.Char: + return value; + } + break; + case TypeCode.Int32: + switch (from) { + case TypeCode.Byte: + return (Int32) (Byte) value; + case TypeCode.SByte: + return (Int32) (SByte) value; + case TypeCode.Char: + return (Int32) (Char) value; + case TypeCode.Int16: + return (Int32) (Int16) value; + case TypeCode.UInt16: + return (Int32) (UInt16) value; + } + break; + case TypeCode.UInt32: + switch (from) { + case TypeCode.Byte: + return (UInt32) (Byte) value; + case TypeCode.Char: + return (UInt32) (Char) value; + case TypeCode.UInt16: + return (UInt32) (UInt16) value; + } + break; + case TypeCode.Int64: + switch (from) { + case TypeCode.Byte: + return (Int64) (Byte) value; + case TypeCode.SByte: + return (Int64) (SByte) value; + case TypeCode.Int16: + return (Int64) (Int16) value; + case TypeCode.Char: + return (Int64) (Char) value; + case TypeCode.UInt16: + return (Int64) (UInt16) value; + case TypeCode.Int32: + return (Int64) (Int32) value; + case TypeCode.UInt32: + return (Int64) (UInt32) value; + } + break; + case TypeCode.UInt64: + switch (from) { + case TypeCode.Byte: + return (UInt64) (Byte) value; + case TypeCode.Char: + return (UInt64) (Char) value; + case TypeCode.UInt16: + return (UInt64) (UInt16) value; + case TypeCode.UInt32: + return (UInt64) (UInt32) value; + } + break; + case TypeCode.Single: + switch (from) { + case TypeCode.Byte: + return (Single) (Byte) value; + case TypeCode.SByte: + return (Single) (SByte) value; + case TypeCode.Int16: + return (Single) (Int16) value; + case TypeCode.Char: + return (Single) (Char) value; + case TypeCode.UInt16: + return (Single) (UInt16) value; + case TypeCode.Int32: + return (Single) (Int32) value; + case TypeCode.UInt32: + return (Single) (UInt32) value; + case TypeCode.Int64: + return (Single) (Int64) value; + case TypeCode.UInt64: + return (Single) (UInt64) value; + } + break; + case TypeCode.Double: + switch (from) { + case TypeCode.Byte: + return (Double) (Byte) value; + case TypeCode.SByte: + return (Double) (SByte) value; + case TypeCode.Char: + return (Double) (Char) value; + case TypeCode.Int16: + return (Double) (Int16) value; + case TypeCode.UInt16: + return (Double) (UInt16) value; + case TypeCode.Int32: + return (Double) (Int32) value; + case TypeCode.UInt32: + return (Double) (UInt32) value; + case TypeCode.Int64: + return (Double) (Int64) value; + case TypeCode.UInt64: + return (Double) (UInt64) value; + case TypeCode.Single: + return (Double) (Single) value; + } + break; + } + + // Everything else is rejected + return null; + } + + string GetCachedName (TypeNameKind kind) + { + switch (kind) { + case TypeNameKind.SerializationName: + return ToString (); + default: + throw new NotImplementedException (); + } + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern Type make_array_type (int rank); + + public override Type MakeArrayType () + { + return make_array_type (0); + } + + public override Type MakeArrayType (int rank) + { + if (rank < 1 || rank > 255) + throw new IndexOutOfRangeException (); + return make_array_type (rank); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern Type make_byref_type (); + + public override Type MakeByRefType () + { + if (IsByRef) + throw new TypeLoadException ("Can not call MakeByRefType on a ByRef type"); + return make_byref_type (); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern Type MakePointerType (Type type); + + public override Type MakePointerType () + { + if (IsByRef) + throw new TypeLoadException ($"Could not load type '{GetType()}' from assembly '{AssemblyQualifiedName}"); + return MakePointerType (this); + } + + public override StructLayoutAttribute? StructLayoutAttribute { + get { + return GetStructLayoutAttribute (); + } + } + + public override bool ContainsGenericParameters { + get { + if (IsGenericParameter) + return true; + + if (IsGenericType) { + foreach (Type arg in GetGenericArguments ()) + if (arg.ContainsGenericParameters) + return true; + } + + if (HasElementType) + return GetElementType ().ContainsGenericParameters; + + return false; + } + } + + public override Type[] GetGenericParameterConstraints () + { + if (!IsGenericParameter) + throw new InvalidOperationException(Environment.GetResourceString("Arg_NotGenericParameter")); + + var paramInfo = new Mono.RuntimeGenericParamInfoHandle (RuntimeTypeHandle.GetGenericParameterInfo (this)); + Type[] constraints = paramInfo.Constraints; + + return constraints ?? Array.Empty (); + } + + internal static object CreateInstanceForAnotherGenericParameter (Type genericType, RuntimeType genericArgument) + { + var gt = (RuntimeType) MakeGenericType (genericType, new Type [] { genericArgument }); + var ctor = gt.GetDefaultConstructor (); + return ctor.InternalInvoke (null, null, wrapExceptions: true); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern Type MakeGenericType (Type gt, Type [] types); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern IntPtr GetMethodsByName_native (IntPtr namePtr, BindingFlags bindingAttr, MemberListType listType); + + internal RuntimeMethodInfo[] GetMethodsByName (string name, BindingFlags bindingAttr, MemberListType listType, RuntimeType reflectedType) + { + var refh = new RuntimeTypeHandle (reflectedType); + using (var namePtr = new Mono.SafeStringMarshal (name)) + using (var h = new Mono.SafeGPtrArrayHandle (GetMethodsByName_native (namePtr.Value, bindingAttr, listType))) { + var n = h.Length; + var a = new RuntimeMethodInfo [n]; + for (int i = 0; i < n; i++) { + var mh = new RuntimeMethodHandle (h[i]); + a[i] = (RuntimeMethodInfo) RuntimeMethodInfo.GetMethodFromHandleNoGenericCheck (mh, refh); + } + return a; + } + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern IntPtr GetPropertiesByName_native (IntPtr name, BindingFlags bindingAttr, MemberListType listType); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern IntPtr GetConstructors_native (BindingFlags bindingAttr); + + RuntimeConstructorInfo[] GetConstructors_internal (BindingFlags bindingAttr, RuntimeType reflectedType) + { + var refh = new RuntimeTypeHandle (reflectedType); + using (var h = new Mono.SafeGPtrArrayHandle (GetConstructors_native (bindingAttr))) { + var n = h.Length; + var a = new RuntimeConstructorInfo [n]; + for (int i = 0; i < n; i++) { + var mh = new RuntimeMethodHandle (h[i]); + a[i] = (RuntimeConstructorInfo) RuntimeMethodInfo.GetMethodFromHandleNoGenericCheck (mh, refh); + } + return a; + } + } + + RuntimePropertyInfo[] GetPropertiesByName (string name, BindingFlags bindingAttr, MemberListType listType, RuntimeType reflectedType) + { + var refh = new RuntimeTypeHandle (reflectedType); + using (var namePtr = new Mono.SafeStringMarshal (name)) + using (var h = new Mono.SafeGPtrArrayHandle (GetPropertiesByName_native (namePtr.Value, bindingAttr, listType))) { + var n = h.Length; + var a = new RuntimePropertyInfo [n]; + for (int i = 0; i < n; i++) { + var ph = new Mono.RuntimePropertyHandle (h[i]); + a[i] = (RuntimePropertyInfo) RuntimePropertyInfo.GetPropertyFromHandle (ph, refh); + } + return a; + } + } + + public override InterfaceMapping GetInterfaceMap (Type ifaceType) + { + if (IsGenericParameter) + throw new InvalidOperationException(Environment.GetResourceString("Arg_GenericParameter")); + + if ((object)ifaceType == null) + throw new ArgumentNullException("ifaceType"); + + RuntimeType ifaceRtType = ifaceType as RuntimeType; + + if (ifaceRtType == null) + throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeType"), "ifaceType"); + + InterfaceMapping res; + if (!ifaceType.IsInterface) + throw new ArgumentException ("Argument must be an interface.", "ifaceType"); + if (IsInterface) + throw new ArgumentException ("'this' type cannot be an interface itself"); + res.TargetType = this; + res.InterfaceType = ifaceType; + GetInterfaceMapData (this, ifaceType, out res.TargetMethods, out res.InterfaceMethods); + if (res.TargetMethods == null) + throw new ArgumentException ("Interface not found", "ifaceType"); + + return res; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static extern void GetInterfaceMapData (Type t, Type iface, out MethodInfo[] targets, out MethodInfo[] methods); + + public override Guid GUID { + get { + object[] att = GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), true); + if (att.Length == 0) + return Guid.Empty; + return new Guid(((System.Runtime.InteropServices.GuidAttribute)att[0]).Value); + } + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern void GetPacking (out int packing, out int size); + + internal static Type GetTypeFromCLSIDImpl(Guid clsid, String server, bool throwOnError) + { + throw new NotImplementedException ("Unmanaged activation removed"); + } + + protected override TypeCode GetTypeCodeImpl () + { + return GetTypeCodeImplInternal (this); + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static TypeCode GetTypeCodeImplInternal (Type type); + + internal static Type GetTypeFromProgIDImpl(String progID, String server, bool throwOnError) + { + throw new NotImplementedException ("Unmanaged activation is not supported"); + } + + public override string ToString() + { + return getFullName (false, false); + } + + bool IsGenericCOMObjectImpl () + { + return false; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern object CreateInstanceInternal (Type type); + + public extern override MethodBase? DeclaringMethod { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern string getFullName(bool full_name, bool assembly_qualified); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern Type[] GetGenericArgumentsInternal (bool runtimeArray); + + GenericParameterAttributes GetGenericParameterAttributes () { + return (new Mono.RuntimeGenericParamInfoHandle (RuntimeTypeHandle.GetGenericParameterInfo (this))).Attributes; + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern int GetGenericParameterPosition (); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern IntPtr GetEvents_native (IntPtr name, MemberListType listType); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern IntPtr GetFields_native (IntPtr name, BindingFlags bindingAttr, MemberListType listType); + + RuntimeFieldInfo[] GetFields_internal (string name, BindingFlags bindingAttr, MemberListType listType, RuntimeType reflectedType) + { + var refh = new RuntimeTypeHandle (reflectedType); + using (var namePtr = new Mono.SafeStringMarshal (name)) + using (var h = new Mono.SafeGPtrArrayHandle (GetFields_native (namePtr.Value, bindingAttr, listType))) { + int n = h.Length; + var a = new RuntimeFieldInfo[n]; + for (int i = 0; i < n; i++) { + var fh = new RuntimeFieldHandle (h[i]); + a[i] = (RuntimeFieldInfo) FieldInfo.GetFieldFromHandle (fh, refh); + } + return a; + } + } + + RuntimeEventInfo[] GetEvents_internal (string name, BindingFlags bindingAttr, MemberListType listType, RuntimeType reflectedType) + { + var refh = new RuntimeTypeHandle (reflectedType); + using (var namePtr = new Mono.SafeStringMarshal (name)) + using (var h = new Mono.SafeGPtrArrayHandle (GetEvents_native (namePtr.Value, listType))) { + int n = h.Length; + var a = new RuntimeEventInfo[n]; + for (int i = 0; i < n; i++) { + var eh = new Mono.RuntimeEventHandle (h[i]); + a[i] = (RuntimeEventInfo) RuntimeEventInfo.GetEventFromHandle (eh, refh); + } + return a; + } + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern override Type[] GetInterfaces(); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern IntPtr GetNestedTypes_native (IntPtr name, BindingFlags bindingAttr, MemberListType listType); + + RuntimeType[] GetNestedTypes_internal (string displayName, BindingFlags bindingAttr, MemberListType listType) + { + string internalName = null; + if (displayName != null) + internalName = displayName; + using (var namePtr = new Mono.SafeStringMarshal (internalName)) + using (var h = new Mono.SafeGPtrArrayHandle (GetNestedTypes_native (namePtr.Value, bindingAttr, listType))) { + int n = h.Length; + var a = new RuntimeType [n]; + for (int i = 0; i < n; i++) { + var th = new RuntimeTypeHandle (h[i]); + a[i] = (RuntimeType) Type.GetTypeFromHandle (th); + } + return a; + } + } + + public override string? AssemblyQualifiedName { + get { + return getFullName (true, true); + } + } + + public extern override Type? DeclaringType { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + public extern override string Name { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + public extern override string? Namespace { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + public override bool IsSecurityTransparent { + get { return false; } + } + + public override bool IsSecurityCritical { + get { return true; } + } + + public override bool IsSecuritySafeCritical { + get { return false; } + } + + public override string? FullName { + get { + // https://bugzilla.xamarin.com/show_bug.cgi?id=57938 + if (IsGenericType && ContainsGenericParameters && !IsGenericTypeDefinition) + return null; + + string fullName; + // This doesn't need locking + if (type_info == null) + type_info = new MonoTypeInfo (); + if ((fullName = type_info.full_name) == null) + fullName = type_info.full_name = getFullName (true, false); + + return fullName; + } + } + + public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore (other); + + public override bool IsSZArray { + get { + // TODO: intrinsic + return IsArray && ReferenceEquals (this, GetElementType ().MakeArrayType ()); + } + } + + internal override bool IsUserType { + get { + return false; + } + } + + public override bool IsSubclassOf(Type type) + { + if ((object)type == null) + throw new ArgumentNullException("type"); + + RuntimeType rtType = type as RuntimeType; + if (rtType == null) + return false; + + return RuntimeTypeHandle.IsSubclassOf (this, rtType); + } + + public override bool IsByRefLike { + get { + return RuntimeTypeHandle.IsByRefLike (this); + } + } + + public override bool IsTypeDefinition => RuntimeTypeHandle.IsTypeDefinition (this); + + private const int DEFAULT_PACKING_SIZE = 8; + + internal StructLayoutAttribute GetStructLayoutAttribute () + { + if (IsInterface || HasElementType || IsGenericParameter) + return null; + + int pack = 0, size = 0; + LayoutKind layoutKind = LayoutKind.Auto; + switch (Attributes & TypeAttributes.LayoutMask) + { + case TypeAttributes.ExplicitLayout: layoutKind = LayoutKind.Explicit; break; + case TypeAttributes.AutoLayout: layoutKind = LayoutKind.Auto; break; + case TypeAttributes.SequentialLayout: layoutKind = LayoutKind.Sequential; break; + default: break; + } + + CharSet charSet = CharSet.None; + switch (Attributes & TypeAttributes.StringFormatMask) + { + case TypeAttributes.AnsiClass: charSet = CharSet.Ansi; break; + case TypeAttributes.AutoClass: charSet = CharSet.Auto; break; + case TypeAttributes.UnicodeClass: charSet = CharSet.Unicode; break; + default: break; + } + + GetPacking (out pack, out size); + + // Metadata parameter checking should not have allowed 0 for packing size. + // The runtime later converts a packing size of 0 to 8 so do the same here + // because it's more useful from a user perspective. + if (pack == 0) + pack = DEFAULT_PACKING_SIZE; + + return new StructLayoutAttribute (layoutKind) { Pack = pack, Size = size, CharSet = charSet }; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/RuntimeTypeHandle.cs b/mcs/class/System.Private.CoreLib/System/RuntimeTypeHandle.cs new file mode 100644 index 0000000000..99e7e60568 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/RuntimeTypeHandle.cs @@ -0,0 +1,302 @@ +using System.Runtime.Serialization; +using System.Runtime.CompilerServices; +using System.Reflection; +using System.Threading; + +namespace System +{ + [Serializable] + public readonly struct RuntimeTypeHandle : ISerializable + { + readonly IntPtr value; + + internal RuntimeTypeHandle (IntPtr val) + { + value = val; + } + + internal RuntimeTypeHandle (RuntimeType type) + : this (type._impl.value) + { + } + + RuntimeTypeHandle (SerializationInfo info, StreamingContext context) + { + throw new PlatformNotSupportedException (); + } + + public IntPtr Value { + get { + return value; + } + } + + public void GetObjectData (SerializationInfo info, StreamingContext context) + { + throw new PlatformNotSupportedException (); + } + + public override bool Equals (object? obj) + { + if (obj == null || GetType () != obj.GetType ()) + return false; + + return value == ((RuntimeTypeHandle)obj).Value; + } + + public bool Equals (RuntimeTypeHandle handle) + { + return value == handle.Value; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public static bool operator == (RuntimeTypeHandle left, Object right) + { + return (right != null) && (right is RuntimeTypeHandle) && left.Equals ((RuntimeTypeHandle)right); + } + + public static bool operator != (RuntimeTypeHandle left, Object right) + { + return (right == null) || !(right is RuntimeTypeHandle) || !left.Equals ((RuntimeTypeHandle)right); + } + + public static bool operator == (Object left, RuntimeTypeHandle right) + { + return (left != null) && (left is RuntimeTypeHandle) && ((RuntimeTypeHandle)left).Equals (right); + } + + public static bool operator != (Object left, RuntimeTypeHandle right) + { + return (left == null) || !(left is RuntimeTypeHandle) || !((RuntimeTypeHandle)left).Equals (right); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern TypeAttributes GetAttributes (RuntimeType type); + + [CLSCompliant (false)] + public ModuleHandle GetModuleHandle () + { + // Although MS' runtime is crashing here, we prefer throwing an exception. + // The check is needed because Type.GetTypeFromHandle returns null + // for zero handles. + if (value == IntPtr.Zero) + throw new InvalidOperationException ("Object fields may not be properly initialized"); + + return Type.GetTypeFromHandle (this).Module.ModuleHandle; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern int GetMetadataToken (RuntimeType type); + + internal static int GetToken (RuntimeType type) + { + return GetMetadataToken (type); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static Type GetGenericTypeDefinition_impl (RuntimeType type); + + internal static Type GetGenericTypeDefinition (RuntimeType type) + { + return GetGenericTypeDefinition_impl (type); + } + + internal static bool IsPrimitive (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return (corElemType >= CorElementType.ELEMENT_TYPE_BOOLEAN && corElemType <= CorElementType.ELEMENT_TYPE_R8) || + corElemType == CorElementType.ELEMENT_TYPE_I || + corElemType == CorElementType.ELEMENT_TYPE_U; + } + + internal static bool IsByRef (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_BYREF; + } + + internal static bool IsPointer (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_PTR; + } + + internal static bool IsArray (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_ARRAY || corElemType == CorElementType.ELEMENT_TYPE_SZARRAY; + } + + internal static bool IsSzArray (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_SZARRAY; + } + + internal static bool HasElementType (RuntimeType type) + { + CorElementType corElemType = GetCorElementType(type); + + return ((corElemType == CorElementType.ELEMENT_TYPE_ARRAY || corElemType == CorElementType.ELEMENT_TYPE_SZARRAY) // IsArray + || (corElemType == CorElementType.ELEMENT_TYPE_PTR) // IsPointer + || (corElemType == CorElementType.ELEMENT_TYPE_BYREF)); // IsByRef + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern CorElementType GetCorElementType (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool HasInstantiation (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool IsComObject (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool IsInstanceOfType (RuntimeType type, Object o); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool HasReferences (RuntimeType type); + + internal static bool IsComObject (RuntimeType type, bool isGenericCOM) + { + return isGenericCOM ? false : IsComObject (type); + } + + internal static bool IsContextful (RuntimeType type) + { + return false; + } + + internal static bool IsEquivalentTo (RuntimeType rtType1, RuntimeType rtType2) + { + // refence check is done earlier and we don't recognize anything else + return false; + } + + internal static bool IsInterface (RuntimeType type) + { + return (type.Attributes & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Interface; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static int GetArrayRank(RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static RuntimeAssembly GetAssembly (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static RuntimeType GetElementType (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static RuntimeModule GetModule (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool IsGenericVariable (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static RuntimeType GetBaseType (RuntimeType type); + + internal static bool CanCastTo (RuntimeType type, RuntimeType target) + { + return type_is_assignable_from (target, type); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern bool type_is_assignable_from (Type a, Type b); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool IsGenericTypeDefinition (RuntimeType type); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static IntPtr GetGenericParameterInfo (RuntimeType type); + + internal static bool IsSubclassOf (RuntimeType childType, RuntimeType baseType) + { + return is_subclass_of (childType._impl.Value, baseType._impl.Value); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool is_subclass_of (IntPtr childType, IntPtr baseType); + + [PreserveDependency (".ctor()", "System.Runtime.CompilerServices.IsByRefLikeAttribute")] + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool IsByRefLike (RuntimeType type); + + internal static bool IsTypeDefinition (RuntimeType type) + { + // That's how it has been done on CoreFX but we have no GetCorElementType method implementation + // see https://github.com/dotnet/coreclr/pull/11355 + + // CorElementType corElemType = GetCorElementType (type); + // if (!((corElemType >= CorElementType.Void && corElemType < CorElementType.Ptr) || + // corElemType == CorElementType.ValueType || + // corElemType == CorElementType.Class || + // corElemType == CorElementType.TypedByRef || + // corElemType == CorElementType.I || + // corElemType == CorElementType.U || + // corElemType == CorElementType.Object)) + // return false; + // if (HasInstantiation (type) && !IsGenericTypeDefinition (type)) + // return false; + // return true; + + // It's like a workaround mentioned in https://github.com/dotnet/corefx/issues/17345 + return !type.HasElementType && !type.IsConstructedGenericType && !type.IsGenericParameter; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern RuntimeType internal_from_name (string name, ref StackCrawlMark stackMark, Assembly callerAssembly, bool throwOnError, bool ignoreCase, bool reflectionOnly); + + internal static RuntimeType GetTypeByName (string typeName, bool throwOnError, bool ignoreCase, bool reflectionOnly, ref StackCrawlMark stackMark, + bool loadTypeFromPartialName) + { + if (typeName == null) + throw new ArgumentNullException ("typeName"); + + if (typeName == String.Empty) + if (throwOnError) + throw new TypeLoadException ("A null or zero length string does not represent a valid Type."); + else + return null; + + if (reflectionOnly) { + int idx = typeName.IndexOf (','); + if (idx < 0 || idx == 0 || idx == typeName.Length - 1) + throw new ArgumentException ("Assembly qualifed type name is required", "typeName"); + string an = typeName.Substring (idx + 1); + Assembly a; + try { + a = Assembly.ReflectionOnlyLoad (an); + } catch { + if (throwOnError) + throw; + return null; + } + return (RuntimeType)a.GetType (typeName.Substring (0, idx), throwOnError, ignoreCase); + } + + var t = internal_from_name (typeName, ref stackMark, null, throwOnError, ignoreCase, false); + if (throwOnError && t == null) + throw new TypeLoadException ("Error loading '" + typeName + "'"); + return t; + } + + internal static IntPtr[] CopyRuntimeTypeHandles (RuntimeTypeHandle[] inHandles, out int length) + { + if (inHandles == null || inHandles.Length == 0) { + length = 0; + return null; + } + + IntPtr[] outHandles = new IntPtr [inHandles.Length]; + for (int i = 0; i < inHandles.Length; i++) + outHandles [i] = inHandles [i].Value; + length = outHandles.Length; + return outHandles; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/String.cs b/mcs/class/System.Private.CoreLib/System/String.cs new file mode 100644 index 0000000000..6ba6c79947 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/String.cs @@ -0,0 +1,197 @@ +using System.Runtime.CompilerServices; +using Internal.Runtime.CompilerServices; + +namespace System +{ + partial class String + { + [NonSerialized] + int _stringLength; + [NonSerialized] + char _firstChar; + + [Intrinsic] + public static readonly String Empty; + + public int Length => _stringLength; + + [IndexerName ("Chars")] + public char this [int index] { + [Intrinsic] + get { + if ((uint)index >= _stringLength) + ThrowHelper.ThrowIndexOutOfRangeException (); + + return Unsafe.Add (ref _firstChar, index); + } + } + + public static String Intern (String str) + { + if (str == null) + throw new ArgumentNullException(nameof(str)); + + return InternalIntern (str); + } + + public static String IsInterned (String str) + { + if (str == null) + throw new ArgumentNullException(nameof(str)); + + return InternalIsInterned (str); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static String FastAllocateString (int length); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static String InternalIsInterned (String str); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static String InternalIntern (String str); + + // TODO: Should be pointing to Buffer instead + #region Runtime method-to-ir dependencies + + static unsafe void memset (byte *dest, int val, int len) + { + if (len < 8) { + while (len != 0) { + *dest = (byte)val; + ++dest; + --len; + } + return; + } + if (val != 0) { + val = val | (val << 8); + val = val | (val << 16); + } + // align to 4 + int rest = (int)dest & 3; + if (rest != 0) { + rest = 4 - rest; + len -= rest; + do { + *dest = (byte)val; + ++dest; + --rest; + } while (rest != 0); + } + while (len >= 16) { + ((int*)dest) [0] = val; + ((int*)dest) [1] = val; + ((int*)dest) [2] = val; + ((int*)dest) [3] = val; + dest += 16; + len -= 16; + } + while (len >= 4) { + ((int*)dest) [0] = val; + dest += 4; + len -= 4; + } + // tail bytes + while (len > 0) { + *dest = (byte)val; + dest++; + len--; + } + } + + static unsafe void memcpy (byte *dest, byte *src, int size) + { + Buffer.Memcpy (dest, src, size); + } + + /* Used by the runtime */ + internal static unsafe void bzero (byte *dest, int len) { + memset (dest, 0, len); + } + + internal static unsafe void bzero_aligned_1 (byte *dest, int len) { + ((byte*)dest) [0] = 0; + } + + internal static unsafe void bzero_aligned_2 (byte *dest, int len) { + ((short*)dest) [0] = 0; + } + + internal static unsafe void bzero_aligned_4 (byte *dest, int len) { + ((int*)dest) [0] = 0; + } + + internal static unsafe void bzero_aligned_8 (byte *dest, int len) { + ((long*)dest) [0] = 0; + } + + internal static unsafe void memcpy_aligned_1 (byte *dest, byte *src, int size) { + ((byte*)dest) [0] = ((byte*)src) [0]; + } + + internal static unsafe void memcpy_aligned_2 (byte *dest, byte *src, int size) { + ((short*)dest) [0] = ((short*)src) [0]; + } + + internal static unsafe void memcpy_aligned_4 (byte *dest, byte *src, int size) { + ((int*)dest) [0] = ((int*)src) [0]; + } + + internal static unsafe void memcpy_aligned_8 (byte *dest, byte *src, int size) { + ((long*)dest) [0] = ((long*)src) [0]; + } + + #endregion + + // Certain constructors are redirected to CreateString methods with + // matching argument list. The this pointer should not be used. + // + // TODO: Update runtime to call Ctor directly + + unsafe String CreateString (sbyte* value) + { + return Ctor (value); + } + + unsafe String CreateString (sbyte* value, int startIndex, int length) + { + return Ctor (value, startIndex, length); + } + + unsafe String CreateString (char* value) + { + return Ctor (value); + } + + unsafe String CreateString (char* value, int startIndex, int length) + { + return Ctor (value, startIndex, length); + } + + String CreateString (char[] val, int startIndex, int length) + { + return Ctor (val, startIndex, length); + } + + String CreateString (char [] val) + { + return Ctor (val); + } + + String CreateString (char c, int count) + { + return Ctor (c, count); + } + + unsafe String CreateString (sbyte* value, int startIndex, int length, System.Text.Encoding enc) + { + return Ctor (value, startIndex, length, enc); + } + + String CreateString (ReadOnlySpan value) + { + return Ctor (value); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/Type.cs b/mcs/class/System.Private.CoreLib/System/Type.cs new file mode 100644 index 0000000000..15d56b665c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/Type.cs @@ -0,0 +1,141 @@ +using System.Text; +using System.IO; +using System.Reflection; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Threading; + +namespace System +{ + partial class Type + { + #region keep in sync with object-internals.h + internal RuntimeTypeHandle _impl; + #endregion + + internal bool IsRuntimeImplemented () => this.UnderlyingSystemType is RuntimeType; + + public bool IsInterface { + get { + if (this is RuntimeType rt) + return RuntimeTypeHandle.IsInterface (rt); + + return (GetAttributeFlagsImpl () & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Interface; + } + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Type GetType (string typeName, bool throwOnError, bool ignoreCase) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeType.GetType (typeName, throwOnError, ignoreCase, false, ref stackMark); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Type GetType (string typeName, bool throwOnError) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeType.GetType (typeName, throwOnError, false, false, ref stackMark); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Type GetType (string typeName) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeType.GetType (typeName, false, false, false, ref stackMark); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Type GetType (string typeName, Func assemblyResolver, Func typeResolver) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeType.GetType (typeName, assemblyResolver, typeResolver, false, false, ref stackMark); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Type GetType (string typeName, Func assemblyResolver, Func typeResolver, bool throwOnError) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeType.GetType (typeName, assemblyResolver, typeResolver, throwOnError, false, ref stackMark); + } + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod + public static Type GetType (string typeName, Func assemblyResolver, Func typeResolver, bool throwOnError, bool ignoreCase) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return RuntimeType.GetType (typeName, assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); + } + + static Type GetType (string typeName, Func assemblyResolver, Func typeResolver, bool throwOnError, bool ignoreCase, ref StackCrawlMark stackMark) { + return TypeNameParser.GetType (typeName, assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); + } + + public static Type? GetTypeFromHandle (RuntimeTypeHandle handle) + { + if (handle.Value == IntPtr.Zero) + return null; + + return internal_from_handle (handle.Value); + } + + public static Type GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError) => throw new PlatformNotSupportedException (); + + public static Type GetTypeFromProgID (string progID, string? server, bool throwOnError) => throw new PlatformNotSupportedException (); + + internal string FormatTypeName () + { + return FormatTypeName (false); + } + + internal virtual string FormatTypeName (bool serialization) + { + throw new NotImplementedException (); + } + + internal virtual Type InternalResolve () + { + return UnderlyingSystemType; + } + + // Called from the runtime to return the corresponding finished Type object + internal virtual Type RuntimeResolve () + { + throw new NotImplementedException (); + } + + internal virtual bool IsUserType { + get { + return true; + } + } + + internal virtual MethodInfo GetMethod (MethodInfo fromNoninstanciated) + { + throw new System.InvalidOperationException ("can only be called in generic type"); + } + + internal virtual ConstructorInfo GetConstructor (ConstructorInfo fromNoninstanciated) + { + throw new System.InvalidOperationException ("can only be called in generic type"); + } + + internal virtual FieldInfo GetField (FieldInfo fromNoninstanciated) + { + throw new System.InvalidOperationException ("can only be called in generic type"); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern Type internal_from_handle (IntPtr handle); + + public static bool operator == (Type? left, Type? right) + { + return object.ReferenceEquals (left, right); + } + + public static bool operator != (Type? left, Type? right) + { + return !object.ReferenceEquals (left, right); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/TypeIdentifier.cs b/mcs/class/System.Private.CoreLib/System/TypeIdentifier.cs new file mode 100644 index 0000000000..a9141d47b0 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/TypeIdentifier.cs @@ -0,0 +1,198 @@ +namespace System +{ + // A TypeName is wrapper around type names in display form + // (that is, with special characters escaped). + // + // Note that in general if you unescape a type name, you will + // lose information: If the type name's DisplayName is + // Foo\+Bar+Baz (outer class ``Foo+Bar``, inner class Baz) + // unescaping the first plus will give you (outer class Foo, + // inner class Bar, innermost class Baz). + // + // The correct way to take a TypeName apart is to feed its + // DisplayName to TypeSpec.Parse() + // + interface TypeName : IEquatable + { + string DisplayName { + get; + } + + // add a nested name under this one. + TypeName NestedName (TypeIdentifier innerName); + } + + // A type identifier is a single component of a type name. + // Unlike a general typename, a type identifier can be be + // converted to internal form without loss of information. + interface TypeIdentifier : TypeName + { + string InternalName { + get; + } + } + + static class TypeNames + { + internal static TypeName FromDisplay (string displayName) + { + return new Display (displayName); + } + + internal abstract class ATypeName : TypeName + { + public abstract string DisplayName { get; } + + public abstract TypeName NestedName (TypeIdentifier innerName); + + public bool Equals (TypeName other) + { + return other != null && DisplayName == other.DisplayName; + } + + public override int GetHashCode () + { + return DisplayName.GetHashCode (); + } + + public override bool Equals (object? other) + { + return Equals (other as TypeName); + } + } + + private class Display : ATypeName + { + string displayName; + + internal Display (string displayName) + { + this.displayName = displayName; + } + + public override string DisplayName { get { return displayName; } } + + public override TypeName NestedName (TypeIdentifier innerName) + { + return new Display (DisplayName + "+" + innerName.DisplayName); + } + + } + } + + static class TypeIdentifiers + { + internal static TypeIdentifier FromDisplay (string displayName) + { + return new Display (displayName); + } + + internal static TypeIdentifier FromInternal (string internalName) + { + return new Internal (internalName); + } + + internal static TypeIdentifier FromInternal (string internalNameSpace, TypeIdentifier typeName) + { + return new Internal (internalNameSpace, typeName); + } + + // Only use if simpleName is certain not to contain + // unexpected characters that ordinarily require + // escaping: ,+*&[]\ + internal static TypeIdentifier WithoutEscape (string simpleName) + { + return new NoEscape (simpleName); + } + + private class Display : TypeNames.ATypeName, TypeIdentifier + { + string displayName; + string internal_name; //cached + + internal Display (string displayName) + { + this.displayName = displayName; + } + + public override string DisplayName { + get { return displayName; } + } + + public string InternalName { + get { + if (internal_name == null) + internal_name = GetInternalName (); + return internal_name; + } + } + + private string GetInternalName () + { + return TypeSpec.UnescapeInternalName (displayName); + } + + public override TypeName NestedName (TypeIdentifier innerName) + { + return TypeNames.FromDisplay (DisplayName + "+" + innerName.DisplayName); + } + } + + + private class Internal : TypeNames.ATypeName, TypeIdentifier + { + string internalName; + string display_name; //cached + + internal Internal (string internalName) + { + this.internalName = internalName; + } + + internal Internal (string nameSpaceInternal, TypeIdentifier typeName) + { + this.internalName = nameSpaceInternal + "." + typeName.InternalName; + } + + public override string DisplayName { + get { + if (display_name == null) + display_name = GetDisplayName (); + return display_name; + } + } + + public string InternalName { + get { return internalName; } + } + + private string GetDisplayName () + { + return TypeSpec.EscapeDisplayName (internalName); + } + + public override TypeName NestedName (TypeIdentifier innerName) + { + return TypeNames.FromDisplay (DisplayName + "+" + innerName.DisplayName); + } + + } + + private class NoEscape : TypeNames.ATypeName, TypeIdentifier + { + string simpleName; + internal NoEscape (string simpleName) + { + this.simpleName = simpleName; + } + + public override string DisplayName { get { return simpleName; } } + public string InternalName { get { return simpleName; } } + + public override TypeName NestedName (TypeIdentifier innerName) + { + return TypeNames.FromDisplay (DisplayName + "+" + innerName.DisplayName); + } + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/TypeLoadException.cs b/mcs/class/System.Private.CoreLib/System/TypeLoadException.cs new file mode 100644 index 0000000000..625b89ce9e --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/TypeLoadException.cs @@ -0,0 +1,26 @@ +namespace System +{ + partial class TypeLoadException + { + // Called by runtime + internal TypeLoadException (string className, string assemblyName) + : this (null) + { + _className = className; + _assemblyName = assemblyName; + } + + void SetMessageField () + { + if (_message != null) + return; + + if (_className == null) { + _message = SR.Arg_TypeLoadException; + return; + } + + _message = SR.Format ("Could not load type '{0}' from assembly '{1}'.", _className, _assemblyName ?? SR.IO_UnknownFileName); + } + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/TypeNameParser.cs b/mcs/class/System.Private.CoreLib/System/TypeNameParser.cs new file mode 100644 index 0000000000..e1e954017c --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/TypeNameParser.cs @@ -0,0 +1,388 @@ +using System.Text; +using System.IO; +using System.Reflection; +using System.Collections.Generic; +using System.Threading; + +namespace System +{ + internal static class TypeNameParser + { + static readonly char[] SPECIAL_CHARS = {',', '[', ']', '&', '*', '+', '\\'}; + + internal static Type GetType ( + string typeName, + Func assemblyResolver, + Func typeResolver, + bool throwOnError, + bool ignoreCase, + ref StackCrawlMark stackMark) + { + if (typeName == null) + throw new ArgumentNullException (nameof (typeName)); + + ParsedName pname = ParseName (typeName, false, 0, out int end_pos); + if (pname == null) { + if (throwOnError) + throw new ArgumentException (); + return null; + } + + return ConstructType (pname, assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); + } + + static Type ConstructType ( + ParsedName pname, + Func assemblyResolver, + Func typeResolver, + bool throwOnError, + bool ignoreCase, + ref StackCrawlMark stackMark) + { + // Resolve assembly + Assembly assembly = null; + if (pname.AssemblyName != null) { + assembly = ResolveAssembly (pname.AssemblyName, assemblyResolver, throwOnError, ref stackMark); + if (assembly == null) + // If throwOnError is true, an exception was already thrown + return null; + } + + // Resolve base type + var type = ResolveType (assembly, pname.Names, typeResolver, throwOnError, ignoreCase, ref stackMark); + if (type == null) + return null; + + // Resolve type arguments + if (pname.TypeArguments != null) { + var args = new Type [pname.TypeArguments.Count]; + for (int i = 0; i < pname.TypeArguments.Count; ++i) { + args [i] = ConstructType (pname.TypeArguments [i], assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); + if (args [i] == null) + return null; + } + type = type.MakeGenericType (args); + } + + // Resolve modifiers + if (pname.Modifiers != null) { + bool bounded = false; + foreach (var mod in pname.Modifiers) { + switch (mod) { + case 0: + type = type.MakeByRefType (); + break; + case -1: + type = type.MakePointerType (); + break; + case -2: + bounded = true; + break; + case 1: + if (bounded) + type = type.MakeArrayType (1); + else + type = type.MakeArrayType (); + break; + default: + type = type.MakeArrayType (mod); + break; + } + } + } + + return type; + } + + static Assembly ResolveAssembly (string name, Func assemblyResolver, bool throwOnError, + ref StackCrawlMark stackMark) + { + var aname = new AssemblyName (name); + + if (assemblyResolver == null) { + if (throwOnError) { + return Assembly.Load (aname, ref stackMark, null); + } else { + try { + return Assembly.Load (aname, ref stackMark, null); + } catch (FileNotFoundException) { + return null; + } + } + } else { + var assembly = assemblyResolver (aname); + if (assembly == null && throwOnError) + throw new FileNotFoundException (SR.FileNotFound_ResolveAssembly, name); + return assembly; + } + } + + static Type ResolveType (Assembly assembly, List names, Func typeResolver, bool throwOnError, bool ignoreCase, ref StackCrawlMark stackMark) + { + Type type = null; + + string name = EscapeTypeName (names [0]); + // Resolve the top level type. + if (typeResolver != null) { + type = typeResolver (assembly, name, ignoreCase); + if (type == null && throwOnError) { + if (assembly == null) + throw new TypeLoadException (SR.Format (SR.TypeLoad_ResolveType, name)); + else + throw new TypeLoadException (SR.Format (SR.TypeLoad_ResolveTypeFromAssembly, name, assembly.FullName)); + } + } else { + if (assembly == null) + type = RuntimeType.GetType (name, throwOnError, ignoreCase, false, ref stackMark); + else + type = assembly.GetType (name, throwOnError, ignoreCase); + } + + if (type == null) + return null; + + // Resolve nested types. + BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Public; + if (ignoreCase) + bindingFlags |= BindingFlags.IgnoreCase; + + for (int i = 1; i < names.Count; ++i) { + type = type.GetNestedType (names[i], bindingFlags); + if (type == null) { + if (throwOnError) + throw new TypeLoadException (SR.Format (SR.TypeLoad_ResolveNestedType, names[i], names[i-1])); + else + break; + } + } + return type; + } + + static string EscapeTypeName (string name) + { + if (name.IndexOfAny (SPECIAL_CHARS) < 0) + return name; + + var sb = new StringBuilder (); + foreach (char c in name) { + if (Array.IndexOf (SPECIAL_CHARS, c) >= 0) + sb.Append ('\\'); + sb.Append (c); + } + + return sb.ToString (); + } + + class ParsedName { + public List Names; + public List TypeArguments; + public List Modifiers; + public string AssemblyName; + + /* For debugging + public override string ToString () { + var sb = new StringBuilder (); + sb.Append (Names [0]); + if (TypeArguments != null) { + sb.Append ("["); + for (int i = 0; i < TypeArguments.Count; ++i) { + if (TypeArguments [i].AssemblyName != null) + sb.Append ('['); + sb.Append (TypeArguments [i].ToString ()); + if (TypeArguments [i].AssemblyName != null) + sb.Append (']'); + if (i < TypeArguments.Count - 1) + sb.Append (", "); + } + sb.Append ("]"); + } + if (AssemblyName != null) + sb.Append ($", {AssemblyName}"); + return sb.ToString (); + } + */ + } + + // Ported from the C version in mono_reflection_parse_type () + static ParsedName ParseName (string name, bool recursed, int pos, out int end_pos) + { + end_pos = 0; + + while (pos < name.Length && name [pos] == ' ') + pos ++; + + var res = new ParsedName () { Names = new List () }; + + int start = pos; + int name_start = pos; + bool in_modifiers = false; + while (pos < name.Length) { + switch (name [pos]) { + case '+': + res.Names.Add (name.Substring (name_start, pos - name_start)); + name_start = pos + 1; + break; + case '\\': + pos ++; + break; + case '&': + case '*': + case '[': + case ',': + case ']': + in_modifiers = true; + break; + default: + break; + } + if (in_modifiers) + break; + pos ++; + } + + if (res.Names.Count == 0) + res.Names.Add (name.Substring (name_start, pos - name_start)); + + bool isbyref = false; + bool isptr = false; + int rank = -1; + + bool end = false; + while (pos < name.Length && !end) { + switch (name [pos]) { + case '&': + if (isbyref) + return null; + pos ++; + isbyref = true; + isptr = false; + if (res.Modifiers == null) + res.Modifiers = new List (); + res.Modifiers.Add (0); + break; + case '*': + if (isbyref) + return null; + pos ++; + if (res.Modifiers == null) + res.Modifiers = new List (); + res.Modifiers.Add (-1); + isptr = true; + break; + case '[': + // An array or generic arguments + if (isbyref) + return null; + pos ++; + if (pos == name.Length) + return null; + + if (name [pos] == ',' || name [pos] == '*' || name [pos] == ']') { + // Array + bool bounded = false; + isptr = false; + rank = 1; + while (pos < name.Length) { + if (name [pos] == ']') + break; + if (name [pos] == ',') + rank ++; + else if (name [pos] == '*') /* '*' means unknown lower bound */ + bounded = true; + else + return null; + pos ++; + } + if (pos == name.Length) + return null; + if (name [pos] != ']') + return null; + pos ++; + /* bounded only allowed when rank == 1 */ + if (bounded && rank > 1) + return null; + /* n.b. bounded needs both modifiers: -2 == bounded, 1 == rank 1 array */ + if (res.Modifiers == null) + res.Modifiers = new List (); + if (bounded) + res.Modifiers.Add (-2); + res.Modifiers.Add (rank); + } else { + // Generic args + if (rank > 0 || isptr) + return null; + isptr = false; + res.TypeArguments = new List (); + while (pos < name.Length) { + while (pos < name.Length && name [pos] == ' ') + pos ++; + bool fqname = false; + if (pos < name.Length && name [pos] == '[') { + pos ++; + fqname = true; + } + + var arg = ParseName (name, true, pos, out pos); + if (arg == null) + return null; + res.TypeArguments.Add (arg); + + /*MS is lenient on [] delimited parameters that aren't fqn - and F# uses them.*/ + if (fqname && pos < name.Length && name [pos] != ']') { + if (name [pos] != ',') + return null; + pos ++; + int aname_start = pos; + while (pos < name.Length && name [pos] != ']') + pos ++; + if (pos == name.Length) + return null; + while (Char.IsWhiteSpace (name [aname_start])) + aname_start ++; + if (aname_start == pos) + return null; + arg.AssemblyName = name.Substring (aname_start, pos - aname_start); + pos ++; + } else if (fqname && pos < name.Length && name [pos] == ']') { + pos ++; + } + if (pos < name.Length && name [pos] == ']') { + pos ++; + break; + } else if (pos == name.Length) + return null; + pos ++; + } + } + break; + case ']': + if (recursed) { + end = true; + break; + } + return null; + case ',': + if (recursed) { + end = true; + break; + } + pos ++; + while (pos < name.Length && Char.IsWhiteSpace (name [pos])) + pos ++; + if (pos == name.Length) + return null; + res.AssemblyName = name.Substring (pos); + end = true; + break; + default: + return null; + } + if (end) + break; + } + + end_pos = pos; + return res; + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/TypedReference.cs b/mcs/class/System.Private.CoreLib/System/TypedReference.cs new file mode 100644 index 0000000000..828d397231 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/TypedReference.cs @@ -0,0 +1,104 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace System +{ + [CLSCompliantAttribute (false)] + public ref struct TypedReference + { + #region sync with object-internals.h + RuntimeTypeHandle type; + IntPtr Value; + IntPtr Type; + #endregion + + [CLSCompliant (false)] + public static TypedReference MakeTypedReference (object target, FieldInfo[] flds) + { + if (target == null) + throw new ArgumentNullException (nameof (target)); + if (flds == null) + throw new ArgumentNullException (nameof (flds)); + if (flds.Length == 0) + throw new ArgumentException (SR.Arg_ArrayZeroError, nameof (flds)); + + var fields = new IntPtr [flds.Length]; + var targetType = (RuntimeType)target.GetType (); + for (int i = 0; i < flds.Length; i++) { + var field = flds [i] as RuntimeFieldInfo; + if (field == null) + throw new ArgumentException (SR.Argument_MustBeRuntimeFieldInfo); + if (field.IsStatic) + throw new ArgumentException (SR.Argument_TypedReferenceInvalidField); + + if (targetType != field.GetDeclaringTypeInternal () && !targetType.IsSubclassOf (field.GetDeclaringTypeInternal ())) + throw new MissingMemberException (SR.MissingMemberTypeRef); + + var fieldType = (RuntimeType)field.FieldType; + if (fieldType.IsPrimitive) + throw new ArgumentException (SR.Arg_TypeRefPrimitve); + if (i < (flds.Length - 1) && !fieldType.IsValueType) + throw new MissingMemberException (SR.MissingMemberNestErr); + + fields[i] = field.FieldHandle.Value; + targetType = fieldType; + } + + var result = new TypedReference (); + + unsafe { + InternalMakeTypedReference (&result, target, fields, targetType); + } + return result; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + unsafe static extern void InternalMakeTypedReference (void* result, Object target, IntPtr[] flds, RuntimeType lastFieldType); + + public override int GetHashCode () + { + if (Type == IntPtr.Zero) + return 0; + else + return __reftype (this).GetHashCode (); + } + + public override bool Equals (object? o) + { + throw new NotSupportedException (SR.NotSupported_NYI); + } + + [CLSCompliant (false)] + public unsafe static object ToObject (TypedReference value) + { + return InternalToObject (&value); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + unsafe extern static object InternalToObject (void * value); + + internal bool IsNull { + get { + return Value == IntPtr.Zero && Type == IntPtr.Zero; + } + } + + [CLSCompliant (false)] + public static Type GetTargetType (TypedReference value) + { + return __reftype (value); + } + + [CLSCompliant (false)] + public static RuntimeTypeHandle TargetTypeToken (TypedReference value) + { + return __reftype (value).TypeHandle; + } + + [CLSCompliant (false)] + public unsafe static void SetTypedReference (TypedReference target, Object value) + { + throw new NotImplementedException (); + } + } +} diff --git a/mcs/class/System.Private.CoreLib/System/ValueType.cs b/mcs/class/System.Private.CoreLib/System/ValueType.cs new file mode 100644 index 0000000000..7684da4a3f --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/ValueType.cs @@ -0,0 +1,73 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace System +{ + [Serializable] + [System.Runtime.CompilerServices.TypeForwardedFrom ("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] + public abstract class ValueType + { + // This is also used by RuntimeHelpers + internal static bool DefaultEquals (object o1, object o2) + { + RuntimeType o1_type = (RuntimeType) o1.GetType (); + RuntimeType o2_type = (RuntimeType) o2.GetType (); + + if (o1_type != o2_type) + return false; + + object[] fields; + bool res = InternalEquals (o1, o2, out fields); + if (fields == null) + return res; + + for (int i = 0; i < fields.Length; i += 2) { + object meVal = fields [i]; + object youVal = fields [i + 1]; + if (meVal == null) { + if (youVal == null) + continue; + + return false; + } + + if (!meVal.Equals (youVal)) + return false; + } + + return true; + } + + public override bool Equals (object? obj) + { + if (obj == null) + return false; + + return DefaultEquals (this, obj); + } + + public override int GetHashCode () + { + int result = InternalGetHashCode (this, out var fields); + + if (fields != null) + for (int i = 0; i < fields.Length; ++i) + if (fields [i] != null) + result ^= fields [i].GetHashCode (); + + return result; + } + + public override string ToString () + { + return GetType ().ToString (); + } + + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static int InternalGetHashCode (object o, out object[]? fields); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static bool InternalEquals (object o1, object o2, out object[] fields); + } +} diff --git a/mcs/class/System.Private.CoreLib/System/WeakReference.T.cs b/mcs/class/System.Private.CoreLib/System/WeakReference.T.cs new file mode 100644 index 0000000000..23d1f3bdbb --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/WeakReference.T.cs @@ -0,0 +1,39 @@ +using System.Runtime.InteropServices; + +namespace System +{ + partial class WeakReference + { + GCHandle handle; + bool trackResurrection; + + T Target { + get { + GCHandle h = handle; + return h.IsAllocated ? (T) h.Target : null; + } + } + + ~WeakReference () + { + handle.Free (); + } + + void Create (T target, bool trackResurrection) + { + if (trackResurrection) { + trackResurrection = true; + handle = GCHandle.Alloc (target, GCHandleType.WeakTrackResurrection); + } else { + handle = GCHandle.Alloc (target, GCHandleType.Weak); + } + } + + public void SetTarget (T target) + { + handle.Target = target; + } + + bool IsTrackResurrection () => trackResurrection; + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/WeakReference.cs b/mcs/class/System.Private.CoreLib/System/WeakReference.cs new file mode 100644 index 0000000000..51b6a430ad --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/WeakReference.cs @@ -0,0 +1,44 @@ +using System.Runtime.InteropServices; + +namespace System +{ + partial class WeakReference + { + bool trackResurrection; + GCHandle handle; + + public virtual bool IsAlive { + get { + return Target != null; + } + } + + public virtual object Target { + get { + if (!handle.IsAllocated) + return null; + return handle.Target; + } + set { + handle.Target = value; + } + } + + ~WeakReference () + { + handle.Free (); + } + + void Create (object target, bool trackResurrection) + { + if (trackResurrection) { + this.trackResurrection = true; + handle = GCHandle.Alloc (target, GCHandleType.WeakTrackResurrection); + } else { + handle = GCHandle.Alloc (target, GCHandleType.Weak); + } + } + + bool IsTrackResurrection () => trackResurrection; + } +} \ No newline at end of file diff --git a/mcs/class/System.Private.CoreLib/System/__ComObject.cs b/mcs/class/System.Private.CoreLib/System/__ComObject.cs new file mode 100644 index 0000000000..6aea83f109 --- /dev/null +++ b/mcs/class/System.Private.CoreLib/System/__ComObject.cs @@ -0,0 +1,10 @@ +namespace System +{ + internal class __ComObject + { + __ComObject () + { + throw new NotSupportedException (); + } + } +} diff --git a/mcs/class/System.Security/ReferenceSources/DataProtector.cs b/mcs/class/System.Security/ReferenceSources/DataProtector.cs new file mode 100644 index 0000000000..5958b0b207 --- /dev/null +++ b/mcs/class/System.Security/ReferenceSources/DataProtector.cs @@ -0,0 +1,224 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using Crypto = System.Security.Cryptography.Translation; + +namespace System.Security.Cryptography +{ + // Data protectors should be derived from this class + public abstract class DataProtector + { + private string m_applicationName; + private string m_primaryPurpose; + private IEnumerable m_specificPurposes; + + private volatile byte[] m_hashedPurpose; + + // Required Constructor for DataProtector + protected DataProtector(string applicationName, + string primaryPurpose, + string[] specificPurposes) + { + // We require that applicationName, primaryPurpose, and specificPurpose elements to be provided and not whitespace + if (String.IsNullOrWhiteSpace(applicationName)) + throw new ArgumentException(Crypto.SR.Cryptography_DataProtector_InvalidAppNameOrPurpose, nameof (applicationName)); + if (String.IsNullOrWhiteSpace(primaryPurpose)) + throw new ArgumentException(Crypto.SR.Cryptography_DataProtector_InvalidAppNameOrPurpose, nameof (primaryPurpose)); + + // Check each of the specific purposes if they were passed + if (specificPurposes != null) + { + foreach (string purpose in specificPurposes) + { + if (String.IsNullOrWhiteSpace(purpose)) + { + throw new ArgumentException(Crypto.SR.Cryptography_DataProtector_InvalidAppNameOrPurpose, nameof (specificPurposes)); + } + } + } + + m_applicationName = applicationName; + m_primaryPurpose = primaryPurpose; + + List specificPurposesList = new List(); + if (specificPurposes != null) + { + specificPurposesList.AddRange(specificPurposes); + } + m_specificPurposes = specificPurposesList; + } + + protected string ApplicationName + { + get { return m_applicationName; } + } + + // We will be safe and assume that derived classes want to have the hash pre-pended to the plain text + // before encryption, and checked and verified during decryption. If a derived class wants to use + // HashedPurpose on its own (e.g. as OptionalEntropy to DPAPI or for some sort of key derivation), this + // property can be overridden and set to return false. We will then just pass Protect/Unprotect directly + // through to ProviderProtect/ProviderUnprotect without altering the array + protected virtual bool PrependHashedPurposeToPlaintext + { + get { return true; } + } + + // A hash of the full purpose passed to the constructor or factory + protected virtual byte[] GetHashedPurpose() + { + if (m_hashedPurpose == null) + { + // Compute hash of the full purpose. The full purpose is a concatination of all the + // parts - applicationName, primaryPurpose,and specificPurposes[]. We prefix each part with + // the length so we know the process is reversible + using (HashAlgorithm sha256 = HashAlgorithm.Create("System.Security.Cryptography.Sha256Cng")) + { + using (BinaryWriter stream = new BinaryWriter(new CryptoStream(new MemoryStream(), sha256, CryptoStreamMode.Write), new UTF8Encoding(false, true))) + { + // Add applicationName to the hash + stream.Write(ApplicationName); + + // Add primaryPurpose to the hash + stream.Write(PrimaryPurpose); + + // If they exist, add each specificPurposes element to the hash + foreach (string purpose in SpecificPurposes) + { + stream.Write(purpose); + } + } + + // Now that the CryptoStream is closed, sha256 should have the computed hash + m_hashedPurpose = sha256.Hash; + } + } + + return m_hashedPurpose; + } + + // Allow callers to directly request if an Update is required + // (e.g. the key used in encryptedData blob is out of date) + public abstract bool IsReprotectRequired(byte[] encryptedData); + + protected string PrimaryPurpose + { + get { return m_primaryPurpose; } + } + + protected IEnumerable SpecificPurposes + { + get { return m_specificPurposes; } + } + + // Static factory method to create a DataProtector given a type name, a purpose, and a dictionary of parameters + public static DataProtector Create(string providerClass, + string applicationName, + string primaryPurpose, + params string[] specificPurposes) + { + // Make sure providerClass is not null - Other parameters checked in constructor + if (null == providerClass) + throw new ArgumentNullException("providerClass"); + + // Create a DataProtector based on this type using CryptoConfig + return (DataProtector)CryptoConfig.CreateFromName(providerClass, applicationName, primaryPurpose, specificPurposes); + } + + // Methods for protect/unprotect + public byte[] Protect(byte[] userData) + { + // Make sure we were passed some data - empty array OK + if (userData == null) + throw new ArgumentNullException("userData"); + + // See if the derived class has set PrependHashedPurposeToPlainText to true. + // If so, we have to pre-pend the hash of the purpose to the plain text before encrypting + if (PrependHashedPurposeToPlaintext) + { + byte[] hashedPurpose = GetHashedPurpose(); + + // Allocate enough space for userData and HashedPurpose + byte[] userDataWithHashedPurpose = new byte[userData.Length + hashedPurpose.Length]; + + // Copy HashedPurpose to the start of the new array + Array.Copy(hashedPurpose, 0, userDataWithHashedPurpose, 0, hashedPurpose.Length); + + // Copy original user data after HashedPurpose + Array.Copy(userData, 0, userDataWithHashedPurpose, hashedPurpose.Length, userData.Length); + + // Swap new array with original user data + userData = userDataWithHashedPurpose; + } + return ProviderProtect(userData); + } + + // Derived classes implement these methods + protected abstract byte[] ProviderProtect(byte[] userData); + protected abstract byte[] ProviderUnprotect(byte[] encryptedData); + + // For security reasons, we don't want the optimizer to introduce a timing attack against + // the scenario where we are checking the HashedPurpose. Whenever we are making decisions + // based on the plainText bytes, make sure not to bail out early - Doing so will expose + // information about what the plaintext bytes were. + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + public byte[] Unprotect(byte[] encryptedData) + { + // Make sure we were given some encrypted data + if (encryptedData == null) + throw new ArgumentNullException("encryptedData"); + + // See if the derived class has set PrependHashedPurposeToPlaintext to true. + // If so, we have to verify that the first bytes of the plain text are the HashedPurpose + // Then, return the remaining bytes as the original data. + if (PrependHashedPurposeToPlaintext) + { + // Get the plainText that includes the hash of the purpose + byte[] plainTextWithHashedPurpose = ProviderUnprotect(encryptedData); + byte[] hashedPurpose = GetHashedPurpose(); + + //////////////////////////////////////////////////////////////////////////////////////// + // In this code block, we don't want any timing differences between success and failure + // Don't touch this code block without crypto board review + { + // If the length of the decrypted text is less than the HashPurpose, we know something + // is wrong - However, we don't want to expose this to the caller via a timing difference + // detectable when verifying the HashPurpose. As a result, we'll still iterate through + // the 'for' loop exactly HashPurpose.Length times. + bool hashedPurposeOK = plainTextWithHashedPurpose.Length >= hashedPurpose.Length; + for (int i = 0; i < hashedPurpose.Length; i++) + { + // As a trick to handle the case where the plain text was less than the length + // of the hash, we modulo it with the lenght of the array - This prevents exceptions + // while preserving the number of iterations of this loop + if (hashedPurpose[i] != plainTextWithHashedPurpose[i % plainTextWithHashedPurpose.Length]) + { + hashedPurposeOK = false; + } + } + + if (!hashedPurposeOK) + { + throw new CryptographicException(Crypto.SR.Cryptography_DataProtector_InvalidPurpose); + } + } + + // Now we've verified that the expected hash was at the start of the plain text. The original + // plain text specified by the user appears after these bytes. Create a new array and copy + // what the caller is expecting into this array + byte[] plainText = new byte[plainTextWithHashedPurpose.Length - hashedPurpose.Length]; + Array.Copy(plainTextWithHashedPurpose, hashedPurpose.Length, plainText, 0, plainText.Length); + + return plainText; + } + else + { + return ProviderUnprotect(encryptedData); + } + } + } +} diff --git a/mcs/class/System.Security/System.Security.dll.sources b/mcs/class/System.Security/System.Security.dll.sources index 720adf0684..dd538f2d60 100644 --- a/mcs/class/System.Security/System.Security.dll.sources +++ b/mcs/class/System.Security/System.Security.dll.sources @@ -1,6 +1,7 @@ #include common_System.Security.dll.sources Mono.Security.Cryptography/ManagedProtection.cs +ReferenceSources/DataProtector.cs System.Security.Cryptography/MemoryProtectionScope.cs System.Security.Cryptography/ProtectedMemory.cs System.Security.Cryptography.Pkcs/KeyAgreeKeyChoice.cs diff --git a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/KeyInfoRetrievalMethodTest.cs b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/KeyInfoRetrievalMethodTest.cs index 6226486f2f..23f501af22 100644 --- a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/KeyInfoRetrievalMethodTest.cs +++ b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/KeyInfoRetrievalMethodTest.cs @@ -31,7 +31,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { [Test] public void TestNewKeyNode () { - string uri = "http://www.go-mono.com/"; + string uri = "http://www.example.com/"; KeyInfoRetrievalMethod uri1 = new KeyInfoRetrievalMethod (); uri1.Uri = uri; XmlElement xel = uri1.GetXml (); @@ -46,7 +46,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { [Test] public void TestImportKeyNode () { - string value = ""; + string value = ""; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); @@ -58,7 +58,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { Assert.AreEqual (value, s, "Xml"); // verify that property is parsed correctly - Assert.AreEqual ("http://www.go-mono.com/", uri1.Uri, "Uri"); + Assert.AreEqual ("http://www.example.com/", uri1.Uri, "Uri"); } [Test] diff --git a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/SignedInfoTest.cs b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/SignedInfoTest.cs index 604735dad7..fd4eea595b 100644 --- a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/SignedInfoTest.cs +++ b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/SignedInfoTest.cs @@ -51,8 +51,8 @@ namespace MonoTests.System.Security.Cryptography.Xml { [Test] public void Properties () { - info.CanonicalizationMethod = "http://www.go-mono.com/"; - Assert.AreEqual ("http://www.go-mono.com/", info.CanonicalizationMethod, "CanonicalizationMethod"); + info.CanonicalizationMethod = "http://www.example.com/"; + Assert.AreEqual ("http://www.example.com/", info.CanonicalizationMethod, "CanonicalizationMethod"); info.Id = "Mono::"; Assert.AreEqual ("Mono::", info.Id, "Id"); } @@ -61,7 +61,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { public void References () { Reference r1 = new Reference (); - r1.Uri = "http://www.go-mono.com/"; + r1.Uri = "http://www.example.com/"; r1.AddTransform (new XmlDsigBase64Transform ()); info.AddReference (r1); Assert.AreEqual (1, info.References.Count, "References.Count 1"); diff --git a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigC14NTransformTest.cs b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigC14NTransformTest.cs index 0e660e7506..8e30c3861b 100644 --- a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigC14NTransformTest.cs +++ b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigC14NTransformTest.cs @@ -129,15 +129,15 @@ namespace MonoTests.System.Security.Cryptography.Xml { return sb.ToString (); } - static string xml = " \r\n text & "; + static string xml = " \r\n text & "; // BAD for XmlDocument input (framework 1.0 result) - static string c14xml1 = " \r\n \r text & "; + static string c14xml1 = " \r\n \r text & "; // GOOD for Stream input - static string c14xml2 = " \n text & "; + static string c14xml2 = " \n text & "; // GOOD for XmlDocument input. The difference is because once // xml string is loaded to XmlDocument, there is no difference // between \r and , so every \r must be handled as . - static string c14xml3 = " \n text & "; + static string c14xml3 = " \n text & "; private XmlDocument GetDoc () { @@ -166,7 +166,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { transform.LoadInput (doc.ChildNodes); Stream s = (Stream) transform.GetOutput (); string output = Stream2String (s); - Assert.AreEqual ("", output, "XmlChildNodes"); + Assert.AreEqual ("", output, "XmlChildNodes"); } [Test] @@ -179,7 +179,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { transform.LoadInput (doc.SelectNodes ("//*")); Stream s = (Stream) transform.GetOutput (); string output = Stream2String (s); - string expected = ""; + string expected = ""; Assert.AreEqual (expected, output, "XmlChildNodes"); } diff --git a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigExcC14NTransformTest.cs b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigExcC14NTransformTest.cs index 25db0267ad..6b3c597428 100644 --- a/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigExcC14NTransformTest.cs +++ b/mcs/class/System.Security/Test/System.Security.Cryptography.Xml/XmlDsigExcC14NTransformTest.cs @@ -223,15 +223,15 @@ namespace MonoTests.System.Security.Cryptography.Xml { return sb.ToString (); } - static string xml = " \r\n text & "; + static string xml = " \r\n text & "; // BAD for XmlDocument input (framework 1.0 result) - static string c14xml1 = " \r\n \r text & "; + static string c14xml1 = " \r\n \r text & "; // GOOD for Stream input - static string c14xml2 = " \n text & "; + static string c14xml2 = " \n text & "; // GOOD for XmlDocument input. The difference is because once // xml string is loaded to XmlDocument, there is no difference // between \r and , so every \r must be handled as . - static string c14xml3 = " \n text & "; + static string c14xml3 = " \n text & "; private XmlDocument GetDoc () { @@ -260,7 +260,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { transform.LoadInput (doc.ChildNodes); Stream s = (Stream) transform.GetOutput (); string output = Stream2String (s); - Assert.AreEqual ("", output, "XmlChildNodes"); + Assert.AreEqual ("", output, "XmlChildNodes"); } [Test] @@ -273,7 +273,7 @@ namespace MonoTests.System.Security.Cryptography.Xml { transform.LoadInput (doc.SelectNodes ("//*")); Stream s = (Stream) transform.GetOutput (); string output = Stream2String (s); - string expected = ""; + string expected = ""; Assert.AreEqual (expected, output, "XmlChildNodes"); } diff --git a/mcs/class/System.Security/common_System.Security.dll.sources b/mcs/class/System.Security/common_System.Security.dll.sources index 0f2d025187..bc12f3f931 100644 --- a/mcs/class/System.Security/common_System.Security.dll.sources +++ b/mcs/class/System.Security/common_System.Security.dll.sources @@ -1,4 +1,5 @@ Assembly/AssemblyInfo.cs +corefx/SR.cs # System.Security.Cryptography ../../../external/corefx/src/System.Security.Cryptography.Pkcs/src/System/Security/Cryptography/CryptographicAttributeObject.cs diff --git a/mcs/class/System.Security/corefx/SR.cs b/mcs/class/System.Security/corefx/SR.cs new file mode 100644 index 0000000000..e08b0e67be --- /dev/null +++ b/mcs/class/System.Security/corefx/SR.cs @@ -0,0 +1,170 @@ +// +// This file was generated by resx2sr tool +// +namespace System.Security.Cryptography.Translation { + partial class SR { + public const string Cryptography_DataProtector_InvalidAppNameOrPurpose = "Invalid application name and/or purpose"; + public const string Cryptography_DataProtector_InvalidPurpose = "Invalid data protection purpose"; + public const string ArgumentOutOfRange_Index = "Index was out of range. Must be non-negative and less than the size of the collection."; + public const string Arg_EmptyOrNullString = "String cannot be empty or null."; + public const string Cryptography_Partial_Chain = "A certificate chain could not be built to a trusted root authority."; + public const string Cryptography_Xml_BadWrappedKeySize = "Bad wrapped key size."; + public const string Cryptography_Xml_CipherValueElementRequired = "A Cipher Data element should have either a CipherValue or a CipherReference element."; + public const string Cryptography_Xml_CreateHashAlgorithmFailed = "Could not create hash algorithm object."; + public const string Cryptography_Xml_CreateTransformFailed = "Could not create the XML transformation identified by the URI {0}."; + public const string Cryptography_Xml_CreatedKeyFailed = "Failed to create signing key."; + public const string Cryptography_Xml_DigestMethodRequired = "A DigestMethod must be specified on a Reference prior to generating XML."; + public const string Cryptography_Xml_DigestValueRequired = "A Reference must contain a DigestValue."; + public const string Cryptography_Xml_EnvelopedSignatureRequiresContext = "An XmlDocument context is required for enveloped transforms."; + public const string Cryptography_Xml_InvalidElement = "Malformed element {0}."; + public const string Cryptography_Xml_InvalidEncryptionProperty = "Malformed encryption property element."; + public const string Cryptography_Xml_InvalidKeySize = "The key size should be a non negative integer."; + public const string Cryptography_Xml_InvalidReference = "Malformed reference element."; + public const string Cryptography_Xml_InvalidSignatureLength = "The length of the signature with a MAC should be less than the hash output length."; + public const string Cryptography_Xml_InvalidSignatureLength2 = "The length in bits of the signature with a MAC should be a multiple of 8."; + public const string Cryptography_Xml_InvalidX509IssuerSerialNumber = "X509 issuer serial number is invalid."; + public const string Cryptography_Xml_KeyInfoRequired = "A KeyInfo element is required to check the signature."; + public const string Cryptography_Xml_KW_BadKeySize = "The length of the encrypted data in Key Wrap is either 32, 40 or 48 bytes."; + public const string Cryptography_Xml_LoadKeyFailed = "Signing key is not loaded."; + public const string Cryptography_Xml_MissingAlgorithm = "Symmetric algorithm is not specified."; + public const string Cryptography_Xml_MissingCipherData = "Cipher data is not specified."; + public const string Cryptography_Xml_MissingDecryptionKey = "Unable to retrieve the decryption key."; + public const string Cryptography_Xml_MissingEncryptionKey = "Unable to retrieve the encryption key."; + public const string Cryptography_Xml_NotSupportedCryptographicTransform = "The specified cryptographic transform is not supported."; + public const string Cryptography_Xml_ReferenceElementRequired = "At least one Reference element is required."; + public const string Cryptography_Xml_ReferenceTypeRequired = "The Reference type must be set in an EncryptedReference object."; + public const string Cryptography_Xml_SelfReferenceRequiresContext = "An XmlDocument context is required to resolve the Reference Uri {0}."; + public const string Cryptography_Xml_SignatureDescriptionNotCreated = "SignatureDescription could not be created for the signature algorithm supplied."; + public const string Cryptography_Xml_SignatureMethodKeyMismatch = "The key does not fit the SignatureMethod."; + public const string Cryptography_Xml_SignatureMethodRequired = "A signature method is required."; + public const string Cryptography_Xml_SignatureValueRequired = "Signature requires a SignatureValue."; + public const string Cryptography_Xml_SignedInfoRequired = "Signature requires a SignedInfo."; + public const string Cryptography_Xml_TransformIncorrectInputType = "The input type was invalid for this transform."; + public const string Cryptography_Xml_IncorrectObjectType = "Type of input object is invalid."; + public const string Cryptography_Xml_UnknownTransform = "Unknown transform has been encountered."; + public const string Cryptography_Xml_UriNotResolved = "Unable to resolve Uri {0}."; + public const string Cryptography_Xml_UriNotSupported = " The specified Uri is not supported."; + public const string Cryptography_Xml_UriRequired = "A Uri attribute is required for a CipherReference element."; + public const string Cryptography_Xml_XrmlMissingContext = "Null Context property encountered."; + public const string Cryptography_Xml_XrmlMissingIRelDecryptor = "IRelDecryptor is required."; + public const string Cryptography_Xml_XrmlMissingIssuer = "Issuer node is required."; + public const string Cryptography_Xml_XrmlMissingLicence = "License node is required."; + public const string Cryptography_Xml_XrmlUnableToDecryptGrant = "Unable to decrypt grant content."; + public const string NotSupported_KeyAlgorithm = "The certificate key algorithm is not supported."; + public const string Log_ActualHashValue = "Actual hash value: {0}"; + public const string Log_BeginCanonicalization = "Beginning canonicalization using \"{0}\" ({1})."; + public const string Log_BeginSignatureComputation = "Beginning signature computation."; + public const string Log_BeginSignatureVerification = "Beginning signature verification."; + public const string Log_BuildX509Chain = "Building and verifying the X509 chain for certificate {0}."; + public const string Log_CanonicalizationSettings = "Canonicalization transform is using resolver {0} and base URI \"{1}\"."; + public const string Log_CanonicalizedOutput = "Output of canonicalization transform: {0}"; + public const string Log_CertificateChain = "Certificate chain:"; + public const string Log_CheckSignatureFormat = "Checking signature format using format validator \"[{0}] {1}.{2}\"."; + public const string Log_CheckSignedInfo = "Checking signature on SignedInfo with id \"{0}\"."; + public const string Log_FormatValidationSuccessful = "Signature format validation was successful."; + public const string Log_FormatValidationNotSuccessful = "Signature format validation failed."; + public const string Log_KeyUsages = "Found key usages \"{0}\" in extension {1} on certificate {2}."; + public const string Log_NoNamespacesPropagated = "No namespaces are being propagated."; + public const string Log_PropagatingNamespace = "Propagating namespace {0}=\"{1}\"."; + public const string Log_RawSignatureValue = "Raw signature: {0}"; + public const string Log_ReferenceHash = "Reference {0} hashed with \"{1}\" ({2}) has hash value {3}, expected hash value {4}."; + public const string Log_RevocationMode = "Revocation mode for chain building: {0}."; + public const string Log_RevocationFlag = "Revocation flag for chain building: {0}."; + public const string Log_SigningAsymmetric = "Calculating signature with key {0} using signature description {1}, hash algorithm {2}, and asymmetric signature formatter {3}."; + public const string Log_SigningHmac = "Calculating signature using keyed hash algorithm {0}."; + public const string Log_SigningReference = "Hashing reference {0}, Uri \"{1}\", Id \"{2}\", Type \"{3}\" with hash algorithm \"{4}\" ({5})."; + public const string Log_TransformedReferenceContents = "Transformed reference contents: {0}"; + public const string Log_UnsafeCanonicalizationMethod = "Canonicalization method \"{0}\" is not on the safe list. Safe canonicalization methods are: {1}."; + public const string Log_UrlTimeout = "URL retrieval timeout for chain building: {0}."; + public const string Log_VerificationFailed = "Verification failed checking {0}."; + public const string Log_VerificationFailed_References = "references"; + public const string Log_VerificationFailed_SignedInfo = "SignedInfo"; + public const string Log_VerificationFailed_X509Chain = "X509 chain verification"; + public const string Log_VerificationFailed_X509KeyUsage = "X509 key usage verification"; + public const string Log_VerificationFlag = "Verification flags for chain building: {0}."; + public const string Log_VerificationTime = "Verification time for chain building: {0}."; + public const string Log_VerificationWithKeySuccessful = "Verification with key {0} was successful."; + public const string Log_VerificationWithKeyNotSuccessful = "Verification with key {0} was not successful."; + public const string Log_VerifyReference = "Processing reference {0}, Uri \"{1}\", Id \"{2}\", Type \"{3}\"."; + public const string Log_VerifySignedInfoAsymmetric = "Verifying SignedInfo using key {0}, signature description {1}, hash algorithm {2}, and asymmetric signature deformatter {3}."; + public const string Log_VerifySignedInfoHmac = "Verifying SignedInfo using keyed hash algorithm {0}."; + public const string Log_X509ChainError = "Error building X509 chain: {0}: {1}."; + public const string Log_XmlContext = "Using context: {0}"; + public const string Log_SignedXmlRecursionLimit = "Signed xml recursion limit hit while trying to decrypt the key. Reference {0} hashed with \"{1}\" and ({2})."; + public const string Log_UnsafeTransformMethod = "Transform method \"{0}\" is not on the safe list. Safe transform methods are: {1}."; + public const string Arg_RankMultiDimNotSupported = "Only single dimensional arrays are supported for the requested action."; + public const string Argument_InvalidOffLen = "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."; + public const string Argument_InvalidOidValue = "The OID value was invalid."; + public const string Cryptography_Asn_EnumeratedValueRequiresNonFlagsEnum = "ASN.1 Enumerated values only apply to enum types without the [Flags] attribute."; + public const string Cryptography_Asn_NamedBitListRequiresFlagsEnum = "Named bit list operations require an enum with the [Flags] attribute."; + public const string Cryptography_Asn_NamedBitListValueTooBig = "The encoded named bit list value is larger than the value size of the '{0}' enum."; + public const string Cryptography_Asn_UniversalValueIsFixed = "Tags with TagClass Universal must have the appropriate TagValue value for the data type being read or written."; + public const string Cryptography_Asn_UnusedBitCountRange = "Unused bit count must be between 0 and 7, inclusive."; + public const string Cryptography_AsnSerializer_AmbiguousFieldType = "Field '{0}' of type '{1}' has ambiguous type '{2}', an attribute derived from AsnTypeAttribute is required."; + public const string Cryptography_AsnSerializer_Choice_AllowNullNonNullable = "[Choice].AllowNull=true is not valid because type '{0}' cannot have a null value."; + public const string Cryptography_AsnSerializer_Choice_ConflictingTagMapping = "The tag ({0} {1}) for field '{2}' on type '{3}' already is associated in this context with field '{4}' on type '{5}'."; + public const string Cryptography_AsnSerializer_Choice_DefaultValueDisallowed = "Field '{0}' on [Choice] type '{1}' has a default value, which is not permitted."; + public const string Cryptography_AsnSerializer_Choice_NoChoiceWasMade = "An instance of [Choice] type '{0}' has no non-null fields."; + public const string Cryptography_AsnSerializer_Choice_NonNullableField = "Field '{0}' on [Choice] type '{1}' can not be assigned a null value."; + public const string Cryptography_AsnSerializer_Choice_TooManyValues = "Fields '{0}' and '{1}' on type '{2}' are both non-null when only one value is permitted."; + public const string Cryptography_AsnSerializer_Choice_TypeCycle = "Field '{0}' on [Choice] type '{1}' has introduced a type chain cycle."; + public const string Cryptography_AsnSerializer_MultipleAsnTypeAttributes = "Field '{0}' on type '{1}' has multiple attributes deriving from '{2}' when at most one is permitted."; + public const string Cryptography_AsnSerializer_NoJaggedArrays = "Type '{0}' cannot be serialized or deserialized because it is an array of arrays."; + public const string Cryptography_AsnSerializer_NoMultiDimensionalArrays = "Type '{0}' cannot be serialized or deserialized because it is a multi-dimensional array."; + public const string Cryptography_AsnSerializer_NoOpenTypes = "Type '{0}' cannot be serialized or deserialized because it is not sealed or has unbound generic parameters."; + public const string Cryptography_AsnSerializer_Optional_NonNullableField = "Field '{0}' on type '{1}' is declared [OptionalValue], but it can not be assigned a null value."; + public const string Cryptography_AsnSerializer_PopulateFriendlyNameOnString = "Field '{0}' on type '{1}' has [ObjectIdentifier].PopulateFriendlyName set to true, which is not applicable to a string. Change the field to '{2}' or set PopulateFriendlyName to false."; + public const string Cryptography_AsnSerializer_SetValueException = "Unable to set field {0} on type {1}."; + public const string Cryptography_AsnSerializer_SpecificTagChoice = "Field '{0}' on type '{1}' has specified an implicit tag value via [ExpectedTag] for [Choice] type '{2}'. ExplicitTag must be true, or the [ExpectedTag] attribute removed."; + public const string Cryptography_AsnSerializer_UnexpectedTypeForAttribute = "Field '{0}' of type '{1}' has an effective type of '{2}' when one of ({3}) was expected."; + public const string Cryptography_AsnSerializer_UtcTimeTwoDigitYearMaxTooSmall = "Field '{0}' on type '{1}' has a [UtcTime] TwoDigitYearMax value ({2}) smaller than the minimum (99)."; + public const string Cryptography_AsnSerializer_UnhandledType = "Could not determine how to serialize or deserialize type '{0}'."; + public const string Cryptography_AsnWriter_EncodeUnbalancedStack = "Encode cannot be called while a Sequence or SetOf is still open."; + public const string Cryptography_AsnWriter_PopWrongTag = "Cannot pop the requested tag as it is not currently in progress."; + public const string Cryptography_BadHashValue = "The hash value is not correct."; + public const string Cryptography_BadSignature = "Invalid signature."; + public const string Cryptography_Cms_CannotDetermineSignatureAlgorithm = "Could not determine signature algorithm for the signer certificate."; + public const string Cryptography_Cms_IncompleteCertChain = "The certificate chain is incomplete, the self-signed root authority could not be determined."; + public const string Cryptography_Cms_Invalid_Originator_Identifier_Choice = "Invalid originator identifier choice {0} found in decoded CMS."; + public const string Cryptography_Cms_Invalid_Subject_Identifier_Type = "The subject identifier type {0} is not valid."; + public const string Cryptography_Cms_InvalidMessageType = "Invalid cryptographic message type."; + public const string Cryptography_Cms_InvalidSignerHashForSignatureAlg = "SignerInfo digest algorithm '{0}' is not valid for signature algorithm '{1}'."; + public const string Cryptography_Cms_Key_Agree_Date_Not_Available = "The Date property is not available for none KID key agree recipient."; + public const string Cryptography_Cms_MessageNotEncrypted = "The CMS message is not encrypted."; + public const string Cryptography_Cms_MessageNotSigned = "The CMS message is not signed."; + public const string Cryptography_Cms_MissingAuthenticatedAttribute = "The cryptographic message does not contain an expected authenticated attribute."; + public const string Cryptography_Cms_NoCounterCounterSigner = "Only one level of counter-signatures are supported on this platform."; + public const string Cryptography_Cms_NoRecipients = "The recipients collection is empty. You must specify at least one recipient. This platform does not implement the certificate picker UI."; + public const string Cryptography_Cms_NoSignerCert = "No signer certificate was provided. This platform does not implement the certificate picker UI."; + public const string Cryptography_Cms_NoSignerAtIndex = "The signed cryptographic message does not have a signer for the specified signer index."; + public const string Cryptography_Cms_RecipientNotFound = "The enveloped-data message does not contain the specified recipient."; + public const string Cryptography_Cms_RecipientType_NotSupported = "The recipient type '{0}' is not supported for encryption or decryption on this platform."; + public const string Cryptography_Cms_Sign_Empty_Content = "Cannot create CMS signature for empty content."; + public const string Cryptography_Cms_SignerNotFound = "Cannot find the original signer."; + public const string Cryptography_Cms_Signing_RequiresPrivateKey = "A certificate with a private key is required."; + public const string Cryptography_Cms_TrustFailure = "Certificate trust could not be established. The first reported error is: {0}"; + public const string Cryptography_Cms_UnknownAlgorithm = "Unknown algorithm '{0}'."; + public const string Cryptography_Cms_UnknownKeySpec = "Unable to determine the type of key handle from this keyspec {0}."; + public const string Cryptography_Cms_WrongKeyUsage = "The certificate is not valid for the requested usage."; + public const string Cryptography_Pkcs_InvalidSignatureParameters = "Invalid signature paramters."; + public const string Cryptography_Pkcs9_AttributeMismatch = "The parameter should be a PKCS 9 attribute."; + public const string Cryptography_Pkcs9_MultipleSigningTimeNotAllowed = "Cannot add multiple PKCS 9 signing time attributes."; + public const string Cryptography_Pkcs_PssParametersMissing = "PSS parameters were not present."; + public const string Cryptography_Pkcs_PssParametersHashMismatch = "This platform requires that the PSS hash algorithm ({0}) match the data digest algorithm ({1})."; + public const string Cryptography_Pkcs_PssParametersMgfHashMismatch = "This platform does not support the MGF hash algorithm ({0}) being different from the signature hash algorithm ({1})."; + public const string Cryptography_Pkcs_PssParametersMgfNotSupported = "Mask generation function '{0}' is not supported by this platform."; + public const string Cryptography_Pkcs_PssParametersSaltMismatch = "PSS salt size {0} is not supported by this platform with hash algorithm {1}."; + public const string Cryptography_TimestampReq_BadNonce = "The response from the timestamping server did not match the request nonce."; + public const string Cryptography_TimestampReq_BadResponse = "The response from the timestamping server was not understood."; + public const string Cryptography_TimestampReq_Failure = "The timestamping server did not grant the request. The request status is '{0}' with failure info '{1}'."; + public const string Cryptography_TimestampReq_NoCertFound = "The timestamping request required the TSA certificate in the response, but it was not found."; + public const string Cryptography_TimestampReq_UnexpectedCertFound = "The timestamping request required the TSA certificate not be included in the response, but certificates were present."; + public const string InvalidOperation_DuplicateItemNotAllowed = "Duplicate items are not allowed in the collection."; + public const string InvalidOperation_WrongOidInAsnCollection = "AsnEncodedData element in the collection has wrong Oid value: expected = '{0}', actual = '{1}'."; + public const string PlatformNotSupported_CryptographyPkcs = "System.Security.Cryptography.Pkcs is only supported on Windows platforms."; + public const string Cryptography_Der_Invalid_Encoding = "ASN1 corrupted data."; + public const string Cryptography_Invalid_IA5String = "The string contains a character not in the 7 bit ASCII character set."; + public const string Cryptography_UnknownHashAlgorithm = "'{0}' is not a known hash algorithm."; + public const string Cryptography_WriteEncodedValue_OneValueAtATime = "The input to WriteEncodedValue must represent a single encoded value with no trailing data."; + } +} \ No newline at end of file diff --git a/mcs/class/System.Security/testing_aot_full_System.Security_test.dll.exclude.sources b/mcs/class/System.Security/testing_aot_full_System.Security_test.dll.exclude.sources new file mode 100644 index 0000000000..e2b06dcf13 --- /dev/null +++ b/mcs/class/System.Security/testing_aot_full_System.Security_test.dll.exclude.sources @@ -0,0 +1 @@ +System.Security.Permissions/DataProtectionPermissionAttributeTest.cs diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10FeedFormatterTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10FeedFormatterTest.cs index 1cd915cea6..2246f141af 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10FeedFormatterTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10FeedFormatterTest.cs @@ -159,19 +159,19 @@ namespace MonoTests.System.ServiceModel.Syndication public void WriteTo () { SyndicationFeed feed = new SyndicationFeed (); - feed.BaseUri = new Uri ("http://mono-project.com"); + feed.BaseUri = new Uri ("http://example.com"); feed.Copyright = new TextSyndicationContent ("No rights reserved"); feed.Description = new TextSyndicationContent ("A sample feed for unit testing"); feed.Generator = "mono test generator"; // .NET bug: it ignores this value. feed.Id = "urn:myid"; - feed.ImageUrl = new Uri ("http://mono-project.com/images/mono.png"); + feed.ImageUrl = new Uri ("http://example.com/images/mono.png"); feed.LastUpdatedTime = new DateTimeOffset (DateTime.SpecifyKind (new DateTime (2008, 1, 1), DateTimeKind.Utc)); StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) new Atom10FeedFormatter (feed).WriteTo (w); - Assert.AreEqual ("A sample feed for unit testingXXXNo rights reserved2008-01-01T00:00:00Zhttp://mono-project.com/images/mono.pngmono test generator", DummyId (sw.ToString ())); + Assert.AreEqual ("A sample feed for unit testingXXXNo rights reserved2008-01-01T00:00:00Zhttp://example.com/images/mono.pngmono test generator", DummyId (sw.ToString ())); } [Test] @@ -193,12 +193,12 @@ namespace MonoTests.System.ServiceModel.Syndication { // ... and it passes. SyndicationFeed feed = new SyndicationFeed (); - feed.Links.Add (new SyndicationLink (new Uri ("http://mono-project.com/Page1"), "alternate", "Page 1", "text/html", 0)); - feed.Links.Add (new SyndicationLink (new Uri ("http://mono-project.com/Page2"), "alternate", "Page 2", "text/html", 0)); + feed.Links.Add (new SyndicationLink (new Uri ("http://example.com/Page1"), "alternate", "Page 1", "text/html", 0)); + feed.Links.Add (new SyndicationLink (new Uri ("http://example.com/Page2"), "alternate", "Page 2", "text/html", 0)); StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) new Atom10FeedFormatter (feed).WriteTo (w); - Assert.AreEqual ("XXXXXX", DummyUpdated (DummyId (sw.ToString ()))); + Assert.AreEqual ("XXXXXX", DummyUpdated (DummyId (sw.ToString ()))); } XmlWriter CreateWriter (StringWriter sw) @@ -333,7 +333,7 @@ namespace MonoTests.System.ServiceModel.Syndication public void ReadFrom_Extension () { Atom10FeedFormatter f = new Atom10FeedFormatter (); - f.ReadFrom (CreateReader ("http://www.mono-project.com/icons/mono.png")); + f.ReadFrom (CreateReader ("http://www.example.com/icons/mono.png")); Assert.IsNotNull (f.Feed, "#1"); // 'icon' is treated as an extension ... Assert.AreEqual (1, f.Feed.ElementExtensions.Count, "#2"); @@ -360,9 +360,9 @@ namespace MonoTests.System.ServiceModel.Syndication public void ReadFrom_ImageUrl () { Atom10FeedFormatter f = new Atom10FeedFormatter (); - f.ReadFrom (CreateReader ("http://mono-project.com/images/mono.png")); + f.ReadFrom (CreateReader ("http://example.com/images/mono.png")); Assert.IsNotNull (f.Feed.ImageUrl, "#1"); - Assert.AreEqual ("http://mono-project.com/images/mono.png", f.Feed.ImageUrl.ToString (), "#2"); + Assert.AreEqual ("http://example.com/images/mono.png", f.Feed.ImageUrl.ToString (), "#2"); } [Test] diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10ItemFormatterTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10ItemFormatterTest.cs index 3930ec5b0b..088637cdb6 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10ItemFormatterTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Atom10ItemFormatterTest.cs @@ -159,7 +159,7 @@ namespace MonoTests.System.ServiceModel.Syndication public void WriteTo () { SyndicationItem item = new SyndicationItem (); - item.BaseUri = new Uri ("http://mono-project.com"); + item.BaseUri = new Uri ("http://example.com"); item.Copyright = new TextSyndicationContent ("No rights reserved"); item.Content = new XmlSyndicationContent (null, 5, (XmlObjectSerializer) null); // .NET bug: it ignores this value. @@ -172,7 +172,7 @@ namespace MonoTests.System.ServiceModel.Syndication StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) new Atom10ItemFormatter (item).WriteTo (w); - Assert.AreEqual ("XXXgreat text2000-01-01T00:00:00Z2008-01-01T00:00:00Z5No rights reserved", DummyId (sw.ToString ())); + Assert.AreEqual ("XXXgreat text2000-01-01T00:00:00Z2008-01-01T00:00:00Z5No rights reserved", DummyId (sw.ToString ())); } [Test] @@ -194,12 +194,12 @@ namespace MonoTests.System.ServiceModel.Syndication { // ... and it passes. SyndicationItem item = new SyndicationItem (); - item.Links.Add (new SyndicationLink (new Uri ("http://mono-project.com/Page1"), "alternate", "Page 1", "text/html", 0)); - item.Links.Add (new SyndicationLink (new Uri ("http://mono-project.com/Page2"), "alternate", "Page 2", "text/html", 0)); + item.Links.Add (new SyndicationLink (new Uri ("http://example.com/Page1"), "alternate", "Page 1", "text/html", 0)); + item.Links.Add (new SyndicationLink (new Uri ("http://example.com/Page2"), "alternate", "Page 2", "text/html", 0)); StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) new Atom10ItemFormatter (item).WriteTo (w); - Assert.AreEqual ("XXXXXX", DummyUpdated (DummyId (sw.ToString ()))); + Assert.AreEqual ("XXXXXX", DummyUpdated (DummyId (sw.ToString ()))); } XmlWriter CreateWriter (StringWriter sw) diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20FeedFormatterTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20FeedFormatterTest.cs index 6efdc398cc..6d8d13a670 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20FeedFormatterTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20FeedFormatterTest.cs @@ -142,17 +142,17 @@ namespace MonoTests.System.ServiceModel.Syndication public void WriteTo () { SyndicationFeed feed = new SyndicationFeed (); - feed.BaseUri = new Uri ("http://mono-project.com"); + feed.BaseUri = new Uri ("http://example.com"); feed.Copyright = new TextSyndicationContent ("No rights reserved"); feed.Generator = "mono test generator"; feed.Id = "urn:myid"; - feed.ImageUrl = new Uri ("http://mono-project.com/images/mono.png"); + feed.ImageUrl = new Uri ("http://example.com/images/mono.png"); feed.LastUpdatedTime = new DateTimeOffset (DateTime.SpecifyKind (new DateTime (2008, 1, 1), DateTimeKind.Utc)); StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) new Rss20FeedFormatter (feed).WriteTo (w); - Assert.AreEqual ("<description /><copyright>No rights reserved</copyright><lastBuildDate>Tue, 01 Jan 2008 00:00:00 Z</lastBuildDate><generator>mono test generator</generator><image><url>http://mono-project.com/images/mono.png</url><title /><link /></image><a10:id>urn:myid</a10:id></channel></rss>", sw.ToString ()); + Assert.AreEqual ("<rss xmlns:a10=\"http://www.w3.org/2005/Atom\" version=\"2.0\"><channel xml:base=\"http://example.com/\"><title /><description /><copyright>No rights reserved</copyright><lastBuildDate>Tue, 01 Jan 2008 00:00:00 Z</lastBuildDate><generator>mono test generator</generator><image><url>http://example.com/images/mono.png</url><title /><link /></image><a10:id>urn:myid</a10:id></channel></rss>", sw.ToString ()); } [Test] diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20ItemFormatterTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20ItemFormatterTest.cs index d0ea17ff6a..ca74f78ab2 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20ItemFormatterTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/Rss20ItemFormatterTest.cs @@ -141,7 +141,7 @@ namespace MonoTests.System.ServiceModel.Syndication public void WriteTo () { SyndicationItem item = new SyndicationItem (); - item.BaseUri = new Uri ("http://mono-project.com"); + item.BaseUri = new Uri ("http://example.com"); item.Copyright = new TextSyndicationContent ("No rights reserved"); item.Content = new XmlSyndicationContent (null, 5, (XmlObjectSerializer) null); item.Id = "urn:myid"; @@ -153,7 +153,7 @@ namespace MonoTests.System.ServiceModel.Syndication StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) new Rss20ItemFormatter (item).WriteTo (w); - Assert.AreEqual ("<item xml:base=\"http://mono-project.com/\"><guid isPermaLink=\"false\">urn:myid</guid><description /><source>source title</source><pubDate>Sat, 01 Jan 2000 00:00:00 Z</pubDate><updated xmlns=\"http://www.w3.org/2005/Atom\">2008-01-01T00:00:00Z</updated><rights type=\"text\" xmlns=\"http://www.w3.org/2005/Atom\">No rights reserved</rights><content type=\"text/xml\" xmlns=\"http://www.w3.org/2005/Atom\"><int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">5</int></content></item>", sw.ToString ()); + Assert.AreEqual ("<item xml:base=\"http://example.com/\"><guid isPermaLink=\"false\">urn:myid</guid><description /><source>source title</source><pubDate>Sat, 01 Jan 2000 00:00:00 Z</pubDate><updated xmlns=\"http://www.w3.org/2005/Atom\">2008-01-01T00:00:00Z</updated><rights type=\"text\" xmlns=\"http://www.w3.org/2005/Atom\">No rights reserved</rights><content type=\"text/xml\" xmlns=\"http://www.w3.org/2005/Atom\"><int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">5</int></content></item>", sw.ToString ()); } [Test] diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationItemTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationItemTest.cs index 2a6b6afe7c..1a8fc8e05e 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationItemTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationItemTest.cs @@ -77,10 +77,10 @@ namespace MonoTests.System.ServiceModel.Syndication { SyndicationItem item = new SyndicationItem (); Assert.AreEqual (0, item.Links.Count, "#1"); - item.AddPermalink (new Uri ("http://mono-project.com/index.rss.20071210")); + item.AddPermalink (new Uri ("http://example.com/index.rss.20071210")); Assert.AreEqual (1, item.Links.Count, "#2"); SyndicationLink link = item.Links [0]; - Assert.AreEqual ("http://mono-project.com/index.rss.20071210", link.Uri.ToString (), "#3"); + Assert.AreEqual ("http://example.com/index.rss.20071210", link.Uri.ToString (), "#3"); Assert.AreEqual ("alternate", link.RelationshipType, "#4"); } @@ -88,9 +88,9 @@ namespace MonoTests.System.ServiceModel.Syndication public void Clone () { SyndicationItem item = new SyndicationItem (); - item.AddPermalink (new Uri ("http://mono-project.com/index.rss.20071210")); + item.AddPermalink (new Uri ("http://example.com/index.rss.20071210")); item.Id = Guid.NewGuid ().ToString (); - item.BaseUri = new Uri ("http://mono-project.com"); + item.BaseUri = new Uri ("http://example.com"); item.Authors.Add (new SyndicationPerson ("atsushi@ximian.com")); item.SourceFeed = new SyndicationFeed (); item.SourceFeed.Items = new SyndicationItem [] {new SyndicationItem ()}; @@ -98,7 +98,7 @@ namespace MonoTests.System.ServiceModel.Syndication SyndicationItem clone = item.Clone (); Assert.AreEqual (1, clone.Links.Count, "#1"); Assert.AreEqual (item.Id, clone.Id, "#2"); // hmm ... - Assert.AreEqual ("http://mono-project.com/", clone.BaseUri.ToString (), "#3"); + Assert.AreEqual ("http://example.com/", clone.BaseUri.ToString (), "#3"); // LAMESPEC: .NET fails to clone it // Assert.IsFalse (Object.ReferenceEquals (item.BaseUri, clone.BaseUri), "#4"); // should not be just a shallow copy diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationLinkTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationLinkTest.cs index a983874aff..aa90e517ee 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationLinkTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/SyndicationLinkTest.cs @@ -75,12 +75,12 @@ namespace MonoTests.System.ServiceModel.Syndication Assert.IsNull (link.BaseUri, "#1"); // absolute - link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); + link = new SyndicationLink (new Uri ("http://example.com/index.rss")); Assert.IsNull (link.BaseUri, "#2"); // absolute #2 link = new SyndicationLink (); - link.Uri = new Uri ("http://mono-project.com/index.rss"); + link.Uri = new Uri ("http://example.com/index.rss"); Assert.IsNull (link.BaseUri, "#3"); } @@ -98,7 +98,7 @@ namespace MonoTests.System.ServiceModel.Syndication [Test] public void MediaType () { - SyndicationLink link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); + SyndicationLink link = new SyndicationLink (new Uri ("http://example.com/index.rss")); link.MediaType = "text/xml"; Assert.AreEqual ("text/xml", link.MediaType, "#1"); link.MediaType = null; @@ -109,7 +109,7 @@ namespace MonoTests.System.ServiceModel.Syndication [Test] public void RelationshipType () { - SyndicationLink link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); + SyndicationLink link = new SyndicationLink (new Uri ("http://example.com/index.rss")); link.RelationshipType = "alternate"; Assert.AreEqual ("alternate", link.RelationshipType, "#1"); link.RelationshipType = null; @@ -120,7 +120,7 @@ namespace MonoTests.System.ServiceModel.Syndication [Test] public void Length () { - SyndicationLink link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); + SyndicationLink link = new SyndicationLink (new Uri ("http://example.com/index.rss")); link.Length = 0; link.Length = long.MaxValue; } @@ -129,7 +129,7 @@ namespace MonoTests.System.ServiceModel.Syndication [ExpectedException (typeof (ArgumentOutOfRangeException))] public void NegativeLength () { - SyndicationLink link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); + SyndicationLink link = new SyndicationLink (new Uri ("http://example.com/index.rss")); link.Length = -1; } @@ -144,7 +144,7 @@ namespace MonoTests.System.ServiceModel.Syndication public void AttributeElementExtensions () { // The properties do not affect extension attributes. - SyndicationLink link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); + SyndicationLink link = new SyndicationLink (new Uri ("http://example.com/index.rss")); Assert.AreEqual (0, link.ElementExtensions.Count, "#0"); Assert.IsFalse (link.AttributeExtensions.ContainsKey (new QName ("mediaType")), "#3"); @@ -163,12 +163,12 @@ namespace MonoTests.System.ServiceModel.Syndication Assert.IsNull (link.GetAbsoluteUri (), "#2"); // Uri is absolute - link = new SyndicationLink (new Uri ("http://mono-project.com/index.rss")); - Assert.AreEqual ("http://mono-project.com/index.rss", link.GetAbsoluteUri ().ToString (), "#3"); + link = new SyndicationLink (new Uri ("http://example.com/index.rss")); + Assert.AreEqual ("http://example.com/index.rss", link.GetAbsoluteUri ().ToString (), "#3"); // only BaseUri - null result link = new SyndicationLink (); - link.BaseUri = new Uri ("http://mono-project.com/index.rss"); + link.BaseUri = new Uri ("http://example.com/index.rss"); Assert.IsNull (link.GetAbsoluteUri (), "#4"); } @@ -176,7 +176,7 @@ namespace MonoTests.System.ServiceModel.Syndication public void Clone () { SyndicationLink link = new SyndicationLink (null, null, "my RSS", "text/xml", 1); - link.BaseUri = new Uri ("http://mono-project.com/index.rss"); + link.BaseUri = new Uri ("http://example.com/index.rss"); SyndicationLink clone = link.Clone (); Assert.AreEqual (link.BaseUri, clone.BaseUri, "#1"); Assert.AreEqual ("my RSS", clone.Title, "#2"); diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/UrlSyndicationContentTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/UrlSyndicationContentTest.cs index cd33607235..98931c0296 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/UrlSyndicationContentTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Syndication/UrlSyndicationContentTest.cs @@ -54,7 +54,7 @@ namespace MonoTests.System.ServiceModel.Syndication [Test] public void Constructor () { - Uri uri = new Uri ("http://mono-project.com"); + Uri uri = new Uri ("http://example.com"); UrlSyndicationContent t = new UrlSyndicationContent (uri, null); t = new UrlSyndicationContent (uri, "text/plain"); Assert.AreEqual (uri, t.Url, "#1"); @@ -64,7 +64,7 @@ namespace MonoTests.System.ServiceModel.Syndication [Test] public void Clone () { - Uri uri = new Uri ("http://mono-project.com"); + Uri uri = new Uri ("http://example.com"); UrlSyndicationContent t = new UrlSyndicationContent (uri, "text/plain"); t = t.Clone () as UrlSyndicationContent; Assert.AreEqual (uri, t.Url, "#1"); @@ -75,18 +75,18 @@ namespace MonoTests.System.ServiceModel.Syndication [Category("NotWorking")] public void WriteTo () { - Uri uri = new Uri ("http://mono-project.com/"); + Uri uri = new Uri ("http://example.com/"); UrlSyndicationContent t = new UrlSyndicationContent (uri, null); StringWriter sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) t.WriteTo (w, "root", String.Empty); - Assert.AreEqual ("<root type=\"\" src=\"http://mono-project.com/\" />", sw.ToString ()); + Assert.AreEqual ("<root type=\"\" src=\"http://example.com/\" />", sw.ToString ()); t = new UrlSyndicationContent (uri, "application/xml+svg"); sw = new StringWriter (); using (XmlWriter w = CreateWriter (sw)) t.WriteTo (w, "root", String.Empty); - Assert.AreEqual ("<root type=\"application/xml+svg\" src=\"http://mono-project.com/\" />", sw.ToString ()); + Assert.AreEqual ("<root type=\"application/xml+svg\" src=\"http://example.com/\" />", sw.ToString ()); } XmlWriter CreateWriter (StringWriter sw) diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebOperationContextTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebOperationContextTest.cs index 62e7134c75..25af31c764 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebOperationContextTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebOperationContextTest.cs @@ -48,7 +48,7 @@ namespace MonoTests.System.ServiceModel.Web public class WebOperationContextTest { // MonoTouch/FullAOT does not support dynamic proxy code generation. -#if !MONOTOUCH && !FULL_AOT_RUNTIME +#if !DISABLE_REMOTING && !FULL_AOT_RUNTIME [Test] #endif public void Current () diff --git a/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory_1.cs b/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory_1.cs index 25277d302b..6ffbdf9ee4 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory_1.cs +++ b/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory_1.cs @@ -137,7 +137,7 @@ namespace System.ServiceModel public virtual TChannel CreateChannel (EndpointAddress address, Uri via) { -#if FULL_AOT_RUNTIME +#if FULL_AOT_RUNTIME || DISABLE_REMOTING throw new InvalidOperationException ("MonoTouch does not support dynamic proxy code generation. Override this method or its caller to return specific client proxy instance"); #else var existing = Endpoint.Address; diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs index a3ce81ad29..3bc6ac76b7 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs @@ -128,7 +128,7 @@ namespace MonoTests.System.ServiceModel.Channels ctx.BuildInnerChannelFactory<IRequestChannel> (); f.Open (); // required IChannel c = f.CreateChannel (new EndpointAddress ( - "http://www.mono-project.com")); + "http://www.example.com")); } [Test] @@ -143,7 +143,7 @@ namespace MonoTests.System.ServiceModel.Channels IChannelFactory<IRequestChannel> f = ctx.BuildInnerChannelFactory<IRequestChannel> (); IChannel c = f.CreateChannel (new EndpointAddress ( - "http://www.mono-project.com")); + "http://www.example.com")); } [Test] diff --git a/mcs/class/System.ServiceModel/testing_aot_full_System.ServiceModel.dll.exclude.sources b/mcs/class/System.ServiceModel/testing_aot_full_System.ServiceModel.dll.exclude.sources new file mode 100644 index 0000000000..36756196c5 --- /dev/null +++ b/mcs/class/System.ServiceModel/testing_aot_full_System.ServiceModel.dll.exclude.sources @@ -0,0 +1 @@ +System.ServiceModel/ClientRealProxy.cs diff --git a/mcs/class/System.ServiceModel/testing_aot_full_interp_System.ServiceModel.dll.exclude.sources b/mcs/class/System.ServiceModel/testing_aot_full_interp_System.ServiceModel.dll.exclude.sources new file mode 100644 index 0000000000..36756196c5 --- /dev/null +++ b/mcs/class/System.ServiceModel/testing_aot_full_interp_System.ServiceModel.dll.exclude.sources @@ -0,0 +1 @@ +System.ServiceModel/ClientRealProxy.cs diff --git a/mcs/class/System.ServiceModel/testing_aot_hybrid_System.ServiceModel.dll.exclude.sources b/mcs/class/System.ServiceModel/testing_aot_hybrid_System.ServiceModel.dll.exclude.sources new file mode 100644 index 0000000000..36756196c5 --- /dev/null +++ b/mcs/class/System.ServiceModel/testing_aot_hybrid_System.ServiceModel.dll.exclude.sources @@ -0,0 +1 @@ +System.ServiceModel/ClientRealProxy.cs diff --git a/mcs/class/System.ServiceModel/wasm_System.ServiceModel.dll.exclude.sources b/mcs/class/System.ServiceModel/wasm_System.ServiceModel.dll.exclude.sources new file mode 100644 index 0000000000..36756196c5 --- /dev/null +++ b/mcs/class/System.ServiceModel/wasm_System.ServiceModel.dll.exclude.sources @@ -0,0 +1 @@ +System.ServiceModel/ClientRealProxy.cs diff --git a/mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.exclude.sources b/mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.exclude.sources new file mode 100644 index 0000000000..0dee611d62 --- /dev/null +++ b/mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.exclude.sources @@ -0,0 +1,8 @@ +System.Web.Services.Configuration/DiagnosticsElementTest.cs +System.Web.Services.Configuration/ProtocolElementTest.cs +System.Web.Services.Configuration/SoapEnvelopeProcessingElementTest.cs +System.Web.Services.Configuration/SoapExtensionTypeElementTest.cs +System.Web.Services.Configuration/TypeElementTest.cs +System.Web.Services.Configuration/WsdlHelpGeneratorElementTest.cs +System.Web.Services.Configuration/WsiProfilesElementTest.cs +System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs diff --git a/mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.sources b/mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.sources new file mode 100644 index 0000000000..915ba6cbbe --- /dev/null +++ b/mcs/class/System.Web.Services/winaot_System.Web.Services_test.dll.sources @@ -0,0 +1 @@ +#include System.Web.Services_test.dll.sources diff --git a/mcs/class/System.Web/System.Web.Security/SqliteMembershipProvider.cs b/mcs/class/System.Web/System.Web.Security/SqliteMembershipProvider.cs index d208918cca..4ce6640e39 100644 --- a/mcs/class/System.Web/System.Web.Security/SqliteMembershipProvider.cs +++ b/mcs/class/System.Web/System.Web.Security/SqliteMembershipProvider.cs @@ -139,7 +139,7 @@ namespace System.Web.Security } // Get encryption and decryption key information from the configuration. - m_MachineKey = (MachineKeySection)WebConfigurationManager.GetSection("system.web/machineKey", null); + m_MachineKey = (MachineKeySection)WebConfigurationManager.GetSection("system.web/machineKey"); if (!m_PasswordFormat.Equals(MembershipPasswordFormat.Clear)) { diff --git a/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs index 7b45144d42..085afb1477 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs @@ -134,8 +134,8 @@ namespace MonoTests.System.Web.Caching #else static readonly byte[] memoryResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4D,0x65,0x6D,0x6F,0x72,0x79,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x2,0x0,0x0,0x0,0x17,0x3C,0x42,0x75,0x66,0x66,0x65,0x72,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x17,0x3C,0x4C,0x65,0x6E,0x67,0x74,0x68,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x7,0x0,0x2,0x9,0x2,0x0,0x0,0x0,0x9,0x3,0x0,0x0,0x0,0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xF,0x3,0x0,0x0,0x0,0xC,0x0,0x0,0x0,0x2,0x45,0x6E,0x63,0x6F,0x64,0x65,0x64,0x20,0x64,0x61,0x74,0x61,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; static readonly byte[] fileResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x26,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x46,0x69,0x6C,0x65,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x17,0x3C,0x4C,0x65,0x6E,0x67,0x74,0x68,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x17,0x3C,0x4F,0x66,0x66,0x73,0x65,0x74,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x15,0x3C,0x50,0x61,0x74,0x68,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x0,0x0,0x1,0x9,0x9,0x2,0x0,0x0,0x0,0xD2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x11,0x2F,0x70,0x61,0x74,0x68,0x2F,0x74,0x6F,0x2F,0x66,0x69,0x6C,0x65,0x2E,0x74,0x78,0x74,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - static readonly byte[] substitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x6e,0x65,0x74,0x5f,0x34,0x5f,0x78,0x5f,0x53,0x79,0x73,0x74,0x65,0x6d,0x2e,0x57,0x65,0x62,0x5f,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x19,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x6,0x0,0x0,0x0,0x9,0x7,0x0,0x0,0x0,0x4,0x6,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0x8,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0x9,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0xA,0x6,0xA,0x0,0x0,0x0,0x5A,0x6e,0x65,0x74,0x5f,0x34,0x5f,0x78,0x5f,0x53,0x79,0x73,0x74,0x65,0x6d,0x2e,0x57,0x65,0x62,0x5f,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xB,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x4,0x7,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x9,0xA,0x0,0x0,0x0,0x9,0xB,0x0,0x0,0x0,0x6,0xF,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x10,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - static readonly byte[] badSubstitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x6e,0x65,0x74,0x5f,0x34,0x5f,0x78,0x5f,0x53,0x79,0x73,0x74,0x65,0x6d,0x2e,0x57,0x65,0x62,0x5f,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x1C,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0xC,0x6,0x0,0x0,0x0,0x5A,0x6e,0x65,0x74,0x5f,0x34,0x5f,0x78,0x5f,0x53,0x79,0x73,0x74,0x65,0x6d,0x2e,0x57,0x65,0x62,0x5f,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x3,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x4,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x6,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x7,0x0,0x0,0x0,0x9,0x8,0x0,0x0,0x0,0x9,0x9,0x0,0x0,0x0,0x4,0x7,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0xA,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0xB,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x6,0xC,0x0,0x0,0x0,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x6,0xD,0x0,0x0,0x0,0x5A,0x6e,0x65,0x74,0x5f,0x34,0x5f,0x78,0x5f,0x53,0x79,0x73,0x74,0x65,0x6d,0x2e,0x57,0x65,0x62,0x5f,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xE,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x5,0x8,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x9,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x9,0xD,0x0,0x0,0x0,0x9,0xE,0x0,0x0,0x0,0x6,0x12,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x13,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; + static readonly byte[] substitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x19,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x6,0x0,0x0,0x0,0x9,0x7,0x0,0x0,0x0,0x4,0x6,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0x8,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0x9,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0xA,0x6,0xA,0x0,0x0,0x0,0x5A,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xB,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x4,0x7,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x6,0xD,0x0,0x0,0x0,0x5A,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x9,0xB,0x0,0x0,0x0,0x6,0xF,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x10,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; + static readonly byte[] badSubstitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x1C,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0xC,0x6,0x0,0x0,0x0,0x5A,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x3,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x4,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x6,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x7,0x0,0x0,0x0,0x9,0x8,0x0,0x0,0x0,0x9,0x9,0x0,0x0,0x0,0x4,0x7,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0xA,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0xB,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x6,0xC,0x0,0x0,0x0,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x6,0xD,0x0,0x0,0x0,0x5A,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xE,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x5,0x8,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x9,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x6,0x10,0x0,0x0,0x0,0x5A,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x5F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x9,0xE,0x0,0x0,0x0,0x6,0x12,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x13,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; #endif static readonly object[] serializeObjects = { diff --git a/mcs/class/System.Web/Test/System.Web.Mail/MailMessageCas.cs b/mcs/class/System.Web/Test/System.Web.Mail/MailMessageCas.cs index 5c42d7b148..84f8d5bfa9 100644 --- a/mcs/class/System.Web/Test/System.Web.Mail/MailMessageCas.cs +++ b/mcs/class/System.Web/Test/System.Web.Mail/MailMessageCas.cs @@ -73,8 +73,8 @@ namespace MonoCasTests.System.Web.Mail { msg.Priority = MailPriority.High; msg.Subject = "Monkey business"; msg.To = "to@localhost.com"; - msg.UrlContentBase = "http://www.mono-project.com"; - msg.UrlContentLocation = "http://www.go-mono.com"; + msg.UrlContentBase = "http://www.example.org"; + msg.UrlContentLocation = "http://www.example.com"; } // LinkDemand tests diff --git a/mcs/class/System.Web/Test/System.Web.Mail/SmtpMailCas.cs b/mcs/class/System.Web/Test/System.Web.Mail/SmtpMailCas.cs index c159a4ddb5..9986868b1e 100644 --- a/mcs/class/System.Web/Test/System.Web.Mail/SmtpMailCas.cs +++ b/mcs/class/System.Web/Test/System.Web.Mail/SmtpMailCas.cs @@ -65,8 +65,8 @@ namespace MonoCasTests.System.Web.Mail { msg.Priority = MailPriority.High; msg.Subject = "Monkey business"; msg.To = "to@localhost.com"; - msg.UrlContentBase = "http://www.mono-project.com"; - msg.UrlContentLocation = "http://www.go-mono.com"; + msg.UrlContentBase = "http://www.example.org"; + msg.UrlContentLocation = "http://www.example.com"; // ensure the static ctor is called at full trust Assert.IsNotNull (SmtpMail.SmtpServer); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlTableTest.cs b/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlTableTest.cs index 8551f8b6dc..d86eb6bff7 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlTableTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlTableTest.cs @@ -278,9 +278,9 @@ namespace MonoTests.System.Web.UI.HtmlControls { r.Cells.Add (c1); HtmlTableCell c2 = new HtmlTableCell (); c2.Align = "left"; - c2.InnerHtml = "<a href=\"http://www.go-mono.com\">Mono</a>"; + c2.InnerHtml = "<a href=\"http://www.example.com\">Example</a>"; r.Cells.Add (c2); - Assert.AreEqual (RemoveWS ("<table align=\"center\">\r\n\t<tr valign=\"top\">\r\n\t\t<td align=\"right\">Go</td>\r\n\t\t<td align=\"left\"><a href=\"http://www.go-mono.com\">Mono</a></td>\r\n\t</tr>\r\n</table>\r\n"), RemoveWS (t.Render ())); + Assert.AreEqual (RemoveWS ("<table align=\"center\">\r\n\t<tr valign=\"top\">\r\n\t\t<td align=\"right\">Go</td>\r\n\t\t<td align=\"left\"><a href=\"http://www.example.com\">Example</a></td>\r\n\t</tr>\r\n</table>\r\n"), RemoveWS (t.Render ())); } [Test] diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs index a40764b524..eb14e2b5c0 100755 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs @@ -116,7 +116,7 @@ namespace MonoTests.System.Web.UI.WebControls.Adapters // This has to stay to work around event validation errors. If it's removed, // then RenderItem will eventually attempt to register for event validation, // which can only be done during the Render phase. - item.NavigateUrl = "http://google.com/"; + item.NavigateUrl = "http://example.com/"; a.RenderItem (w, item, 0); Assert.IsTrue (sw.ToString ().IndexOf("menu item text") != -1, "RenderItem #1"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/LoginStatusTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/LoginStatusTest.cs index 9cb3afefd5..1d40205e7d 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/LoginStatusTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/LoginStatusTest.cs @@ -218,8 +218,8 @@ namespace MonoTests.System.Web.UI.WebControls { TestLoginStatus ls = new TestLoginStatus (); Assert.AreEqual ("a", ls.Tag, "TagName"); - ls.LoginImageUrl = "http://www.go-mono.com"; - ls.LogoutImageUrl = "http://www.mono-project.com"; + ls.LoginImageUrl = "http://www.example.com"; + ls.LogoutImageUrl = "http://www.example.org"; Assert.AreEqual ("a", ls.Tag, "TagName"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableStyleTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableStyleTest.cs index ba5d6475bb..f8031d70a3 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableStyleTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableStyleTest.cs @@ -407,12 +407,12 @@ namespace MonoTests.System.Web.UI.WebControls { { CssStyleCollection css = GetCssCollection (); TestTableStyle ts = new TestTableStyle (); - ts.BackImageUrl = "http://www.go-mono.com"; + ts.BackImageUrl = "http://www.example.com"; ts.Fill (css, null); Assert.AreEqual (1, css.Count, "Count"); - Assert.AreEqual ("http://www.go-mono.com", css["background-image"], "css[string]"); - Assert.AreEqual ("http://www.go-mono.com", css[HtmlTextWriterStyle.BackgroundImage], "css[HtmlTextWriterStyle]"); - Assert.AreEqual ("background-image:url(http://www.go-mono.com);", css.Value, "css.Value"); + Assert.AreEqual ("http://www.example.com", css["background-image"], "css[string]"); + Assert.AreEqual ("http://www.example.com", css[HtmlTextWriterStyle.BackgroundImage], "css[HtmlTextWriterStyle]"); + Assert.AreEqual ("background-image:url(http://www.example.com);", css.Value, "css.Value"); } [Test] @@ -420,13 +420,13 @@ namespace MonoTests.System.Web.UI.WebControls { { CssStyleCollection css = GetCssCollection (); TestTableStyle ts = new TestTableStyle (); - ts.BackImageUrl = "http://www.go-mono.com"; + ts.BackImageUrl = "http://www.example.com"; ts.Fill (css, new TestResolutionService ()); Assert.AreEqual (1, css.Count, "Count"); Assert.AreEqual ("http://www.mono-project.com", css["background-image"], "css[string]"); Assert.AreEqual ("http://www.mono-project.com", css[HtmlTextWriterStyle.BackgroundImage], "css[HtmlTextWriterStyle]"); Assert.AreEqual ("background-image:url(http://www.mono-project.com);", css.Value, "css.Value"); - Assert.AreEqual ("http://www.go-mono.com", ts.BackImageUrl, "BackImageUrl"); + Assert.AreEqual ("http://www.example.com", ts.BackImageUrl, "BackImageUrl"); } [Test] [Category ("NotWorking")] diff --git a/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs b/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs index 3d4451ab9e..be4fc108a8 100644 --- a/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs @@ -739,7 +739,7 @@ namespace MonoTests.System.Web.UI Assert.AreEqual ("NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("NunitWeb/../MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("NunitWeb/./MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); - Assert.AreEqual ("http://google.com/", ctrl.ResolveClientUrl ("http://google.com/"), "ResolveClientUrl Failed"); + Assert.AreEqual ("http://example.com/", ctrl.ResolveClientUrl ("http://example.com/"), "ResolveClientUrl Failed"); Assert.AreEqual ("MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("../MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); @@ -784,7 +784,7 @@ namespace MonoTests.System.Web.UI Assert.AreEqual ("Folder/NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("Folder/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("Folder/NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); - Assert.AreEqual ("http://google.com/", ctrl.ResolveClientUrl ("http://google.com/"), "ResolveClientUrl Failed"); + Assert.AreEqual ("http://example.com/", ctrl.ResolveClientUrl ("http://example.com/"), "ResolveClientUrl Failed"); Assert.AreEqual ("MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("../MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); @@ -825,7 +825,7 @@ namespace MonoTests.System.Web.UI Assert.AreEqual (appPath + "/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); - Assert.AreEqual ("http://google.com/", ctrl.ResolveUrl ("http://google.com/"), "ResolveClientUrl Failed"); + Assert.AreEqual ("http://example.com/", ctrl.ResolveUrl ("http://example.com/"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); @@ -872,7 +872,7 @@ namespace MonoTests.System.Web.UI Assert.AreEqual (appPath + "/Folder/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/Folder/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/Folder/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); - Assert.AreEqual ("http://google.com/", ctrl.ResolveUrl ("http://google.com/"), "ResolveClientUrl Failed"); + Assert.AreEqual ("http://example.com/", ctrl.ResolveUrl ("http://example.com/"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); diff --git a/mcs/class/System.Web/Test/System.Web.UI/CssStyleCollectionTest.cs b/mcs/class/System.Web/Test/System.Web.UI/CssStyleCollectionTest.cs index 3e2f1a622a..500a7819b4 100644 --- a/mcs/class/System.Web/Test/System.Web.UI/CssStyleCollectionTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI/CssStyleCollectionTest.cs @@ -50,8 +50,8 @@ namespace MonoTests.System.Web.UI public void CssStyleCollection_BackgroundImage () { WebControl c = new WebControl (HtmlTextWriterTag.A); CssStyleCollection css = c.Style; - string url = "http://www.go-mono.com/space here?key1=val1&key2=val2"; - string url_encoded = "http://www.go-mono.com/space%20here?key1=val1&key2=val2"; + string url = "http://www.example.com/space here?key1=val1&key2=val2"; + string url_encoded = "http://www.example.com/space%20here?key1=val1&key2=val2"; css.Add (HtmlTextWriterStyle.BackgroundImage, url); @@ -64,8 +64,8 @@ namespace MonoTests.System.Web.UI public void CssStyleCollection_BackgroundImage2 () { WebControl c = new WebControl (HtmlTextWriterTag.A); CssStyleCollection css = c.Style; - string url = "http://www.go-mono.com/space here?key1=val1&key2=val2"; - string url_encoded = "http://www.go-mono.com/space%20here?key1=val1&key2=val2"; + string url = "http://www.example.com/space here?key1=val1&key2=val2"; + string url_encoded = "http://www.example.com/space%20here?key1=val1&key2=val2"; css.Add ("background-image", url); @@ -78,8 +78,8 @@ namespace MonoTests.System.Web.UI public void CssStyleCollection_BackgroundImage3 () { WebControl c = new WebControl (HtmlTextWriterTag.A); CssStyleCollection css = c.Style; - string url = "http://www.go-mono.com/space here?key1=val1&key2=val2"; - string url_encoded = "http://www.go-mono.com/space%20here?key1=val1&key2=val2"; + string url = "http://www.example.com/space here?key1=val1&key2=val2"; + string url_encoded = "http://www.example.com/space%20here?key1=val1&key2=val2"; css.Add ("background-image", "url(" + url_encoded + ")"); @@ -92,8 +92,8 @@ namespace MonoTests.System.Web.UI public void CssStyleCollection_BackgroundImage4 () { WebControl c = new WebControl (HtmlTextWriterTag.A); CssStyleCollection css = c.Style; - string url = "http://www.go-mono.com/space here?key1=val1&key2=val2"; - string url_encoded = "http://www.go-mono.com/space%20here?key1=val1&key2=val2"; + string url = "http://www.example.com/space here?key1=val1&key2=val2"; + string url_encoded = "http://www.example.com/space%20here?key1=val1&key2=val2"; c.Attributes ["style"] = "background-image:url(" + url_encoded + ");"; diff --git a/mcs/class/System.Web/Test/System.Web.UI/HtmlTextWriterTest.cs b/mcs/class/System.Web/Test/System.Web.UI/HtmlTextWriterTest.cs index f74eb4f076..ce7399b494 100644 --- a/mcs/class/System.Web/Test/System.Web.UI/HtmlTextWriterTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI/HtmlTextWriterTest.cs @@ -170,10 +170,10 @@ namespace MonoTests.System.Web.UI { [Test] public void EscapeUrl () { - w.AddAttribute (HtwAttribute.Href, "http://www.google.com/search?hl=en&q=i+love+nunit&btnG=Google+Search"); + w.AddAttribute (HtwAttribute.Href, "http://www.example.com/search?hl=en&q=i+love+nunit&btnG=Google+Search"); w.RenderBeginTag (HtwTag.A); w.RenderEndTag (); - Assert.AreEqual ("<a href=\"http://www.google.com/search?hl=en&q=i+love+nunit&btnG=Google+Search\"></a>", sw.ToString ()); + Assert.AreEqual ("<a href=\"http://www.example.com/search?hl=en&q=i+love+nunit&btnG=Google+Search\"></a>", sw.ToString ()); } // Which attrs fall here @@ -377,11 +377,11 @@ namespace MonoTests.System.Web.UI { [Test] public void AddStyleAttribute1 () { - w.AddStyleAttribute (HtmlTextWriterStyle.BackgroundImage, "http://www.go-mono.com/"); + w.AddStyleAttribute (HtmlTextWriterStyle.BackgroundImage, "http://www.example.com/"); w.RenderBeginTag ("div"); w.RenderEndTag (); - Assert.AreEqual ("<div style=\"background-image:url(http://www.go-mono.com/);\">\n\n</div>", sw.ToString ()); + Assert.AreEqual ("<div style=\"background-image:url(http://www.example.com/);\">\n\n</div>", sw.ToString ()); } [Test] diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_HtmlControls_HtmlAnchor_HtmlAnchor_Name.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_HtmlControls_HtmlAnchor_HtmlAnchor_Name.aspx.xml index 67822aa914..97175927ed 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_HtmlControls_HtmlAnchor_HtmlAnchor_Name.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_HtmlControls_HtmlAnchor_HtmlAnchor_Name.aspx.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="iso-8859-1"?> <testresults name=""> <div id="GHTSubTest1" style="height:56px;width:553px"> - <a href="http://www.google.com" id="anchor1" name="anchor1">Anchor1</a> + <a href="http://www.example.com" id="anchor1" name="anchor1">Anchor1</a> </div> <div id="Ghtsubtest2" style="height:56px;width:553px"> - <a href="http://www.google.com" id="anchor2" name="anchor2_!@#$%^&*()"> + <a href="http://www.example.com" id="anchor2" name="anchor2_!@#$%^&*()"> Anchor2</a> </div> <div id="Ghtsubtest3" style="height:59px;width:553px"> - <a href="http://www.google.com" id="anchor3" name="name_anchor3">Anchor3</a> + <a href="http://www.example.com" id="anchor3" name="name_anchor3">Anchor3</a> <span> <br />name_anchor3</span> </div> <div id="Ghtsubtest4" style="height:59px;width:553px"> - <a href="http://www.google.com" id="anchor4" name="123">Anchor4</a> + <a href="http://www.example.com" id="anchor4" name="123">Anchor4</a> <span> <br />123</span> </div> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterStyle.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterStyle.aspx.xml index 0f3f17f469..e7058ca6c0 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterStyle.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterStyle.aspx.xml @@ -278,7 +278,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -286,7 +286,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -294,7 +294,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -302,7 +302,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -310,7 +310,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -318,7 +318,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -326,7 +326,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -334,7 +334,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -342,7 +342,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -350,7 +350,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterText.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterText.aspx.xml index 1aedd1535b..04727f0984 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterText.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_FooterText.aspx.xml @@ -278,7 +278,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -286,7 +286,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -294,7 +294,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -302,7 +302,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -310,7 +310,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -318,7 +318,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -326,7 +326,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -334,7 +334,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -342,7 +342,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -350,7 +350,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderImageUrl.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderImageUrl.aspx.xml index e324e8e936..8e1e92a359 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderImageUrl.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderImageUrl.aspx.xml @@ -287,7 +287,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -295,7 +295,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -303,7 +303,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -311,7 +311,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -319,7 +319,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -327,7 +327,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -335,7 +335,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -343,7 +343,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -351,7 +351,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -359,7 +359,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderStyle.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderStyle.aspx.xml index 87858f9c72..a05e4d1bd6 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderStyle.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderStyle.aspx.xml @@ -278,7 +278,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -286,7 +286,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -294,7 +294,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -302,7 +302,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -310,7 +310,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -318,7 +318,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -326,7 +326,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -334,7 +334,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -342,7 +342,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -350,7 +350,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderText.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderText.aspx.xml index 1aedd1535b..04727f0984 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderText.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_HeaderText.aspx.xml @@ -278,7 +278,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -286,7 +286,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -294,7 +294,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -302,7 +302,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -310,7 +310,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -318,7 +318,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -326,7 +326,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -334,7 +334,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -342,7 +342,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -350,7 +350,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ItemStyle.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ItemStyle.aspx.xml index f0555bc640..2944f827b3 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ItemStyle.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ItemStyle.aspx.xml @@ -278,7 +278,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -286,7 +286,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -294,7 +294,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -302,7 +302,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -310,7 +310,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -318,7 +318,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -326,7 +326,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -334,7 +334,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -342,7 +342,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -350,7 +350,7 @@ </tr> <tr> <td align="Right" nowrap="nowrap" valign="Top"> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_SortExpression.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_SortExpression.aspx.xml index e324e8e936..8e1e92a359 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_SortExpression.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_SortExpression.aspx.xml @@ -287,7 +287,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -295,7 +295,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -303,7 +303,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -311,7 +311,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -319,7 +319,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -327,7 +327,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -335,7 +335,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -343,7 +343,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -351,7 +351,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -359,7 +359,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ToString_.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ToString_.aspx.xml index e324e8e936..8e1e92a359 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ToString_.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_ToString_.aspx.xml @@ -287,7 +287,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -295,7 +295,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -303,7 +303,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -311,7 +311,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -319,7 +319,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -327,7 +327,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -335,7 +335,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -343,7 +343,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -351,7 +351,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -359,7 +359,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_Visible.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_Visible.aspx.xml index d34a52b9c4..37a0cd91cf 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_Visible.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_DataGridColumn_DataGridColumn_Visible.aspx.xml @@ -284,7 +284,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td>1</td> <td>n_0_one</td> @@ -292,7 +292,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td>2</td> <td>n_0_two</td> @@ -300,7 +300,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td>3</td> <td>n_0_three</td> @@ -308,7 +308,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td>4</td> <td>n_0_four</td> @@ -316,7 +316,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td>5</td> <td>n_0_five</td> @@ -324,7 +324,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td>6</td> <td>n_0_six</td> @@ -332,7 +332,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td>7</td> <td>n_0_seven</td> @@ -340,7 +340,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td>8</td> <td>n_0_eight</td> @@ -348,7 +348,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td>9</td> <td>n_0_nine</td> @@ -356,7 +356,7 @@ </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td>10</td> <td>n_0_ten</td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextField.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextField.aspx.xml index 2fcd7291ac..fe3c1f6a55 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextField.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextField.aspx.xml @@ -9,7 +9,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -21,7 +21,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -33,7 +33,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -45,7 +45,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -57,7 +57,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -69,7 +69,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -81,7 +81,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -93,7 +93,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -105,7 +105,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -117,7 +117,7 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> @@ -145,122 +145,122 @@ </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_one</a> + <a href=""http://www.example.com"">http://n_0_one</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_one</a> + <a href=""http://www.example.com"">http://c_0_one</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_two</a> + <a href=""http://www.example.com"">http://n_0_two</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_two</a> + <a href=""http://www.example.com"">http://c_0_two</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_three</a> + <a href=""http://www.example.com"">http://n_0_three</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_three</a> + <a href=""http://www.example.com"">http://c_0_three</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_four</a> + <a href=""http://www.example.com"">http://n_0_four</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_four</a> + <a href=""http://www.example.com"">http://c_0_four</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_five</a> + <a href=""http://www.example.com"">http://n_0_five</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_five</a> + <a href=""http://www.example.com"">http://c_0_five</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_six</a> + <a href=""http://www.example.com"">http://n_0_six</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_six</a> + <a href=""http://www.example.com"">http://c_0_six</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_seven</a> + <a href=""http://www.example.com"">http://n_0_seven</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_seven</a> + <a href=""http://www.example.com"">http://c_0_seven</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_eight</a> + <a href=""http://www.example.com"">http://n_0_eight</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_eight</a> + <a href=""http://www.example.com"">http://c_0_eight</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_nine</a> + <a href=""http://www.example.com"">http://n_0_nine</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_nine</a> + <a href=""http://www.example.com"">http://c_0_nine</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> <td> - <a href=""http://www.google.com"">http://n_0_ten</a> + <a href=""http://www.example.com"">http://n_0_ten</a> </td> <td> - <a href=""http://www.google.com"">http://c_0_ten</a> + <a href=""http://www.example.com"">http://c_0_ten</a> </td> </tr> </table> @@ -279,7 +279,7 @@ </tr> <tr> <td> - <a href=""http://www.google.com""> + <a href=""http://www.example.com""> </a> </td> </tr> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextFormatString.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextFormatString.aspx.xml index 902513499a..0df02c3d87 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextFormatString.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_DataTextFormatString.aspx.xml @@ -9,122 +9,122 @@ </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_one</a> + <a href="http://www.example.com">c_0_one</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_two</a> + <a href="http://www.example.com">c_0_two</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_three</a> + <a href="http://www.example.com">c_0_three</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_four</a> + <a href="http://www.example.com">c_0_four</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_five</a> + <a href="http://www.example.com">c_0_five</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_six</a> + <a href="http://www.example.com">c_0_six</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_seven</a> + <a href="http://www.example.com">c_0_seven</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_eight</a> + <a href="http://www.example.com">c_0_eight</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_nine</a> + <a href="http://www.example.com">c_0_nine</a> </td> </tr> <tr> <td> - <a href="http://www.google.com"> + <a href="http://www.example.com"> </a> </td> <td> - <a href="http://www.google.com">(format str)</a> + <a href="http://www.example.com">(format str)</a> </td> <td> - <a href="http://www.google.com">c_0_ten</a> + <a href="http://www.example.com">c_0_ten</a> </td> </tr> </table> @@ -143,52 +143,52 @@ </tr> <tr> <td> - <a href="http://www.google.com">$1.00000</a> + <a href="http://www.example.com">$1.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$2.00000</a> + <a href="http://www.example.com">$2.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$3.00000</a> + <a href="http://www.example.com">$3.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$4.00000</a> + <a href="http://www.example.com">$4.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$5.00000</a> + <a href="http://www.example.com">$5.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$6.00000</a> + <a href="http://www.example.com">$6.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$7.00000</a> + <a href="http://www.example.com">$7.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$8.00000</a> + <a href="http://www.example.com">$8.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$9.00000</a> + <a href="http://www.example.com">$9.00000</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">$10.00000</a> + <a href="http://www.example.com">$10.00000</a> </td> </tr> </table> @@ -204,112 +204,112 @@ </tr> <tr> <td> - <a href=""http://www.google.com"">1</a> + <a href=""http://www.example.com"">1</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_one</a> + <a href=""http://www.example.com"">c_0_one</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">2</a> + <a href=""http://www.example.com"">2</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_two</a> + <a href=""http://www.example.com"">c_0_two</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">3</a> + <a href=""http://www.example.com"">3</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_three</a> + <a href=""http://www.example.com"">c_0_three</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">4</a> + <a href=""http://www.example.com"">4</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_four</a> + <a href=""http://www.example.com"">c_0_four</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">5</a> + <a href=""http://www.example.com"">5</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_five</a> + <a href=""http://www.example.com"">c_0_five</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">6</a> + <a href=""http://www.example.com"">6</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_six</a> + <a href=""http://www.example.com"">c_0_six</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">7</a> + <a href=""http://www.example.com"">7</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_seven</a> + <a href=""http://www.example.com"">c_0_seven</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">8</a> + <a href=""http://www.example.com"">8</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_eight</a> + <a href=""http://www.example.com"">c_0_eight</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">9</a> + <a href=""http://www.example.com"">9</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_nine</a> + <a href=""http://www.example.com"">c_0_nine</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">10</a> + <a href=""http://www.example.com"">10</a> </td> <td> - <a href=""http://www.google.com"">(format str)</a> + <a href=""http://www.example.com"">(format str)</a> </td> <td> - <a href=""http://www.google.com"">c_0_ten</a> + <a href=""http://www.example.com"">c_0_ten</a> </td> </tr> </table> @@ -330,112 +330,112 @@ </tr> <tr> <td> - <a href=""http://www.google.com"">1</a> + <a href=""http://www.example.com"">1</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$1.00000</a> + <a href=""http://www.example.com"">$1.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">2</a> + <a href=""http://www.example.com"">2</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$2.00000</a> + <a href=""http://www.example.com"">$2.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">3</a> + <a href=""http://www.example.com"">3</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$3.00000</a> + <a href=""http://www.example.com"">$3.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">4</a> + <a href=""http://www.example.com"">4</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$4.00000</a> + <a href=""http://www.example.com"">$4.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">5</a> + <a href=""http://www.example.com"">5</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$5.00000</a> + <a href=""http://www.example.com"">$5.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">6</a> + <a href=""http://www.example.com"">6</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$6.00000</a> + <a href=""http://www.example.com"">$6.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">7</a> + <a href=""http://www.example.com"">7</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$7.00000</a> + <a href=""http://www.example.com"">$7.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">8</a> + <a href=""http://www.example.com"">8</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$8.00000</a> + <a href=""http://www.example.com"">$8.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">9</a> + <a href=""http://www.example.com"">9</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$9.00000</a> + <a href=""http://www.example.com"">$9.00000</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">10</a> + <a href=""http://www.example.com"">10</a> </td> <td> - <a href=""http://www.google.com"">(format)</a> + <a href=""http://www.example.com"">(format)</a> </td> <td> - <a href=""http://www.google.com"">$10.00000</a> + <a href=""http://www.example.com"">$10.00000</a> </td> </tr> </table> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_InitializeCell_TIL.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_InitializeCell_TIL.aspx.xml index aba1b3a2fe..ca50f5eb76 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_InitializeCell_TIL.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_InitializeCell_TIL.aspx.xml @@ -9,7 +9,7 @@ </tr> <tr> <td index="0"> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> <a> </a> </td> @@ -22,7 +22,7 @@ </tr> <tr> <td index="1"> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> <a> </a> </td> @@ -35,7 +35,7 @@ </tr> <tr> <td index="2"> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> <a> </a> </td> @@ -48,7 +48,7 @@ </tr> <tr> <td index="3"> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> <a> </a> </td> @@ -61,7 +61,7 @@ </tr> <tr> <td index="4"> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> <a> </a> </td> @@ -74,7 +74,7 @@ </tr> <tr> <td index="5"> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> <a> </a> </td> @@ -87,7 +87,7 @@ </tr> <tr> <td index="6"> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> <a> </a> </td> @@ -100,7 +100,7 @@ </tr> <tr> <td index="7"> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> <a> </a> </td> @@ -113,7 +113,7 @@ </tr> <tr> <td index="8"> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> <a> </a> </td> @@ -126,7 +126,7 @@ </tr> <tr> <td index="9"> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> <a> </a> </td> diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_Target.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_Target.aspx.xml index cd02449b51..a2f7d3c259 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_Target.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_HyperLinkColumn_HyperLinkColumn_Target.aspx.xml @@ -9,112 +9,112 @@ </tr> <tr> <td> - <a href="http://www.google.com">1</a> + <a href="http://www.example.com">1</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_one</a> + <a href="http://www.example.com" target="_blank">n_0_one</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_one</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_one</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">2</a> + <a href="http://www.example.com">2</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_two</a> + <a href="http://www.example.com" target="_blank">n_0_two</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_two</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_two</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">3</a> + <a href="http://www.example.com">3</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_three</a> + <a href="http://www.example.com" target="_blank">n_0_three</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_three</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_three</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">4</a> + <a href="http://www.example.com">4</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_four</a> + <a href="http://www.example.com" target="_blank">n_0_four</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_four</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_four</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">5</a> + <a href="http://www.example.com">5</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_five</a> + <a href="http://www.example.com" target="_blank">n_0_five</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_five</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_five</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">6</a> + <a href="http://www.example.com">6</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_six</a> + <a href="http://www.example.com" target="_blank">n_0_six</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_six</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_six</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">7</a> + <a href="http://www.example.com">7</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_seven</a> + <a href="http://www.example.com" target="_blank">n_0_seven</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_seven</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_seven</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">8</a> + <a href="http://www.example.com">8</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_eight</a> + <a href="http://www.example.com" target="_blank">n_0_eight</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_eight</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_eight</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">9</a> + <a href="http://www.example.com">9</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_nine</a> + <a href="http://www.example.com" target="_blank">n_0_nine</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_nine</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_nine</a> </td> </tr> <tr> <td> - <a href="http://www.google.com">10</a> + <a href="http://www.example.com">10</a> </td> <td> - <a href="http://www.google.com" target="_blank">n_0_ten</a> + <a href="http://www.example.com" target="_blank">n_0_ten</a> </td> <td> - <a href="http://www.google.com" target="skjfh skjf hkjd">c_0_ten</a> + <a href="http://www.example.com" target="skjfh skjf hkjd">c_0_ten</a> </td> </tr> </table> @@ -135,120 +135,120 @@ </tr> <tr> <td> - <a href=""http://www.google.com"">1</a> + <a href=""http://www.example.com"">1</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_one</a> + <a href=""http://www.example.com"" target="_blank">n_0_one</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_one</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_one</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">2</a> + <a href=""http://www.example.com"">2</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_two</a> + <a href=""http://www.example.com"" target="_blank">n_0_two</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_two</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_two</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">3</a> + <a href=""http://www.example.com"">3</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_three</a> + <a href=""http://www.example.com"" target="_blank">n_0_three</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_three</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_three</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">4</a> + <a href=""http://www.example.com"">4</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_four</a> + <a href=""http://www.example.com"" target="_blank">n_0_four</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_four</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_four</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">5</a> + <a href=""http://www.example.com"">5</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_five</a> + <a href=""http://www.example.com"" target="_blank">n_0_five</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_five</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_five</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">6</a> + <a href=""http://www.example.com"">6</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_six</a> + <a href=""http://www.example.com"" target="_blank">n_0_six</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_six</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_six</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">7</a> + <a href=""http://www.example.com"">7</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_seven</a> + <a href=""http://www.example.com"" target="_blank">n_0_seven</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_seven</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_seven</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">8</a> + <a href=""http://www.example.com"">8</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_eight</a> + <a href=""http://www.example.com"" target="_blank">n_0_eight</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_eight</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_eight</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">9</a> + <a href=""http://www.example.com"">9</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_nine</a> + <a href=""http://www.example.com"" target="_blank">n_0_nine</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_nine</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_nine</a> </td> </tr> <tr> <td> - <a href=""http://www.google.com"">10</a> + <a href=""http://www.example.com"">10</a> </td> <td> - <a href=""http://www.google.com"" target="_blank">n_0_ten</a> + <a href=""http://www.example.com"" target="_blank">n_0_ten</a> </td> <td> - <a href=""http://www.google.com"" target="klasjd lkajsd lkajsd">c_0_ten</a> + <a href=""http://www.example.com"" target="klasjd lkajsd lkajsd">c_0_ten</a> </td> </tr> </table> <span> - <br />"http://www.google.com"</span> + <br />"http://www.example.com"</span> <span> - <br />"http://www.google.com"</span> + <br />"http://www.example.com"</span> <span> - <br />"http://www.google.com"</span> + <br />"http://www.example.com"</span> </div> </testresults> \ No newline at end of file diff --git a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_Repeater_Repeater_ItemDataBound.aspx.xml b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_Repeater_Repeater_ItemDataBound.aspx.xml index 1cb406d1c6..77aae86e5b 100644 --- a/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_Repeater_Repeater_ItemDataBound.aspx.xml +++ b/mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/reference/_System_Web_UI_WebControls_Repeater_Repeater_ItemDataBound.aspx.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="iso-8859-1"?> <testresults name=""> <div id="GHTSubTest1" style="height:72px;width:553px"> - <a href="http://www.google.com/" id="Repeater1__ctl0_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl1_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl2_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl3_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl4_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl5_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl6_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl7_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl8_hl_name">hehe</a> - <a href="http://www.google.com/" id="Repeater1__ctl9_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl0_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl1_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl2_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl3_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl4_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl5_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl6_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl7_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl8_hl_name">hehe</a> + <a href="http://www.example.com/" id="Repeater1__ctl9_hl_name">hehe</a> <span> <br /> </span> diff --git a/mcs/class/System.Web/Test/standalone-tests/Menu_4.0_List.cs b/mcs/class/System.Web/Test/standalone-tests/Menu_4.0_List.cs index f5f4791da2..ebcdc9a08a 100644 --- a/mcs/class/System.Web/Test/standalone-tests/Menu_4.0_List.cs +++ b/mcs/class/System.Web/Test/standalone-tests/Menu_4.0_List.cs @@ -56,7 +56,7 @@ namespace StandAloneTests.Menu_40_List void Test_01_Aspx (string result, TestRunItem runItem) { - string originalHtml = "<a href=\"#MyMenu1_SkipLink\"><img alt=\"Skip Navigation Links\" src=\"/WebResource.axd\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"MyMenu1\">\r\n\t<ul class=\"level1\">\r\n\t\t<li><a title=\"Root description\" class=\"popout level1\" href=\"./\">Root</a><ul class=\"level2\">\r\n\t\t\t<li><a title=\"Mono Project Home Page\" class=\"popout level2\" href=\"http://mono-project.com/\">Mono</a><ul class=\"level3\">\r\n\t\t\t\t<li><a title=\"How to report Mono bugs\" class=\"popout level3\" href=\"http://mono-project.com/Bugs\">Mono Bugs</a><ul class=\"level4\">\r\n\t\t\t\t\t<li><a title=\"Includes Mono bugs interface\" class=\"level4\" href=\"http://bugzilla.novell.com\">Novell Bugzilla</a></li>\r\n\t\t\t\t</ul></li>\r\n\t\t\t</ul></li><li><a title=\"Main page of the Google search engine\" class=\"popout level2\" href=\"http://google.com\">Google</a><ul class=\"level3\">\r\n\t\t\t\t<li><a title=\"Google language translation interface\" class=\"level3\" href=\"http://translate.google.com\">Translator</a></li><li><a title=\"Google code search engine\" class=\"level3\" href=\"http://google.com/codesearch\">Code Search</a></li>\r\n\t\t\t</ul></li>\r\n\t\t</ul></li>\r\n\t</ul>\r\n</div><a id=\"MyMenu1_SkipLink\"></a>"; + string originalHtml = "<a href=\"#MyMenu1_SkipLink\"><img alt=\"Skip Navigation Links\" src=\"/WebResource.axd\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"MyMenu1\">\r\n\t<ul class=\"level1\">\r\n\t\t<li><a title=\"Root description\" class=\"popout level1\" href=\"./\">Root</a><ul class=\"level2\">\r\n\t\t\t<li><a title=\"Mono Project Home Page\" class=\"popout level2\" href=\"http://mono-project.com/\">Mono</a><ul class=\"level3\">\r\n\t\t\t\t<li><a title=\"How to report Mono bugs\" class=\"popout level3\" href=\"http://mono-project.com/Bugs\">Mono Bugs</a><ul class=\"level4\">\r\n\t\t\t\t\t<li><a title=\"Includes Mono bugs interface\" class=\"level4\" href=\"http://bugzilla.novell.com\">Novell Bugzilla</a></li>\r\n\t\t\t\t</ul></li>\r\n\t\t\t</ul></li><li><a title=\"Main page of the Example page\" class=\"popout level2\" href=\"http://www.example.com\">Example</a><ul class=\"level3\">\r\n\t\t\t\t<li><a title=\"Example language translation interface\" class=\"level3\" href=\"http://translate.example.com\">Translator</a></li><li><a title=\"Example code search engine\" class=\"level3\" href=\"http://codesearch.example.com\">Code Search</a></li>\r\n\t\t\t</ul></li>\r\n\t\t</ul></li>\r\n\t</ul>\r\n</div><a id=\"MyMenu1_SkipLink\"></a>"; Helpers.ExtractAndCompareCodeFromHtml (Helpers.StripWebResourceAxdQuery (result), originalHtml, "#A1"); } } diff --git a/mcs/class/System.Web/Test/standalone-tests/Unhandled_Exception_Global_Asax.cs b/mcs/class/System.Web/Test/standalone-tests/Unhandled_Exception_Global_Asax.cs index 74f7794f16..f6c1034893 100644 --- a/mcs/class/System.Web/Test/standalone-tests/Unhandled_Exception_Global_Asax.cs +++ b/mcs/class/System.Web/Test/standalone-tests/Unhandled_Exception_Global_Asax.cs @@ -160,7 +160,7 @@ namespace StandAloneTests.Unhandled_Exception_Global_Asax void Default_Aspx (string result, TestRunItem runItem) { - string originalHtml = @"<h2>Object moved to <a href=""http://google.com/"">here</a></h2>"; + string originalHtml = @"<h2>Object moved to <a href=""http://example.com/"">here</a></h2>"; Assert.IsTrue (result.IndexOf (originalHtml) != -1, "#A1"); } diff --git a/mcs/class/System.Web/Test/standalone/Menu_4.0_List/App_Data/MenuData.xml b/mcs/class/System.Web/Test/standalone/Menu_4.0_List/App_Data/MenuData.xml index 9e431cd9d8..0e35943dc3 100644 --- a/mcs/class/System.Web/Test/standalone/Menu_4.0_List/App_Data/MenuData.xml +++ b/mcs/class/System.Web/Test/standalone/Menu_4.0_List/App_Data/MenuData.xml @@ -5,8 +5,8 @@ <MenuNode url="http://bugzilla.novell.com" title="Novell Bugzilla" description="Includes Mono bugs interface"/> </MenuNode> </MenuNode> - <MenuNode url="http://google.com" title="Google" description="Main page of the Google search engine"> - <MenuNode url="http://translate.google.com" title="Translator" description="Google language translation interface"/> - <MenuNode url="http://google.com/codesearch" title="Code Search" description="Google code search engine"/> + <MenuNode url="http://www.example" title="Example" description="Main page of the Example page"> + <MenuNode url="http://translate.example" title="Translator" description="Example language translation interface"/> + <MenuNode url="http://codesearch.example.com" title="Code Search" description="Example code search engine"/> </MenuNode> </MenuRoot> \ No newline at end of file diff --git a/mcs/class/System.Web/Test/standalone/RootBuilderChildControlTypes_Bug603541/Default.aspx b/mcs/class/System.Web/Test/standalone/RootBuilderChildControlTypes_Bug603541/Default.aspx index 02da6b4e6a..31e933e9a0 100644 --- a/mcs/class/System.Web/Test/standalone/RootBuilderChildControlTypes_Bug603541/Default.aspx +++ b/mcs/class/System.Web/Test/standalone/RootBuilderChildControlTypes_Bug603541/Default.aspx @@ -11,7 +11,7 @@ <div> <a runat="server" id="anchor" href="/">Anchor</a><br /> <button runat="server" id="button" value="Button" /><br /> - <img runat="server" id="img" src="http://google.com/favico.png" /><br /> + <img runat="server" id="img" src="http://example.com/favico.png" /><br /> <link runat="server" id="link" rel="test" /><br /> <meta runat="server" id="meta" name="test" /><br /> <select runat="server" id="testSelect"></select><br /> diff --git a/mcs/class/System.Web/Test/standalone/Unhandled_Exception_Global_Asax/test_04/global.asax.cs b/mcs/class/System.Web/Test/standalone/Unhandled_Exception_Global_Asax/test_04/global.asax.cs index ff8b54d496..7875f31300 100644 --- a/mcs/class/System.Web/Test/standalone/Unhandled_Exception_Global_Asax/test_04/global.asax.cs +++ b/mcs/class/System.Web/Test/standalone/Unhandled_Exception_Global_Asax/test_04/global.asax.cs @@ -10,7 +10,7 @@ namespace TestWebApp { protected virtual void Application_Error (Object sender, EventArgs e) { - Response.Redirect ("http://google.com/"); + Response.Redirect ("http://example.com/"); } } } diff --git a/mcs/class/System.Web/Test/standalone/adrotator/ads.xml b/mcs/class/System.Web/Test/standalone/adrotator/ads.xml index 0c9775f481..b1cc31c85e 100644 --- a/mcs/class/System.Web/Test/standalone/adrotator/ads.xml +++ b/mcs/class/System.Web/Test/standalone/adrotator/ads.xml @@ -7,11 +7,11 @@ <Keyword>novell</Keyword> </Ad> <Ad> - <ImageUrl>~/images/google.jpg</ImageUrl> - <NavigateUrl>http://www.google.com</NavigateUrl> - <AlternateText>Google</AlternateText> + <ImageUrl>~/images/example.jpg</ImageUrl> + <NavigateUrl>http://www.example.com</NavigateUrl> + <AlternateText>Example</AlternateText> <Impressions>80</Impressions> - <Keyword>google</Keyword> + <Keyword>example</Keyword> </Ad> <Ad> <ImageUrl>~/images/ibm.jpg</ImageUrl> diff --git a/mcs/class/System.Web/Test/standalone/adrotator/adsplus.xml b/mcs/class/System.Web/Test/standalone/adrotator/adsplus.xml index 68b423567b..5ffd7652c0 100644 --- a/mcs/class/System.Web/Test/standalone/adrotator/adsplus.xml +++ b/mcs/class/System.Web/Test/standalone/adrotator/adsplus.xml @@ -8,11 +8,11 @@ <randomtag>Hola</randomtag> </Ad> <Ad> - <ImageUrl>~/images/google.jpg</ImageUrl> - <NavigateUrl>http://www.google.com</NavigateUrl> - <AlternateText>Google</AlternateText> + <ImageUrl>~/images/example.jpg</ImageUrl> + <NavigateUrl>http://www.example.com</NavigateUrl> + <AlternateText>Example</AlternateText> <Impressions>80</Impressions> - <Keyword>google</Keyword> + <Keyword>example</Keyword> </Ad> <Ad> <ImageUrl>~/images/ibm.jpg</ImageUrl> diff --git a/mcs/class/System.Web/Test/standalone/datagrid/datagrid-hyperlink-col.aspx b/mcs/class/System.Web/Test/standalone/datagrid/datagrid-hyperlink-col.aspx index 3609fa27b6..2f30128317 100644 --- a/mcs/class/System.Web/Test/standalone/datagrid/datagrid-hyperlink-col.aspx +++ b/mcs/class/System.Web/Test/standalone/datagrid/datagrid-hyperlink-col.aspx @@ -28,7 +28,7 @@ <asp:HyperLinkColumn Text="" DataNavigateUrlField="Company" /> <asp:HyperLinkColumn Text="ClickHere" DataNavigateUrlField="Company" /> <asp:HyperLinkColumn Text="Get quote" DataNavigateUrlField="Symbol" DataNavigateUrlFormatString="~/quote.aspx?{0}" /> - <asp:HyperLinkColumn Text="Google quote" DataNavigateUrlField="Symbol" DataNavigateUrlFormatString="http://www.google.com/search?q=stocks:{0}" /> + <asp:HyperLinkColumn Text="Example quote" DataNavigateUrlField="Symbol" DataNavigateUrlFormatString="http://www.example.com/search?q=stocks:{0}" /> </Columns> </asp:DataGrid> </form> diff --git a/mcs/class/System.Web/Test/standalone/htmlanchor/htmlanchor2.aspx b/mcs/class/System.Web/Test/standalone/htmlanchor/htmlanchor2.aspx index a47add2a53..8c218c5028 100644 --- a/mcs/class/System.Web/Test/standalone/htmlanchor/htmlanchor2.aspx +++ b/mcs/class/System.Web/Test/standalone/htmlanchor/htmlanchor2.aspx @@ -2,8 +2,8 @@ <script runat="server"> void Page_Load (object sender, EventArgs e) { - a1.HRef = "http://www.go-mono.com"; - a2.HRef = "http://www.mono-project.com"; + a1.HRef = "http://www.example.com"; + a2.HRef = "http://www.example.org"; a3.HRef = ":@\\"; a2.Name = "Name"; @@ -38,7 +38,7 @@ <a id="a1" target="_blank" runat="server">Go mono!</a><hr> <a id="a2" target="_parent" runat="server">Go mono!</a><hr> <a id="a3" target="_self" runat="server">Go mono!</a><hr> -<a id="a4" href="http://www.go-mono.com#4" target="mono" runat="server">Go mono!</a><hr> +<a id="a4" href="http://www.example.com#4" target="mono" runat="server">Go mono!</a><hr> <form runat="server"> <a id="a5" href="oops" title="t" runat="server" OnServerClick="Click">Click1</a><hr> <a id="a6" runat="server" OnServerClick="HtmlAnchor_Click">Click2</a><hr> diff --git a/mcs/class/System.Windows.Forms/System.Windows.Forms/DataGridViewColumn.cs b/mcs/class/System.Windows.Forms/System.Windows.Forms/DataGridViewColumn.cs index 8b9e69b6c1..a6fc976db5 100644 --- a/mcs/class/System.Windows.Forms/System.Windows.Forms/DataGridViewColumn.cs +++ b/mcs/class/System.Windows.Forms/System.Windows.Forms/DataGridViewColumn.cs @@ -239,6 +239,8 @@ Example */ set { if (headerCell != value) { headerCell = value; + headerCell.SetDataGridView(DataGridView); + headerCell.SetColumnIndex(Index); if (DataGridView != null) { DataGridView.OnColumnHeaderCellChanged(new DataGridViewColumnEventArgs(this)); } diff --git a/mcs/class/System.Windows.Forms/System.Windows.Forms/LineTag.cs b/mcs/class/System.Windows.Forms/System.Windows.Forms/LineTag.cs index 9e0d5c7e2b..a551e813de 100644 --- a/mcs/class/System.Windows.Forms/System.Windows.Forms/LineTag.cs +++ b/mcs/class/System.Windows.Forms/System.Windows.Forms/LineTag.cs @@ -43,7 +43,7 @@ namespace System.Windows.Forms private bool is_link; // Whether this tag is a link private string link_text; // The full link text e.g. this might be // word-wrapped to "w" but this would be - // "www.mono-project.com" + // "www.example.com" // Payload; text private int start; // start, in chars; index into Line.text diff --git a/mcs/class/System.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs.REMOVED.git-id b/mcs/class/System.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs.REMOVED.git-id index 074d1ee957..497463f828 100644 --- a/mcs/class/System.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs.REMOVED.git-id +++ b/mcs/class/System.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs.REMOVED.git-id @@ -1 +1 @@ -63320f8d8b7e2390d21a00b0d924b79927ce507f \ No newline at end of file +f2415f506a659f57d72508738c65626711d53d22 \ No newline at end of file diff --git a/mcs/class/System.Windows.Forms/System.Windows.Forms/WebBrowser.cs b/mcs/class/System.Windows.Forms/System.Windows.Forms/WebBrowser.cs index 529a115f55..46cfe5ade8 100644 --- a/mcs/class/System.Windows.Forms/System.Windows.Forms/WebBrowser.cs +++ b/mcs/class/System.Windows.Forms/System.Windows.Forms/WebBrowser.cs @@ -375,7 +375,7 @@ namespace System.Windows.Forms public void GoSearch () { - string url = "http://www.google.com"; + string url = "http://www.example.com"; try { Microsoft.Win32.RegistryKey reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey (@"Software\Microsoft\Internet Explorer\Main\Search Page"); if (reg != null) { diff --git a/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs.REMOVED.git-id b/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs.REMOVED.git-id index 44cdcefff5..360a14976b 100644 --- a/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs.REMOVED.git-id +++ b/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs.REMOVED.git-id @@ -1 +1 @@ -3425af7c4a8fba37e198371502e25942225f840c \ No newline at end of file +8b90abdd4c277e5549f2e649cb1ad95b902c3ce5 \ No newline at end of file diff --git a/mcs/class/System.Windows.Forms/Test/System.Resources/ResXResourceReaderTest.cs b/mcs/class/System.Windows.Forms/Test/System.Resources/ResXResourceReaderTest.cs index 47b1ad61fe..aa00db41ad 100644 --- a/mcs/class/System.Windows.Forms/Test/System.Resources/ResXResourceReaderTest.cs +++ b/mcs/class/System.Windows.Forms/Test/System.Resources/ResXResourceReaderTest.cs @@ -456,7 +456,7 @@ namespace MonoTests.System.Resources { { const string resXTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + - "<o:Document xmlns:x=\"http://www.mono-project.com\" xmlns:o=\"http://tempuri.org\">" + + "<o:Document xmlns:x=\"http://www.example.com\" xmlns:o=\"http://tempuri.org\">" + " <o:Content>" + " <x:DaTa name=\"name\">" + " <o:value>de Icaza</o:value>" + diff --git a/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/DataGridViewColumnTest.cs b/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/DataGridViewColumnTest.cs index c9abe45377..e68cb4919b 100644 --- a/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/DataGridViewColumnTest.cs +++ b/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/DataGridViewColumnTest.cs @@ -262,5 +262,17 @@ namespace MonoTests.System.Windows.Forms dgv.Columns.Add (dvc); Assert.IsNull (dvc.CellTemplate.DataGridView, "#1"); } + + [Test] + public void SetNewHeaderCell () + { + var dgv = new DataGridView (); + var dvc = new DataGridViewTextBoxColumn (); + var dch = new DataGridViewColumnHeaderCell (); + dgv.Columns.Add (dvc); + dvc.HeaderCell = dch; + Assert.IsNotNull (dch.DataGridView, "#1"); + Assert.True (dch.ColumnIndex >= 0, "#2"); + } } } diff --git a/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/EventArgsTest.cs b/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/EventArgsTest.cs index 04784087a5..3d9dd5dcf1 100644 --- a/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/EventArgsTest.cs +++ b/mcs/class/System.Windows.Forms/Test/System.Windows.Forms/EventArgsTest.cs @@ -441,7 +441,7 @@ namespace MonoTests.System.Windows.Forms [Test] public void TestWebBrowserDocumentCompletedEventArgs() { - Uri url = new Uri("http://www.mono-project.com/"); + Uri url = new Uri("http://www.example.com/"); WebBrowserDocumentCompletedEventArgs e = new WebBrowserDocumentCompletedEventArgs(url); @@ -451,7 +451,7 @@ namespace MonoTests.System.Windows.Forms [Test] public void TestWebBrowserNavigatedEventArgs () { - Uri url = new Uri ("http://www.mono-project.com/"); + Uri url = new Uri ("http://www.example.com/"); WebBrowserNavigatedEventArgs e = new WebBrowserNavigatedEventArgs (url); @@ -461,7 +461,7 @@ namespace MonoTests.System.Windows.Forms [Test] public void TestWebBrowserNavigatingEventArgs () { - Uri url = new Uri ("http://www.mono-project.com/"); + Uri url = new Uri ("http://www.example.com/"); string frame = "TOP"; WebBrowserNavigatingEventArgs e = new WebBrowserNavigatingEventArgs (url, frame); diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlArrayAttribute.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlArrayAttribute.cs index 0d927b5a7d..6ab098b0a3 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/XmlArrayAttribute.cs +++ b/mcs/class/System.XML/System.Xml.Serialization/XmlArrayAttribute.cs @@ -36,8 +36,7 @@ namespace System.Xml.Serialization /// <summary> /// Summary description for XmlArrayAttribute. /// </summary> - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field - | AttributeTargets.Parameter | AttributeTargets.ReturnValue)] + [AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple=false)] public class XmlArrayAttribute : Attribute { private string elementName; diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlChoiceIdentifierAttribute.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlChoiceIdentifierAttribute.cs index fc4fefc966..8fa3af44f5 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/XmlChoiceIdentifierAttribute.cs +++ b/mcs/class/System.XML/System.Xml.Serialization/XmlChoiceIdentifierAttribute.cs @@ -36,8 +36,7 @@ namespace System.Xml.Serialization /// <summary> /// Summary description for XmlChoiceIdentifierAttribute. /// </summary> - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field - | AttributeTargets.Parameter | AttributeTargets.ReturnValue)] + [AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple=false)] public class XmlChoiceIdentifierAttribute : Attribute { private string memberName; diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs index 8aa809bd81..cdfcfb43a6 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs +++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs @@ -43,10 +43,11 @@ using System.Xml.Serialization.Configuration; namespace System.Xml.Serialization { - public class XmlSchemaImporter -#if !MOBILE - : SchemaImporter +#if MOBILE + public abstract class SchemaImporter {} #endif + + public class XmlSchemaImporter : SchemaImporter { #region Fields diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializerAssemblyAttribute.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializerAssemblyAttribute.cs index 2642738937..596551d78b 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializerAssemblyAttribute.cs +++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializerAssemblyAttribute.cs @@ -33,7 +33,7 @@ using System; namespace System.Xml.Serialization { - [AttributeUsage (AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Enum)] + [AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Struct, AllowMultiple=false)] public sealed class XmlSerializerAssemblyAttribute : Attribute { string _assemblyName; diff --git a/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs b/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs index 9b29638f37..e01178b0b0 100644 --- a/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs +++ b/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs @@ -92,6 +92,7 @@ namespace MonoTests.System.Xml.Xsl xslt.Load (new XPathDocument (new XmlTextReader (xsl, XmlNodeType.Document, null))); } +#if !DISABLE_SECURITY [Test] [Category ("MobileNotWorking")] public void MsxslTest() { @@ -115,7 +116,7 @@ xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" xmlns:stringutils=""urn:schemas-s XslTransform transform = new XslTransform(); XmlTextReader reader = new XmlTextReader(stringReader); - transform.Load(reader, new XmlUrlResolver(), AppDomain.CurrentDomain.Evidence); + transform.Load(reader, new XmlUrlResolver()); StringBuilder sb = new StringBuilder(); StringWriter writer = new StringWriter(sb, CultureInfo.InvariantCulture); @@ -129,6 +130,7 @@ xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" xmlns:stringutils=""urn:schemas-s Assert.AreEqual ("test".PadRight(20), sb.ToString()); } +#endif [Test] public void MSXslNodeSet () @@ -429,7 +431,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros XmlTextReader xsltRdr = new XmlTextReader (new StringReader (xsltFragment)); XslTransform stylesheet = new XslTransform (); - stylesheet.Load (xsltRdr, new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + stylesheet.Load (xsltRdr, new XmlUrlResolver ()); StringWriter sw = new StringWriter (); @@ -467,7 +469,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); StringWriter sw = new StringWriter (); @@ -499,7 +501,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format(xsltFragment, "standalone=\"yes\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -509,7 +511,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "standalone=\"no\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -519,7 +521,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -537,7 +539,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -560,7 +562,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros // standalone is "Yes" xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "Yes"))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -571,7 +573,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -589,7 +591,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -613,7 +615,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "omit-xml-declaration=\"yes\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ("<root />", sw.ToString (), "#1"); @@ -621,7 +623,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "omit-xml-declaration=\"no\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -639,7 +641,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -652,7 +654,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -675,7 +677,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros // omit-xml-declaration is "Yes" xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "Yes"))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -686,7 +688,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -718,7 +720,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -740,7 +742,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -762,7 +764,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -785,7 +787,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -808,7 +810,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -829,7 +831,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -864,7 +866,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -887,7 +889,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -910,7 +912,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -933,7 +935,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -956,7 +958,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -979,7 +981,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1015,7 +1017,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"yes\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format(CultureInfo.InvariantCulture, @@ -1031,7 +1033,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"no\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1044,7 +1046,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1083,7 +1085,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"yes\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1099,7 +1101,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"no\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1111,7 +1113,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1150,7 +1152,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"yes\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1165,7 +1167,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"no\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1177,7 +1179,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1222,7 +1224,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"yes\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1246,7 +1248,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "indent=\"no\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1258,7 +1260,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1289,7 +1291,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -1302,7 +1304,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -1325,7 +1327,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros // indent is "Yes" xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "Yes"))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1336,7 +1338,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, ""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1364,7 +1366,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1394,7 +1396,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, string.Empty))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1405,7 +1407,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format(xsltFragment, "encoding=\"iso-8859-1\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1416,7 +1418,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "encoding=\"doesnotexist\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1427,7 +1429,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "encoding=\"\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1458,7 +1460,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, string.Empty))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1473,7 +1475,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "encoding=\"iso-8859-1\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1488,7 +1490,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "encoding=\"doesnotexist\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1503,7 +1505,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "encoding=\"\""))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1537,7 +1539,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "1.0"))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1548,7 +1550,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "2.0"))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1559,7 +1561,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, "BLABLA"))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1597,7 +1599,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw = new StringWriter (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, string.Empty))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format(CultureInfo.InvariantCulture, @@ -1616,7 +1618,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, options))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1636,7 +1638,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros sw.GetStringBuilder ().Length = 0; xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, options))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, @@ -1682,7 +1684,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, string.Empty))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1705,7 +1707,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, options))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1729,7 +1731,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros ms = new MemoryStream (); xsltProcessor.Load (new XmlTextReader (new StringReader ( string.Format (xsltFragment, options))), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ()); ms.Position = 0; using (StreamReader sr = new StreamReader (ms, true)) { @@ -1758,7 +1760,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } [Test] @@ -1779,7 +1781,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ()); Assert.AreEqual ( @@ -1796,7 +1798,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros </xsl:stylesheet>"; XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); } // http://support.microsoft.com/kb/832757/en-us @@ -1822,7 +1824,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, new XsltArgumentList (), sw, new XmlUrlResolver ()); @@ -1861,7 +1863,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros StringWriter sw = new StringWriter (); XslTransform xsltProcessor = new XslTransform (); xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)), - new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence); + new XmlUrlResolver ()); xsltProcessor.Transform (xmlDoc, new XsltArgumentList (), sw, new XmlUrlResolver ()); diff --git a/mcs/class/System.XML/Test/System.Xml.Xsl/XsltArgumentListCas.cs b/mcs/class/System.XML/Test/System.Xml.Xsl/XsltArgumentListCas.cs index d501f3fccc..c1bd1453f2 100644 --- a/mcs/class/System.XML/Test/System.Xml.Xsl/XsltArgumentListCas.cs +++ b/mcs/class/System.XML/Test/System.Xml.Xsl/XsltArgumentListCas.cs @@ -60,7 +60,7 @@ namespace MonoCasTests.System.Xml.Xsl { public void AddExtensionObject () { XsltArgumentList xal = new XsltArgumentList (); - xal.AddExtensionObject ("http://www.go-mono.com", new object ()); + xal.AddExtensionObject ("http://www.example.com", new object ()); } // we use reflection to call XsltArgumentList as it's AddExtensionObject method @@ -74,7 +74,7 @@ namespace MonoCasTests.System.Xml.Xsl { // requires FullTrust, so denying anything break the requirements Assert.IsNotNull (addExtensionObject, "AddExtensionObject"); XsltArgumentList xal = new XsltArgumentList (); - addExtensionObject.Invoke (xal, new object[2] { "http://www.go-mono.com", new object () }); + addExtensionObject.Invoke (xal, new object[2] { "http://www.example.com", new object () }); } } } diff --git a/mcs/class/System.XML/Test/System.Xml/XmlDocumentTests.cs b/mcs/class/System.XML/Test/System.Xml/XmlDocumentTests.cs index 9ba5a36b29..5a7fb524d0 100644 --- a/mcs/class/System.XML/Test/System.Xml/XmlDocumentTests.cs +++ b/mcs/class/System.XML/Test/System.Xml/XmlDocumentTests.cs @@ -1049,7 +1049,7 @@ namespace MonoTests.System.Xml // public void LoadExternalUri () // { // // set any URL of well-formed XML. -// document.Load ("http://www.go-mono.com/index.rss"); +// document.Load ("http://www.example.com/index.rss"); // } // [Test] comment out in the meantime. diff --git a/mcs/class/System.XML/Test/System.Xml/XmlResolverTest.cs b/mcs/class/System.XML/Test/System.Xml/XmlResolverTest.cs index 15b2097448..4246868e6e 100644 --- a/mcs/class/System.XML/Test/System.Xml/XmlResolverTest.cs +++ b/mcs/class/System.XML/Test/System.Xml/XmlResolverTest.cs @@ -80,23 +80,23 @@ namespace MonoTests.System.Xml { } else Assert.AreEqual ("file:///Moonlight", uri.ToString (), "ToString"); - uri = new Uri ("http://www.mono-project.com"); + uri = new Uri ("http://www.example.com"); Uri u2 = xr.ResolveUri (uri, null); Assert.AreEqual (uri, u2, "Equals"); Assert.IsTrue (Object.ReferenceEquals (uri, u2), "ReferenceEquals"); u2 = xr.ResolveUri (uri, "/Moonlight"); Assert.IsTrue (uri.IsAbsoluteUri, "abs,string"); - Assert.AreEqual ("http://www.mono-project.com/Moonlight", u2.ToString (), "ToString3"); + Assert.AreEqual ("http://www.example.com/Moonlight", u2.ToString (), "ToString3"); - u2 = xr.ResolveUri (null, "http://www.mono-project.com"); + u2 = xr.ResolveUri (null, "http://www.example.com"); Assert.IsTrue (u2.IsAbsoluteUri, "null,absolute/http"); Assert.AreEqual (uri, u2, "Equals-2"); - u2 = xr.ResolveUri (null, "https://www.mono-project.com"); + u2 = xr.ResolveUri (null, "https://www.example.com"); Assert.IsTrue (u2.IsAbsoluteUri, "null,absolute/https"); - u2 = xr.ResolveUri (null, "ftp://mono-project.com/download"); + u2 = xr.ResolveUri (null, "ftp://example.com/download"); Assert.IsTrue (u2.IsAbsoluteUri, "null,absolute/ftp"); u2 = xr.ResolveUri (null, "file:///mystuff"); @@ -117,7 +117,7 @@ namespace MonoTests.System.Xml { public void TestAsync () { var ar = new AsyncXmlResolver (); - var uri = new Uri ("http://www.mono-project.com"); + var uri = new Uri ("http://www.example.com"); ar.GetEntityAsync (uri, null, typeof(string)); } } diff --git a/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverCas.cs b/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverCas.cs index 2e5316c1ff..144265de83 100644 --- a/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverCas.cs +++ b/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverCas.cs @@ -59,7 +59,7 @@ namespace MonoCasTests.System.Xml { public void EmptyEvidenceDeniedAccess () { XmlSecureResolver r = new XmlSecureResolver (new XmlUrlResolver (), (Evidence)null); - Uri uri = r.ResolveUri (null, "http://www.go-mono.com"); + Uri uri = r.ResolveUri (null, "http://www.example.com"); r.GetEntity (uri, null, typeof (Stream)); } diff --git a/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverTests.cs b/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverTests.cs index ffbb1f5035..7eb4ba2699 100644 --- a/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverTests.cs +++ b/mcs/class/System.XML/Test/System.Xml/XmlSecureResolverTests.cs @@ -36,14 +36,14 @@ namespace MonoTests.System.Xml public void EmptyCtorCannotResolve () { XmlSecureResolver r = new XmlSecureResolver (null, (Evidence)null); - r.ResolveUri (null, "http://www.go-mono.com"); + r.ResolveUri (null, "http://www.example.com"); } [Test] public void EmptyEvidenceWontMatter () { XmlSecureResolver r = new XmlSecureResolver (new XmlUrlResolver (), (Evidence)null); - Uri uri = r.ResolveUri (null, "http://www.go-mono.com"); + Uri uri = r.ResolveUri (null, "http://www.example.com"); Assert.IsNotNull (uri); } @@ -109,9 +109,9 @@ namespace MonoTests.System.Xml public void CreateEvidenceForUrl_Http () { // http:// - Evidence e = XmlSecureResolver.CreateEvidenceForUrl ("http://www.go-mono.com"); + Evidence e = XmlSecureResolver.CreateEvidenceForUrl ("http://www.example.com"); #pragma warning disable 612 - Assert.AreEqual (3, e.Count, "http://www.go-mono.com"); + Assert.AreEqual (3, e.Count, "http://www.example.com"); #pragma warning restore bool url = false; bool zone = false; diff --git a/mcs/class/System.XML/Test/System.Xml/XmlUrlResolverTests.cs b/mcs/class/System.XML/Test/System.Xml/XmlUrlResolverTests.cs index 9d085ec503..29f9997a0b 100644 --- a/mcs/class/System.XML/Test/System.Xml/XmlUrlResolverTests.cs +++ b/mcs/class/System.XML/Test/System.Xml/XmlUrlResolverTests.cs @@ -54,7 +54,7 @@ namespace MonoTests.System.Xml [Test] public void HttpUri2 () { - Assert.AreEqual (resolver.ResolveUri (new Uri ("http://go-mono.com"), null).ToString (), "http://go-mono.com/"); + Assert.AreEqual (resolver.ResolveUri (new Uri ("http://example.com"), null).ToString (), "http://example.com/"); } [Test] @@ -70,7 +70,7 @@ namespace MonoTests.System.Xml // [Test] Uncomment if you want to test. public void GetEntityWithNullArgs () { - Uri uri = new Uri ("http://www.go-mono.com/index.rss"); + Uri uri = new Uri ("http://www.example.com/index.rss"); resolver.GetEntity (uri, null, null); } @@ -85,7 +85,7 @@ namespace MonoTests.System.Xml [ExpectedException (typeof (XmlException))] public void GetEntityWithNonStreamReturnType () { - resolver.GetEntity (new Uri ("http://www.go-mono.com/"), null, typeof (File)); + resolver.GetEntity (new Uri ("http://www.example.com/"), null, typeof (File)); } [Test] // bug #998 diff --git a/mcs/class/System.XML/Test/XmlFiles/xsd/77687.xsd b/mcs/class/System.XML/Test/XmlFiles/xsd/77687.xsd index 6737539e3e..6ace51e9fb 100644 --- a/mcs/class/System.XML/Test/XmlFiles/xsd/77687.xsd +++ b/mcs/class/System.XML/Test/XmlFiles/xsd/77687.xsd @@ -1,5 +1,5 @@ <xs:schema - targetNamespace="http://go-mono.com/tests" + targetNamespace="http://example.com/tests" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:include schemaLocation="77687inc.xsd"/> diff --git a/mcs/class/System.XML/Test/XmlFiles/xsd/77687inc.xsd b/mcs/class/System.XML/Test/XmlFiles/xsd/77687inc.xsd index 7f6be11b0e..a18a13c2d6 100644 --- a/mcs/class/System.XML/Test/XmlFiles/xsd/77687inc.xsd +++ b/mcs/class/System.XML/Test/XmlFiles/xsd/77687inc.xsd @@ -1,5 +1,5 @@ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" -targetNamespace="http://go-mono.com/tests" xmlns="http://go-mono.com/tests" +targetNamespace="http://example.com/tests" xmlns="http://example.com/tests" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> diff --git a/mcs/class/System.Xaml/Test/System.Xaml/XamlLanguageTest.cs b/mcs/class/System.Xaml/Test/System.Xaml/XamlLanguageTest.cs index 00af049209..d4837b1647 100755 --- a/mcs/class/System.Xaml/Test/System.Xaml/XamlLanguageTest.cs +++ b/mcs/class/System.Xaml/Test/System.Xaml/XamlLanguageTest.cs @@ -806,10 +806,7 @@ namespace MonoTests.System.Xaml var l = t.GetAllMembers ().ToArray (); - if (underlyingType == typeof (decimal)) - Assert.AreEqual (6, l.Length, "#31"); //decimal has 6 internal properties (see Decimal.DecCalc.cs) - else - Assert.AreEqual (0, l.Length, "#31"); + Assert.AreEqual (0, l.Length, "#31"); } void TestXamlTypeExtension (XamlType t, string name, Type underlyingType, Type extReturnType, bool noTypeConverter) diff --git a/mcs/class/System/Assembly/AssemblyInfo.cs b/mcs/class/System/Assembly/AssemblyInfo.cs index c36b1ba454..bfe1e6a7b9 100644 --- a/mcs/class/System/Assembly/AssemblyInfo.cs +++ b/mcs/class/System/Assembly/AssemblyInfo.cs @@ -92,3 +92,5 @@ using System.Runtime.InteropServices; [assembly: TypeForwardedTo (typeof (System.Collections.Generic.Stack<>))] [assembly: TypeForwardedTo (typeof (System.Collections.Generic.Queue<>))] +[assembly: TypeForwardedTo (typeof (System.IO.Enumeration.FileSystemName))] +[assembly: TypeForwardedTo (typeof (System.Security.Cryptography.CryptographicOperations))] diff --git a/mcs/class/System/Makefile b/mcs/class/System/Makefile index 7d9773bb5b..fe9de27870 100644 --- a/mcs/class/System/Makefile +++ b/mcs/class/System/Makefile @@ -20,9 +20,16 @@ TEST_RESOURCE_FILES = \ Test/System/test-uri-relative-props.txt \ Test/compressed.bin +XTEST_RESOURCE_FILES = \ + Test/TestData/testclienteku.contoso.com.pfx \ + Test/TestData/testnoeku.contoso.com.pfx \ + Test/TestData/testselfsignedservereku.contoso.com.pfx \ + Test/TestData/testservereku.contoso.com.pfx + USE_XTEST_REMOTE_EXECUTOR = YES XTEST_LIB_REFS = System System.Core System.Net Facades/System.Threading.Tasks Facades/System.Runtime.InteropServices.RuntimeInformation System.Net.Http LIB_MCS_FLAGS = -d:COREFX -d:CONFIGURATION_2_0 -d:SYSTEM_NET_PRIMITIVES_DLL -d:XML_DEP -d:SECURITY_DEP $(REFERENCE_SOURCES_FLAGS) -unsafe $(RESOURCE_FILES:%=-resource:%) -nowarn:436 +XTEST_MCS_FLAGS += $(XTEST_RESOURCE_FILES:%=-resource:%) ifndef NO_MONO_SECURITY MONO_SECURITY := Mono.Security @@ -115,12 +122,15 @@ EXTRA_DISTFILES = \ Test/System.Security.Cryptography.X509Certificates/pkits/README \ Test/System.Security.Cryptography.X509Certificates/pkits/x509build.cs \ $(RESOURCE_FILES) \ - $(TEST_RESOURCE_FILES) + $(TEST_RESOURCE_FILES) \ + $(XTEST_RESOURCE_FILES) include ../../build/library.make $(test_lib_output): $(TEST_RESOURCE_FILES) $(test_lib_dir) +$(xtest_lib_output): $(XTEST_RESOURCE_FILES) + # Helper target to run the perl regex test suite regex-check: $(MAKE) check FIXTURE=System.Text.RegularExpressions.PerlTest diff --git a/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs b/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs index ba44774ea0..c94ad88cd0 100644 --- a/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs +++ b/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs @@ -71,11 +71,6 @@ namespace Mono.AppleTls handle = GCHandle.Alloc (this, GCHandleType.Weak); readFunc = NativeReadCallback; writeFunc = NativeWriteCallback; - - if (IsServer) { - if (LocalServerCertificate == null) - throw new ArgumentNullException (nameof (LocalServerCertificate)); - } } public IntPtr Handle { @@ -167,8 +162,20 @@ namespace Mono.AppleTls SetSessionOption (SslSessionOption.BreakOnServerAuth, true); if (IsServer) { - SafeSecCertificateHandle[] intermediateCerts; - serverIdentity = AppleCertificateHelper.GetIdentity (LocalServerCertificate, out intermediateCerts); + // If we have any of the server certificate selection callbacks, the we need to break on + // the ClientHello to pass the requested server name to the callback. + if (Options.ServerCertSelectionDelegate != null || Settings.ClientCertificateSelectionCallback != null) + SetSessionOption (SslSessionOption.BreakOnClientHello, true); + else if (LocalServerCertificate != null) + SetServerIdentity (LocalServerCertificate); + else + throw new SSA.AuthenticationException (SR.net_ssl_io_no_server_cert); + } + } + + void SetServerIdentity (X509Certificate certificate) + { + using (var serverIdentity = AppleCertificateHelper.GetIdentity (certificate, out var intermediateCerts)) { if (serverIdentity.IsInvalid) throw new SSA.AuthenticationException ("Unable to get server certificate from keychain."); @@ -199,15 +206,21 @@ namespace Mono.AppleTls var status = SSLHandshake (Handle); Debug ("Handshake: {0} - {0:x}", status); - CheckStatusAndThrow (status, SslStatus.WouldBlock, SslStatus.PeerAuthCompleted, SslStatus.PeerClientCertRequested); + CheckStatusAndThrow (status, SslStatus.WouldBlock, SslStatus.PeerAuthCompleted, SslStatus.PeerClientCertRequested, SslStatus.ClientHelloReceived); - if (status == SslStatus.PeerAuthCompleted) { + switch (status) { + case SslStatus.PeerAuthCompleted: EvaluateTrust (); - } else if (status == SslStatus.PeerClientCertRequested) { + break; + case SslStatus.PeerClientCertRequested: ClientCertificateRequested (); - } else if (status == SslStatus.WouldBlock) { + break; + case SslStatus.ClientHelloReceived: + ClientHelloReceived (); + break; + case SslStatus.WouldBlock: return false; - } else if (status == SslStatus.Success) { + case SslStatus.Success: Debug ("Handshake complete!"); handshakeFinished = true; renegotiating = false; @@ -229,6 +242,13 @@ namespace Mono.AppleTls SetCertificate (clientIdentity, new SafeSecCertificateHandle [0]); } + void ClientHelloReceived () + { + var peerName = GetRequestedPeerName (); + Debug ($"Handshake - received ClientHello ({peerName})"); + SetServerIdentity (SelectServerCertificate (peerName)); + } + void EvaluateTrust () { InitializeSession (); @@ -658,6 +678,32 @@ namespace Mono.AppleTls } } + [DllImport (SecurityLibrary)] + extern static /* OSStatus */ SslStatus SSLCopyRequestedPeerNameLength (/* SSLContextRef */ IntPtr context, /* size_t * */ out IntPtr peerNameLen); + + [DllImport (SecurityLibrary)] + extern static /* OSStatus */ SslStatus SSLCopyRequestedPeerName (/* SSLContextRef */ IntPtr context, /* char * */ byte[] peerName, /* size_t * */ ref IntPtr peerNameLen); + + public string GetRequestedPeerName () + { + IntPtr length; + var result = SSLCopyRequestedPeerNameLength (Handle, out length); + CheckStatusAndThrow (result); + if (result != SslStatus.Success || (int)length == 0) + return String.Empty; + var bytes = new byte [(int)length]; + result = SSLCopyRequestedPeerName (Handle, bytes, ref length); + CheckStatusAndThrow (result); + + int requestedPeerNameLength = (int)length; + + if (result != SslStatus.Success) + return string.Empty; + if (requestedPeerNameLength > 0 && bytes [requestedPeerNameLength-1] == 0) + requestedPeerNameLength = requestedPeerNameLength - 1; + return Encoding.UTF8.GetString (bytes, 0, requestedPeerNameLength); + } + [DllImport (SecurityLibrary)] extern unsafe static /* OSStatus */ SslStatus SSLSetCertificate (/* SSLContextRef */ IntPtr context, /* CFArrayRef */ IntPtr certRefs); diff --git a/mcs/class/System/Mono.AppleTls/SecureTransport.cs b/mcs/class/System/Mono.AppleTls/SecureTransport.cs index 26c19c7fb1..337612b862 100644 --- a/mcs/class/System/Mono.AppleTls/SecureTransport.cs +++ b/mcs/class/System/Mono.AppleTls/SecureTransport.cs @@ -73,7 +73,7 @@ namespace Mono.AppleTls { BadConfiguration = -9848, UnexpectedRecord = -9849, SSLWeakPeerEphemeralDHKey = -9850, - SSLClientHelloReceived = -9851 // non falta + ClientHelloReceived = -9851 // non falta } // Security.framework/Headers/SecureTransport.h @@ -91,7 +91,7 @@ namespace Mono.AppleTls { // Fallback = 6, - // BreakOnClientHello = 7, + BreakOnClientHello = 7, AllowRenegotiation = 8, } diff --git a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs index e96e4c60c3..06136f6115 100644 --- a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs +++ b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs @@ -66,7 +66,7 @@ namespace Mono.Btls public MonoBtlsContext (MNS.MobileAuthenticatedStream parent, MNS.MonoSslAuthenticationOptions options) : base (parent, options) { - if (IsServer) + if (IsServer && LocalServerCertificate != null) nativeServerCertificate = GetPrivateCertificate (LocalServerCertificate); } @@ -123,6 +123,22 @@ namespace Mono.Btls return 1; } + int ServerNameCallback () + { + Debug ("SERVER NAME CALLBACK"); + var name = ssl.GetServerName (); + Debug ($"SERVER NAME CALLBACK #1: {name}"); + + var certificate = SelectServerCertificate (name); + if (certificate == null) + return 1; + + nativeServerCertificate = GetPrivateCertificate (certificate); + SetPrivateCertificate (nativeServerCertificate); + + return 1; + } + public override void StartHandshake () { InitializeConnection (); @@ -133,7 +149,8 @@ namespace Mono.Btls ssl.SetBio (bio); if (IsServer) { - SetPrivateCertificate (nativeServerCertificate); + if (nativeServerCertificate != null) + SetPrivateCertificate (nativeServerCertificate); } else { ssl.SetServerName (ServerName); } @@ -242,6 +259,10 @@ namespace Mono.Btls if (!IsServer) ctx.SetSelectCallback (SelectCallback); + if (IsServer && (Options.ServerCertSelectionDelegate != null || Settings.ClientCertificateSelectionCallback != null)) { + ctx.SetServerNameCallback (ServerNameCallback); + } + ctx.SetVerifyParam (MonoBtlsProvider.GetVerifyParam (Settings, ServerName, IsServer)); TlsProtocolCode? minProtocol, maxProtocol; diff --git a/mcs/class/System/Mono.Btls/MonoBtlsObject.cs b/mcs/class/System/Mono.Btls/MonoBtlsObject.cs index f1b4fd7685..c37dcc3804 100644 --- a/mcs/class/System/Mono.Btls/MonoBtlsObject.cs +++ b/mcs/class/System/Mono.Btls/MonoBtlsObject.cs @@ -26,6 +26,7 @@ #if SECURITY_DEP && MONO_FEATURE_BTLS using System; using System.Threading; +using System.Security.Authentication; using System.Security.Cryptography; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; @@ -108,6 +109,9 @@ namespace Mono.Btls if (error == null) return; + if (error is AuthenticationException || error is NotSupportedException) + throw error; + string message; if (callerName != null) message = $"Caught unhandled exception in `{GetType ().Name}.{callerName}`."; diff --git a/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs b/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs index 46aab0e44a..20678daa12 100644 --- a/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs +++ b/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs @@ -34,6 +34,7 @@ namespace Mono.Btls { delegate int MonoBtlsVerifyCallback (MonoBtlsX509StoreCtx ctx); delegate int MonoBtlsSelectCallback (string[] acceptableIssuers); + delegate int MonoBtlsServerNameCallback (); class MonoBtlsSsl : MonoBtlsObject { diff --git a/mcs/class/System/Mono.Btls/MonoBtlsSslCtx.cs b/mcs/class/System/Mono.Btls/MonoBtlsSslCtx.cs index 5940db6969..124370679a 100644 --- a/mcs/class/System/Mono.Btls/MonoBtlsSslCtx.cs +++ b/mcs/class/System/Mono.Btls/MonoBtlsSslCtx.cs @@ -90,15 +90,22 @@ namespace Mono.Btls [DllImport (BTLS_DYLIB)] extern static int mono_btls_ssl_ctx_set_client_ca_list (IntPtr handle, int count, IntPtr sizes, IntPtr data); + [DllImport (BTLS_DYLIB)] + extern static void mono_btls_ssl_ctx_set_server_name_callback (IntPtr handle, IntPtr func); + delegate int NativeVerifyFunc (IntPtr instance, int preverify_ok, IntPtr ctx); delegate int NativeSelectFunc (IntPtr instance, int count, IntPtr sizes, IntPtr data); + delegate int NativeServerNameFunc (IntPtr instance); NativeVerifyFunc verifyFunc; NativeSelectFunc selectFunc; + NativeServerNameFunc serverNameFunc; IntPtr verifyFuncPtr; IntPtr selectFuncPtr; + IntPtr serverNameFuncPtr; MonoBtlsVerifyCallback verifyCallback; MonoBtlsSelectCallback selectCallback; + MonoBtlsServerNameCallback serverNameCallback; MonoBtlsX509Store store; GCHandle instance; IntPtr instancePtr; @@ -118,8 +125,10 @@ namespace Mono.Btls verifyFunc = NativeVerifyCallback; selectFunc = NativeSelectCallback; + serverNameFunc = NativeServerNameCallback; verifyFuncPtr = Marshal.GetFunctionPointerForDelegate (verifyFunc); selectFuncPtr = Marshal.GetFunctionPointerForDelegate (selectFunc); + serverNameFuncPtr = Marshal.GetFunctionPointerForDelegate (serverNameFunc); store = new MonoBtlsX509Store (Handle); } @@ -300,6 +309,27 @@ namespace Mono.Btls } } + public void SetServerNameCallback (MonoBtlsServerNameCallback callback) + { + CheckThrow (); + + serverNameCallback = callback; + mono_btls_ssl_ctx_set_server_name_callback ( + Handle.DangerousGetHandle (), serverNameFuncPtr); + } + + [Mono.Util.MonoPInvokeCallback (typeof (NativeServerNameFunc))] + static int NativeServerNameCallback (IntPtr instance) + { + var c = (MonoBtlsSslCtx)GCHandle.FromIntPtr (instance).Target; + try { + return c.serverNameCallback (); + } catch (Exception ex) { + c.SetException (ex); + return 0; + } + } + protected override void Close () { if (store != null) { diff --git a/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs b/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs index 79ef95bf40..a123314dae 100644 --- a/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs +++ b/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs @@ -187,7 +187,8 @@ namespace Mono.Net.Security await ProcessOperation (cancellationToken).ConfigureAwait (false); return new AsyncProtocolResult (UserResult); } catch (Exception ex) { - var info = Parent.SetException (MobileAuthenticatedStream.GetSSPIException (ex)); + // Any exceptions thrown by the underlying stream will be propagated. + var info = Parent.SetException (ex); return new AsyncProtocolResult (info); } } @@ -218,7 +219,12 @@ namespace Mono.Net.Security case AsyncOperationStatus.Initialize: case AsyncOperationStatus.Continue: case AsyncOperationStatus.ReadDone: - newStatus = Run (status); + try { + newStatus = Run (status); + } catch (Exception ex) { + // We only want to wrap exceptions that are thrown by the TLS code. + throw MobileAuthenticatedStream.GetSSPIException (ex); + } break; default: throw new InvalidOperationException (); diff --git a/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs b/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs index ac547421a0..f603a3c23e 100644 --- a/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs +++ b/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs @@ -115,14 +115,16 @@ namespace Mono.Net.Security internal static Exception GetSSPIException (Exception e) { - if (e is OperationCanceledException || e is IOException || e is ObjectDisposedException || e is AuthenticationException) + if (e is OperationCanceledException || e is IOException || e is ObjectDisposedException || + e is AuthenticationException || e is NotSupportedException) return e; return new AuthenticationException (SR.net_auth_SSPI, e); } internal static Exception GetIOException (Exception e, string message) { - if (e is OperationCanceledException || e is IOException || e is ObjectDisposedException || e is AuthenticationException) + if (e is OperationCanceledException || e is IOException || e is ObjectDisposedException || + e is AuthenticationException || e is NotSupportedException) return e; return new IOException (message, e); } @@ -349,7 +351,7 @@ namespace Mono.Net.Security async Task ProcessAuthentication (bool runSynchronously, MonoSslAuthenticationOptions options, CancellationToken cancellationToken) { if (options.ServerMode) { - if (options.ServerCertificate == null) + if (options.ServerCertificate == null && options.ServerCertSelectionDelegate == null) throw new ArgumentException (nameof (options.ServerCertificate)); } else { if (options.TargetHost == null) @@ -826,10 +828,16 @@ namespace Mono.Net.Security * to take care of I/O and call it again. */ var newStatus = AsyncOperationStatus.Continue; - if (xobileTlsContext.ProcessHandshake ()) { - xobileTlsContext.FinishHandshake (); - operation = Operation.Authenticated; - newStatus = AsyncOperationStatus.Complete; + try { + if (xobileTlsContext.ProcessHandshake ()) { + xobileTlsContext.FinishHandshake (); + operation = Operation.Authenticated; + newStatus = AsyncOperationStatus.Complete; + } + } catch (Exception ex) { + SetException (GetSSPIException (ex)); + Dispose (); + throw; } if (lastException != null) @@ -920,7 +928,7 @@ namespace Mono.Net.Security try { lock (ioLock) { Debug ("Dispose: {0}", xobileTlsContext != null); - lastException = ExceptionDispatchInfo.Capture (new ObjectDisposedException ("MobileAuthenticatedStream")); + SetException (new ObjectDisposedException ("MobileAuthenticatedStream")); if (xobileTlsContext != null) { xobileTlsContext.Dispose (); xobileTlsContext = null; diff --git a/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs b/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs index 2d95564982..deeda5405a 100644 --- a/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs +++ b/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs @@ -146,6 +146,7 @@ namespace Mono.Net.Security internal X509Certificate LocalServerCertificate { get; + private set; } internal abstract bool IsRemoteCertificateAvailable { @@ -186,6 +187,33 @@ namespace Mono.Net.Security return result != null && result.Trusted && !result.UserDenied; } + protected X509Certificate SelectServerCertificate (string serverIdentity) + { + // There are three options for selecting the server certificate. When + // selecting which to use, we prioritize the new ServerCertSelectionDelegate + // API. If the new API isn't used we call LocalCertSelectionCallback (for compat + // with .NET Framework), and if neither is set we fall back to using ServerCertificate. + + if (Options.ServerCertSelectionDelegate != null) { + LocalServerCertificate = Options.ServerCertSelectionDelegate (serverIdentity); + + if (LocalServerCertificate == null) + throw new AuthenticationException (SR.net_ssl_io_no_server_cert); + } else if (Settings.ClientCertificateSelectionCallback != null) { + var tempCollection = new X509CertificateCollection (); + tempCollection.Add (Options.ServerCertificate); + // We pass string.Empty here to maintain strict compatability with .NET Framework. + LocalServerCertificate = Settings.ClientCertificateSelectionCallback (string.Empty, tempCollection, null, Array.Empty<string>()); + } else { + LocalServerCertificate = Options.ServerCertificate; + } + + if (LocalServerCertificate == null) + throw new NotSupportedException (SR.net_ssl_io_no_server_cert); + + return LocalServerCertificate; + } + protected X509Certificate SelectClientCertificate (string[] acceptableIssuers) { if (Settings.DisallowUnauthenticatedCertificateRequest && !IsAuthenticated) diff --git a/mcs/class/System/Mono.Net.Security/MonoSslAuthenticationOptions.cs b/mcs/class/System/Mono.Net.Security/MonoSslAuthenticationOptions.cs index bb4af89ac6..d9273a1efb 100644 --- a/mcs/class/System/Mono.Net.Security/MonoSslAuthenticationOptions.cs +++ b/mcs/class/System/Mono.Net.Security/MonoSslAuthenticationOptions.cs @@ -83,5 +83,9 @@ namespace Mono.Net.Security public abstract bool ClientCertificateRequired { get; set; } + + internal ServerCertSelectionCallback ServerCertSelectionDelegate { + get; set; + } } } diff --git a/mcs/class/System/ReferenceSources/DynamicRoleClaimProvider.cs b/mcs/class/System/ReferenceSources/DynamicRoleClaimProvider.cs new file mode 100644 index 0000000000..5d35914ef2 --- /dev/null +++ b/mcs/class/System/ReferenceSources/DynamicRoleClaimProvider.cs @@ -0,0 +1,21 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//------------------------------------------------------------------------------ + +using System.Collections.Generic; +using System.ComponentModel; + +namespace System.Security.Claims +{ + public static class DynamicRoleClaimProvider + { + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("Use ClaimsAuthenticationManager to add claims to a ClaimsIdentity", true)] + public static void AddDynamicRoleClaims(ClaimsIdentity claimsIdentity, IEnumerable<Claim> claims) + { + claimsIdentity.ExternalClaims.Add(claims); + } + } +} \ No newline at end of file diff --git a/mcs/class/System/System.Diagnostics/PerformanceCounter.cs b/mcs/class/System/System.Diagnostics/PerformanceCounter.cs index 2c3305159d..e388d063ed 100644 --- a/mcs/class/System/System.Diagnostics/PerformanceCounter.cs +++ b/mcs/class/System/System.Diagnostics/PerformanceCounter.cs @@ -126,8 +126,22 @@ namespace System.Diagnostics { } [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern IntPtr GetImpl (string category, string counter, - string instance, out PerformanceCounterType ctype, out bool custom); + static private unsafe extern IntPtr GetImpl_icall (char *category, int category_length, + char *counter, int counter_length, char *instance, int instance_length, + out PerformanceCounterType ctype, out bool custom); + + static unsafe IntPtr GetImpl (string category, string counter, + string instance, out PerformanceCounterType ctype, out bool custom) + { + fixed (char* fixed_category = category, + fixed_counter = counter, + fixed_instance = instance) { + return GetImpl_icall (fixed_category, category?.Length ?? 0, + fixed_counter, counter?.Length ?? 0, + fixed_instance, instance?.Length ?? 0, + out ctype, out custom); + } + } [MethodImplAttribute (MethodImplOptions.InternalCall)] static extern bool GetSample (IntPtr impl, bool only_value, out CounterSample sample); diff --git a/mcs/class/System/System.Diagnostics/PerformanceCounterCategory.cs b/mcs/class/System/System.Diagnostics/PerformanceCounterCategory.cs index 84e8c1b91c..aaee066d08 100644 --- a/mcs/class/System/System.Diagnostics/PerformanceCounterCategory.cs +++ b/mcs/class/System/System.Diagnostics/PerformanceCounterCategory.cs @@ -41,30 +41,82 @@ namespace System.Diagnostics private PerformanceCounterCategoryType type = PerformanceCounterCategoryType.Unknown; [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern bool CategoryDelete (string name); + private static unsafe extern bool CategoryDelete_icall (char* name, int name_length); + + static unsafe bool CategoryDelete (string name) + { + fixed (char* fixed_name = name) + return CategoryDelete_icall (fixed_name, name?.Length ?? 0); + } [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern string CategoryHelpInternal (string category); + private unsafe static extern string CategoryHelp_icall (char* category, int category_length); + + static unsafe string CategoryHelpInternal (string category) + { + fixed (char* fixed_category = category) + return CategoryHelp_icall (fixed_category, category?.Length ?? 0); + } /* this icall allows a null counter and it will just search for the category */ [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern bool CounterCategoryExists (string counter, string category); + private static unsafe extern bool CounterCategoryExists_icall (char* counter, int counter_length, + char* category, int category_length); + + static unsafe bool CounterCategoryExists (string counter, string category) + { + fixed (char* fixed_counter = counter, + fixed_category = category) + return CounterCategoryExists_icall (fixed_counter, counter?.Length ?? 0, + fixed_category, category?.Length ?? 0); + } [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern bool Create (string categoryName, string categoryHelp, + static private unsafe extern bool Create_icall (char* categoryName, int categoryName_length, + char* categoryHelp, int categoryHelp_length, PerformanceCounterCategoryType categoryType, CounterCreationData[] items); + static unsafe bool Create (string categoryName, string categoryHelp, + PerformanceCounterCategoryType categoryType, CounterCreationData[] items) + { + fixed (char* fixed_categoryName = categoryName, + fixed_categoryHelp = categoryHelp) + return Create_icall (fixed_categoryName, categoryName?.Length ?? 0, + fixed_categoryHelp, categoryHelp?.Length ?? 0, categoryType, items); + } + [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern bool InstanceExistsInternal (string instance, string category); + static private unsafe extern bool InstanceExistsInternal_icall (char* instance, int instance_length, + char* category, int category_length); + + static unsafe bool InstanceExistsInternal (string instance, string category) + { + fixed (char* fixed_instance = instance, + fixed_category = category) + return InstanceExistsInternal_icall (fixed_instance, instance?.Length ?? 0, + fixed_category, category?.Length ?? 0); + } [MethodImplAttribute (MethodImplOptions.InternalCall)] static extern string[] GetCategoryNames (); [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern string[] GetCounterNames (string category); + static private unsafe extern string[] GetCounterNames_icall (char* category, int category_length); + + static unsafe string[] GetCounterNames (string category) + { + fixed (char* fixed_category = category) + return GetCounterNames_icall (fixed_category, category?.Length ?? 0); + } [MethodImplAttribute (MethodImplOptions.InternalCall)] - static extern string[] GetInstanceNames (string category); + static private unsafe extern string[] GetInstanceNames_icall (char* category, int category_length); + + static unsafe string[] GetInstanceNames (string category) + { + fixed (char* fixed_category = category) + return GetInstanceNames_icall (fixed_category, category?.Length ?? 0); + } static void CheckCategory (string categoryName) { if (categoryName == null) diff --git a/mcs/class/System/System.Diagnostics/Process.cs b/mcs/class/System/System.Diagnostics/Process.cs index 4f23059fab..2069265a5d 100644 --- a/mcs/class/System/System.Diagnostics/Process.cs +++ b/mcs/class/System/System.Diagnostics/Process.cs @@ -42,6 +42,7 @@ using System.Runtime.InteropServices; using System.Runtime.Remoting.Messaging; using System.Security.Permissions; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Security; using System.Threading; using Microsoft.Win32; @@ -127,6 +128,15 @@ namespace System.Diagnostics } } + private static void AppendArguments (StringBuilder stringBuilder, Collection<string> argumentList) + { + if (argumentList.Count > 0) { + foreach (string argument in argumentList) { + PasteArguments.AppendArgument (stringBuilder, argument); + } + } + } + /* Returns the list of process modules. The main module is * element 0. */ @@ -782,9 +792,9 @@ namespace System.Diagnostics MonoIO.Close (stdin_read, out error); #if MOBILE - var stdinEncoding = Encoding.Default; + var stdinEncoding = startInfo.StandardInputEncoding ?? Encoding.Default; #else - var stdinEncoding = Console.InputEncoding; + var stdinEncoding = startInfo.StandardInputEncoding ?? Console.InputEncoding; #endif standardInput = new StreamWriter (new FileStream (stdin_write, FileAccess.Write, true, 8192), stdinEncoding) { AutoFlush = true diff --git a/mcs/class/System/System.Diagnostics/ProcessStartInfo.cs b/mcs/class/System/System.Diagnostics/ProcessStartInfo.cs index 5b51facaa6..7224876629 100644 --- a/mcs/class/System/System.Diagnostics/ProcessStartInfo.cs +++ b/mcs/class/System/System.Diagnostics/ProcessStartInfo.cs @@ -31,6 +31,7 @@ using Microsoft.Win32; using System.Collections; +using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.IO; @@ -48,6 +49,19 @@ namespace System.Diagnostics get { return (environmentVariables != null); } } + Collection<string> _argumentList; + + public Collection<string> ArgumentList { + get { + if (_argumentList == null) { + _argumentList = new Collection<string>(); + } + return _argumentList; + } + } + + public Encoding StandardInputEncoding { get; set; } + static readonly string [] empty = new string [0]; [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden), Browsable (false)] diff --git a/mcs/class/System/System.IO/DefaultWatcher.cs b/mcs/class/System/System.IO/DefaultWatcher.cs index 19c30b890e..6bc6f9feca 100644 --- a/mcs/class/System/System.IO/DefaultWatcher.cs +++ b/mcs/class/System/System.IO/DefaultWatcher.cs @@ -128,8 +128,10 @@ namespace System.IO { lock (watches) { data = (DefaultWatcherData) watches [fsw]; if (data != null) { - data.Enabled = false; - data.DisabledTime = DateTime.UtcNow; + lock (data.FilesLock) { + data.Enabled = false; + data.DisabledTime = DateTime.UtcNow; + } } } } @@ -221,7 +223,8 @@ namespace System.IO { } lock (data.FilesLock) { - IterateAndModifyFilesData (data, directory, dispatch, files); + if (data.Enabled) + IterateAndModifyFilesData (data, directory, dispatch, files); } } diff --git a/mcs/class/System/System.IO/FileSystemWatcher.DefaultEventAttribute.cs b/mcs/class/System/System.IO/FileSystemWatcher.DefaultEventAttribute.cs new file mode 100644 index 0000000000..fbfd54d613 --- /dev/null +++ b/mcs/class/System/System.IO/FileSystemWatcher.DefaultEventAttribute.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if !MOBILE +namespace System.IO.CoreFX +#else +namespace System.IO +#endif +{ + // Add DefaultEventAdttribute for NS2.1 support + [System.ComponentModel.DefaultEventAttribute("Changed")] + public partial class FileSystemWatcher + { + } +} diff --git a/mcs/class/System/System.IO/FileSystemWatcher.cs b/mcs/class/System/System.IO/FileSystemWatcher.cs index adfd9cfc33..b7ad29d0c0 100644 --- a/mcs/class/System/System.IO/FileSystemWatcher.cs +++ b/mcs/class/System/System.IO/FileSystemWatcher.cs @@ -420,6 +420,8 @@ namespace System.IO { } private void RaiseEvent (Delegate ev, EventArgs arg, EventType evtype) { + if (disposed) + return; if (ev == null) return; @@ -497,11 +499,15 @@ namespace System.IO { internal void DispatchErrorEvents (ErrorEventArgs args) { + if (disposed) + return; OnError (args); } internal void DispatchEvents (FileAction act, string filename, ref RenamedEventArgs renamed) { + if (disposed) + return; if (waiting) { lastData = new WaitForChangedResult (); } diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/Sql2005Provider.cs b/mcs/class/System/System.Net.NetworkInformation/FreeBSDNetworkInterface.cs similarity index 77% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/Sql2005Provider.cs rename to mcs/class/System/System.Net.NetworkInformation/FreeBSDNetworkInterface.cs index 980ec6061b..8cb61d7a79 100644 --- a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/Sql2005Provider.cs +++ b/mcs/class/System/System.Net.NetworkInformation/FreeBSDNetworkInterface.cs @@ -1,38 +1,36 @@ -// -// Sql2000Provider.cs -// -// Author: -// Atsushi Enomoto <atsushi@ximian.com> -// -// Copyright (C) 2008 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Data.Linq.SqlClient -{ - [MonoTODO] - public sealed class Sql2005Provider : SqlProvider - { - } -} +// +// System.Net.NetworkInformation.NetworkInterface +// +// Authors: +// Conrad Meyer (cem@FreeBSD.org) +// +// Copyright (c) 2019 Conrad Meyer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +namespace System.Net.NetworkInformation { + internal class FreeBSDNetworkInterfaceAPI : MacOsNetworkInterfaceAPI + { + public FreeBSDNetworkInterfaceAPI () + : base (AF_INET6: 28) + { + } + } +} diff --git a/mcs/class/System/System.Net.NetworkInformation/MacOsNetworkInterface.cs b/mcs/class/System/System.Net.NetworkInformation/MacOsNetworkInterface.cs index 3f1fc06bc4..5f0b921332 100644 --- a/mcs/class/System/System.Net.NetworkInformation/MacOsNetworkInterface.cs +++ b/mcs/class/System/System.Net.NetworkInformation/MacOsNetworkInterface.cs @@ -36,9 +36,19 @@ using System.Runtime.InteropServices; namespace System.Net.NetworkInformation { internal class MacOsNetworkInterfaceAPI : UnixNetworkInterfaceAPI { - const int AF_INET = 2; - const int AF_INET6 = 30; - const int AF_LINK = 18; + const int AF_INET = 2; + const int AF_LINK = 18; + protected readonly int AF_INET6; + + public MacOsNetworkInterfaceAPI () + { + AF_INET6 = 30; + } + + protected MacOsNetworkInterfaceAPI (int AF_INET6) + { + this.AF_INET6 = AF_INET6; + } public override NetworkInterface [] GetAllNetworkInterfaces () { @@ -217,4 +227,4 @@ namespace System.Net.NetworkInformation { } } } -} \ No newline at end of file +} diff --git a/mcs/class/System/System.Net.NetworkInformation/UnixNetworkInterfaceFactory.cs b/mcs/class/System/System.Net.NetworkInformation/UnixNetworkInterfaceFactory.cs index 4a80c9ee62..b70f0c9e6d 100644 --- a/mcs/class/System/System.Net.NetworkInformation/UnixNetworkInterfaceFactory.cs +++ b/mcs/class/System/System.Net.NetworkInformation/UnixNetworkInterfaceFactory.cs @@ -43,8 +43,10 @@ namespace System.Net.NetworkInformation { if (runningOnUnix) { // XXX: OpenBSD and NetBSD too? It seems other platforms map closer to the Mac OS version than Linux, // even if not exactly; it seems Linux and/or glibc are the different ones. - if (Platform.IsMacOS || Platform.IsFreeBSD) + if (Platform.IsMacOS || Platform.IsOpenBSD) return new MacOsNetworkInterfaceAPI (); + if (Platform.IsFreeBSD) + return new FreeBSDNetworkInterfaceAPI (); // XXX: IBM i would be better with its own API targetting Qp2getifaddrs if (Platform.IsAix || Platform.IsIBMi) diff --git a/mcs/class/System/System.Net.Security/SslApplicationProtocol.pns.cs b/mcs/class/System/System.Net.Security/SslApplicationProtocol.pns.cs new file mode 100644 index 0000000000..59a525135f --- /dev/null +++ b/mcs/class/System/System.Net.Security/SslApplicationProtocol.pns.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Net.Security +{ + public delegate System.Security.Cryptography.X509Certificates.X509Certificate ServerCertificateSelectionCallback(object sender, string hostName); + + public readonly partial struct SslApplicationProtocol : System.IEquatable<System.Net.Security.SslApplicationProtocol> + { + private readonly object _dummy; + public static readonly System.Net.Security.SslApplicationProtocol Http11; + public static readonly System.Net.Security.SslApplicationProtocol Http2; + public SslApplicationProtocol(byte[] protocol) { throw new PlatformNotSupportedException(); } + public SslApplicationProtocol(string protocol) { throw new PlatformNotSupportedException(); } + public System.ReadOnlyMemory<byte> Protocol { get { throw new PlatformNotSupportedException(); } } + public bool Equals(System.Net.Security.SslApplicationProtocol other) { throw new PlatformNotSupportedException(); } + public override bool Equals(object obj) { throw new PlatformNotSupportedException(); } + public override int GetHashCode() { throw new PlatformNotSupportedException(); } + public static bool operator ==(System.Net.Security.SslApplicationProtocol left, System.Net.Security.SslApplicationProtocol right) { throw new PlatformNotSupportedException(); } + public static bool operator !=(System.Net.Security.SslApplicationProtocol left, System.Net.Security.SslApplicationProtocol right) { throw new PlatformNotSupportedException(); } + public override string ToString() { throw new PlatformNotSupportedException(); } + } +} \ No newline at end of file diff --git a/mcs/class/System/System.Net.Security/SslClientAuthenticationOptions.pns.cs b/mcs/class/System/System.Net.Security/SslClientAuthenticationOptions.pns.cs new file mode 100644 index 0000000000..90ef061f2d --- /dev/null +++ b/mcs/class/System/System.Net.Security/SslClientAuthenticationOptions.pns.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Net.Security +{ + public partial class SslClientAuthenticationOptions + { + public SslClientAuthenticationOptions() => throw new PlatformNotSupportedException(); + public bool AllowRenegotiation { get { throw new PlatformNotSupportedException(); } set { } } + public System.Collections.Generic.List<System.Net.Security.SslApplicationProtocol> ApplicationProtocols { get { throw new PlatformNotSupportedException(); } set { } } + public System.Security.Cryptography.X509Certificates.X509RevocationMode CertificateRevocationCheckMode { get { throw new PlatformNotSupportedException(); } set { } } + public System.Security.Cryptography.X509Certificates.X509CertificateCollection ClientCertificates { get { throw new PlatformNotSupportedException(); } set { } } + public System.Security.Authentication.SslProtocols EnabledSslProtocols { get { throw new PlatformNotSupportedException(); } set { } } + public System.Net.Security.EncryptionPolicy EncryptionPolicy { get { throw new PlatformNotSupportedException(); } set { } } + public System.Net.Security.LocalCertificateSelectionCallback LocalCertificateSelectionCallback { get { throw new PlatformNotSupportedException(); } set { } } + public System.Net.Security.RemoteCertificateValidationCallback RemoteCertificateValidationCallback { get { throw new PlatformNotSupportedException(); } set { } } + public string TargetHost { get { throw new PlatformNotSupportedException(); } set { } } + } +} \ No newline at end of file diff --git a/mcs/class/System/System.Net.Security/SslServerAuthenticationOptions.pns.cs b/mcs/class/System/System.Net.Security/SslServerAuthenticationOptions.pns.cs new file mode 100644 index 0000000000..491251f3b5 --- /dev/null +++ b/mcs/class/System/System.Net.Security/SslServerAuthenticationOptions.pns.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Net.Security +{ + public partial class SslServerAuthenticationOptions + { + public SslServerAuthenticationOptions() => throw new PlatformNotSupportedException(); + public bool AllowRenegotiation { get { throw new PlatformNotSupportedException(); } set { } } + public System.Collections.Generic.List<System.Net.Security.SslApplicationProtocol> ApplicationProtocols { get { throw new PlatformNotSupportedException(); } set { } } + public System.Security.Cryptography.X509Certificates.X509RevocationMode CertificateRevocationCheckMode { get { throw new PlatformNotSupportedException(); } set { } } + public bool ClientCertificateRequired { get { throw new PlatformNotSupportedException(); } set { } } + public System.Security.Authentication.SslProtocols EnabledSslProtocols { get { throw new PlatformNotSupportedException(); } set { } } + public System.Net.Security.EncryptionPolicy EncryptionPolicy { get { throw new PlatformNotSupportedException(); } set { } } + public System.Net.Security.RemoteCertificateValidationCallback RemoteCertificateValidationCallback { get { throw new PlatformNotSupportedException(); } set { } } + public System.Security.Cryptography.X509Certificates.X509Certificate ServerCertificate { get { throw new PlatformNotSupportedException(); } set { } } + public System.Net.Security.ServerCertificateSelectionCallback ServerCertificateSelectionCallback { get { throw new PlatformNotSupportedException(); } set { } } + } +} \ No newline at end of file diff --git a/mcs/class/System/System.Net.Security/SslStream.cs b/mcs/class/System/System.Net.Security/SslStream.cs index 7dbecbd290..79b755b168 100644 --- a/mcs/class/System/System.Net.Security/SslStream.cs +++ b/mcs/class/System/System.Net.Security/SslStream.cs @@ -179,6 +179,23 @@ namespace System.Net.Security } } + MNS.MonoSslServerAuthenticationOptions CreateAuthenticationOptions (SslServerAuthenticationOptions sslServerAuthenticationOptions) + { + if (sslServerAuthenticationOptions.ServerCertificate == null && sslServerAuthenticationOptions.ServerCertificateSelectionCallback == null && selectionCallback == null) + throw new ArgumentNullException (nameof (sslServerAuthenticationOptions.ServerCertificate)); + + if ((sslServerAuthenticationOptions.ServerCertificate != null || selectionCallback != null) && sslServerAuthenticationOptions.ServerCertificateSelectionCallback != null) + throw new InvalidOperationException (SR.Format (SR.net_conflicting_options, nameof (ServerCertificateSelectionCallback))); + + var options = new MNS.MonoSslServerAuthenticationOptions (sslServerAuthenticationOptions); + + var serverSelectionCallback = sslServerAuthenticationOptions.ServerCertificateSelectionCallback; + if (serverSelectionCallback != null) + options.ServerCertSelectionDelegate = (x) => serverSelectionCallback (this, x); + + return options; + } + public virtual void AuthenticateAsClient (string targetHost) { Impl.AuthenticateAsClient (targetHost); @@ -290,7 +307,7 @@ namespace System.Net.Security public Task AuthenticateAsServerAsync (SslServerAuthenticationOptions sslServerAuthenticationOptions, CancellationToken cancellationToken) { - return Impl2.AuthenticateAsServerAsync (new MNS.MonoSslServerAuthenticationOptions (sslServerAuthenticationOptions), cancellationToken); + return Impl2.AuthenticateAsServerAsync (CreateAuthenticationOptions (sslServerAuthenticationOptions), cancellationToken); } public virtual Task ShutdownAsync () @@ -358,6 +375,12 @@ namespace System.Net.Security get { return Impl.KeyExchangeStrength; } } + public SslApplicationProtocol NegotiatedApplicationProtocol { + get { + throw new PlatformNotSupportedException ("https://github.com/mono/mono/issues/12880"); + } + } + public override bool CanSeek { get { return false; } } @@ -632,6 +655,10 @@ namespace System.Net.Security get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } } + public SslApplicationProtocol NegotiatedApplicationProtocol { + get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } + } + public override bool CanSeek { get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } } diff --git a/mcs/class/System/System.Net.Security/SslStream.platformnotsupported.cs b/mcs/class/System/System.Net.Security/SslStream.platformnotsupported.cs index 1c2a416730..e04db3933d 100644 --- a/mcs/class/System/System.Net.Security/SslStream.platformnotsupported.cs +++ b/mcs/class/System/System.Net.Security/SslStream.platformnotsupported.cs @@ -48,262 +48,73 @@ namespace System.Net.Security X509Certificate remoteCertificate, string[] acceptableIssuers); - public class SslStream : AuthenticatedStream + public partial class SslStream : System.Net.Security.AuthenticatedStream { - const string EXCEPTION_MESSAGE = "System.Net.Security.SslStream is not supported on the current platform."; - - public SslStream (Stream innerStream) - : this (innerStream, false) - { - } - - public SslStream (Stream innerStream, bool leaveInnerStreamOpen) - : base (innerStream, leaveInnerStreamOpen) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback) - : this (innerStream, leaveInnerStreamOpen) - { - } - - public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback, LocalCertificateSelectionCallback userCertificateSelectionCallback) - : this (innerStream, leaveInnerStreamOpen) - { - } - - public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback, LocalCertificateSelectionCallback userCertificateSelectionCallback, EncryptionPolicy encryptionPolicy) - : this (innerStream, leaveInnerStreamOpen) - { - } - - public virtual void AuthenticateAsClient (string targetHost) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual void AuthenticateAsClient (string targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual IAsyncResult BeginAuthenticateAsClient (string targetHost, AsyncCallback asyncCallback, object asyncState) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual IAsyncResult BeginAuthenticateAsClient (string targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation, AsyncCallback asyncCallback, object asyncState) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual void EndAuthenticateAsClient (IAsyncResult asyncResult) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual void AuthenticateAsServer (X509Certificate serverCertificate) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual void AuthenticateAsServer (X509Certificate serverCertificate, bool clientCertificateRequired, SslProtocols enabledSslProtocols, bool checkCertificateRevocation) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual IAsyncResult BeginAuthenticateAsServer (X509Certificate serverCertificate, AsyncCallback asyncCallback, object asyncState) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual IAsyncResult BeginAuthenticateAsServer (X509Certificate serverCertificate, bool clientCertificateRequired, SslProtocols enabledSslProtocols, bool checkCertificateRevocation, AsyncCallback asyncCallback, object asyncState) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual void EndAuthenticateAsServer (IAsyncResult asyncResult) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public TransportContext TransportContext { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual Task AuthenticateAsClientAsync (string targetHost) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual Task AuthenticateAsClientAsync (string targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual Task AuthenticateAsServerAsync (X509Certificate serverCertificate) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual Task AuthenticateAsServerAsync (X509Certificate serverCertificate, bool clientCertificateRequired, SslProtocols enabledSslProtocols, bool checkCertificateRevocation) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public virtual Task ShutdownAsync () - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override bool IsAuthenticated { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool IsMutuallyAuthenticated { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool IsEncrypted { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool IsSigned { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool IsServer { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual SslProtocols SslProtocol { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual bool CheckCertRevocationStatus { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual X509Certificate LocalCertificate { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual X509Certificate RemoteCertificate { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual CipherAlgorithmType CipherAlgorithm { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual int CipherStrength { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual HashAlgorithmType HashAlgorithm { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual int HashStrength { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual ExchangeAlgorithmType KeyExchangeAlgorithm { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public virtual int KeyExchangeStrength { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool CanSeek { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool CanRead { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool CanTimeout { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override bool CanWrite { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override int ReadTimeout { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override int WriteTimeout { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override long Length { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override long Position { - get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); } - } - - public override void SetLength (long value) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override long Seek (long offset, SeekOrigin origin) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override void Flush () - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - protected override void Dispose (bool disposing) - { - } - - public override int Read (byte[] buffer, int offset, int count) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public void Write (byte[] buffer) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override void Write (byte[] buffer, int offset, int count) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override int EndRead (IAsyncResult asyncResult) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } - - public override void EndWrite (IAsyncResult asyncResult) - { - throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); - } + public SslStream(System.IO.Stream innerStream) : base (default(System.IO.Stream), default(bool)) => throw new PlatformNotSupportedException (); + public SslStream(System.IO.Stream innerStream, bool leaveInnerStreamOpen) : base (default(System.IO.Stream), default(bool)) => throw new PlatformNotSupportedException (); + public SslStream(System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback userCertificateValidationCallback) : base (default(System.IO.Stream), default(bool)) => throw new PlatformNotSupportedException (); + public SslStream(System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback userCertificateValidationCallback, System.Net.Security.LocalCertificateSelectionCallback userCertificateSelectionCallback) : base (default(System.IO.Stream), default(bool)) => throw new PlatformNotSupportedException (); + public SslStream(System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback userCertificateValidationCallback, System.Net.Security.LocalCertificateSelectionCallback userCertificateSelectionCallback, System.Net.Security.EncryptionPolicy encryptionPolicy) : base (default(System.IO.Stream), default(bool)) => throw new PlatformNotSupportedException (); + public override bool CanRead { get { throw new PlatformNotSupportedException (); } } + public override bool CanSeek { get { throw new PlatformNotSupportedException (); } } + public override bool CanTimeout { get { throw new PlatformNotSupportedException (); } } + public override bool CanWrite { get { throw new PlatformNotSupportedException (); } } + public virtual bool CheckCertRevocationStatus { get { throw new PlatformNotSupportedException (); } } + public virtual System.Security.Authentication.CipherAlgorithmType CipherAlgorithm { get { throw new PlatformNotSupportedException (); } } + public virtual int CipherStrength { get { throw new PlatformNotSupportedException (); } } + public virtual System.Security.Authentication.HashAlgorithmType HashAlgorithm { get { throw new PlatformNotSupportedException (); } } + public virtual int HashStrength { get { throw new PlatformNotSupportedException (); } } + public override bool IsAuthenticated { get { throw new PlatformNotSupportedException (); } } + public override bool IsEncrypted { get { throw new PlatformNotSupportedException (); } } + public override bool IsMutuallyAuthenticated { get { throw new PlatformNotSupportedException (); } } + public override bool IsServer { get { throw new PlatformNotSupportedException (); } } + public override bool IsSigned { get { throw new PlatformNotSupportedException (); } } + public virtual System.Security.Authentication.ExchangeAlgorithmType KeyExchangeAlgorithm { get { throw new PlatformNotSupportedException (); } } + public virtual int KeyExchangeStrength { get { throw new PlatformNotSupportedException (); } } + public override long Length { get { throw new PlatformNotSupportedException (); } } + public virtual System.Security.Cryptography.X509Certificates.X509Certificate LocalCertificate { get { throw new PlatformNotSupportedException (); } } + public System.Net.Security.SslApplicationProtocol NegotiatedApplicationProtocol { get { throw new PlatformNotSupportedException (); } } + public override long Position { get { throw new PlatformNotSupportedException (); } set { throw new PlatformNotSupportedException (); } } + public override int ReadTimeout { get { throw new PlatformNotSupportedException (); } set { throw new PlatformNotSupportedException (); } } + public virtual System.Security.Cryptography.X509Certificates.X509Certificate RemoteCertificate { get { throw new PlatformNotSupportedException (); } } + public virtual System.Security.Authentication.SslProtocols SslProtocol { get { throw new PlatformNotSupportedException (); } } + public System.Net.TransportContext TransportContext { get { throw new PlatformNotSupportedException (); } } + public override int WriteTimeout { get { throw new PlatformNotSupportedException (); } set { throw new PlatformNotSupportedException (); } } + public virtual void AuthenticateAsClient(string targetHost) { throw new PlatformNotSupportedException (); } + public virtual void AuthenticateAsClient(string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public virtual void AuthenticateAsClient(string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public System.Threading.Tasks.Task AuthenticateAsClientAsync(System.Net.Security.SslClientAuthenticationOptions sslClientAuthenticationOptions, System.Threading.CancellationToken cancellationToken) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task AuthenticateAsClientAsync(string targetHost) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task AuthenticateAsClientAsync(string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task AuthenticateAsClientAsync(string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public virtual void AuthenticateAsServer(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate) { throw new PlatformNotSupportedException (); } + public virtual void AuthenticateAsServer(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public virtual void AuthenticateAsServer(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, System.Security.Authentication.SslProtocols enabledSslProtocols, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public System.Threading.Tasks.Task AuthenticateAsServerAsync(System.Net.Security.SslServerAuthenticationOptions sslServerAuthenticationOptions, System.Threading.CancellationToken cancellationToken) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task AuthenticateAsServerAsync(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task AuthenticateAsServerAsync(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task AuthenticateAsServerAsync(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, System.Security.Authentication.SslProtocols enabledSslProtocols, bool checkCertificateRevocation) { throw new PlatformNotSupportedException (); } + public virtual System.IAsyncResult BeginAuthenticateAsClient(string targetHost, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public virtual System.IAsyncResult BeginAuthenticateAsClient(string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, bool checkCertificateRevocation, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public virtual System.IAsyncResult BeginAuthenticateAsClient(string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, bool checkCertificateRevocation, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public virtual System.IAsyncResult BeginAuthenticateAsServer(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public virtual System.IAsyncResult BeginAuthenticateAsServer(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, bool checkCertificateRevocation, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public virtual System.IAsyncResult BeginAuthenticateAsServer(System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, System.Security.Authentication.SslProtocols enabledSslProtocols, bool checkCertificateRevocation, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public override System.IAsyncResult BeginRead(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + public override System.IAsyncResult BeginWrite(byte[] buffer, int offset, int count, System.AsyncCallback asyncCallback, object asyncState) { throw new PlatformNotSupportedException (); } + protected override void Dispose(bool disposing) { throw new PlatformNotSupportedException (); } + public override System.Threading.Tasks.ValueTask DisposeAsync() { throw new PlatformNotSupportedException (); } + public virtual void EndAuthenticateAsClient(System.IAsyncResult asyncResult) { throw new PlatformNotSupportedException (); } + public virtual void EndAuthenticateAsServer(System.IAsyncResult asyncResult) { throw new PlatformNotSupportedException (); } + public override int EndRead(System.IAsyncResult asyncResult) { throw new PlatformNotSupportedException (); } + public override void EndWrite(System.IAsyncResult asyncResult) { throw new PlatformNotSupportedException (); } + public override void Flush() { throw new PlatformNotSupportedException (); } + public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { throw new PlatformNotSupportedException (); } + public override int Read(byte[] buffer, int offset, int count) { throw new PlatformNotSupportedException (); } + public override long Seek(long offset, System.IO.SeekOrigin origin) { throw new PlatformNotSupportedException (); } + public override void SetLength(long value) { throw new PlatformNotSupportedException (); } + public virtual System.Threading.Tasks.Task ShutdownAsync() { throw new PlatformNotSupportedException (); } + public void Write(byte[] buffer) { throw new PlatformNotSupportedException (); } + public override void Write(byte[] buffer, int offset, int count) { throw new PlatformNotSupportedException (); } } } diff --git a/mcs/class/System/System.Net.Sockets/Socket.cs b/mcs/class/System/System.Net.Sockets/Socket.cs index a26cef315e..39b001337b 100644 --- a/mcs/class/System/System.Net.Sockets/Socket.cs +++ b/mcs/class/System/System.Net.Sockets/Socket.cs @@ -40,6 +40,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Threading; +using System.Threading.Tasks; using System.Reflection; using System.IO; using System.Net.Configuration; @@ -972,7 +973,32 @@ namespace System.Net.Sockets if (is_listening) throw new InvalidOperationException (); - return BeginConnect (Dns.GetHostAddresses (host), port, requestCallback, state); + var callback = new AsyncCallback ((result) => { + var resultTask = ((Task<IPAddress[]>)result); + BeginConnect (resultTask.Result, port, requestCallback, resultTask.AsyncState); + }); + return ConvertToApm<IPAddress[]> (Dns.GetHostAddressesAsync (host), callback, state); + } + + private static IAsyncResult ConvertToApm<T> (Task<T> task, AsyncCallback callback, object state) + { + if (task == null) + throw new ArgumentNullException ("task"); + + var tcs = new TaskCompletionSource<T> (state); + task.ContinueWith (t => + { + if (t.IsFaulted) + tcs.TrySetException (t.Exception.InnerExceptions); + else if (t.IsCanceled) + tcs.TrySetCanceled (); + else + tcs.TrySetResult (t.Result); + + if (callback != null) + callback (tcs.Task); + }, TaskScheduler.Default); + return tcs.Task; } public IAsyncResult BeginConnect (EndPoint remoteEP, AsyncCallback callback, object state) @@ -1383,6 +1409,20 @@ namespace System.Net.Sockets return ret; } + public int Receive(Span<byte> buffer, SocketFlags socketFlags, out SocketError errorCode) + { + byte[] tempBuffer = new byte[buffer.Length]; + int result = Receive(tempBuffer, 0, tempBuffer.Length, socketFlags, out errorCode); + tempBuffer.CopyTo (buffer); + return result; + } + + public int Send(ReadOnlySpan<byte> buffer, SocketFlags socketFlags, out SocketError errorCode) + { + byte[] bufferBytes = buffer.ToArray(); + return Send(bufferBytes, 0, bufferBytes.Length, socketFlags, out errorCode); + } + public int Receive (Span<byte> buffer, SocketFlags socketFlags) { byte[] tempBuffer = new byte[buffer.Length]; diff --git a/mcs/class/System/System.Net.Sockets/SocketAsyncEventArgs.cs b/mcs/class/System/System.Net.Sockets/SocketAsyncEventArgs.cs index 404f2c61dc..f1e963a796 100644 --- a/mcs/class/System/System.Net.Sockets/SocketAsyncEventArgs.cs +++ b/mcs/class/System/System.Net.Sockets/SocketAsyncEventArgs.cs @@ -238,6 +238,11 @@ namespace System.Net.Sockets Buffer = buffer; } + public void SetBuffer(Memory<byte> buffer) + { + SetBuffer(buffer.ToArray(), 0, buffer.Length); + } + internal void StartOperationCommon (Socket socket) { current_socket = socket; diff --git a/mcs/class/System/System.Net.Sockets/SocketTaskExtensions.cs b/mcs/class/System/System.Net.Sockets/SocketTaskExtensions.cs index aee91fd55e..e449cf73b9 100644 --- a/mcs/class/System/System.Net.Sockets/SocketTaskExtensions.cs +++ b/mcs/class/System/System.Net.Sockets/SocketTaskExtensions.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Threading.Tasks; +using System.Threading; namespace System.Net.Sockets { @@ -246,5 +247,23 @@ namespace System.Net.Sockets remoteEP, state: socket); } + + public static ValueTask<int> SendAsync(this Socket socket, ReadOnlyMemory<byte> buffer, SocketFlags socketFlags, CancellationToken cancellationToken = default) => + socket.SendAsync(buffer, socketFlags, cancellationToken); + + public static ValueTask<int> ReceiveAsync(this Socket socket, Memory<byte> memory, SocketFlags socketFlags, CancellationToken cancellationToken = default) + { + var tcs = new TaskCompletionSource<int>(socket); + socket.BeginReceive(memory.ToArray(), 0, memory.Length, socketFlags, iar => + { + cancellationToken.ThrowIfCancellationRequested(); + var tcsInner = (TaskCompletionSource<int>)iar.AsyncState; + var socketInner = (Socket)tcsInner.Task.AsyncState; + try { tcsInner.TrySetResult(socketInner.EndReceive(iar)); } + catch (Exception exc) { tcsInner.TrySetException(exc); } + }, tcs); + cancellationToken.ThrowIfCancellationRequested(); + return new ValueTask<int>(tcs.Task); + } } } diff --git a/mcs/class/System/System.Net/BufferedReadStream.cs b/mcs/class/System/System.Net/BufferedReadStream.cs index 07c04e102d..54862c3675 100644 --- a/mcs/class/System/System.Net/BufferedReadStream.cs +++ b/mcs/class/System/System.Net/BufferedReadStream.cs @@ -64,6 +64,23 @@ namespace System.Net return await InnerStream.ReadAsync ( buffer, offset, size, cancellationToken).ConfigureAwait (false); } + + internal bool TryReadFromBuffer (byte[] buffer, int offset, int size, out int result) + { + var remaining = readBuffer?.Size ?? 0; + if (remaining <= 0) { + result = 0; + return InnerStream == null; + } + + int copy = (remaining > size) ? size : remaining; + Buffer.BlockCopy (readBuffer.Buffer, readBuffer.Offset, buffer, offset, copy); + readBuffer.Offset += copy; + readBuffer.Size -= copy; + offset += copy; + size -= copy; + result = copy; + return true; + } } } - diff --git a/mcs/class/System/System.Net/HttpWebResponse.cs b/mcs/class/System/System.Net/HttpWebResponse.cs index 58003d5b3b..82320fee77 100644 --- a/mcs/class/System/System.Net/HttpWebResponse.cs +++ b/mcs/class/System/System.Net/HttpWebResponse.cs @@ -61,6 +61,8 @@ namespace System.Net bool disposed; Stream stream; + public HttpWebResponse() { } // Added for NS2.1, it's empty in CoreFX too + // Constructors internal HttpWebResponse (Uri uri, string method, HttpStatusCode status, WebHeaderCollection headers) diff --git a/mcs/class/System/System.Net/HttpWebResponse.platformnotsupported.cs b/mcs/class/System/System.Net/HttpWebResponse.platformnotsupported.cs index 300d5d4f60..51e68cf897 100644 --- a/mcs/class/System/System.Net/HttpWebResponse.platformnotsupported.cs +++ b/mcs/class/System/System.Net/HttpWebResponse.platformnotsupported.cs @@ -35,6 +35,8 @@ namespace System.Net public class HttpWebResponse : WebResponse, ISerializable, IDisposable { const string EXCEPTION_MESSAGE = "System.Net.HttpWebResponse is not supported on the current platform."; + + public HttpWebResponse() { } // Added for NS2.1, it's empty in CoreFX too [Obsolete ("Serialization is obsoleted for this type", false)] protected HttpWebResponse (SerializationInfo serializationInfo, StreamingContext streamingContext) diff --git a/mcs/class/System/System.Net/SocketPermission.cs b/mcs/class/System/System.Net/SocketPermission.cs index d4fe975018..d3aa2a0d78 100644 --- a/mcs/class/System/System.Net/SocketPermission.cs +++ b/mcs/class/System/System.Net/SocketPermission.cs @@ -199,7 +199,7 @@ namespace System.Net { /* - SocketPermission s = new SocketPermission (NetworkAccess.Connect, TransportType.Tcp, "www.google.com", 80); + SocketPermission s = new SocketPermission (NetworkAccess.Connect, TransportType.Tcp, "www.example.com", 80); s.AddPermission (NetworkAccess.Accept, TransportType.All, "localhost", 8080); s.AddPermission (NetworkAccess.Accept, TransportType.All, "localhost", SocketPermission.AllPorts); // s = new SocketPermission (PermissionState.None); @@ -211,7 +211,7 @@ namespace System.Net { <IPermission class="System.Net.SocketPermission, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1"> <ConnectAccess> - <ENDPOINT host="www.google.com" + <ENDPOINT host="www.example.com" transport="Tcp" port="80"/> </ConnectAccess> diff --git a/mcs/class/System/System.Net/WebConnectionStream.cs b/mcs/class/System/System.Net/WebConnectionStream.cs index 85f7b0f07b..26751cd20f 100644 --- a/mcs/class/System/System.Net/WebConnectionStream.cs +++ b/mcs/class/System/System.Net/WebConnectionStream.cs @@ -110,11 +110,12 @@ namespace System.Net return e; } + protected abstract bool TryReadFromBufferedContent (byte[] buffer, int offset, int count, out int result); + public override int Read (byte[] buffer, int offset, int count) { if (!CanRead) throw new NotSupportedException (SR.net_writeonlystream); - Operation.ThrowIfClosedOrDisposed (); if (buffer == null) throw new ArgumentNullException (nameof (buffer)); @@ -125,7 +126,13 @@ namespace System.Net if (count < 0 || (length - offset) < count) throw new ArgumentOutOfRangeException (nameof (count)); - try { + if (TryReadFromBufferedContent (buffer, offset, count, out var result)) + return result; + + Operation.ThrowIfClosedOrDisposed (); + + try + { return ReadAsync (buffer, offset, count, CancellationToken.None).Result; } catch (Exception e) { throw GetException (e); diff --git a/mcs/class/System/System.Net/WebRequestStream.cs b/mcs/class/System/System.Net/WebRequestStream.cs index 16c20e4946..c7242c765d 100644 --- a/mcs/class/System/System.Net/WebRequestStream.cs +++ b/mcs/class/System/System.Net/WebRequestStream.cs @@ -406,6 +406,8 @@ namespace System.Net return Task.FromException<int> (new NotSupportedException (SR.net_writeonlystream)); } + protected override bool TryReadFromBufferedContent (byte[] buffer, int offset, int count, out int result) => throw new InvalidOperationException (); + protected override void Close_internal (ref bool disposed) { WebConnection.Debug ($"{ME} CLOSE: {disposed} {requestWritten} {allowBuffering}"); diff --git a/mcs/class/System/System.Net/WebResponseStream.cs b/mcs/class/System/System.Net/WebResponseStream.cs index c55b2014ee..75a43b7af4 100644 --- a/mcs/class/System/System.Net/WebResponseStream.cs +++ b/mcs/class/System/System.Net/WebResponseStream.cs @@ -184,6 +184,15 @@ namespace System.Net }, () => Operation.Aborted, cancellationToken); } + protected override bool TryReadFromBufferedContent (byte[] buffer, int offset, int count, out int result) + { + if (bufferedEntireContent && innerStream is BufferedReadStream bufferedStream) + return bufferedStream.TryReadFromBuffer (buffer, offset, count, out result); + + result = 0; + return false; + } + bool CheckAuthHeader (string headerName) { var authHeader = Headers[headerName]; @@ -372,6 +381,7 @@ namespace System.Net var buffer = await ReadAllAsyncInner (cancellationToken).ConfigureAwait (false); var bos = new BufferOffsetSize (buffer, 0, buffer.Length, false); innerStream = new BufferedReadStream (Operation, null, bos); + bufferedEntireContent = true; nextReadCalled = true; completion.TrySetCompleted (); diff --git a/mcs/class/System/System.Security.Authentication/SslProtocols.cs b/mcs/class/System/System.Security.Authentication/SslProtocols.cs index 39393d8bdf..c18aa79bf0 100644 --- a/mcs/class/System/System.Security.Authentication/SslProtocols.cs +++ b/mcs/class/System/System.Security.Authentication/SslProtocols.cs @@ -41,6 +41,7 @@ namespace System.Security.Authentication { Tls11 = 768, [MonoTODO ("unsupported")] Tls12 = 3072, + Tls13 = 12288, Default = Ssl3 | Tls } } diff --git a/mcs/class/System/System.Security.Cryptography.X509Certificates/X509Store.cs b/mcs/class/System/System.Security.Cryptography.X509Certificates/X509Store.cs index 72f76f1351..ca5119d8a5 100644 --- a/mcs/class/System/System.Security.Cryptography.X509Certificates/X509Store.cs +++ b/mcs/class/System/System.Security.Cryptography.X509Certificates/X509Store.cs @@ -89,6 +89,18 @@ namespace System.Security.Cryptography.X509Certificates { _location = storeLocation; } + public X509Store (StoreName storeName, StoreLocation storeLocation, OpenFlags openFlags) + : this (storeName, storeLocation) + { + _flags = openFlags; + } + + public X509Store (string storeName, StoreLocation storeLocation, OpenFlags openFlags) + : this (storeName, storeLocation) + { + _flags = openFlags; + } + [MonoTODO ("Mono's stores are fully managed. All handles are invalid.")] [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode=true)] public X509Store (IntPtr storeHandle) @@ -137,7 +149,7 @@ namespace System.Security.Cryptography.X509Certificates { } } - private bool IsOpen { + public bool IsOpen { get { return (store != null); } } diff --git a/mcs/class/System/System/Platform.cs b/mcs/class/System/System/Platform.cs index 1c89c08e33..c3a9751e43 100644 --- a/mcs/class/System/System/Platform.cs +++ b/mcs/class/System/System/Platform.cs @@ -35,6 +35,7 @@ namespace System { #if MONOTOUCH || XAMMAC const bool isFreeBSD = false; + const bool isOpenBSD = false; private static void CheckOS() { isMacOS = true; @@ -43,6 +44,7 @@ namespace System { #elif ORBIS const bool isFreeBSD = true; + const bool isOpenBSD = false; private static void CheckOS() { checkedOS = true; @@ -50,6 +52,7 @@ namespace System { #else static bool isFreeBSD; + static bool isOpenBSD; [DllImport ("libc")] static extern int uname (IntPtr buf); @@ -76,6 +79,9 @@ namespace System { case "OS400": isIBMi = true; break; + case "OpenBSD": + isOpenBSD = true; + break; } } Marshal.FreeHGlobal (buf); @@ -99,6 +105,14 @@ namespace System { } } + public static bool IsOpenBSD { + get { + if (!checkedOS) + CheckOS(); + return isOpenBSD; + } + } + public static bool IsIBMi { get { if (!checkedOS) diff --git a/mcs/class/System/System_xtest.dll.sources b/mcs/class/System/System_xtest.dll.sources index 4eaaf5f999..737cc2e6d5 100644 --- a/mcs/class/System/System_xtest.dll.sources +++ b/mcs/class/System/System_xtest.dll.sources @@ -1,4 +1,6 @@ ../test-helpers/Configuration.Http.cs +../test-helpers/Configuration.Certificates.cs +../test-helpers/TestConfiguration.cs ../../../external/corefx/src/Common/tests/System/Threading/Tasks/TaskTimeoutExtensions.cs @@ -8,6 +10,14 @@ System/RemoteExecutorTests.cs ../../../external/corefx/src/Common/tests/System/Collections/IEnumerable.NonGeneric.Tests.cs ../../../external/corefx/src/Common/tests/System/Collections/IList.NonGeneric.Tests.cs ../../../external/corefx/src/Common/tests/System/Collections/TestBase.NonGeneric.cs +../../../external/corefx/src/Common/tests/System/IO/DelegateStream.cs +../../../external/corefx/src/Common/tests/System/Net/Capability.Security.cs +../../../external/corefx/src/Common/tests/System/Net/Configuration.cs +../../../external/corefx/src/Common/tests/System/Net/Configuration.Security.cs +../../../external/corefx/src/Common/tests/System/Net/HttpsTestClient.cs +../../../external/corefx/src/Common/tests/System/Net/HttpsTestServer.cs +../../../external/corefx/src/Common/tests/System/Net/SslStreamCertificatePolicy.cs +../../../external/corefx/src/Common/tests/System/Net/VirtualNetwork/*.cs ../../../external/corefx/src/Common/tests/System/Net/WebSockets/WebSocketCreateTest.cs ../../../external/corefx/src/Common/tests/System/Runtime/Serialization/Formatters/BinaryFormatterHelpers.cs @@ -27,7 +37,6 @@ System/RemoteExecutorTests.cs ../../../external/corefx/src/Common/tests/System/Net/Http/LoopbackServer.cs ../../../external/corefx/src/Common/tests/System/Net/Configuration.cs ../../../external/corefx/src/Common/tests/System/Net/Configuration.Http.cs -../../../external/corefx/src/Common/tests/System/Net/Configuration.Certificates.cs ../../../external/corefx/src/Common/tests/System/Net/Configuration.WebSockets.cs ../../../external/corefx/src/System.Net.Requests/tests/FtpWebRequestTest.cs #../../../external/corefx/src/System.Net.Requests/tests/*.cs:AuthenticationManagerTest.cs @@ -48,9 +57,12 @@ System/RemoteExecutorTests.cs ../../../external/corefx/src/System.Net.Security/tests/UnitTests/Fakes/*.cs:FakeSslState.cs,FakeLazyAsyncResult.cs ../../../external/corefx/src/Common/src/System/Net/Logging/NetEventSource.Common.cs ../../../external/corefx/src/Common/src/System/Net/InternalException.cs +../../../external/corefx/src/System.Net.Security/src/System/Net/Security/SniHelper.cs ../../../external/corefx/src/System.Net.Security/src/System/Net/Security/TlsAlertMessage.cs ../../../external/corefx/src/System.Net.Security/src/System/Net/Security/TlsAlertType.cs +../../../external/corefx/src/System.Net.Security/tests/FunctionalTests/*.cs:IdentityValidator.Windows.cs,NegotiateStreamTest.Linux.cs,TestConfiguration.cs,UnixGssFakeNegotiateStream.cs,UnixGssFakeStreamFramer.cs + # System.Net.Ping ../../../external/corefx/src/Common/src/System/Net/NetworkInformation/UnixCommandLinePing.cs ../../../external/corefx/src/Common/tests/System/Net/Capability.RawSocketPermissions.cs diff --git a/mcs/class/System/Test/Microsoft.Win32/IntranetZoneCredentialPolicyTest.cs b/mcs/class/System/Test/Microsoft.Win32/IntranetZoneCredentialPolicyTest.cs index f6947709c9..f250890ac5 100644 --- a/mcs/class/System/Test/Microsoft.Win32/IntranetZoneCredentialPolicyTest.cs +++ b/mcs/class/System/Test/Microsoft.Win32/IntranetZoneCredentialPolicyTest.cs @@ -81,7 +81,7 @@ namespace MonoTests.Microsoft.Win32 { public void FixtureSetUp () { policy = new IntranetZoneCredentialPolicy (); - uri = new Uri ("http://www.mono-project.com"); + uri = new Uri ("http://www.example.com"); request = WebRequest.Create (uri); credential = new NetworkCredential ("me", "mine"); module = new Module ("type", true, "token"); diff --git a/mcs/class/System/Test/System.ComponentModel.Design.Serialization/InstanceDescriptorTest.cs b/mcs/class/System/Test/System.ComponentModel.Design.Serialization/InstanceDescriptorTest.cs index ec9d6b1bb0..48cea59937 100644 --- a/mcs/class/System/Test/System.ComponentModel.Design.Serialization/InstanceDescriptorTest.cs +++ b/mcs/class/System/Test/System.ComponentModel.Design.Serialization/InstanceDescriptorTest.cs @@ -41,7 +41,7 @@ namespace MonoTests.System.ComponentModel.Design.Serialization { [TestFixture] public class InstanceDescriptorTest { - private const string url = "http://www.mono-project.com/"; + private const string url = "http://www.example.com/"; private ConstructorInfo ci; [TestFixtureSetUp] @@ -185,10 +185,11 @@ namespace MonoTests.System.ComponentModel.Design.Serialization { } } +#if !DISABLE_SECURITY [Test] public void Property_Arguments_Mismatch () { -#if MOBILE +#if MOBILE && !DISABLE_SECURITY // ensure the property is not linked out of the application since it make the test fails Assert.IsNotNull (Thread.CurrentPrincipal, "pre-test"); #endif @@ -211,7 +212,7 @@ namespace MonoTests.System.ComponentModel.Design.Serialization { [Test] public void Property_Arguments_Null () { -#if MOBILE +#if MOBILE && !DISABLE_SECURITY // ensure the property is not linked out of the application since it make the test fails Assert.IsNotNull (Thread.CurrentPrincipal, "pre-test"); #endif @@ -223,6 +224,7 @@ namespace MonoTests.System.ComponentModel.Design.Serialization { Assert.AreSame (pi, id.MemberInfo, "#3"); Assert.IsNotNull (id.Invoke (), "#4"); } +#endif [Test] public void Property_MemberInfo_NonStatic () diff --git a/mcs/class/System/Test/System.ComponentModel/DateTimeConverterTests.cs b/mcs/class/System/Test/System.ComponentModel/DateTimeConverterTests.cs index ad7d0ae4b6..2f899c5686 100644 --- a/mcs/class/System/Test/System.ComponentModel/DateTimeConverterTests.cs +++ b/mcs/class/System/Test/System.ComponentModel/DateTimeConverterTests.cs @@ -12,10 +12,10 @@ using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Globalization; -using NUnit.Framework; - namespace MonoTests.System.ComponentModel { + using NUnit.Framework; + [TestFixture] public class DateTimeConverterTests { @@ -146,7 +146,8 @@ namespace MonoTests.System.ComponentModel } [Test] - [SetCulture("en-GB")] + [SetCulture ("en-GB")] + [Category ("Calendars")] public void ConvertToString () { CultureInfo culture = new MyCultureInfo (); diff --git a/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs b/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs index fd382999eb..b1fc4962cb 100644 --- a/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs +++ b/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs @@ -1035,6 +1035,12 @@ namespace MonoTests.System.Diagnostics [NUnit.Framework.Category ("MobileNotWorking")] public void StandardInputWrite () { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("AIX"))) + { + // This test is broken on AIX because the fork child seems to become comatose. + Assert.Ignore ("Skipping on AIX/i"); + } + var psi = GetEchoCrossPlatformStartInfo (); psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; diff --git a/mcs/class/System/Test/System.Net.Sockets/MulticastOptionTest.cs b/mcs/class/System/Test/System.Net.Sockets/MulticastOptionTest.cs index 6c3bc98f91..3734c5b2d1 100644 --- a/mcs/class/System/Test/System.Net.Sockets/MulticastOptionTest.cs +++ b/mcs/class/System/Test/System.Net.Sockets/MulticastOptionTest.cs @@ -201,13 +201,16 @@ namespace MonoTests.System.Net.Sockets } [Test] +#if FEATURE_NO_BSD_SOCKETS + [ExpectedException (typeof (PlatformNotSupportedException))] +#endif public void Group () { IPAddress group; IPAddress local; MulticastOption option; - local = Dns.GetHostEntry (string.Empty).AddressList [0]; + local = Dns.GetHostEntry ("localhost").AddressList [0]; group = IPAddress.Parse ("239.255.255.250"); option = new MulticastOption (group, local); group = IPAddress.Parse ("224.0.0.23"); @@ -234,6 +237,9 @@ namespace MonoTests.System.Net.Sockets } [Test] +#if FEATURE_NO_BSD_SOCKETS + [ExpectedException (typeof (PlatformNotSupportedException))] +#endif public void InterfaceIndex () { IPAddress group; @@ -255,7 +261,7 @@ namespace MonoTests.System.Net.Sockets Assert.AreEqual (0xFFFFFF, option.InterfaceIndex, "#C2"); Assert.IsNull (option.LocalAddress, "#C3"); - local = Dns.GetHostEntry (string.Empty).AddressList [0]; + local = Dns.GetHostEntry ("localhost").AddressList [0]; option = new MulticastOption (group, local); option.InterfaceIndex = 10; Assert.AreSame (group, option.Group, "#D1"); @@ -296,13 +302,16 @@ namespace MonoTests.System.Net.Sockets } [Test] +#if FEATURE_NO_BSD_SOCKETS + [ExpectedException (typeof (PlatformNotSupportedException))] +#endif public void LocalAddress () { IPAddress group; IPAddress local; MulticastOption option; - local = Dns.GetHostEntry (string.Empty).AddressList [0]; + local = Dns.GetHostEntry ("localhost").AddressList [0]; group = IPAddress.Parse ("239.255.255.250"); option = new MulticastOption (group, local); local = IPAddress.Loopback; @@ -310,7 +319,7 @@ namespace MonoTests.System.Net.Sockets Assert.AreSame (group, option.Group, "#A1"); Assert.AreEqual (0, option.InterfaceIndex, "#A2"); Assert.AreSame (local, option.LocalAddress, "#A3"); - local = Dns.GetHostEntry (string.Empty).AddressList [0]; + local = Dns.GetHostEntry ("localhost").AddressList [0]; option.LocalAddress = local; Assert.AreSame (group, option.Group, "#B1"); Assert.AreEqual (0, option.InterfaceIndex, "#B2"); diff --git a/mcs/class/System/Test/System.Net.Sockets/NetworkStreamCas.cs b/mcs/class/System/Test/System.Net.Sockets/NetworkStreamCas.cs index 6747a263a6..6198be7578 100644 --- a/mcs/class/System/Test/System.Net.Sockets/NetworkStreamCas.cs +++ b/mcs/class/System/Test/System.Net.Sockets/NetworkStreamCas.cs @@ -55,7 +55,7 @@ namespace MonoCasTests.System.Net.Sockets { { reset = new ManualResetEvent (false); - IPHostEntry host = Dns.Resolve ("www.google.com"); + IPHostEntry host = Dns.Resolve ("www.example.com"); IPAddress ip = host.AddressList[0]; socket = new Socket (ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Connect (new IPEndPoint (ip, 80)); diff --git a/mcs/class/System/Test/System.Net.Sockets/NetworkStreamTest.cs b/mcs/class/System/Test/System.Net.Sockets/NetworkStreamTest.cs index 37295cf49c..0d132dff18 100644 --- a/mcs/class/System/Test/System.Net.Sockets/NetworkStreamTest.cs +++ b/mcs/class/System/Test/System.Net.Sockets/NetworkStreamTest.cs @@ -29,7 +29,7 @@ namespace MonoTests.System.Net.Sockets #endif public void NetworkStreamConnection () { - IPEndPoint ipe = new IPEndPoint(Dns.GetHostEntry ("www.google.com").AddressList [0], 80); + IPEndPoint ipe = new IPEndPoint(Dns.GetHostEntry ("www.example.com").AddressList [0], 80); Socket s = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); s.Close (); NetworkStream ns = new NetworkStream (s); diff --git a/mcs/class/System/Test/System.Net.Sockets/SocketCas.cs b/mcs/class/System/Test/System.Net.Sockets/SocketCas.cs index 6319d3e7b9..526b80c2d8 100644 --- a/mcs/class/System/Test/System.Net.Sockets/SocketCas.cs +++ b/mcs/class/System/Test/System.Net.Sockets/SocketCas.cs @@ -38,7 +38,7 @@ namespace MonoCasTests.System.Net.Sockets { { reset = new ManualResetEvent (false); - IPHostEntry host = Dns.Resolve ("www.google.com"); + IPHostEntry host = Dns.Resolve ("www.example.com"); IPAddress ip = host.AddressList[0]; ep = new IPEndPoint (ip, 80); socket = new Socket (ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); diff --git a/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs.REMOVED.git-id b/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs.REMOVED.git-id index 970243b759..ba58757c1e 100644 --- a/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs.REMOVED.git-id +++ b/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs.REMOVED.git-id @@ -1 +1 @@ -14976edb39c9c0643ba059f92078e0e93a0eb567 \ No newline at end of file +3dc69374874d14e90b24abf706902b0dacb2d02d \ No newline at end of file diff --git a/mcs/class/System/Test/System.Net.Sockets/TcpClientCas.cs b/mcs/class/System/Test/System.Net.Sockets/TcpClientCas.cs index a1db66c9e6..17c4379e95 100644 --- a/mcs/class/System/Test/System.Net.Sockets/TcpClientCas.cs +++ b/mcs/class/System/Test/System.Net.Sockets/TcpClientCas.cs @@ -76,7 +76,7 @@ namespace MonoCasTests.System.Net.Sockets { TcpClient s = new TcpClient (); message = "AsyncConnect"; reset.Reset (); - IAsyncResult r = s.BeginConnect ("www.google.com", 80, new AsyncCallback (ConnectCallback), s); + IAsyncResult r = s.BeginConnect ("www.example.com", 80, new AsyncCallback (ConnectCallback), s); Assert.IsNotNull (r, "IAsyncResult"); if (!reset.WaitOne (timeout, true)) Assert.Ignore ("Timeout"); @@ -88,7 +88,7 @@ namespace MonoCasTests.System.Net.Sockets { [Category ("InetAccess")] public void AsyncConnect_IPAddressIntAsyncCallbackObject () { - IPHostEntry host = Dns.Resolve ("www.google.com"); + IPHostEntry host = Dns.Resolve ("www.example.com"); TcpClient s = new TcpClient (); message = "AsyncConnect"; reset.Reset (); @@ -104,7 +104,7 @@ namespace MonoCasTests.System.Net.Sockets { [Category ("InetAccess")] public void AsyncConnect_IPAddressArrayIntAsyncCallbackObject () { - IPHostEntry host = Dns.Resolve ("www.google.com"); + IPHostEntry host = Dns.Resolve ("www.example.com"); TcpClient s = new TcpClient (); message = "AsyncConnect"; reset.Reset (); diff --git a/mcs/class/System/Test/System.Net.Sockets/UdpClientTest.cs b/mcs/class/System/Test/System.Net.Sockets/UdpClientTest.cs index 1f7f18ea71..557c3292ee 100644 --- a/mcs/class/System/Test/System.Net.Sockets/UdpClientTest.cs +++ b/mcs/class/System/Test/System.Net.Sockets/UdpClientTest.cs @@ -872,7 +872,7 @@ namespace MonoTests.System.Net.Sockets { public void JoinMulticastGroup4_Socket_NotBound () { IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23"); - IPAddress local_addr = Dns.GetHostEntry (string.Empty).AddressList [0]; + IPAddress local_addr = Dns.GetHostEntry ("localhost").AddressList [0]; using (UdpClient client = new UdpClient (AddressFamily.InterNetwork)) { client.JoinMulticastGroup (mcast_addr, local_addr); @@ -980,7 +980,7 @@ namespace MonoTests.System.Net.Sockets { "BeginSend #4"); } - IPAddress[] addresses = Dns.GetHostEntry (string.Empty).AddressList; + IPAddress[] addresses = Dns.GetHostEntry ("localhost").AddressList; IPEndPoint ep = null; foreach (IPAddress a in addresses) { if (a.AddressFamily == AddressFamily.InterNetwork) { diff --git a/mcs/class/System/Test/System.Net/DnsCas.cs b/mcs/class/System/Test/System.Net/DnsCas.cs index d984553e17..2a0598e802 100644 --- a/mcs/class/System/Test/System.Net/DnsCas.cs +++ b/mcs/class/System/Test/System.Net/DnsCas.cs @@ -24,7 +24,7 @@ namespace MonoCasTests.System.Net { [Category ("NotWorking")] // compiler (CSC) issue (on Windows) public class DnsCas { - private const string site = "www.go-mono.com"; + private const string site = "www.example.com"; private const int timeout = 30000; static ManualResetEvent reset; diff --git a/mcs/class/System/Test/System.Net/DnsTest.cs b/mcs/class/System/Test/System.Net/DnsTest.cs index 740712500c..7954f8b5bb 100644 --- a/mcs/class/System/Test/System.Net/DnsTest.cs +++ b/mcs/class/System/Test/System.Net/DnsTest.cs @@ -75,8 +75,7 @@ namespace MonoTests.System.Net IAsyncResult async = Dns.BeginResolve (site1Dot, null, null); IPHostEntry entry = Dns.EndResolve (async); SubTestValidIPHostEntry (entry); - var ip = GetIPv4Address (entry); - Assert.AreEqual (site1Dot, ip.ToString ()); + CheckIPv4Address (entry, IPAddress.Parse (site1Dot)); } [Test] @@ -239,12 +238,10 @@ namespace MonoTests.System.Net } } - static IPAddress GetIPv4Address (IPHostEntry h) + static void CheckIPv4Address (IPHostEntry h, IPAddress a) { - var al = h.AddressList.FirstOrDefault (x => x.AddressFamily == AddressFamily.InterNetwork); - if (al == null) - Assert.Ignore ("Could not resolve an IPv4 address as required by this test case, e.g. running on an IPv6 only network"); - return al; + var al = h.AddressList.Contains (a); + Assert.True (al, "Failed to resolve host name " + h.HostName + " to expected IP address " + a.ToString()); } void SubTestGetHostByName (string siteName, string siteDot) @@ -252,8 +249,7 @@ namespace MonoTests.System.Net IPHostEntry h = Dns.GetHostByName (siteName); SubTestValidIPHostEntry (h); Assert.AreEqual (siteName, h.HostName, "siteName"); - var ip = GetIPv4Address (h); - Assert.AreEqual (siteDot, ip.ToString (), "siteDot"); + CheckIPv4Address (h, IPAddress.Parse (siteDot)); } [Test] @@ -330,8 +326,7 @@ namespace MonoTests.System.Net IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site1IP)); IPHostEntry h = Dns.GetHostByAddress (addr); SubTestValidIPHostEntry (h); - var ip = GetIPv4Address (h); - Assert.AreEqual (addr.ToString (), ip.ToString ()); + CheckIPv4Address (h, addr); } [Test] @@ -340,8 +335,7 @@ namespace MonoTests.System.Net IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site2IP)); IPHostEntry h = Dns.GetHostByAddress (addr); SubTestValidIPHostEntry (h); - var ip = GetIPv4Address (h); - Assert.AreEqual (addr.ToString (), ip.ToString ()); + CheckIPv4Address (h, addr); } [Test] @@ -565,7 +559,7 @@ namespace MonoTests.System.Net [Test] public void GetHostEntry_StringEmpty () { - Dns.GetHostEntry (string.Empty); + Dns.GetHostEntry ("localhost"); } /* This isn't used anymore, but could be useful for debugging diff --git a/mcs/class/System/Test/System.Net/HttpListener2Test.cs b/mcs/class/System/Test/System.Net/HttpListener2Test.cs index 44abade69c..c3d3822f95 100644 --- a/mcs/class/System/Test/System.Net/HttpListener2Test.cs +++ b/mcs/class/System/Test/System.Net/HttpListener2Test.cs @@ -775,7 +775,7 @@ namespace MonoTests.System.Net { wait.WaitOne (); NetworkStream ns = HttpListener2Test.CreateNS (port); - HttpListener2Test.Send (ns, "GET http://www.google.com/ HTTP/1.1\r\nHost: www.google.com\r\nContent-Length: 3\r\n\r\n123456"); + HttpListener2Test.Send (ns, "GET http://www.example.com/ HTTP/1.1\r\nHost: www.example.com\r\nContent-Length: 3\r\n\r\n123456"); wait2.WaitOne (); ns.Close (); @@ -786,8 +786,8 @@ namespace MonoTests.System.Net { wait.Set (); HttpListenerContext ctx = listener.GetContext (); - Assert.AreEqual ("http://www.google.com:" + port + "/", ctx.Request.Url.ToString ()); - Assert.AreEqual ("http://www.google.com/", ctx.Request.RawUrl); + Assert.AreEqual ("http://www.example.com:" + port + "/", ctx.Request.Url.ToString ()); + Assert.AreEqual ("http://www.example.com/", ctx.Request.RawUrl); wait2.Set (); listener.Close (); diff --git a/mcs/class/System/Test/System.Net/HttpWebRequestCas.cs b/mcs/class/System/Test/System.Net/HttpWebRequestCas.cs index 800dd29211..12be8ac26a 100644 --- a/mcs/class/System/Test/System.Net/HttpWebRequestCas.cs +++ b/mcs/class/System/Test/System.Net/HttpWebRequestCas.cs @@ -26,7 +26,7 @@ namespace MonoCasTests.System.Net { static ManualResetEvent reset; private string message; - private string uri = "http://www.google.com"; + private string uri = "http://www.example.com"; [TestFixtureSetUp] public void FixtureSetUp () diff --git a/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs.REMOVED.git-id b/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs.REMOVED.git-id index d787ad94c4..905e0042fb 100644 --- a/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs.REMOVED.git-id +++ b/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs.REMOVED.git-id @@ -1 +1 @@ -befcc4eda76a0a81de84418baf554059f7754ec0 \ No newline at end of file +0252b387e04bece7b463e77edb0534daf063deb1 \ No newline at end of file diff --git a/mcs/class/System/Test/System.Net/IPAddressTest.cs b/mcs/class/System/Test/System.Net/IPAddressTest.cs index c3ebb33ee2..9caa79e6d6 100644 --- a/mcs/class/System/Test/System.Net/IPAddressTest.cs +++ b/mcs/class/System/Test/System.Net/IPAddressTest.cs @@ -329,7 +329,7 @@ public class IPAddressTest Assert.Fail ("#1:" + i + " (" + ipAddress + ")"); } catch (FormatException ex) { Assert.AreEqual (typeof (FormatException), ex.GetType (), "#2:" + i); - Assert.IsNull (ex.InnerException, "#3:" + i); + Assert.IsNotNull (ex.InnerException, "#3:" + i); Assert.IsNotNull (ex.Message, "#4:" + i); } } @@ -534,7 +534,7 @@ public class IPAddressTest IPAddress i; Assert.IsTrue (IPAddress.TryParse ("0.0.0.0", out i), "#1"); Assert.IsTrue (IPAddress.TryParse ("127.0.0.1", out i), "#2"); - Assert.IsFalse (IPAddress.TryParse ("www.mono-project.com", out i), "#3"); + Assert.IsFalse (IPAddress.TryParse ("www.example.com", out i), "#3"); Assert.IsTrue (IPAddress.TryParse ("0001:0002:0003:0004:0005:0006:0007:0008", out i), "#4"); Assert.IsTrue (IPAddress.TryParse ("1:2:3:4:5:6:7:8", out i), "#5"); Assert.IsTrue (IPAddress.TryParse ("1::8", out i), "#6"); @@ -667,19 +667,6 @@ public class IPAddressTest } } - - [Test] - [Category ("NotDotNet")] - public void UnixInterfaceNameAsZoneIndex () - { - var ip = IPAddress.Parse ("fe80::bae8:56ff:fe47:af7e%en0"); - - // Should be en0 but it's of long type! - Assert.AreEqual (0, ip.ScopeId); - - Assert.AreEqual ("fe80::bae8:56ff:fe47:af7e", ip.ToString ()); - } - } } diff --git a/mcs/class/System/Test/System.Net/NetworkCredentialTest.cs b/mcs/class/System/Test/System.Net/NetworkCredentialTest.cs index e5c46f8f90..a4b1243bfd 100644 --- a/mcs/class/System/Test/System.Net/NetworkCredentialTest.cs +++ b/mcs/class/System/Test/System.Net/NetworkCredentialTest.cs @@ -50,7 +50,7 @@ namespace MonoTests.System.Net { Assert.AreEqual ("dom", nc.Domain, "Domain"); Assert.AreEqual ("********", nc.Password, "Password"); Assert.AreEqual ("user", nc.UserName, "UserName"); - Assert.AreSame (nc, nc.GetCredential (new Uri ("http://www.mono-project.com"), "basic"), "GetCredential"); + Assert.AreSame (nc, nc.GetCredential (new Uri ("http://www.example.com"), "basic"), "GetCredential"); } [Test] diff --git a/mcs/class/System/Test/System.Net/ServicePointManagerTest.cs b/mcs/class/System/Test/System.Net/ServicePointManagerTest.cs index a776221830..f3fe8efae2 100644 --- a/mcs/class/System/Test/System.Net/ServicePointManagerTest.cs +++ b/mcs/class/System/Test/System.Net/ServicePointManagerTest.cs @@ -21,9 +21,8 @@ namespace MonoTests.System.Net [TestFixture] public class ServicePointManagerTest { - private Uri googleUri; - private Uri yahooUri; - private Uri apacheUri; + private Uri exampleComUri; + private Uri exampleOrgUri; private int maxIdle; [SetUp] @@ -33,9 +32,8 @@ public class ServicePointManagerTest maxIdle = ServicePointManager.MaxServicePointIdleTime; ServicePointManager.MaxServicePointIdleTime = 10; #endif - googleUri = new Uri ("http://www.google.com"); - yahooUri = new Uri ("http://www.yahoo.com"); - apacheUri = new Uri ("http://www.apache.org"); + exampleComUri = new Uri ("http://www.example.com"); + exampleOrgUri = new Uri ("http://www.example.org"); } [TearDown] @@ -53,27 +51,21 @@ public class ServicePointManagerTest { Assert.AreEqual (0, ServicePointManager.MaxServicePoints, "#1"); - DoWebRequest (googleUri); + DoWebRequest (exampleComUri); Thread.Sleep (100); - DoWebRequest (yahooUri); - Thread.Sleep (100); - DoWebRequest (apacheUri); + DoWebRequest (exampleOrgUri); Thread.Sleep (100); - ServicePoint sp = ServicePointManager.FindServicePoint (googleUri); + ServicePoint sp = ServicePointManager.FindServicePoint (exampleComUri); //WriteServicePoint (sp); - sp = ServicePointManager.FindServicePoint (yahooUri); - //WriteServicePoint (sp); - sp = ServicePointManager.FindServicePoint (apacheUri); + sp = ServicePointManager.FindServicePoint (exampleOrgUri); //WriteServicePoint (sp); ServicePointManager.MaxServicePoints = 1; - sp = ServicePointManager.FindServicePoint (googleUri); + sp = ServicePointManager.FindServicePoint (exampleComUri); //WriteServicePoint (sp); - sp = ServicePointManager.FindServicePoint (yahooUri); - //WriteServicePoint (sp); - sp = ServicePointManager.FindServicePoint (apacheUri); + sp = ServicePointManager.FindServicePoint (exampleOrgUri); //WriteServicePoint (sp); GC.Collect (); @@ -94,8 +86,8 @@ public class ServicePointManagerTest public void FindServicePoint () { ServicePointManager.MaxServicePoints = 0; - ServicePoint sp = ServicePointManager.FindServicePoint (googleUri, new WebProxy (apacheUri)); - Assert.AreEqual (apacheUri, sp.Address, "#1"); + ServicePoint sp = ServicePointManager.FindServicePoint (exampleComUri, new WebProxy (exampleOrgUri)); + Assert.AreEqual (exampleOrgUri, sp.Address, "#1"); #if MOBILE Assert.AreEqual (10, sp.ConnectionLimit, "#2"); #else diff --git a/mcs/class/System/Test/System.Net/ServicePointTest.cs b/mcs/class/System/Test/System.Net/ServicePointTest.cs index e0de739a62..506d87a0bf 100644 --- a/mcs/class/System/Test/System.Net/ServicePointTest.cs +++ b/mcs/class/System/Test/System.Net/ServicePointTest.cs @@ -45,45 +45,45 @@ public class ServicePointTest //WriteServicePoint ("A servicepoint that isn't really", p); ServicePointManager.MaxServicePoints = 2; - ServicePoint google = ServicePointManager.FindServicePoint (new Uri ("http://www.google.com")); + ServicePoint exampleCom = ServicePointManager.FindServicePoint (new Uri ("http://www.example.com")); try { - ServicePoint slashdot = ServicePointManager.FindServicePoint (new Uri ("http://www.slashdot.org")); + ServicePoint exampleOrg = ServicePointManager.FindServicePoint (new Uri ("http://www.example.org")); Assert.Fail ("#1"); } catch (InvalidOperationException) { } ServicePointManager.MaxServicePoints = 0; - //WriteServicePoint ("google before getting a webrequest", google); + //WriteServicePoint ("example before getting a webrequest", example); - HttpWebRequest req = (HttpWebRequest) WebRequest.Create ("http://www.google.com"); + HttpWebRequest req = (HttpWebRequest) WebRequest.Create ("http://www.example.com"); HttpWebResponse res = (HttpWebResponse) req.GetResponse (); #if FOUND_SOME_OTHER_URL // URL is no longer found, disabled the test until a more reliable URL is found :P - //WriteServicePoint ("google after getting a response", google); - ServicePoint google2 = ServicePointManager.FindServicePoint (new Uri ("http://www.google.com/dilbert.html")); - Assert.AreEqual (google, google2, "#equals"); + //WriteServicePoint ("example after getting a response", example); + ServicePoint example2 = ServicePointManager.FindServicePoint (new Uri ("http://www.example.com/dilbert.html")); + Assert.AreEqual (example, example2, "#equals"); res.Close (); #endif // in both instances property CurrentConnections is 0 according to ms.net. // let's see what it says when we do async operations... - HttpWebRequest req2 = (HttpWebRequest) WebRequest.Create ("http://www.google.com"); + HttpWebRequest req2 = (HttpWebRequest) WebRequest.Create ("http://www.example.com"); req2.Method = "PUT"; IAsyncResult async = req2.BeginGetRequestStream (null, null); - //WriteServicePoint ("after async BeginGetRequestStream", google); + //WriteServicePoint ("after async BeginGetRequestStream", example); // CurrentConnections: 1 Stream stream2 = req2.EndGetRequestStream (async); - //WriteServicePoint ("after async EndGetRequestStream", google); + //WriteServicePoint ("after async EndGetRequestStream", example); // CurrentConnections: 1 stream2.Close (); - req2 = (HttpWebRequest) WebRequest.Create ("http://www.google.com"); + req2 = (HttpWebRequest) WebRequest.Create ("http://www.example.com"); async = req2.BeginGetResponse (null, null); - //WriteServicePoint ("after async BeginGetResponse", google); + //WriteServicePoint ("after async BeginGetResponse", example); // CurrentConnections: 2 WebResponse res2 = req2.EndGetResponse (async); - //WriteServicePoint ("after async EndGetResponse", google); + //WriteServicePoint ("after async EndGetResponse", example); // CurrentConnections: 0 // curious that after you get the webresponse object CurrentConnections is set to 0. // you'd think that you'd still be connected until you close the webresponse.. @@ -109,10 +109,10 @@ public class ServicePointTest // what's the limit of the cache? - req2 = (HttpWebRequest) WebRequest.Create ("http://www.apache.org/"); + req2 = (HttpWebRequest) WebRequest.Create ("http://www.example.org/"); res2 = req2.GetResponse (); - sp2 = ServicePointManager.FindServicePoint (new Uri("http://www.apache.org/")); - //WriteServicePoint ("apache", sp2); + sp2 = ServicePointManager.FindServicePoint (new Uri("http://www.example.org/")); + //WriteServicePoint ("example", sp2); //Console.WriteLine ("ContentLength: " + res2.ContentLength); // CurrentConnections: 1 res2.Close (); @@ -130,7 +130,7 @@ public class ServicePointTest // the default is already 2, just in case it isn't.. ServicePointManager.DefaultConnectionLimit = 5; - Uri uri = new Uri ("http://www.go-mono.com/"); + Uri uri = new Uri ("http://www.example.com/"); ServicePoint sp = ServicePointManager.FindServicePoint (uri); WebResponse [] res = new WebResponse [5]; for (int i = 0; i < 5; i++) { @@ -159,7 +159,7 @@ public class ServicePointTest [Category ("NotWorking")] // #A1 fails public void EndPointBind () { - Uri uri = new Uri ("http://www.go-mono.com/"); + Uri uri = new Uri ("http://www.example.com/"); ServicePoint sp = ServicePointManager.FindServicePoint (uri); HttpWebRequest req = (HttpWebRequest) WebRequest.Create (uri); diff --git a/mcs/class/System/Test/System.Net/SocketPermissionAttributeTest.cs b/mcs/class/System/Test/System.Net/SocketPermissionAttributeTest.cs index 71f21aea90..0a54d88836 100644 --- a/mcs/class/System/Test/System.Net/SocketPermissionAttributeTest.cs +++ b/mcs/class/System/Test/System.Net/SocketPermissionAttributeTest.cs @@ -188,7 +188,7 @@ namespace MonoTests.System.Net { public void Host () { SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert); - a.Host = "www.mono-project.com"; + a.Host = "www.example.com"; } [Test] diff --git a/mcs/class/System/Test/System.Net/SocketPermissionTest.cs b/mcs/class/System/Test/System.Net/SocketPermissionTest.cs index 29f10e11a8..9c770deea8 100644 --- a/mcs/class/System/Test/System.Net/SocketPermissionTest.cs +++ b/mcs/class/System/Test/System.Net/SocketPermissionTest.cs @@ -34,7 +34,7 @@ public class SocketPermissionTest //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "123", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "www.ximian.com", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "120.4.3.2", SocketPermission.AllPorts); - //s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.google.com", 80); + //s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.example.com", 80); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "1.*.10.*.99", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "0.0.0.0", SocketPermission.AllPorts); @@ -43,7 +43,7 @@ public class SocketPermissionTest s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "localhost", 8080); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "123", 8080); - //s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.google.com", SocketPermission.AllPorts); + //s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.example.com", SocketPermission.AllPorts); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "213.*.*.*", SocketPermission.AllPorts); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", 9090); s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "216.239.*.*", SocketPermission.AllPorts); diff --git a/mcs/class/System/Test/System.Net/WebClientTest.cs b/mcs/class/System/Test/System.Net/WebClientTest.cs index b50da19a91..0f51c41833 100644 --- a/mcs/class/System/Test/System.Net/WebClientTest.cs +++ b/mcs/class/System/Test/System.Net/WebClientTest.cs @@ -35,11 +35,11 @@ namespace MonoTests.System.Net // A new, but empty file has been created. This is a test case // for bug 81005 - wc.DownloadFile("http://google.com/", filename); + wc.DownloadFile("http://example.com/", filename); // Now, remove the file and attempt to download again. File.Delete(filename); - wc.DownloadFile("http://google.com/", filename); + wc.DownloadFile("http://example.com/", filename); } [Test] @@ -59,6 +59,7 @@ namespace MonoTests.System.Net } [Test] // DownloadData (string) + [Category ("BitcodeNotSupported")] public void DownloadData1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -98,6 +99,7 @@ namespace MonoTests.System.Net } [Test] // DownloadData (Uri) + [Category ("BitcodeNotSupported")] public void DownloadData2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -137,6 +139,7 @@ namespace MonoTests.System.Net } [Test] // DownloadFile (string, string) + [Category ("BitcodeNotSupported")] public void DownloadFile1_Address_SchemeNotSupported () { using (var tmpdir = new TempDirectory ()) { @@ -163,6 +166,7 @@ namespace MonoTests.System.Net } [Test] // DownloadFile (string, string) + [Category ("BitcodeNotSupported")] public void DownloadFile1_FileName_Null () { WebClient wc = new WebClient (); @@ -180,6 +184,7 @@ namespace MonoTests.System.Net } [Test] // DownloadFile (Uri, string) + [Category ("BitcodeNotSupported")] public void DownloadFile2_Address_Null () { WebClient wc = new WebClient (); @@ -196,6 +201,7 @@ namespace MonoTests.System.Net } [Test] // DownloadFile (Uri, string) + [Category ("BitcodeNotSupported")] public void DownloadFile2_Address_SchemeNotSupported () { using (var tmpdir = new TempDirectory ()) { @@ -222,6 +228,7 @@ namespace MonoTests.System.Net } [Test] // DownloadFile (Uri, string) + [Category ("BitcodeNotSupported")] public void DownloadFile2_FileName_Null () { WebClient wc = new WebClient (); @@ -255,6 +262,7 @@ namespace MonoTests.System.Net } [Test] // DownloadString (string) + [Category ("BitcodeNotSupported")] public void DownloadString1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -294,6 +302,7 @@ namespace MonoTests.System.Net } [Test] // DownloadString (Uri) + [Category ("BitcodeNotSupported")] public void DownloadString2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -357,6 +366,7 @@ namespace MonoTests.System.Net } [Test] // OpenRead (string) + [Category ("BitcodeNotSupported")] public void OpenRead1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -380,6 +390,7 @@ namespace MonoTests.System.Net } [Test] // OpenRead (Uri) + [Category ("BitcodeNotSupported")] public void OpenRead2_Address_Null () { WebClient wc = new WebClient (); @@ -396,6 +407,7 @@ namespace MonoTests.System.Net } [Test] // OpenRead (Uri) + [Category ("BitcodeNotSupported")] public void OpenRead2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -448,6 +460,7 @@ namespace MonoTests.System.Net } [Test] // OpenWrite (string) + [Category ("BitcodeNotSupported")] public void OpenWrite1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -487,6 +500,7 @@ namespace MonoTests.System.Net } [Test] // OpenWrite (string, string) + [Category ("BitcodeNotSupported")] public void OpenWrite2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -510,6 +524,7 @@ namespace MonoTests.System.Net } [Test] // OpenWrite (Uri) + [Category ("BitcodeNotSupported")] public void OpenWrite3_Address_Null () { WebClient wc = new WebClient (); @@ -526,6 +541,7 @@ namespace MonoTests.System.Net } [Test] // OpenWrite (Uri) + [Category ("BitcodeNotSupported")] public void OpenWrite3_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -549,6 +565,7 @@ namespace MonoTests.System.Net } [Test] // OpenWrite (Uri, string) + [Category ("BitcodeNotSupported")] public void OpenWrite4_Address_Null () { WebClient wc = new WebClient (); @@ -565,6 +582,7 @@ namespace MonoTests.System.Net } [Test] // OpenWrite (Uri, string) + [Category ("BitcodeNotSupported")] public void OpenWrite4_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -605,6 +623,7 @@ namespace MonoTests.System.Net } [Test] // UploadData (string, byte []) + [Category ("BitcodeNotSupported")] public void UploadData1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -632,7 +651,7 @@ namespace MonoTests.System.Net { WebClient wc = new WebClient (); try { - wc.UploadData ("http://www.mono-project.com", + wc.UploadData ("http://www.example.com", (byte []) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -661,6 +680,7 @@ namespace MonoTests.System.Net } [Test] // UploadData (Uri, byte []) + [Category ("BitcodeNotSupported")] public void UploadData2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -689,7 +709,7 @@ namespace MonoTests.System.Net { WebClient wc = new WebClient (); try { - wc.UploadData (new Uri ("http://www.mono-project.com"), + wc.UploadData (new Uri ("http://www.example.com"), (byte []) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -719,6 +739,7 @@ namespace MonoTests.System.Net } [Test] // UploadData (string, string, byte []) + [Category ("BitcodeNotSupported")] public void UploadData3_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -747,7 +768,7 @@ namespace MonoTests.System.Net { WebClient wc = new WebClient (); try { - wc.UploadData ("http://www.mono-project.com", + wc.UploadData ("http://www.example.com", "POST", (byte []) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -776,6 +797,7 @@ namespace MonoTests.System.Net } [Test] // UploadData (Uri, string, byte []) + [Category ("BitcodeNotSupported")] public void UploadData4_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -804,7 +826,7 @@ namespace MonoTests.System.Net { WebClient wc = new WebClient (); try { - wc.UploadData (new Uri ("http://www.mono-project.com"), + wc.UploadData (new Uri ("http://www.example.com"), "POST", (byte []) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -838,6 +860,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (string, string) + [Category ("BitcodeNotSupported")] public void UploadFile1_Address_SchemeNotSupported () { string tempFile = Path.GetTempFileName (); @@ -867,6 +890,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (string, string) + [Category ("BitcodeNotSupported")] public void UploadFile1_FileName_NotFound () { using (var tempPath = new TempDirectory ()) { @@ -933,6 +957,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (Uri, string) + [Category ("BitcodeNotSupported")] public void UploadFile2_Address_SchemeNotSupported () { string tempFile = Path.GetTempFileName (); @@ -962,6 +987,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (Uri, string) + [Category ("BitcodeNotSupported")] public void UploadFile2_FileName_NotFound () { using (var tempPath = new TempDirectory ()) { @@ -1028,6 +1054,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (string, string, string) + [Category ("BitcodeNotSupported")] public void UploadFile3_Address_SchemeNotSupported () { string tempFile = Path.GetTempFileName (); @@ -1057,6 +1084,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (string, string, string) + [Category ("BitcodeNotSupported")] public void UploadFile3_FileName_NotFound () { using (var tempPath = new TempDirectory ()) { @@ -1123,6 +1151,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (Uri, string, string) + [Category ("BitcodeNotSupported")] public void UploadFile4_Address_SchemeNotSupported () { string tempFile = Path.GetTempFileName (); @@ -1152,6 +1181,7 @@ namespace MonoTests.System.Net } [Test] // UploadFile (Uri, string, string) + [Category ("BitcodeNotSupported")] public void UploadFile4_FileName_NotFound () { using (var tempPath = new TempDirectory ()) { @@ -1216,6 +1246,7 @@ namespace MonoTests.System.Net } [Test] // UploadString (string, string) + [Category ("BitcodeNotSupported")] public void UploadString1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1271,6 +1302,7 @@ namespace MonoTests.System.Net } [Test] // UploadString (Uri, string) + [Category ("BitcodeNotSupported")] public void UploadString2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1328,6 +1360,7 @@ namespace MonoTests.System.Net } [Test] // UploadString (string, string, string) + [Category ("BitcodeNotSupported")] public void UploadString3_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1386,6 +1419,7 @@ namespace MonoTests.System.Net } [Test] // UploadString (Uri, string, string) + [Category ("BitcodeNotSupported")] public void UploadString4_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1465,6 +1499,7 @@ namespace MonoTests.System.Net } [Test] // UploadValues (string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues1_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1489,11 +1524,12 @@ namespace MonoTests.System.Net } [Test] // UploadValues (string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues1_Data_Null () { WebClient wc = new WebClient (); try { - wc.UploadValues ("http://www.mono-project.com", + wc.UploadValues ("http://www.example.com", (NameValueCollection) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -1506,6 +1542,7 @@ namespace MonoTests.System.Net } [Test] // UploadValues (Uri, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues2_Address_Null () { WebClient wc = new WebClient (); @@ -1522,6 +1559,7 @@ namespace MonoTests.System.Net } [Test] // UploadValues (Uri, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues2_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1546,11 +1584,12 @@ namespace MonoTests.System.Net } [Test] // UploadValues (Uri, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues2_Data_Null () { WebClient wc = new WebClient (); try { - wc.UploadValues (new Uri ("http://www.mono-project.com"), + wc.UploadValues (new Uri ("http://www.example.com"), (NameValueCollection) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -1580,6 +1619,7 @@ namespace MonoTests.System.Net } [Test] // UploadValues (string, string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues3_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1604,11 +1644,12 @@ namespace MonoTests.System.Net } [Test] // UploadValues (string, string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues3_Data_Null () { WebClient wc = new WebClient (); try { - wc.UploadValues ("http://www.mono-project.com", + wc.UploadValues ("http://www.example.com", "POST", (NameValueCollection) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { @@ -1621,6 +1662,7 @@ namespace MonoTests.System.Net } [Test] // UploadValues (Uri, string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues4_Address_Null () { WebClient wc = new WebClient (); @@ -1638,6 +1680,7 @@ namespace MonoTests.System.Net } [Test] // UploadValues (Uri, string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues4_Address_SchemeNotSupported () { WebClient wc = new WebClient (); @@ -1662,11 +1705,12 @@ namespace MonoTests.System.Net } [Test] // UploadValues (Uri, string, NameValueCollection) + [Category ("BitcodeNotSupported")] public void UploadValues4_Data_Null () { WebClient wc = new WebClient (); try { - wc.UploadValues (new Uri ("http://www.mono-project.com"), + wc.UploadValues (new Uri ("http://www.example.com"), "POST", (NameValueCollection) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { diff --git a/mcs/class/System/Test/System.Net/WebClientTestAsync.cs b/mcs/class/System/Test/System.Net/WebClientTestAsync.cs index f9d3565fc3..549929304a 100644 --- a/mcs/class/System/Test/System.Net/WebClientTestAsync.cs +++ b/mcs/class/System/Test/System.Net/WebClientTestAsync.cs @@ -43,6 +43,7 @@ namespace MonoTests.System.Net [Test] [Category("Async")] [Category("AndroidNotWorking")] // Attempts to access the test dll which won't work on Android + [Category("BitcodeNotSupported")] public void DownloadData () { WebClient wc; @@ -129,15 +130,15 @@ namespace MonoTests.System.Net public void DownloadMultiple () { WebClient wc = new WebClient (); - var t1 = wc.OpenReadTaskAsync ("http://www.google.com/"); + var t1 = wc.OpenReadTaskAsync ("http://www.example.org/"); Assert.That (t1.Wait (15000)); Assert.IsTrue (t1.IsCompleted, "#1"); - var t2 = wc.OpenReadTaskAsync ("http://www.mono-project.com/"); + var t2 = wc.OpenReadTaskAsync ("http://www.example.com/"); Assert.That (t2.Wait (15000)); Assert.IsTrue (t2.IsCompleted, "#2"); - var t3 = wc.DownloadStringTaskAsync ("http://www.google.com/"); + var t3 = wc.DownloadStringTaskAsync ("http://www.example.org/"); Assert.That (t3.Wait (15000)); Assert.IsTrue (t3.IsCompleted, "#3"); } @@ -150,8 +151,8 @@ namespace MonoTests.System.Net WebClient wc = new WebClient (); MessagePumpSyncContext.Run (async () => { - await wc.DownloadStringTaskAsync ("http://www.google.com/"); - await wc.DownloadDataTaskAsync ("http://www.mono-project.com/"); + await wc.DownloadStringTaskAsync ("http://www.example.org/"); + await wc.DownloadDataTaskAsync ("http://www.example.com/"); }, null, 15000); } @@ -178,8 +179,8 @@ namespace MonoTests.System.Net }; MessagePumpSyncContext.Run (async () => { - await wc.DownloadStringTaskAsync ("http://www.google.com/"); - await wc.DownloadDataTaskAsync ("http://www.mono-project.com/"); + await wc.DownloadStringTaskAsync ("http://www.example.org/"); + await wc.DownloadDataTaskAsync ("http://www.example.com/"); }, () => data_completed && string_completed, 15000); Assert.IsTrue (data_completed, "#1"); diff --git a/mcs/class/System/Test/System.Net/WebProxyTest.cs b/mcs/class/System/Test/System.Net/WebProxyTest.cs index 0257ff50fe..4fa3b0bfb2 100644 --- a/mcs/class/System/Test/System.Net/WebProxyTest.cs +++ b/mcs/class/System/Test/System.Net/WebProxyTest.cs @@ -75,7 +75,7 @@ namespace MonoTests.System.Net p.BypassArrayList.Add ("http://proxy2.contoso.com"); p.BypassArrayList.Add ("http://proxy2.contoso.com"); Assert.AreEqual (2, p.BypassList.Length, "#1"); - Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.google.com")), "#2"); + Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.example.com")), "#2"); Assert.IsTrue (p.IsBypassed (proxy2), "#3"); Assert.AreEqual (proxy2, p.GetProxy (proxy2), "#4"); @@ -127,7 +127,7 @@ namespace MonoTests.System.Net public void IsByPassed () { WebProxy p = new WebProxy ("http://proxy.contoso.com", true); - Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.google.com")), "#1"); + Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.example.com")), "#1"); Assert.IsTrue (p.IsBypassed (new Uri ("http://localhost/index.html")), "#2"); Assert.IsTrue (p.IsBypassed (new Uri ("http://localhost:8080/index.html")), "#3"); Assert.IsTrue (p.IsBypassed (new Uri ("http://loopback:8080/index.html")), "#4"); @@ -136,33 +136,33 @@ namespace MonoTests.System.Net Assert.IsTrue (!p.IsBypassed (new Uri ("http://webserver.com/index.html")), "#7"); p = new WebProxy ("http://proxy.contoso.com", false); - Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.google.com")), "#11"); + Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.example.com")), "#11"); Assert.IsTrue (p.IsBypassed (new Uri ("http://localhost/index.html")), "#12: lamespec of ms.net"); Assert.IsTrue (p.IsBypassed (new Uri ("http://localhost:8080/index.html")), "#13: lamespec of ms.net"); Assert.IsTrue (p.IsBypassed (new Uri ("http://loopback:8080/index.html")), "#14: lamespec of ms.net"); Assert.IsTrue (p.IsBypassed (new Uri ("http://127.0.0.01:8080/index.html")), "#15: lamespec of ms.net"); Assert.IsTrue (!p.IsBypassed (new Uri ("http://webserver/index.html")), "#16"); - p.BypassList = new string [] { "google.com", "contoso.com" }; - Assert.IsTrue (p.IsBypassed (new Uri ("http://www.google.com")), "#20"); - Assert.IsTrue (p.IsBypassed (new Uri ("http://www.GOOGLE.com")), "#21"); + p.BypassList = new string [] { "example.com", "contoso.com" }; + Assert.IsTrue (p.IsBypassed (new Uri ("http://www.example.com")), "#20"); + Assert.IsTrue (p.IsBypassed (new Uri ("http://www.EXAMPLE.com")), "#21"); Assert.IsTrue (p.IsBypassed (new Uri ("http://www.contoso.com:8080/foo/bar/index.html")), "#22"); Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.contoso2.com:8080/foo/bar/index.html")), "#23"); Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.foo.com:8080/contoso.com.html")), "#24"); p.BypassList = new string [] { "https" }; - Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.google.com")), "#30"); - Assert.IsTrue (p.IsBypassed (new Uri ("https://www.google.com")), "#31"); + Assert.IsTrue (!p.IsBypassed (new Uri ("http://www.example.com")), "#30"); + Assert.IsTrue (p.IsBypassed (new Uri ("https://www.example.com")), "#31"); } [Test] public void IsByPassed_Address_Null () { WebProxy p = new WebProxy ((Uri) null, false); - Assert.IsTrue (p.IsBypassed (new Uri ("http://www.google.com")), "#1"); + Assert.IsTrue (p.IsBypassed (new Uri ("http://www.example.com")), "#1"); p = new WebProxy ((Uri) null, true); - Assert.IsTrue (p.IsBypassed (new Uri ("http://www.google.com")), "#2"); + Assert.IsTrue (p.IsBypassed (new Uri ("http://www.example.com")), "#2"); } [Test] diff --git a/mcs/class/System/Test/System.Net/WebRequestTest.cs b/mcs/class/System/Test/System.Net/WebRequestTest.cs index 35120754c0..57115d810b 100644 --- a/mcs/class/System/Test/System.Net/WebRequestTest.cs +++ b/mcs/class/System/Test/System.Net/WebRequestTest.cs @@ -279,7 +279,7 @@ namespace MonoTests.System.Net { Assert.AreSame (proxy, WebRequest.DefaultWebProxy, "#A2"); HttpWebRequest req = (HttpWebRequest) WebRequest.CreateDefault ( - new Uri ("http://www.mono-project.com")); + new Uri ("http://www.example.com")); Assert.IsNotNull (req.Proxy, "#B1"); Assert.AreSame (proxy, req.Proxy, "#B2"); @@ -289,7 +289,7 @@ namespace MonoTests.System.Net { Assert.AreSame (proxy, req.Proxy, "#C3"); req = (HttpWebRequest) WebRequest.CreateDefault ( - new Uri ("http://www.mono-project.com")); + new Uri ("http://www.example.com")); Assert.IsNull (req.Proxy, "#D"); } @@ -297,7 +297,7 @@ namespace MonoTests.System.Net { public void RegisterPrefix_Creator_Null () { try { - WebRequest.RegisterPrefix ("http://www.mono-project.com", (IWebRequestCreate) null); + WebRequest.RegisterPrefix ("http://www.example.com", (IWebRequestCreate) null); Assert.Fail ("#1"); } catch (ArgumentNullException ex) { Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2"); diff --git a/mcs/class/System/Test/System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtensionTest.cs b/mcs/class/System/Test/System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtensionTest.cs index 90bf8c8928..b3c98efaa8 100644 --- a/mcs/class/System/Test/System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtensionTest.cs +++ b/mcs/class/System/Test/System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtensionTest.cs @@ -329,7 +329,7 @@ namespace MonoTests.System.Security.Cryptography.X509Certificates { public void WrongExtension_X509Extension () { X509Extension ex = new X509Extension ("1.2.3", new byte[0], true); - X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("www.go-mono.com", false); // odd length + X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("www.example.com", false); // odd length Assert.IsFalse (ski.Critical, "Critical"); Assert.AreEqual ("FFFFFFFFFFFFFF", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier"); Assert.AreEqual ("ff ff ff ff ff ff ff" + Environment.NewLine, ski.Format (true), "Format(true)"); @@ -360,7 +360,7 @@ namespace MonoTests.System.Security.Cryptography.X509Certificates { public void WrongAsnEncodedData () { AsnEncodedData aed = new AsnEncodedData (new byte[0]); - X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("www.mono-project.com", false); + X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("www.example.com", false); ski.CopyFrom (aed); // note: not the same behaviour than using the constructor! } diff --git a/mcs/class/System/Test/System.Security.Cryptography/AsnEncodedDataTest.cs b/mcs/class/System/Test/System.Security.Cryptography/AsnEncodedDataTest.cs index 1c80aa2914..db93389976 100644 --- a/mcs/class/System/Test/System.Security.Cryptography/AsnEncodedDataTest.cs +++ b/mcs/class/System/Test/System.Security.Cryptography/AsnEncodedDataTest.cs @@ -266,13 +266,13 @@ namespace MonoTests.System.Security.Cryptography { // note: important to emulate in Mono because we need it for SSL/TLS public void Build_SubjectAltNameExtension () { - AsnEncodedData aed = new AsnEncodedData (new byte[] { 0x30, 0x16, 0x82, 0x14, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x6F, 0x6E, 0x6F, 0x2D, 0x70, 0x72, 0x6F, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x63, 0x6F, 0x6D }); - Assert.AreEqual ("30 16 82 14 77 77 77 2e 6d 6f 6e 6f 2d 70 72 6f 6a 65 63 74 2e 63 6f 6d", aed.Format (true), "Format(true)"); - Assert.AreEqual ("30 16 82 14 77 77 77 2e 6d 6f 6e 6f 2d 70 72 6f 6a 65 63 74 2e 63 6f 6d", aed.Format (false), "Format(false)"); + AsnEncodedData aed = new AsnEncodedData (new byte[] { 0x30, 0x11, 0x82, 0x0F, 0x77, 0x77, 0x77, 0x2E, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x63, 0x6F, 0x6D }); + Assert.AreEqual ("30 11 82 0f 77 77 77 2e 65 78 61 6d 70 6c 65 2e 63 6f 6d", aed.Format (true), "Format(true)"); + Assert.AreEqual ("30 11 82 0f 77 77 77 2e 65 78 61 6d 70 6c 65 2e 63 6f 6d", aed.Format (false), "Format(false)"); aed.Oid = new Oid ("2.5.29.17"); // and now "AsnEncodedData" knows how to (magically) decode the data without involving the class - Assert.AreEqual ("DNS Name=www.mono-project.com" + Environment.NewLine, aed.Format (true), "aed.Format(true)"); - Assert.AreEqual ("DNS Name=www.mono-project.com", aed.Format (false), "aed.Format(false)"); + Assert.AreEqual ("DNS Name=www.example.com" + Environment.NewLine, aed.Format (true), "aed.Format(true)"); + Assert.AreEqual ("DNS Name=www.example.com", aed.Format (false), "aed.Format(false)"); // note that the Fx doesn't "really" support this extension // finally this also means that the Oid "knowns" about oid not used in the Fx itself // FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows. diff --git a/mcs/class/System/Test/System.Text.RegularExpressions/MatchTest.cs b/mcs/class/System/Test/System.Text.RegularExpressions/MatchTest.cs index 58a9744adb..b45879e9ea 100644 --- a/mcs/class/System/Test/System.Text.RegularExpressions/MatchTest.cs +++ b/mcs/class/System/Test/System.Text.RegularExpressions/MatchTest.cs @@ -78,7 +78,7 @@ namespace MonoTests.System.Text.RegularExpressions public void Result_Replacement_Empty () { Regex email = new Regex ("(?<user>[^@]+)@(?<domain>.+)"); - Match m = email.Match ("mono@go-mono.com"); + Match m = email.Match ("mono@example.com"); string exp = m.Result (string.Empty); Assert.AreEqual (string.Empty, exp); } diff --git a/mcs/class/System/Test/System.Text.RegularExpressions/RegexTest.cs b/mcs/class/System/Test/System.Text.RegularExpressions/RegexTest.cs index 79ad728c5b..374e9c6555 100644 --- a/mcs/class/System/Test/System.Text.RegularExpressions/RegexTest.cs +++ b/mcs/class/System/Test/System.Text.RegularExpressions/RegexTest.cs @@ -120,16 +120,16 @@ namespace MonoTests.System.Text.RegularExpressions AddOptions( RegexOptions.None )); Match m; - m = email.Match ("mono@go-mono.com"); + m = email.Match ("mono@example.com"); Assert.IsTrue (m.Success, "#m01"); Assert.AreEqual ("mono", m.Groups ["user"].Value, "#m02"); - Assert.AreEqual ("go-mono.com", m.Groups ["domain"].Value, "#m03"); + Assert.AreEqual ("example.com", m.Groups ["domain"].Value, "#m03"); - m = email.Match ("mono.bugs@go-mono.com"); + m = email.Match ("mono.bugs@example.com"); Assert.IsTrue (m.Success, "m04"); Assert.AreEqual ("mono.bugs", m.Groups ["user"].Value, "#m05"); - Assert.AreEqual ("go-mono.com", m.Groups ["domain"].Value, "#m06"); + Assert.AreEqual ("example.com", m.Groups ["domain"].Value, "#m06"); } [Test] diff --git a/mcs/class/System/Test/System/FtpStyleUriParserTest.cs b/mcs/class/System/Test/System/FtpStyleUriParserTest.cs index 6ccee59e9e..5af6ff1e18 100644 --- a/mcs/class/System/Test/System/FtpStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/FtpStyleUriParserTest.cs @@ -107,7 +107,7 @@ namespace MonoTests.System { [Test] public void Ftpx () { - Uri uri = new Uri ("ftpx://go-mono.com/download/"); + Uri uri = new Uri ("ftpx://example.com/download/"); Assert.AreEqual (2121, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -116,7 +116,7 @@ namespace MonoTests.System { [Category ("NotWorking")] public void Ftpx_Methods () { - Uri uri = new Uri ("ftpx://go-mono.com/download/"); + Uri uri = new Uri ("ftpx://example.com/download/"); Assert.AreEqual ("download/", uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -126,7 +126,7 @@ namespace MonoTests.System { [Test] public void SecureFtpx () { - Uri uri = new Uri ("sftpx://www.mono-project.com/CAS"); + Uri uri = new Uri ("sftpx://www.example.com/CAS"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/GenericUriParserTest.cs b/mcs/class/System/Test/System/GenericUriParserTest.cs index 1944ab9c65..34237aa3f4 100644 --- a/mcs/class/System/Test/System/GenericUriParserTest.cs +++ b/mcs/class/System/Test/System/GenericUriParserTest.cs @@ -107,7 +107,7 @@ namespace MonoTests.System { [Test] public void Generic () { - Uri uri = new Uri ("generic://www.mono-project.com/"); + Uri uri = new Uri ("generic://www.example.com/"); Assert.AreEqual (1, uri.Port, "Port"); } @@ -115,7 +115,7 @@ namespace MonoTests.System { [Category ("NotWorking")] public void Generic_Methods () { - Uri uri = new Uri ("generic://www.mono-project.com/"); + Uri uri = new Uri ("generic://www.example.com/"); Assert.AreEqual (String.Empty, uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -124,7 +124,7 @@ namespace MonoTests.System { [Test] public void SecureGeneric () { - Uri uri = new Uri ("sgenericx://www.mono-project.com/"); + Uri uri = new Uri ("sgenericx://www.example.com/"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/GopherStyleUriParserTest.cs b/mcs/class/System/Test/System/GopherStyleUriParserTest.cs index 5a5426471c..594d70cb46 100644 --- a/mcs/class/System/Test/System/GopherStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/GopherStyleUriParserTest.cs @@ -108,7 +108,7 @@ namespace MonoTests.System { [Test] public void Gopherx () { - Uri uri = new Uri ("gopherx://go-mono.com/"); + Uri uri = new Uri ("gopherx://example.com/"); Assert.AreEqual (7070, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -117,7 +117,7 @@ namespace MonoTests.System { [Category ("NotWorking")] public void Gopherx_Methods () { - Uri uri = new Uri ("gopherx://go-mono.com/"); + Uri uri = new Uri ("gopherx://example.com/"); Assert.AreEqual (String.Empty, uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -127,7 +127,7 @@ namespace MonoTests.System { [Test] public void SecureGopherx () { - Uri uri = new Uri ("sgopherx://go-mono.com/"); + Uri uri = new Uri ("sgopherx://example.com/"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/HttpStyleUriParserTest.cs b/mcs/class/System/Test/System/HttpStyleUriParserTest.cs index 6e631dcef7..d5fa8f8436 100644 --- a/mcs/class/System/Test/System/HttpStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/HttpStyleUriParserTest.cs @@ -119,7 +119,7 @@ namespace MonoTests.System { [Test] public void Httpx () { - Uri uri = new Uri ("httpx://www.mono-project.com/CAS"); + Uri uri = new Uri ("httpx://www.example.com/CAS"); Assert.AreEqual (8080, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -127,7 +127,7 @@ namespace MonoTests.System { [Test] public void Httpx_Methods () { - Uri uri = new Uri ("httpx://www.mono-project.com/CAS"); + Uri uri = new Uri ("httpx://www.example.com/CAS"); Assert.AreEqual ("CAS", uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -137,7 +137,7 @@ namespace MonoTests.System { [Test] public void SecureHttpx () { - Uri uri = new Uri ("shttpx://www.mono-project.com/CAS"); + Uri uri = new Uri ("shttpx://www.example.com/CAS"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/LdapStyleUriParserTest.cs b/mcs/class/System/Test/System/LdapStyleUriParserTest.cs index 5caf2e0d6b..ae4da09df4 100644 --- a/mcs/class/System/Test/System/LdapStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/LdapStyleUriParserTest.cs @@ -108,7 +108,7 @@ namespace MonoTests.System { [Test] public void Ldapx () { - Uri uri = new Uri ("ldapx://www.mono-project.com/"); + Uri uri = new Uri ("ldapx://www.example.com/"); Assert.AreEqual (3890, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -117,7 +117,7 @@ namespace MonoTests.System { [Category ("NotWorking")] public void Ldapx_Methods () { - Uri uri = new Uri ("ldapx://www.mono-project.com/"); + Uri uri = new Uri ("ldapx://www.example.com/"); Assert.AreEqual (String.Empty, uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -127,7 +127,7 @@ namespace MonoTests.System { [Test] public void SecureLdapx () { - Uri uri = new Uri ("sldapx://www.mono-project.com/"); + Uri uri = new Uri ("sldapx://www.example.com/"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/NetPipeStyleUriParserTest.cs b/mcs/class/System/Test/System/NetPipeStyleUriParserTest.cs index a581b20cd5..c4ba95384f 100644 --- a/mcs/class/System/Test/System/NetPipeStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/NetPipeStyleUriParserTest.cs @@ -107,7 +107,7 @@ namespace MonoTests.System { [Test] public void NetPipeX () { - Uri uri = new Uri ("net.pipex://www.mono-project.com/"); + Uri uri = new Uri ("net.pipex://www.example.com/"); Assert.AreEqual (2, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -116,7 +116,7 @@ namespace MonoTests.System { [Category ("NotWorking")] public void NetPipeX_Methods () { - Uri uri = new Uri ("net.pipex://www.mono-project.com/"); + Uri uri = new Uri ("net.pipex://www.example.com/"); Assert.AreEqual (String.Empty, uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -126,7 +126,7 @@ namespace MonoTests.System { [Test] public void SecureNetPipeX () { - Uri uri = new Uri ("snet.pipex://www.mono-project.com/"); + Uri uri = new Uri ("snet.pipex://www.example.com/"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/NetTcpStyleUriParserTest.cs b/mcs/class/System/Test/System/NetTcpStyleUriParserTest.cs index 9a0de8434d..ebd66a22dc 100644 --- a/mcs/class/System/Test/System/NetTcpStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/NetTcpStyleUriParserTest.cs @@ -107,7 +107,7 @@ namespace MonoTests.System { [Test] public void NetTcpX () { - Uri uri = new Uri ("net.tcpx://www.mono-project.com/"); + Uri uri = new Uri ("net.tcpx://www.example.com/"); Assert.AreEqual (2, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -116,7 +116,7 @@ namespace MonoTests.System { [Category ("NotWorking")] public void NetTcpX_Methods () { - Uri uri = new Uri ("net.tcpx://www.mono-project.com/"); + Uri uri = new Uri ("net.tcpx://www.example.com/"); Assert.AreEqual (String.Empty, uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); @@ -126,7 +126,7 @@ namespace MonoTests.System { [Test] public void SecureNetTcpX () { - Uri uri = new Uri ("snet.tcpx://www.mono-project.com/"); + Uri uri = new Uri ("snet.tcpx://www.example.com/"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/NewsStyleUriParserTest.cs b/mcs/class/System/Test/System/NewsStyleUriParserTest.cs index 9ef327aaca..818f07976d 100644 --- a/mcs/class/System/Test/System/NewsStyleUriParserTest.cs +++ b/mcs/class/System/Test/System/NewsStyleUriParserTest.cs @@ -107,7 +107,7 @@ namespace MonoTests.System { [Test] public void NewsX () { - Uri uri = new Uri ("newsx://go-mono.com/"); + Uri uri = new Uri ("newsx://example.com/"); Assert.AreEqual (2, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } @@ -116,8 +116,8 @@ namespace MonoTests.System { [Category ("NotWorking")] public void NewsX_Methods () { - Uri uri = new Uri ("newsx://go-mono.com/"); - Assert.AreEqual ("//go-mono.com/", uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); + Uri uri = new Uri ("newsx://example.com/"); + Assert.AreEqual ("//example.com/", uri.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped), "GetComponents"); Assert.IsTrue (uri.IsBaseOf (uri), "IsBaseOf"); Assert.IsTrue (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString"); // ??? our parser doesn't seems to be called :( @@ -126,7 +126,7 @@ namespace MonoTests.System { [Test] public void SecureNewsX () { - Uri uri = new Uri ("snewsx://go-mono.com/"); + Uri uri = new Uri ("snewsx://example.com/"); Assert.AreEqual (-1, uri.Port, "Port"); // OnRegister cannot be used to change the registering informations } diff --git a/mcs/class/System/Test/System/UriBuilderTest.cs b/mcs/class/System/Test/System/UriBuilderTest.cs index 5db45f56b3..976db087b3 100644 --- a/mcs/class/System/Test/System/UriBuilderTest.cs +++ b/mcs/class/System/Test/System/UriBuilderTest.cs @@ -111,8 +111,8 @@ namespace MonoTests.System [Test] public void Constructor_StringStringInt () { - UriBuilder ub = new UriBuilder ("http", "www.mono-project.com", 80); - Assert.AreEqual ("http://www.mono-project.com/", ub.Uri.AbsoluteUri, "Uri.AbsoluteUri"); + UriBuilder ub = new UriBuilder ("http", "www.example.com", 80); + Assert.AreEqual ("http://www.example.com/", ub.Uri.AbsoluteUri, "Uri.AbsoluteUri"); } [Test] @@ -281,10 +281,10 @@ namespace MonoTests.System [Test] public void TestAppendFragment () { - UriBuilder uri = new UriBuilder ("http://www.mono-project.com/Main_Page"); + UriBuilder uri = new UriBuilder ("http://www.example.com/Main_Page"); uri.Fragment = "Features"; Assert.AreEqual ("#Features", uri.Fragment, "#1"); - Assert.AreEqual ("http://www.mono-project.com/Main_Page#Features", uri.Uri.ToString (), "#2"); + Assert.AreEqual ("http://www.example.com/Main_Page#Features", uri.Uri.ToString (), "#2"); } [Test] @@ -336,10 +336,10 @@ namespace MonoTests.System { // some URI can't be parsed by System.Uri but are accepted by UriBuilder Uri u = null; - string uri = "www.mono-project.com"; + string uri = "www.example.com"; Assert.IsFalse (Uri.TryCreate (uri, UriKind.Absolute, out u), "1.Uri.TryCreate"); UriBuilder ub = new UriBuilder (uri); - Assert.AreEqual ("www.mono-project.com", ub.Host, "1.Host"); + Assert.AreEqual ("www.example.com", ub.Host, "1.Host"); Assert.AreEqual ("http", ub.Scheme, "1.Scheme"); Assert.AreEqual (80, ub.Port, "1.Port"); Assert.AreEqual ("/", ub.Path, "1.Path"); diff --git a/mcs/class/System/Test/System/UriParserTest.cs b/mcs/class/System/Test/System/UriParserTest.cs index 6cffcb0210..a068a01296 100644 --- a/mcs/class/System/Test/System/UriParserTest.cs +++ b/mcs/class/System/Test/System/UriParserTest.cs @@ -128,7 +128,7 @@ namespace MonoTests.System { [TestFixture] public class UriParserTest { - private const string full_http = "http://www.mono-project.com/Main_Page#FAQ?Edit"; + private const string full_http = "http://www.example.com/Main_Page#FAQ?Edit"; private string prefix; private Uri http; @@ -139,10 +139,10 @@ namespace MonoTests.System { { prefix = "unit.test."; http = new Uri (full_http); - ftp = new Uri ("ftp://username:password@ftp.go-mono.com:21/with some spaces/mono.tgz"); + ftp = new Uri ("ftp://username:password@ftp.example.com:21/with some spaces/mono.tgz"); // Uses percent encoding on the username and password - ftp2 = new Uri ("ftp://%75sername%3a%70assword@ftp.go-mono.com:21/with some spaces/mono.tgz"); + ftp2 = new Uri ("ftp://%75sername%3a%70assword@ftp.example.com:21/with some spaces/mono.tgz"); } public string Prefix @@ -163,23 +163,23 @@ namespace MonoTests.System { UnitTestUriParser p = new UnitTestUriParser (); Assert.AreEqual ("http", p._GetComponents (http, UriComponents.Scheme, UriFormat.SafeUnescaped), "http.Scheme"); Assert.AreEqual (String.Empty, p._GetComponents (http, UriComponents.UserInfo, UriFormat.SafeUnescaped), "http.UserInfo"); - Assert.AreEqual ("www.mono-project.com", p._GetComponents (http, UriComponents.Host, UriFormat.SafeUnescaped), "http.Host"); + Assert.AreEqual ("www.example.com", p._GetComponents (http, UriComponents.Host, UriFormat.SafeUnescaped), "http.Host"); Assert.AreEqual (String.Empty, p._GetComponents (http, UriComponents.Port, UriFormat.SafeUnescaped), "http.Port"); Assert.AreEqual ("Main_Page", p._GetComponents (http, UriComponents.Path, UriFormat.SafeUnescaped), "http.Path"); Assert.AreEqual (String.Empty, p._GetComponents (http, UriComponents.Query, UriFormat.SafeUnescaped), "http.Query"); Assert.AreEqual ("FAQ?Edit", p._GetComponents (http, UriComponents.Fragment, UriFormat.SafeUnescaped), "http.Fragment"); Assert.AreEqual ("80", p._GetComponents (http, UriComponents.StrongPort, UriFormat.SafeUnescaped), "http.StrongPort"); Assert.AreEqual (String.Empty, p._GetComponents (http, UriComponents.KeepDelimiter, UriFormat.SafeUnescaped), "http.KeepDelimiter"); - Assert.AreEqual ("www.mono-project.com:80", p._GetComponents (http, UriComponents.HostAndPort, UriFormat.SafeUnescaped), "http.HostAndPort"); - Assert.AreEqual ("www.mono-project.com:80", p._GetComponents (http, UriComponents.StrongAuthority, UriFormat.SafeUnescaped), "http.StrongAuthority"); + Assert.AreEqual ("www.example.com:80", p._GetComponents (http, UriComponents.HostAndPort, UriFormat.SafeUnescaped), "http.HostAndPort"); + Assert.AreEqual ("www.example.com:80", p._GetComponents (http, UriComponents.StrongAuthority, UriFormat.SafeUnescaped), "http.StrongAuthority"); Assert.AreEqual (full_http, p._GetComponents (http, UriComponents.AbsoluteUri, UriFormat.SafeUnescaped), "http.AbsoluteUri"); Assert.AreEqual ("/Main_Page", p._GetComponents (http, UriComponents.PathAndQuery, UriFormat.SafeUnescaped), "http.PathAndQuery"); - Assert.AreEqual ("http://www.mono-project.com/Main_Page", p._GetComponents (http, UriComponents.HttpRequestUrl, UriFormat.SafeUnescaped), "http.HttpRequestUrl"); - Assert.AreEqual ("http://www.mono-project.com", p._GetComponents (http, UriComponents.SchemeAndServer, UriFormat.SafeUnescaped), "http.SchemeAndServer"); + Assert.AreEqual ("http://www.example.com/Main_Page", p._GetComponents (http, UriComponents.HttpRequestUrl, UriFormat.SafeUnescaped), "http.HttpRequestUrl"); + Assert.AreEqual ("http://www.example.com", p._GetComponents (http, UriComponents.SchemeAndServer, UriFormat.SafeUnescaped), "http.SchemeAndServer"); Assert.AreEqual (full_http, p._GetComponents (http, UriComponents.SerializationInfoString, UriFormat.SafeUnescaped), "http.SerializationInfoString"); // strange mixup Assert.AreEqual ("http://", p._GetComponents (http, UriComponents.Scheme | UriComponents.Port, UriFormat.SafeUnescaped), "http.Scheme+Port"); - Assert.AreEqual ("www.mono-project.com#FAQ?Edit", p._GetComponents (http, UriComponents.Host | UriComponents.Fragment, UriFormat.SafeUnescaped), "http.Scheme+Port"); + Assert.AreEqual ("www.example.com#FAQ?Edit", p._GetComponents (http, UriComponents.Host | UriComponents.Fragment, UriFormat.SafeUnescaped), "http.Scheme+Port"); Assert.AreEqual ("/Main_Page", p._GetComponents (http, UriComponents.Port | UriComponents.Path, UriFormat.SafeUnescaped), "http.Scheme+Port"); Assert.AreSame (p, p._OnNewUri (), "OnNewUri"); } @@ -190,7 +190,7 @@ namespace MonoTests.System { UnitTestUriParser p = new UnitTestUriParser (); Assert.AreEqual ("ftp", p._GetComponents (ftp, UriComponents.Scheme, UriFormat.Unescaped), "ftp.Scheme"); Assert.AreEqual ("username:password", p._GetComponents (ftp, UriComponents.UserInfo, UriFormat.Unescaped), "ftp.UserInfo"); - Assert.AreEqual ("ftp.go-mono.com", p._GetComponents (ftp, UriComponents.Host, UriFormat.Unescaped), "ftp.Host"); + Assert.AreEqual ("ftp.example.com", p._GetComponents (ftp, UriComponents.Host, UriFormat.Unescaped), "ftp.Host"); Assert.AreEqual (String.Empty, p._GetComponents (ftp, UriComponents.Port, UriFormat.Unescaped), "ftp.Port"); Assert.AreEqual ("with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.Path, UriFormat.Unescaped), "ftp.Path"); Assert.AreEqual ("with%20some%20spaces/mono.tgz", p._GetComponents (ftp, UriComponents.Path, UriFormat.UriEscaped), "ftp.Path-UriEscaped"); @@ -199,13 +199,13 @@ namespace MonoTests.System { Assert.AreEqual (String.Empty, p._GetComponents (ftp, UriComponents.Fragment, UriFormat.Unescaped), "ftp.Fragment"); Assert.AreEqual ("21", p._GetComponents (ftp, UriComponents.StrongPort, UriFormat.Unescaped), "ftp.StrongPort"); Assert.AreEqual (String.Empty, p._GetComponents (ftp, UriComponents.KeepDelimiter, UriFormat.Unescaped), "http.KeepDelimiter"); - Assert.AreEqual ("ftp.go-mono.com:21", p._GetComponents (ftp, UriComponents.HostAndPort, UriFormat.Unescaped), "http.HostAndPort"); - Assert.AreEqual ("username:password@ftp.go-mono.com:21", p._GetComponents (ftp, UriComponents.StrongAuthority, UriFormat.Unescaped), "http.StrongAuthority"); - Assert.AreEqual ("ftp://username:password@ftp.go-mono.com/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.AbsoluteUri, UriFormat.Unescaped), "http.AbsoluteUri"); + Assert.AreEqual ("ftp.example.com:21", p._GetComponents (ftp, UriComponents.HostAndPort, UriFormat.Unescaped), "http.HostAndPort"); + Assert.AreEqual ("username:password@ftp.example.com:21", p._GetComponents (ftp, UriComponents.StrongAuthority, UriFormat.Unescaped), "http.StrongAuthority"); + Assert.AreEqual ("ftp://username:password@ftp.example.com/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.AbsoluteUri, UriFormat.Unescaped), "http.AbsoluteUri"); Assert.AreEqual ("/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.PathAndQuery, UriFormat.Unescaped), "http.PathAndQuery"); - Assert.AreEqual ("ftp://ftp.go-mono.com/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.HttpRequestUrl, UriFormat.Unescaped), "http.HttpRequestUrl"); - Assert.AreEqual ("ftp://ftp.go-mono.com", p._GetComponents (ftp, UriComponents.SchemeAndServer, UriFormat.Unescaped), "http.SchemeAndServer"); - Assert.AreEqual ("ftp://username:password@ftp.go-mono.com/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.SerializationInfoString, UriFormat.Unescaped), "http.SerializationInfoString"); + Assert.AreEqual ("ftp://ftp.example.com/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.HttpRequestUrl, UriFormat.Unescaped), "http.HttpRequestUrl"); + Assert.AreEqual ("ftp://ftp.example.com", p._GetComponents (ftp, UriComponents.SchemeAndServer, UriFormat.Unescaped), "http.SchemeAndServer"); + Assert.AreEqual ("ftp://username:password@ftp.example.com/with some spaces/mono.tgz", p._GetComponents (ftp, UriComponents.SerializationInfoString, UriFormat.Unescaped), "http.SerializationInfoString"); Assert.AreSame (p, p._OnNewUri (), "OnNewUri"); // strange mixup Assert.AreEqual ("ftp://username:password@", p._GetComponents (ftp, UriComponents.Scheme | UriComponents.UserInfo, UriFormat.Unescaped), "ftp.Scheme+UserInfo"); @@ -218,7 +218,7 @@ namespace MonoTests.System { UnitTestUriParser p = new UnitTestUriParser (); Assert.AreEqual ("ftp", p._GetComponents (ftp2, UriComponents.Scheme, UriFormat.Unescaped), "ftp.Scheme"); Assert.AreEqual ("username:password", p._GetComponents (ftp2, UriComponents.UserInfo, UriFormat.Unescaped), "ftp.UserInfo"); - Assert.AreEqual ("ftp.go-mono.com", p._GetComponents (ftp2, UriComponents.Host, UriFormat.Unescaped), "ftp.Host"); + Assert.AreEqual ("ftp.example.com", p._GetComponents (ftp2, UriComponents.Host, UriFormat.Unescaped), "ftp.Host"); Assert.AreEqual (String.Empty, p._GetComponents (ftp2, UriComponents.Port, UriFormat.Unescaped), "ftp.Port"); Assert.AreEqual ("with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.Path, UriFormat.Unescaped), "ftp.Path"); Assert.AreEqual ("with%20some%20spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.Path, UriFormat.UriEscaped), "ftp.Path-UriEscaped"); @@ -227,13 +227,13 @@ namespace MonoTests.System { Assert.AreEqual (String.Empty, p._GetComponents (ftp2, UriComponents.Fragment, UriFormat.Unescaped), "ftp.Fragment"); Assert.AreEqual ("21", p._GetComponents (ftp2, UriComponents.StrongPort, UriFormat.Unescaped), "ftp.StrongPort"); Assert.AreEqual (String.Empty, p._GetComponents (ftp2, UriComponents.KeepDelimiter, UriFormat.Unescaped), "http.KeepDelimiter"); - Assert.AreEqual ("ftp.go-mono.com:21", p._GetComponents (ftp2, UriComponents.HostAndPort, UriFormat.Unescaped), "http.HostAndPort"); - Assert.AreEqual ("username:password@ftp.go-mono.com:21", p._GetComponents (ftp2, UriComponents.StrongAuthority, UriFormat.Unescaped), "http.StrongAuthority"); - Assert.AreEqual ("ftp://username:password@ftp.go-mono.com/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.AbsoluteUri, UriFormat.Unescaped), "http.AbsoluteUri"); + Assert.AreEqual ("ftp.example.com:21", p._GetComponents (ftp2, UriComponents.HostAndPort, UriFormat.Unescaped), "http.HostAndPort"); + Assert.AreEqual ("username:password@ftp.example.com:21", p._GetComponents (ftp2, UriComponents.StrongAuthority, UriFormat.Unescaped), "http.StrongAuthority"); + Assert.AreEqual ("ftp://username:password@ftp.example.com/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.AbsoluteUri, UriFormat.Unescaped), "http.AbsoluteUri"); Assert.AreEqual ("/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.PathAndQuery, UriFormat.Unescaped), "http.PathAndQuery"); - Assert.AreEqual ("ftp://ftp.go-mono.com/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.HttpRequestUrl, UriFormat.Unescaped), "http.HttpRequestUrl"); - Assert.AreEqual ("ftp://ftp.go-mono.com", p._GetComponents (ftp2, UriComponents.SchemeAndServer, UriFormat.Unescaped), "http.SchemeAndServer"); - Assert.AreEqual ("ftp://username:password@ftp.go-mono.com/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.SerializationInfoString, UriFormat.Unescaped), "http.SerializationInfoString"); + Assert.AreEqual ("ftp://ftp.example.com/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.HttpRequestUrl, UriFormat.Unescaped), "http.HttpRequestUrl"); + Assert.AreEqual ("ftp://ftp.example.com", p._GetComponents (ftp2, UriComponents.SchemeAndServer, UriFormat.Unescaped), "http.SchemeAndServer"); + Assert.AreEqual ("ftp://username:password@ftp.example.com/with some spaces/mono.tgz", p._GetComponents (ftp2, UriComponents.SerializationInfoString, UriFormat.Unescaped), "http.SerializationInfoString"); Assert.AreSame (p, p._OnNewUri (), "OnNewUri"); // strange mixup Assert.AreEqual ("ftp://username:password@", p._GetComponents (ftp2, UriComponents.Scheme | UriComponents.UserInfo, UriFormat.Unescaped), "ftp.Scheme+UserInfo"); @@ -298,59 +298,59 @@ namespace MonoTests.System { UnitTestUriParser p = new UnitTestUriParser (); Assert.IsTrue (p._IsBaseOf (http, http), "http-http"); - Uri u = new Uri ("http://www.mono-project.com/Main_Page#FAQ"); + Uri u = new Uri ("http://www.example.com/Main_Page#FAQ"); Assert.IsTrue (p._IsBaseOf (u, http), "http-1a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-1b"); - u = new Uri ("http://www.mono-project.com/Main_Page"); + u = new Uri ("http://www.example.com/Main_Page"); Assert.IsTrue (p._IsBaseOf (u, http), "http-2a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-2b"); - u = new Uri ("http://www.mono-project.com/"); + u = new Uri ("http://www.example.com/"); Assert.IsTrue (p._IsBaseOf (u, http), "http-3a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-3b"); - u = new Uri ("http://www.mono-project.com/Main_Page/"); + u = new Uri ("http://www.example.com/Main_Page/"); Assert.IsFalse (p._IsBaseOf (u, http), "http-4a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-4b"); // docs says the UserInfo isn't evaluated, but... - u = new Uri ("http://username:password@www.mono-project.com/Main_Page"); + u = new Uri ("http://username:password@www.example.com/Main_Page"); Assert.IsFalse (p._IsBaseOf (u, http), "http-5a"); Assert.IsFalse (p._IsBaseOf (http, u), "http-5b"); // scheme case sensitive ? no - u = new Uri ("HTTP://www.mono-project.com/Main_Page"); + u = new Uri ("HTTP://www.example.com/Main_Page"); Assert.IsTrue (p._IsBaseOf (u, http), "http-6a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-6b"); // host case sensitive ? no - u = new Uri ("http://www.Mono-Project.com/Main_Page"); + u = new Uri ("http://www.Example.com/Main_Page"); Assert.IsTrue (p._IsBaseOf (u, http), "http-7a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-7b"); // path case sensitive ? no - u = new Uri ("http://www.Mono-Project.com/MAIN_Page"); + u = new Uri ("http://www.Example.com/MAIN_Page"); Assert.IsTrue (p._IsBaseOf (u, http), "http-8a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-8b"); // different scheme - u = new Uri ("ftp://www.mono-project.com/Main_Page"); + u = new Uri ("ftp://www.example.com/Main_Page"); Assert.IsFalse (p._IsBaseOf (u, http), "http-9a"); Assert.IsFalse (p._IsBaseOf (http, u), "http-9b"); // different host - u = new Uri ("http://www.go-mono.com/Main_Page"); + u = new Uri ("http://www.example.org/Main_Page"); Assert.IsFalse (p._IsBaseOf (u, http), "http-10a"); Assert.IsFalse (p._IsBaseOf (http, u), "http-10b"); // different port - u = new Uri ("http://www.mono-project.com:8080/"); + u = new Uri ("http://www.example.com:8080/"); Assert.IsFalse (p._IsBaseOf (u, http), "http-11a"); Assert.IsFalse (p._IsBaseOf (http, u), "http-11b"); // specify default port - u = new Uri ("http://www.mono-project.com:80/"); + u = new Uri ("http://www.example.com:80/"); Assert.IsTrue (p._IsBaseOf (u, http), "http-12a"); Assert.IsTrue (p._IsBaseOf (http, u), "http-12b"); } @@ -396,7 +396,7 @@ namespace MonoTests.System { UriParser.Register (p, scheme, 1999); Assert.IsFalse (p.OnNewUriCalled, "!Called"); - Uri uri = new Uri (scheme + "://www.mono-project.com"); + Uri uri = new Uri (scheme + "://www.example.com"); Assert.IsTrue (p.OnNewUriCalled, "Called"); } diff --git a/mcs/class/System/Test/System/UriTest.cs b/mcs/class/System/Test/System/UriTest.cs index 2cabd42af7..3697bbba5d 100644 --- a/mcs/class/System/Test/System/UriTest.cs +++ b/mcs/class/System/Test/System/UriTest.cs @@ -922,8 +922,8 @@ namespace MonoTests.System Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName (":"), "#44"); Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("*"), "#45"); - Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("*.go-mono.com"), "#46"); - Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("www*.go-mono.com"), "#47"); + Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("*.example.com"), "#46"); + Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("www*.example.com"), "#47"); } [Test] @@ -1016,20 +1016,20 @@ namespace MonoTests.System [Test] public void TestEquals2 () { - Uri a = new Uri ("http://www.go-mono.com"); - Uri b = new Uri ("http://www.go-mono.com"); + Uri a = new Uri ("http://www.example.com"); + Uri b = new Uri ("http://www.example.com"); Assert.AreEqual (a, b, "#1"); - a = new Uri ("mailto:user:pwd@go-mono.com?subject=uri"); - b = new Uri ("MAILTO:USER:PWD@GO-MONO.COM?SUBJECT=URI"); + a = new Uri ("mailto:user:pwd@example.com?subject=uri"); + b = new Uri ("MAILTO:USER:PWD@EXAMPLE.COM?SUBJECT=URI"); Assert.IsTrue (a != b, "#2"); - Assert.AreEqual ("mailto:user:pwd@go-mono.com?subject=uri", a.ToString (), "#2a"); - Assert.AreEqual ("mailto:USER:PWD@go-mono.com?SUBJECT=URI", b.ToString (), "#2b"); + Assert.AreEqual ("mailto:user:pwd@example.com?subject=uri", a.ToString (), "#2a"); + Assert.AreEqual ("mailto:USER:PWD@example.com?SUBJECT=URI", b.ToString (), "#2b"); - a = new Uri ("http://www.go-mono.com/ports/"); - b = new Uri ("http://www.go-mono.com/PORTS/"); + a = new Uri ("http://www.example.com/ports/"); + b = new Uri ("http://www.example.com/PORTS/"); Assert.IsTrue (!a.Equals (b), "#3"); } @@ -1037,15 +1037,15 @@ namespace MonoTests.System [Test] public void CaseSensitivity () { - Uri mailto = new Uri ("MAILTO:USER:PWD@GO-MONO.COM?SUBJECT=URI"); + Uri mailto = new Uri ("MAILTO:USER:PWD@EXAMPLE.COM?SUBJECT=URI"); Assert.AreEqual ("mailto", mailto.Scheme, "#1"); - Assert.AreEqual ("go-mono.com", mailto.Host, "#2"); - Assert.AreEqual ("mailto:USER:PWD@go-mono.com?SUBJECT=URI", mailto.ToString (), "#3"); + Assert.AreEqual ("example.com", mailto.Host, "#2"); + Assert.AreEqual ("mailto:USER:PWD@example.com?SUBJECT=URI", mailto.ToString (), "#3"); - Uri http = new Uri ("HTTP://GO-MONO.COM/INDEX.HTML"); + Uri http = new Uri ("HTTP://EXAMPLE.COM/INDEX.HTML"); Assert.AreEqual ("http", http.Scheme, "#4"); - Assert.AreEqual ("go-mono.com", http.Host, "#5"); - Assert.AreEqual ("http://go-mono.com/INDEX.HTML", http.ToString (), "#6"); + Assert.AreEqual ("example.com", http.Host, "#5"); + Assert.AreEqual ("http://example.com/INDEX.HTML", http.ToString (), "#6"); // IPv6 Address Uri ftp = new Uri ("FTP://[::ffFF:169.32.14.5]/"); @@ -1736,39 +1736,39 @@ namespace MonoTests.System [Test] public void GetComponents_AbsoluteUri () { - Uri uri = new Uri ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263"); + Uri uri = new Uri ("http://example.com/list?id=1%262&sort=asc#fragment%263"); - Assert.AreEqual ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263", uri.AbsoluteUri, "AbsoluteUri"); + Assert.AreEqual ("http://example.com/list?id=1%262&sort=asc#fragment%263", uri.AbsoluteUri, "AbsoluteUri"); string safe = uri.GetComponents (UriComponents.AbsoluteUri, UriFormat.SafeUnescaped); - Assert.AreEqual ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263", safe, "SafeUnescaped"); + Assert.AreEqual ("http://example.com/list?id=1%262&sort=asc#fragment%263", safe, "SafeUnescaped"); string unescaped = uri.GetComponents (UriComponents.AbsoluteUri, UriFormat.Unescaped); - Assert.AreEqual ("http://mono-project.com/list?id=1&2&sort=asc#fragment&3", unescaped, "Unescaped"); + Assert.AreEqual ("http://example.com/list?id=1&2&sort=asc#fragment&3", unescaped, "Unescaped"); string escaped = uri.GetComponents (UriComponents.AbsoluteUri, UriFormat.UriEscaped); - Assert.AreEqual ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263", escaped, "UriEscaped"); + Assert.AreEqual ("http://example.com/list?id=1%262&sort=asc#fragment%263", escaped, "UriEscaped"); } [Test] public void GetComponents_HttpRequestUrl () { - Uri uri = new Uri ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263"); + Uri uri = new Uri ("http://example.com/list?id=1%262&sort=asc#fragment%263"); string safe = uri.GetComponents (UriComponents.HttpRequestUrl, UriFormat.SafeUnescaped); - Assert.AreEqual ("http://mono-project.com/list?id=1%262&sort=asc", safe, "SafeUnescaped"); + Assert.AreEqual ("http://example.com/list?id=1%262&sort=asc", safe, "SafeUnescaped"); string unescaped = uri.GetComponents (UriComponents.HttpRequestUrl, UriFormat.Unescaped); - Assert.AreEqual ("http://mono-project.com/list?id=1&2&sort=asc", unescaped, "Unescaped"); + Assert.AreEqual ("http://example.com/list?id=1&2&sort=asc", unescaped, "Unescaped"); string escaped = uri.GetComponents (UriComponents.HttpRequestUrl, UriFormat.UriEscaped); - Assert.AreEqual ("http://mono-project.com/list?id=1%262&sort=asc", escaped, "UriEscaped"); + Assert.AreEqual ("http://example.com/list?id=1%262&sort=asc", escaped, "UriEscaped"); } [Test] public void GetComponents_KeepDelimiter () { - Uri uri = new Uri ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263"); + Uri uri = new Uri ("http://example.com/list?id=1%262&sort=asc#fragment%263"); string safe = uri.GetComponents (UriComponents.KeepDelimiter, UriFormat.SafeUnescaped); Assert.AreEqual (String.Empty, safe, "SafeUnescaped"); @@ -1783,22 +1783,22 @@ namespace MonoTests.System [Test] public void GetComponents_StrongAuthority () { - Uri uri = new Uri ("http://mono-project.com/list?id=1%262&sort=asc#fragment%263"); + Uri uri = new Uri ("http://example.com/list?id=1%262&sort=asc#fragment%263"); string safe = uri.GetComponents (UriComponents.StrongAuthority, UriFormat.SafeUnescaped); - Assert.AreEqual ("mono-project.com:80", safe, "SafeUnescaped"); + Assert.AreEqual ("example.com:80", safe, "SafeUnescaped"); string unescaped = uri.GetComponents (UriComponents.StrongAuthority, UriFormat.Unescaped); - Assert.AreEqual ("mono-project.com:80", unescaped, "Unescaped"); + Assert.AreEqual ("example.com:80", unescaped, "Unescaped"); string escaped = uri.GetComponents (UriComponents.StrongAuthority, UriFormat.UriEscaped); - Assert.AreEqual ("mono-project.com:80", escaped, "UriEscaped"); + Assert.AreEqual ("example.com:80", escaped, "UriEscaped"); } [Test] public void GetComponents_Path () { - Uri uri1 = new Uri ("http://mono-project.com/Main%20Page"); + Uri uri1 = new Uri ("http://example.com/Main%20Page"); Assert.AreEqual ("/Main Page", uri1.LocalPath, "Path1"); string safe = uri1.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped); @@ -1811,7 +1811,7 @@ namespace MonoTests.System Assert.AreEqual ("Main%20Page", escaped, "UriEscaped1"); // same result is unescaped original string - Uri uri2 = new Uri ("http://mono-project.com/Main Page"); + Uri uri2 = new Uri ("http://example.com/Main Page"); Assert.AreEqual ("/Main Page", uri2.LocalPath, "Path2"); safe = uri2.GetComponents (UriComponents.Path, UriFormat.SafeUnescaped); @@ -1827,7 +1827,7 @@ namespace MonoTests.System [Test] public void GetComponents_PathAndQuery () { - Uri uri = new Uri ("http://mono-project.com/MåÏn Påge?id=1%262&sort=asc"); + Uri uri = new Uri ("http://example.com/MåÏn Påge?id=1%262&sort=asc"); Assert.AreEqual ("/M%C3%A5%C3%8Fn%20P%C3%A5ge?id=1%262&sort=asc", uri.PathAndQuery, "PathAndQuery"); @@ -1844,7 +1844,7 @@ namespace MonoTests.System [Test] public void GetComponents_Query () { - Uri uri = new Uri ("http://mono-project.com/list?id=1%262&sort=asc"); + Uri uri = new Uri ("http://example.com/list?id=1%262&sort=asc"); Assert.AreEqual ("?id=1%262&sort=asc", uri.Query, "Query"); @@ -1861,7 +1861,7 @@ namespace MonoTests.System [Test] public void GetComponents_Fragment () { - Uri uri = new Uri ("http://mono-project.com/list#id=1%262&sort=asc"); + Uri uri = new Uri ("http://example.com/list#id=1%262&sort=asc"); Assert.AreEqual ("#id=1%262&sort=asc", uri.Fragment, "Fragment"); diff --git a/mcs/class/System/Test/System/UriTest2.cs b/mcs/class/System/Test/System/UriTest2.cs index 8fccc8bab6..fbbc68918d 100644 --- a/mcs/class/System/Test/System/UriTest2.cs +++ b/mcs/class/System/Test/System/UriTest2.cs @@ -127,7 +127,7 @@ namespace MonoTests.System [Ignore ("Tests needs to be updated for 2.0")] public void RelativeUriFromFile () { - FromResource ("Test/System/test-uri-relative-props.txt", new Uri ("http://www.go-mono.com")); + FromResource ("Test/System/test-uri-relative-props.txt", new Uri ("http://www.example.com")); } private void FromResource (string res, Uri baseUri) @@ -219,7 +219,7 @@ TextWriter sw = Console.Out; [ExpectedException (typeof (UriFormatException))] public void StarsInHost () { - new Uri ("http://w*w*w.go-mono.com"); + new Uri ("http://w*w*w.example.com"); } [Test] @@ -795,14 +795,14 @@ TextWriter sw = Console.Out; [Test] public void NntpScheme () { - Uri uri = new Uri ("nntp://news.mono-project.com/novell.mono.moonlight/uri?query"); + Uri uri = new Uri ("nntp://news.example.com/novell.mono.moonlight/uri?query"); Assert.AreEqual ("/novell.mono.moonlight/uri%3Fquery", uri.AbsolutePath, "AbsolutePath"); - Assert.AreEqual ("nntp://news.mono-project.com/novell.mono.moonlight/uri%3Fquery", uri.AbsoluteUri, "AbsoluteUri"); - Assert.AreEqual ("news.mono-project.com", uri.Authority, "Authority"); - Assert.AreEqual ("news.mono-project.com", uri.DnsSafeHost, "DnsSafeHost"); + Assert.AreEqual ("nntp://news.example.com/novell.mono.moonlight/uri%3Fquery", uri.AbsoluteUri, "AbsoluteUri"); + Assert.AreEqual ("news.example.com", uri.Authority, "Authority"); + Assert.AreEqual ("news.example.com", uri.DnsSafeHost, "DnsSafeHost"); Assert.AreEqual (String.Empty, uri.Fragment, "Fragment"); - Assert.AreEqual ("news.mono-project.com", uri.Host, "Host"); + Assert.AreEqual ("news.example.com", uri.Host, "Host"); Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "HostNameType"); Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri"); Assert.IsTrue (uri.IsDefaultPort, "IsDefaultPort"); @@ -810,7 +810,7 @@ TextWriter sw = Console.Out; Assert.IsFalse (uri.IsLoopback, "IsLoopback"); Assert.IsFalse (uri.IsUnc, "IsUnc"); Assert.AreEqual ("/novell.mono.moonlight/uri?query", uri.LocalPath, "LocalPath"); - Assert.AreEqual ("nntp://news.mono-project.com/novell.mono.moonlight/uri?query", uri.OriginalString, "OriginalString"); + Assert.AreEqual ("nntp://news.example.com/novell.mono.moonlight/uri?query", uri.OriginalString, "OriginalString"); Assert.AreEqual ("/novell.mono.moonlight/uri%3Fquery", uri.PathAndQuery, "PathAndQuery"); Assert.AreEqual (119, uri.Port, "Port"); Assert.AreEqual (String.Empty, uri.Query, "Query"); @@ -822,7 +822,7 @@ TextWriter sw = Console.Out; Assert.AreEqual (String.Empty, uri.UserInfo, "UserInfo"); // special escaped characters - they differs a bit from other URI - uri = new Uri ("nntp://news.mono-project.com/novell.mono.moonlight/<>%\"{}|\\^`;/?:@&=+$,[]#abc"); + uri = new Uri ("nntp://news.example.com/novell.mono.moonlight/<>%\"{}|\\^`;/?:@&=+$,[]#abc"); Assert.AreEqual ("#abc", uri.Fragment, "Special/Fragment"); if (IriParsing) Assert.AreEqual ("/novell.mono.moonlight/%3C%3E%25%22%7B%7D%7C%5C%5E%60;/%3F:@&=+$,[]", uri.AbsolutePath, "Special"); @@ -834,13 +834,13 @@ TextWriter sw = Console.Out; public void FtpScheme () { // user, password, custom port and a "query" - Uri uri = new Uri ("ftp://user:password@ftp.mono-project.com:2121/mono.zip?latest-n-greatest"); + Uri uri = new Uri ("ftp://user:password@ftp.example.com:2121/mono.zip?latest-n-greatest"); Assert.AreEqual ("/mono.zip%3Flatest-n-greatest", uri.AbsolutePath, "AbsolutePath"); - Assert.AreEqual ("ftp://user:password@ftp.mono-project.com:2121/mono.zip%3Flatest-n-greatest", uri.AbsoluteUri, "AbsoluteUri"); - Assert.AreEqual ("ftp.mono-project.com:2121", uri.Authority, "Authority"); - Assert.AreEqual ("ftp.mono-project.com", uri.DnsSafeHost, "DnsSafeHost"); + Assert.AreEqual ("ftp://user:password@ftp.example.com:2121/mono.zip%3Flatest-n-greatest", uri.AbsoluteUri, "AbsoluteUri"); + Assert.AreEqual ("ftp.example.com:2121", uri.Authority, "Authority"); + Assert.AreEqual ("ftp.example.com", uri.DnsSafeHost, "DnsSafeHost"); Assert.AreEqual (String.Empty, uri.Fragment, "Fragment"); - Assert.AreEqual ("ftp.mono-project.com", uri.Host, "Host"); + Assert.AreEqual ("ftp.example.com", uri.Host, "Host"); Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "HostNameType"); Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri"); Assert.IsFalse (uri.IsDefaultPort, "IsDefaultPort"); @@ -848,7 +848,7 @@ TextWriter sw = Console.Out; Assert.IsFalse (uri.IsLoopback, "IsLoopback"); Assert.IsFalse (uri.IsUnc, "IsUnc"); Assert.AreEqual ("/mono.zip?latest-n-greatest", uri.LocalPath, "LocalPath"); - Assert.AreEqual ("ftp://user:password@ftp.mono-project.com:2121/mono.zip?latest-n-greatest", uri.OriginalString, "OriginalString"); + Assert.AreEqual ("ftp://user:password@ftp.example.com:2121/mono.zip?latest-n-greatest", uri.OriginalString, "OriginalString"); Assert.AreEqual ("/mono.zip%3Flatest-n-greatest", uri.PathAndQuery, "PathAndQuery"); Assert.AreEqual (2121, uri.Port, "Port"); Assert.AreEqual (String.Empty, uri.Query, "Query"); @@ -859,7 +859,7 @@ TextWriter sw = Console.Out; Assert.AreEqual ("user:password", uri.UserInfo, "UserInfo"); // special characters and fragment - uri = new Uri ("ftp://ftp.mono-project.com/<>%\"{}|\\^`;/?:@&=+$,[]#abc"); + uri = new Uri ("ftp://ftp.example.com/<>%\"{}|\\^`;/?:@&=+$,[]#abc"); Assert.AreEqual ("#abc", uri.Fragment, "Special/Fragment"); if (IriParsing) Assert.AreEqual ("/%3C%3E%25%22%7B%7D%7C/%5E%60;/%3F:@&=+$,[]", uri.AbsolutePath, "Special"); @@ -1094,24 +1094,24 @@ TextWriter sw = Console.Out; Uri abs = new Uri ("http://novell.com", UriKind.Absolute); // note: invalid scheme - string srel = "http@ftp://mono-project.com/dir/file"; + string srel = "http@ftp://example.com/dir/file"; Uri uri = new Uri (abs, srel); - Assert.AreEqual ("http://novell.com/http@ftp://mono-project.com/dir/file", uri.ToString (), "1.ToString"); + Assert.AreEqual ("http://novell.com/http@ftp://example.com/dir/file", uri.ToString (), "1.ToString"); Uri rel = new Uri (srel, UriKind.Relative); - Assert.AreEqual ("http@ftp://mono-project.com/dir/file", rel.ToString (), "2.ToString"); + Assert.AreEqual ("http@ftp://example.com/dir/file", rel.ToString (), "2.ToString"); uri = new Uri (abs, rel); - Assert.AreEqual ("http://novell.com/http@ftp://mono-project.com/dir/file", uri.ToString (), "3.ToString"); + Assert.AreEqual ("http://novell.com/http@ftp://example.com/dir/file", uri.ToString (), "3.ToString"); } [Test] public void EmptyUserInfo () { - Uri uri = new Uri ("http://@www.mono-project.com"); - Assert.AreEqual ("http://@www.mono-project.com/", uri.AbsoluteUri, "AbsoluteUri"); - Assert.AreEqual ("http://@www.mono-project.com", uri.GetLeftPart (UriPartial.Authority), "UriPartial.Authority"); - Assert.AreEqual ("http://@www.mono-project.com/", uri.GetLeftPart (UriPartial.Path), "UriPartial.Path"); + Uri uri = new Uri ("http://@www.example.com"); + Assert.AreEqual ("http://@www.example.com/", uri.AbsoluteUri, "AbsoluteUri"); + Assert.AreEqual ("http://@www.example.com", uri.GetLeftPart (UriPartial.Authority), "UriPartial.Authority"); + Assert.AreEqual ("http://@www.example.com/", uri.GetLeftPart (UriPartial.Path), "UriPartial.Path"); Assert.AreEqual (String.Empty, uri.UserInfo, "UserInfo"); } @@ -1140,16 +1140,16 @@ TextWriter sw = Console.Out; [Test] public void OriginalPathEscaped () { - Uri uri = new Uri ("http://www.mono-project.com/%41/%42/%43", UriKind.Absolute); + Uri uri = new Uri ("http://www.example.com/%41/%42/%43", UriKind.Absolute); Assert.AreEqual ("/A/B/C", uri.LocalPath, "LocalPath"); if (IriParsing) { - Assert.AreEqual ("http://www.mono-project.com/A/B/C", uri.AbsoluteUri, "AbsoluteUri"); + Assert.AreEqual ("http://www.example.com/A/B/C", uri.AbsoluteUri, "AbsoluteUri"); Assert.AreEqual ("/A/B/C", uri.AbsolutePath, "AbsolutePath"); - Assert.AreEqual ("http://www.mono-project.com/A/B/C", uri.GetLeftPart (UriPartial.Path), "GetLeftPart(Path)"); + Assert.AreEqual ("http://www.example.com/A/B/C", uri.GetLeftPart (UriPartial.Path), "GetLeftPart(Path)"); } else { - Assert.AreEqual ("http://www.mono-project.com/%41/%42/%43", uri.AbsoluteUri, "AbsoluteUri"); + Assert.AreEqual ("http://www.example.com/%41/%42/%43", uri.AbsoluteUri, "AbsoluteUri"); Assert.AreEqual ("/%41/%42/%43", uri.AbsolutePath, "AbsolutePath"); - Assert.AreEqual ("http://www.mono-project.com/%41/%42/%43", uri.GetLeftPart (UriPartial.Path), "GetLeftPart(Path)"); + Assert.AreEqual ("http://www.example.com/%41/%42/%43", uri.GetLeftPart (UriPartial.Path), "GetLeftPart(Path)"); } } @@ -1157,8 +1157,8 @@ TextWriter sw = Console.Out; public void CheckHostName () { Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("host;machine"), "CheckHostName ;"); - Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("www..mono-project.com"), "CheckHostName .."); - Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("www.mono-project.com\\"), "CheckHostName \\"); + Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("www..example.com"), "CheckHostName .."); + Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("www.example.com\\"), "CheckHostName \\"); } [Test] diff --git a/mcs/class/System/Test/System/UriTest3.cs b/mcs/class/System/Test/System/UriTest3.cs index f83ec1c62d..f5ac7a54cb 100644 --- a/mcs/class/System/Test/System/UriTest3.cs +++ b/mcs/class/System/Test/System/UriTest3.cs @@ -35,7 +35,7 @@ namespace MonoTests.System [TestFixture] public class UriTest3 { - private const string absolute = "http://www.mono-project.com/CAS"; + private const string absolute = "http://www.example.com/CAS"; private const string relative = "server.com/directory/"; [Test] // .ctor (String, UriKind) @@ -92,7 +92,7 @@ namespace MonoTests.System public void Absolute_UriKind_Absolute () { Uri uri = new Uri (absolute, UriKind.Absolute); - Assert.AreEqual ("www.mono-project.com", uri.DnsSafeHost, "#1"); + Assert.AreEqual ("www.example.com", uri.DnsSafeHost, "#1"); Assert.IsTrue (uri.IsAbsoluteUri, "#2"); Assert.AreEqual (absolute, uri.OriginalString, "#3"); Assert.AreEqual (absolute, uri.ToString (), "#4"); @@ -182,10 +182,10 @@ namespace MonoTests.System Assert.IsTrue (Uri.TryCreate (relative, UriKind.Relative, out uri), "relative-Relative"); Assert.AreEqual (relative, uri.OriginalString, "relative-RelativeOrAbsolute-OriginalString"); - Assert.IsTrue (Uri.TryCreate ("http://mono-project.com/☕", UriKind.Absolute, out uri), "highunicode-Absolute"); - Assert.AreEqual("http://mono-project.com/%E2%98%95", uri.AbsoluteUri, "highunicode-Absolute-AbsoluteUri"); + Assert.IsTrue (Uri.TryCreate ("http://example.com/☕", UriKind.Absolute, out uri), "highunicode-Absolute"); + Assert.AreEqual("http://example.com/%E2%98%95", uri.AbsoluteUri, "highunicode-Absolute-AbsoluteUri"); - string mixedCaseUri = "http://mOnO-proJECT.com"; + string mixedCaseUri = "http://eXaMpLe.com"; uri = new Uri (mixedCaseUri); Uri uri2; Assert.IsTrue (Uri.TryCreate (mixedCaseUri, UriKind.Absolute, out uri2), "mixedcasehost-absolute"); @@ -227,8 +227,8 @@ namespace MonoTests.System uri = new Uri ("http://dummy.com"); Assert.IsTrue (Uri.TryCreate (baseUri, relative, out uri), "baseUri+relative"); - Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.AbsoluteUri, "baseUri+relative+AbsoluteUri"); - Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.OriginalString, "baseUri+relative+OriginalString"); + Assert.AreEqual ("http://www.example.com/server.com/directory/", uri.AbsoluteUri, "baseUri+relative+AbsoluteUri"); + Assert.AreEqual ("http://www.example.com/server.com/directory/", uri.OriginalString, "baseUri+relative+OriginalString"); uri = new Uri ("http://dummy.com"); Assert.IsTrue (Uri.TryCreate (baseUri, absolute, out uri), "baseUri+absolute"); @@ -267,8 +267,8 @@ namespace MonoTests.System uri = new Uri ("http://dummy.com"); Assert.IsTrue (Uri.TryCreate (baseUri, relativeUri, out uri), "baseUri+relativeUri"); - Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.AbsoluteUri, "baseUri+relativeUri+AbsoluteUri"); - Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.OriginalString, "baseUri+relativeUri+OriginalString"); + Assert.AreEqual ("http://www.example.com/server.com/directory/", uri.AbsoluteUri, "baseUri+relativeUri+AbsoluteUri"); + Assert.AreEqual ("http://www.example.com/server.com/directory/", uri.OriginalString, "baseUri+relativeUri+OriginalString"); uri = new Uri ("http://dummy.com"); Assert.IsTrue (Uri.TryCreate (baseUri, baseUri, out uri), "baseUri+baseUri"); @@ -307,11 +307,11 @@ namespace MonoTests.System [Test] public void IsWellFormedUriString () { - Assert.IsFalse (Uri.IsWellFormedUriString ("http://www.go-mono.com/Main Page", UriKind.Absolute), "http/space"); - Assert.IsTrue (Uri.IsWellFormedUriString ("http://www.go-mono.com/Main%20Page", UriKind.Absolute), "http/%20"); + Assert.IsFalse (Uri.IsWellFormedUriString ("http://www.example.com/Main Page", UriKind.Absolute), "http/space"); + Assert.IsTrue (Uri.IsWellFormedUriString ("http://www.example.com/Main%20Page", UriKind.Absolute), "http/%20"); Assert.IsFalse (Uri.IsWellFormedUriString (null, UriKind.Absolute), "null"); Assert.IsFalse (Uri.IsWellFormedUriString ("data", UriKind.Absolute), "data"); - Assert.IsTrue (Uri.IsWellFormedUriString ("http://www.go-mono.com/Main_Page#1", UriKind.Absolute), "http/hex"); + Assert.IsTrue (Uri.IsWellFormedUriString ("http://www.example.com/Main_Page#1", UriKind.Absolute), "http/hex"); Assert.IsTrue (Uri.IsWellFormedUriString ("test", UriKind.RelativeOrAbsolute), "rel1"); Assert.IsTrue (Uri.IsWellFormedUriString ("/test", UriKind.RelativeOrAbsolute), "rel2"); } @@ -320,7 +320,7 @@ namespace MonoTests.System public void IsWellFormedUriString_UriKind_Invalid () { try { - Uri.IsWellFormedUriString ("http://www.go-mono.com/Main Page", + Uri.IsWellFormedUriString ("http://www.example.com/Main Page", (UriKind) 666); Assert.Fail ("#1"); } catch (ArgumentException ex) { @@ -342,15 +342,15 @@ namespace MonoTests.System Uri u2 = null; Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "null-null"); - u1 = new Uri ("http://www.go-mono.com"); + u1 = new Uri ("http://www.example.com"); Assert.AreEqual (1, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "non-null - null"); u1 = null; - u2 = new Uri ("http://www.go-mono.com"); + u2 = new Uri ("http://www.example.com"); Assert.AreEqual (-1, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "null - non-null"); - u1 = new Uri ("http://www.go-mono.com/Main Page"); - u2 = new Uri ("http://www.go-mono.com/Main%20Page"); + u1 = new Uri ("http://www.example.com/Main Page"); + u2 = new Uri ("http://www.example.com/Main%20Page"); Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.Unescaped, StringComparison.CurrentCulture), "http/space-http/%20-unescaped"); Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "http/space-http/%20-escaped"); Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.SafeUnescaped, StringComparison.CurrentCulture), "http/space-http/%20-safe"); @@ -359,62 +359,62 @@ namespace MonoTests.System [Test] public void IsBaseOf () { - Uri http = new Uri ("http://www.mono-project.com/Main_Page#FAQ?Edit"); + Uri http = new Uri ("http://www.example.com/Main_Page#FAQ?Edit"); Assert.IsTrue (http.IsBaseOf (http), "http-http"); - Uri u = new Uri ("http://www.mono-project.com/Main_Page#FAQ"); + Uri u = new Uri ("http://www.example.com/Main_Page#FAQ"); Assert.IsTrue (u.IsBaseOf (http), "http-1a"); Assert.IsTrue (http.IsBaseOf (u), "http-1b"); - u = new Uri ("http://www.mono-project.com/Main_Page"); + u = new Uri ("http://www.example.com/Main_Page"); Assert.IsTrue (u.IsBaseOf (http), "http-2a"); Assert.IsTrue (http.IsBaseOf (u), "http-2b"); - u = new Uri ("http://www.mono-project.com/"); + u = new Uri ("http://www.example.com/"); Assert.IsTrue (u.IsBaseOf (http), "http-3a"); Assert.IsTrue (http.IsBaseOf (u), "http-3b"); - u = new Uri ("http://www.mono-project.com/Main_Page/"); + u = new Uri ("http://www.example.com/Main_Page/"); Assert.IsFalse (u.IsBaseOf (http), "http-4a"); Assert.IsTrue (http.IsBaseOf (u), "http-4b"); // docs says the UserInfo isn't evaluated, but... - u = new Uri ("http://username:password@www.mono-project.com/Main_Page"); + u = new Uri ("http://username:password@www.example.com/Main_Page"); Assert.IsFalse (u.IsBaseOf (http), "http-5a"); Assert.IsFalse (http.IsBaseOf (u), "http-5b"); // scheme case sensitive ? no - u = new Uri ("HTTP://www.mono-project.com/Main_Page"); + u = new Uri ("HTTP://www.example.com/Main_Page"); Assert.IsTrue (u.IsBaseOf (http), "http-6a"); Assert.IsTrue (http.IsBaseOf (u), "http-6b"); // host case sensitive ? no - u = new Uri ("http://www.Mono-Project.com/Main_Page"); + u = new Uri ("http://www.example.com/Main_Page"); Assert.IsTrue (u.IsBaseOf (http), "http-7a"); Assert.IsTrue (http.IsBaseOf (u), "http-7b"); // path case sensitive ? no - u = new Uri ("http://www.Mono-Project.com/MAIN_Page"); + u = new Uri ("http://www.example.com/MAIN_Page"); Assert.IsTrue (u.IsBaseOf (http), "http-8a"); Assert.IsTrue (http.IsBaseOf (u), "http-8b"); // different scheme - u = new Uri ("ftp://www.mono-project.com/Main_Page"); + u = new Uri ("ftp://www.example.com/Main_Page"); Assert.IsFalse (u.IsBaseOf (http), "http-9a"); Assert.IsFalse (http.IsBaseOf (u), "http-9b"); // different host - u = new Uri ("http://www.go-mono.com/Main_Page"); + u = new Uri ("http://www.example.org/Main_Page"); Assert.IsFalse (u.IsBaseOf (http), "http-10a"); Assert.IsFalse (http.IsBaseOf (u), "http-10b"); // different port - u = new Uri ("http://www.mono-project.com:8080/"); + u = new Uri ("http://www.example.com:8080/"); Assert.IsFalse (u.IsBaseOf (http), "http-11a"); Assert.IsFalse (http.IsBaseOf (u), "http-11b"); // specify default port - u = new Uri ("http://www.mono-project.com:80/"); + u = new Uri ("http://www.example.com:80/"); Assert.IsTrue (u.IsBaseOf (http), "http-12a"); Assert.IsTrue (http.IsBaseOf (u), "http-12b"); } @@ -422,7 +422,7 @@ namespace MonoTests.System [Test] public void IsBaseOf_Null () { - Uri http = new Uri ("http://www.mono-project.com/Main_Page#FAQ?Edit"); + Uri http = new Uri ("http://www.example.com/Main_Page#FAQ?Edit"); try { http.IsBaseOf (null); Assert.Fail (); @@ -557,27 +557,27 @@ namespace MonoTests.System [Test] // LAMESPEC: see bug #321113 public void OriginalStringRelative () { - Uri k1 = new Uri ("http://www.mono-project.com"); + Uri k1 = new Uri ("http://www.example.com"); Uri k2 = new Uri (k1, "docs"); - Assert.AreEqual ("http://www.mono-project.com/docs", k2.OriginalString, "#1"); + Assert.AreEqual ("http://www.example.com/docs", k2.OriginalString, "#1"); - Uri a = new Uri ("http://www.mono-project.com:808/foo"); + Uri a = new Uri ("http://www.example.com:808/foo"); Uri b = new Uri (a, "../docs?queryyy#% %20%23%25bar"); - Assert.AreEqual ("http://www.mono-project.com:808/docs?queryyy#% %20%23%25bar", b.OriginalString, "#2"); + Assert.AreEqual ("http://www.example.com:808/docs?queryyy#% %20%23%25bar", b.OriginalString, "#2"); - Uri c = new Uri ("http://www.mono-project.com:808/foo"); + Uri c = new Uri ("http://www.example.com:808/foo"); Uri d = new Uri (a, "../docs?queryyy#%20%23%25bar"); - Assert.AreEqual ("http://www.mono-project.com:808/docs?queryyy#%20%23%25bar", d.OriginalString, "#3"); + Assert.AreEqual ("http://www.example.com:808/docs?queryyy#%20%23%25bar", d.OriginalString, "#3"); - Uri e = new Uri ("http://www.mono-project.com:909"); - Uri f = new Uri (e, "http://www.mono-project.com:606/docs"); - Assert.AreEqual ("http://www.mono-project.com:606/docs", f.OriginalString, "#4"); + Uri e = new Uri ("http://www.example.com:909"); + Uri f = new Uri (e, "http://www.example.com:606/docs"); + Assert.AreEqual ("http://www.example.com:606/docs", f.OriginalString, "#4"); - Uri g = new Uri ("http://www.mono-project.com:303/foo"); + Uri g = new Uri ("http://www.example.com:303/foo"); Uri h = new Uri (g, "?query"); // it doesn't work. MS.NET also returns incorrect URI: ..303/?query // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=412604 - //Assert.AreEqual ("http://www.mono-project.com:303/foo?query", h.OriginalString, "#5"); + //Assert.AreEqual ("http://www.example.com:303/foo?query", h.OriginalString, "#5"); } [Test] diff --git a/mcs/class/System/Test/System/UriTypeConverterTest.cs b/mcs/class/System/Test/System/UriTypeConverterTest.cs index c444a7916f..ce5371439b 100644 --- a/mcs/class/System/Test/System/UriTypeConverterTest.cs +++ b/mcs/class/System/Test/System/UriTypeConverterTest.cs @@ -70,7 +70,7 @@ namespace MonoTests.System { [TestFixture] public class UriTypeConverterTest { - private const string url = "http://www.mono-project.com/"; + private const string url = "http://www.example.com/"; private static Uri uri = new Uri (url); private UriTypeConverter converter; diff --git a/mcs/class/System/Test/System/test-uri-relative-props.txt b/mcs/class/System/Test/System/test-uri-relative-props.txt index 0bf6c10a59..a8897d5323 100644 --- a/mcs/class/System/Test/System/test-uri-relative-props.txt +++ b/mcs/class/System/Test/System/test-uri-relative-props.txt @@ -1,9 +1,9 @@ ------------------------- server -http://www.go-mono.com/server -http://www.go-mono.com/server +http://www.example.com/server +http://www.example.com/server http -www.go-mono.com +www.example.com /server 80 @@ -14,15 +14,15 @@ False Dns /server /server -www.go-mono.com +www.example.com ------------------------- server/ -http://www.go-mono.com/server/ -http://www.go-mono.com/server/ +http://www.example.com/server/ +http://www.example.com/server/ http -www.go-mono.com +www.example.com /server/ 80 @@ -33,15 +33,15 @@ False Dns /server/ /server/ -www.go-mono.com +www.example.com ------------------------- server/maybe_file -http://www.go-mono.com/server/maybe_file -http://www.go-mono.com/server/maybe_file +http://www.example.com/server/maybe_file +http://www.example.com/server/maybe_file http -www.go-mono.com +www.example.com /server/maybe_file 80 @@ -52,15 +52,15 @@ False Dns /server/maybe_file /server/maybe_file -www.go-mono.com +www.example.com ------------------------- server/directory/ -http://www.go-mono.com/server/directory/ -http://www.go-mono.com/server/directory/ +http://www.example.com/server/directory/ +http://www.example.com/server/directory/ http -www.go-mono.com +www.example.com /server/directory/ 80 @@ -71,15 +71,15 @@ False Dns /server/directory/ /server/directory/ -www.go-mono.com +www.example.com ------------------------- server.com -http://www.go-mono.com/server.com -http://www.go-mono.com/server.com +http://www.example.com/server.com +http://www.example.com/server.com http -www.go-mono.com +www.example.com /server.com 80 @@ -90,15 +90,15 @@ False Dns /server.com /server.com -www.go-mono.com +www.example.com ------------------------- server.com/ -http://www.go-mono.com/server.com/ -http://www.go-mono.com/server.com/ +http://www.example.com/server.com/ +http://www.example.com/server.com/ http -www.go-mono.com +www.example.com /server.com/ 80 @@ -109,15 +109,15 @@ False Dns /server.com/ /server.com/ -www.go-mono.com +www.example.com ------------------------- server.com/maybe_file -http://www.go-mono.com/server.com/maybe_file -http://www.go-mono.com/server.com/maybe_file +http://www.example.com/server.com/maybe_file +http://www.example.com/server.com/maybe_file http -www.go-mono.com +www.example.com /server.com/maybe_file 80 @@ -128,15 +128,15 @@ False Dns /server.com/maybe_file /server.com/maybe_file -www.go-mono.com +www.example.com ------------------------- server.com/directory/ -http://www.go-mono.com/server.com/directory/ -http://www.go-mono.com/server.com/directory/ +http://www.example.com/server.com/directory/ +http://www.example.com/server.com/directory/ http -www.go-mono.com +www.example.com /server.com/directory/ 80 @@ -147,7 +147,7 @@ False Dns /server.com/directory/ /server.com/directory/ -www.go-mono.com +www.example.com ------------------------- @@ -228,10 +228,10 @@ server ------------------------- server -http://www.go-mono.com/server -http://www.go-mono.com/server +http://www.example.com/server +http://www.example.com/server http -www.go-mono.com +www.example.com /server 80 @@ -242,15 +242,15 @@ False Dns /server /server -www.go-mono.com +www.example.com ------------------------- server/ -http://www.go-mono.com/server/ -http://www.go-mono.com/server/ +http://www.example.com/server/ +http://www.example.com/server/ http -www.go-mono.com +www.example.com /server/ 80 @@ -261,15 +261,15 @@ False Dns /server/ /server/ -www.go-mono.com +www.example.com ------------------------- server/maybe_file -http://www.go-mono.com/server/maybe_file -http://www.go-mono.com/server/maybe_file +http://www.example.com/server/maybe_file +http://www.example.com/server/maybe_file http -www.go-mono.com +www.example.com /server/maybe_file 80 @@ -280,15 +280,15 @@ False Dns /server/maybe_file /server/maybe_file -www.go-mono.com +www.example.com ------------------------- server/directory/ -http://www.go-mono.com/server/directory/ -http://www.go-mono.com/server/directory/ +http://www.example.com/server/directory/ +http://www.example.com/server/directory/ http -www.go-mono.com +www.example.com /server/directory/ 80 @@ -299,15 +299,15 @@ False Dns /server/directory/ /server/directory/ -www.go-mono.com +www.example.com ------------------------- server.com -http://www.go-mono.com/server.com -http://www.go-mono.com/server.com +http://www.example.com/server.com +http://www.example.com/server.com http -www.go-mono.com +www.example.com /server.com 80 @@ -318,15 +318,15 @@ False Dns /server.com /server.com -www.go-mono.com +www.example.com ------------------------- readme.txt -http://www.go-mono.com/readme.txt -http://www.go-mono.com/readme.txt +http://www.example.com/readme.txt +http://www.example.com/readme.txt http -www.go-mono.com +www.example.com /readme.txt 80 @@ -337,15 +337,15 @@ False Dns /readme.txt /readme.txt -www.go-mono.com +www.example.com ------------------------- server.com/ -http://www.go-mono.com/server.com/ -http://www.go-mono.com/server.com/ +http://www.example.com/server.com/ +http://www.example.com/server.com/ http -www.go-mono.com +www.example.com /server.com/ 80 @@ -356,15 +356,15 @@ False Dns /server.com/ /server.com/ -www.go-mono.com +www.example.com ------------------------- server.com/maybe_file -http://www.go-mono.com/server.com/maybe_file -http://www.go-mono.com/server.com/maybe_file +http://www.example.com/server.com/maybe_file +http://www.example.com/server.com/maybe_file http -www.go-mono.com +www.example.com /server.com/maybe_file 80 @@ -375,15 +375,15 @@ False Dns /server.com/maybe_file /server.com/maybe_file -www.go-mono.com +www.example.com ------------------------- server.com/directory/ -http://www.go-mono.com/server.com/directory/ -http://www.go-mono.com/server.com/directory/ +http://www.example.com/server.com/directory/ +http://www.example.com/server.com/directory/ http -www.go-mono.com +www.example.com /server.com/directory/ 80 @@ -394,15 +394,15 @@ False Dns /server.com/directory/ /server.com/directory/ -www.go-mono.com +www.example.com ------------------------- contoso.com?subject=uri -http://www.go-mono.com/contoso.com?subject=uri -http://www.go-mono.com/contoso.com?subject=uri +http://www.example.com/contoso.com?subject=uri +http://www.example.com/contoso.com?subject=uri http -www.go-mono.com +www.example.com /contoso.com ?subject=uri 80 @@ -413,7 +413,7 @@ False Dns /contoso.com /contoso.com?subject=uri -www.go-mono.com +www.example.com ------------------------- @@ -456,10 +456,10 @@ myserver ------------------------- www.contoso.com -http://www.go-mono.com/www.contoso.com -http://www.go-mono.com/www.contoso.com +http://www.example.com/www.contoso.com +http://www.example.com/www.contoso.com http -www.go-mono.com +www.example.com /www.contoso.com 80 @@ -470,15 +470,15 @@ False Dns /www.contoso.com /www.contoso.com -www.go-mono.com +www.example.com ------------------------- www.contoso.com/foo/bar/index.html?x=0 -http://www.go-mono.com/www.contoso.com/foo/bar/index.html?x=0 -http://www.go-mono.com/www.contoso.com/foo/bar/index.html?x=0 +http://www.example.com/www.contoso.com/foo/bar/index.html?x=0 +http://www.example.com/www.contoso.com/foo/bar/index.html?x=0 http -www.go-mono.com +www.example.com /www.contoso.com/foo/bar/index.html ?x=0 80 @@ -489,7 +489,7 @@ False Dns /www.contoso.com/foo/bar/index.html /www.contoso.com/foo/bar/index.html?x=0 -www.go-mono.com +www.example.com ------------------------- @@ -513,10 +513,10 @@ c:/tmp/hello.txt ------------------------- mymachine/cygwin/tmp/hello.txt -http://www.go-mono.com/mymachine/cygwin/tmp/hello.txt -http://www.go-mono.com/mymachine/cygwin/tmp/hello.txt +http://www.example.com/mymachine/cygwin/tmp/hello.txt +http://www.example.com/mymachine/cygwin/tmp/hello.txt http -www.go-mono.com +www.example.com /mymachine/cygwin/tmp/hello.txt 80 @@ -527,15 +527,15 @@ False Dns /mymachine/cygwin/tmp/hello.txt /mymachine/cygwin/tmp/hello.txt -www.go-mono.com +www.example.com ------------------------- one_file.txt -http://www.go-mono.com/one_file.txt -http://www.go-mono.com/one_file.txt +http://www.example.com/one_file.txt +http://www.example.com/one_file.txt http -www.go-mono.com +www.example.com /one_file.txt 80 @@ -546,15 +546,15 @@ False Dns /one_file.txt /one_file.txt -www.go-mono.com +www.example.com ------------------------- cygwin/tmp/hello.txt -http://www.go-mono.com/cygwin/tmp/hello.txt -http://www.go-mono.com/cygwin/tmp/hello.txt +http://www.example.com/cygwin/tmp/hello.txt +http://www.example.com/cygwin/tmp/hello.txt http -www.go-mono.com +www.example.com /cygwin/tmp/hello.txt 80 @@ -565,15 +565,15 @@ False Dns /cygwin/tmp/hello.txt /cygwin/tmp/hello.txt -www.go-mono.com +www.example.com ------------------------- server/filename.ext -http://www.go-mono.com/server/filename.ext -http://www.go-mono.com/server/filename.ext +http://www.example.com/server/filename.ext +http://www.example.com/server/filename.ext http -www.go-mono.com +www.example.com /server/filename.ext 80 @@ -584,7 +584,7 @@ False Dns /server/filename.ext /server/filename.ext -www.go-mono.com +www.example.com ------------------------- @@ -608,10 +608,10 @@ server ------------------------- 1.2.3.4 -http://www.go-mono.com/1.2.3.4 -http://www.go-mono.com/1.2.3.4 +http://www.example.com/1.2.3.4 +http://www.example.com/1.2.3.4 http -www.go-mono.com +www.example.com /1.2.3.4 80 @@ -622,15 +622,15 @@ False Dns /1.2.3.4 /1.2.3.4 -www.go-mono.com +www.example.com ------------------------- 1.2.3.4 -http://www.go-mono.com/1.2.3.4 -http://www.go-mono.com/1.2.3.4 +http://www.example.com/1.2.3.4 +http://www.example.com/1.2.3.4 http -www.go-mono.com +www.example.com /1.2.3.4 80 @@ -641,15 +641,15 @@ False Dns /1.2.3.4 /1.2.3.4 -www.go-mono.com +www.example.com ------------------------- localhost/c# -http://www.go-mono.com/localhost/c# -http://www.go-mono.com/localhost/c# +http://www.example.com/localhost/c# +http://www.example.com/localhost/c# http -www.go-mono.com +www.example.com /localhost/c 80 @@ -660,15 +660,15 @@ False Dns /localhost/c /localhost/c -www.go-mono.com +www.example.com # ------------------------- localhost/c#bookmark -http://www.go-mono.com/localhost/c#bookmark -http://www.go-mono.com/localhost/c#bookmark +http://www.example.com/localhost/c#bookmark +http://www.example.com/localhost/c#bookmark http -www.go-mono.com +www.example.com /localhost/c 80 @@ -679,15 +679,15 @@ False Dns /localhost/c /localhost/c -www.go-mono.com +www.example.com #bookmark ------------------------- localhost/c# -http://www.go-mono.com/localhost/c# -http://www.go-mono.com/localhost/c# +http://www.example.com/localhost/c# +http://www.example.com/localhost/c# http -www.go-mono.com +www.example.com /localhost/c 80 @@ -698,15 +698,15 @@ False Dns /localhost/c /localhost/c -www.go-mono.com +www.example.com # ------------------------- c# -http://www.go-mono.com/c# -http://www.go-mono.com/c# +http://www.example.com/c# +http://www.example.com/c# http -www.go-mono.com +www.example.com /c 80 @@ -717,7 +717,7 @@ False Dns /c /c -www.go-mono.com +www.example.com # ------------------------- @@ -741,10 +741,10 @@ c ------------------------- c#bookmark -http://www.go-mono.com/c#bookmark -http://www.go-mono.com/c#bookmark +http://www.example.com/c#bookmark +http://www.example.com/c#bookmark http -www.go-mono.com +www.example.com /c 80 @@ -755,7 +755,7 @@ False Dns /c /c -www.go-mono.com +www.example.com #bookmark ------------------------- @@ -874,10 +874,10 @@ cn_to_ja ------------------------- web.app.com/test.cgi?value=あいうえお -http://www.go-mono.com/web.app.com/test.cgi?value=あいうえお -http://www.go-mono.com/web.app.com/test.cgi?value=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A +http://www.example.com/web.app.com/test.cgi?value=あいうえお +http://www.example.com/web.app.com/test.cgi?value=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A http -www.go-mono.com +www.example.com /web.app.com/test.cgi ?value=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A 80 @@ -888,7 +888,7 @@ False Dns /web.app.com/test.cgi /web.app.com/test.cgi?value=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A -www.go-mono.com +www.example.com ------------------------- diff --git a/mcs/class/System/Test/TestData/testclienteku.contoso.com.pfx b/mcs/class/System/Test/TestData/testclienteku.contoso.com.pfx new file mode 100644 index 0000000000000000000000000000000000000000..0c42f4c272308369d36e00ecd3088d53da0cba20 GIT binary patch literal 5278 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 RHQIe7@SD{Q`aeSW{{R$9?>Ybg literal 0 HcmV?d00001 diff --git a/mcs/class/System/Test/TestData/testnoeku.contoso.com.pfx b/mcs/class/System/Test/TestData/testnoeku.contoso.com.pfx new file mode 100644 index 0000000000000000000000000000000000000000..73c89c1b7ea914de1c3961350b87829a1ad1b79a GIT binary patch literal 5246 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 literal 0 HcmV?d00001 diff --git a/mcs/class/System/Test/TestData/testselfsignedservereku.contoso.com.pfx b/mcs/class/System/Test/TestData/testselfsignedservereku.contoso.com.pfx new file mode 100644 index 0000000000000000000000000000000000000000..8c34c65ea75065487db92fdf54307a76f42e8eba GIT binary patch literal 4247 zcmb7IXH-+$woU~ST0&Rpp(7A_7p3=JLJM6wkzy1?zyJ{yDN2zdO~E4yN=HDz(2*)2 zh=M@q(nO?}8_#?9jQhrWf8HKr?mg!>%U(a$n%^7?O+Y*b0l{bj!i)+gM${+n(F3W0 z1q8%p2mzr+ftAn%xYYk}!FeGBI41?>pa=^U?SE&{!GWLx0xSwmfJLA=so?*HDa9Ee zG&81QDaDwZ5g-ut5QG53Bs4Rx&2`cDlp-Am@XH6SzTqYNFP0^g^EB(8LRv&bKZt|I z;j+q&{jtibj$R{#(>J1zJOh<-bGJ(mT?L<7l5(Y5EDPAEL;+MLRu)y`lIsi8@aRX7 zmpd=`(cH&8w_i(yn-r=D^(qbrM)Y-YmuGDB?Cz!rx%^CBb$q6dEmY9{RHn{pwfg*N zX~g^sYVb^su@F3fgc4Y9Pc5>$JG$O1DDyJi?2%841?qa1?Z*-S@yWwO24w{J9sfjG zWm(srz0OR~+pLw>=Qgi<$Y{sk74OW#SNqxXZ)@|7*;wnCAE~nWm0RIPBk^WjjK}-? zK)CZs>MpFVt>4XbdOm~u*62x-n25>VrF%}M0U0I1cKI>uXqFHbm7AAzX1pp!*DhKK zqiJ`@ktTz?&35o;>06g>N!K~xdBi(xN;w$}ZFbr)>t4r|xT8m342ePT_cs}C<SlJ7 z7|688gs>~Mc1Kn|ecT$vJPpdO59?Xqg(O8ue7W1ZZLg*08_wG|C!^AEse7s2PgIC7 zN$sYU;1k&z*gubMoz+T|l993YsWe!thFSgS1mAj{n&<LWq{kT4LfhN$u2XiihM1?P z6yI)&QlRzvjpPJGf4gR+xhWYt8|<LQY;c!Fe3^J@dlcf6i_oUc9$G+>H~&IB5?rRU zW*A~uxq&(qvHjtF!jYYEK1(T&D*AK**`0YYwX^0he~5_16u9nkRj<n7@>8nzeH=O@ zQsVCY^$~m?aCkB$9W`&+Yc4#$2(Q&*R;53DJ5pFvp_N8=D)2K$e^cnb<~o;u=6!Qa z0c1BKnU_w@-yp*4!{ftQjeODRF~o}lT`oPhHq@iI=I#ki-;v8M3-jJ5+Dj(4NIu)+ zDhs3{e@4~E6Tj~f44Bu~N#+$xLa8)xy34W%KuEGS{f4-e%~&MsgwBvq>^D!=vtZD; z=U%(>j|hX@Zxxf(*PS5SC~S6;0bFFwdN6X=xHy<-u&uA@&)(ygd7b@T21|vCBUf>M z$n)4`{RBC+1s%;9Ou8spMa-6UV0LVxX9>y!y+!oD{ehL6DPi$}a#WF<eWXg@+#BcK z!2NXGGD6+~TSY5utndPpX<f|GTCzrW*m%92=UOQ?iFkrdbI_4jTCH*r$%d9B9zpgQ z_D}UY7Lz=K;zX?UU!R4H)7$@&j240gwJx1C)?fZgRNH`btQ&U<kC}4Jcc%f14V$YF zB?SpQcr{+rxVhk8axyN{P#(j>Dgw1Derv4WQ3xmSM3mTN?@^RN6FfT3*#(@no^^+L zurA@Q3@|ua>wV63G}CB78G393x-hdZ8=BO4TmSkf$1IUQn%tC{`c7gpT`yjC>#^Zo zo0d<kWS(NopkI}ljP|72ZqSn4(Lm=a1NmW(RV+04+#B4-W#z1cq<$3l>pq;E#&Hxs zwvpCA??60ri}4udp`6RAP7dL>Czb+9?-~!z2PE@c=}BDyHnF{XIo=q;nJybUy63?b z#fc3Vu6#v1&<5WM962DpAF)Op1jL;9im2OkeXdXrVuwHCm<oW-RLXyVH@DR$h2*uD zJH0wPn*>%lH<PGu-BFHz?;>OJSkS64n|(Fw-HR_eX1ANf?XZTQ6g+8$rCcMvMy00v ztQ<FYTNI4U&|HsM5@eyiM11elxe&2{R<?K`ZbT(`@m>NJzq95cnTx#romyK>*W&Bc zHDiuwsp_h-43fq9Mq!g^mHlie#&AnF;kMyXc#jfKy|Glaq^_ZVN79<!x&D!IadvmU zk=n?c7DB#}`1QA7b`a>V0@n5SMZ-c5<LUa*aIJ~2O4Gg@B!}**@LQGY-KLs1*o`z@ zu0GHH_BIb5E*ZShWrBn)+~&0m5cpA9qt>LdL1on`KCbsoE>`<%i++*;WHFh2XZ2oo zZU!sS*F0rtGd?p5Le}*>VM-4Y#FEUNWL5VteT%|_7~%*hK5DQTADOJZdh|l0%f@CG zMGTq^`_P|YWq90thG-6y_KO)eLOs*`d}Cm;>hukdyKQm!wNti{3&C0sUd>#5dZTwI zpP{p1rWP4|rfYWI|KS(DO}7B!<$!{W(R<-p0$sj*<iIpk7NW|oWpgTv2`-i9*@33A z*!s}<;<q(d!q!~hromSj$-&atq1P_RN&T=|1GV9~^|NzX9F&8QPCF0#q?0Y5-xf!U zRI2-x*JP@bFw?~;C+Db6#3%U;8ZXY?De=3>lr#FR|Je1rJzsec*EQ?2Wj9M`Q4vzU z<v4;KTeNQ6j_ZZ@n7prfe)YEjyqD{Y*{;g#gY8%fQ@;~7Av)6qbYZ7I#*lPM5L)%r zUZlD2+VjzWwmp7#SwiRh4mbrovX^<k(M1;6886*<ig)AA5^YZ(iK6Z6G(qLGCyD*V z-`%+5ci0P=73e<qDp}Okye2S08b@`B_Lzx}S?31F^1_U~@FD%=u<x)%TzNMQ&@5=` zHJ4vTII90UZk5bDYuo6C+nD_L(tZi+cv+=nXPz9u%#r07s#8Q)h7p?ogqCWym6>0J z{p5R79qW;fWRil%%VpuW)1U3EqxV|KNPl}H0gqMH#0HODo#97l44uzlNg1nGak2kf zf#ZSU$a<;Wju$XJg%D1JhTzIpxzU52Htj1>uluIl(|-FCd*{Bq8pr+$l#*%H65n1_ z@HYOGHd&Ld+ZPF|c08SH@x1JbS<lu~&w7S|mR|5M`}TO#Nj?B{h3;AXo_4CL$d<;F zUdv;x*w}DukxK_*(ZlRm+Jjsezu3g?_J%iHZ`yV{AQzVyD$WP|Ippzrb8>P)=1@Sb z@6LdeqE=g6mvQ>qr3(pRKYpN?j1JtU)pSaqqdb|&wOIu{H>W)w?tasa#T-d1=LnwH zzxw`kv{S&fP0945*ttwK8RB&#P_mFpulEH-n%DSx$?(`I)=Cit##^qj?d`o!H2b$e z0ec68#1h>Z6dv`dIgtt|upo|XD$lfb(j)6%Oswx1$u4_yufm$ax#Z!l-wF?l=+*G> zgVp}AU<e7!{UFQoL%nfCV-c>@z>lm_xA$Q6>UBZ@fSu3x%E0mt^L|pki=VlcE&o%p z)Hr6Yb&$QOw?n>RrErvsv~WW{>>84za&Pykm%%W^cZ2q3#S|mNDfmGwroZJx$0Ar) z3*XT5uE#iF*v2kxkZmsCXlKtw`VIlj{Li=sW0j_YK!5-M0PRl&6Q=?~fCNP(P#Vka z1TX>k0z3dA030BcB3A)n0A7F&APC?CaHG6E0A2u33Zg}c2nSrFcyR!4ita|yeg4km z1(^Sxji*?il;{vjG#(%gkOZL71S;S^YxpxwLbo9V=mweqU8Tt4e~ye`ic_BgYX37Z z!r1;K$Wam~b)Xl~1Taeh7z6}?5K;bqclCFe6AhJ&%tNLM=+N~4`~*k~1)wFRFQUb$ zz%~#t9V*N#G%VCB;A*I^caWE7s8<NyE5ytHx}*m#C=3^hqkIF=-0bwyifCzRMQKG@ zMR`RBc6wQPim8PD`*HYx*CT-V|8q$|C;&_VF#^y85FA7R0RcmvYvFfl@>aC*Sl2Y8 zz@i%*>rw<!*3ZVNxEP1KX}_L7c-!={GIXv`LuuawQK;M);bSXtG;!+egb8JQXvNAb z@%Y;1ouF=?9qC;+LVEI^%lO9tOWRI==6pMIg+rXyopZ|%XDw0O!hM(N8i=m;)wa?6 zeYLv4jo1E(Q5`7JcXhJAoDZn_xpG}ETfLeWcKR+%;;5_{-dx@3N#d80{7_iK>RxqL zJi7Rk??)l9nC(fQwXcTqmVhfGFS&&*8GbW-8k!7U`RWNlfNB+-y`A@*Wyh+sNO68i zuKb{ti>$eqVmacTF@1;Y<dj2o2`4jn?G={|NO3}VuDaNk;Lpj&xqg+ug@p@?c<(b! zp62G+2phG>6yGtrP)}EPQtT(rev0SKPMjz@73d;zVt+EW^$yxymA?&Q`@NOBttIU4 z!@edkU-pcBt}XA-wPw-1-#*SS&hJ;+${aGm-PSTboU0K1ozr-d3VSeydYgS=+@Mar zy6%&TlVm26KA!o-L_Na**HWBSLu72Wo0hQGOYwolCEn)*iP<`cofYg#>)B?l20}gp zCPzE!Tu<ozjprnho$U}t--=QmYzsuZa#`NtCI-D7dN_d`z3WBF(DM*mpj~J$D-g`N zz{0K`>1UPkYGifl&0U$vs1VsBUi*^cuvwi_O(qu$5EuvmKGQ{OQ%)$@hD#7ahlW$p zP);QjN(~008UBEbK;Rh!0tP_~&|H6P1_&F3#rSfXyIpHY@aL;yZ;fzG32Z3^iT}CN zD4U<M(|`asf7DADqOiMSEn!Fa`N=gApD|LEf#-ERw`4sDXUg(ppH?B`)C4c8>+hmp zQ;v-?6ybaNEp=l=K5EJTNs7_YcOus?@mlqy|4*2nopql$wf(3QBN*JzH8gcU-n&5b zBM<Sjps^Qs9Cpcsg}$^qoNim*#gOeQ<Qesz-ECNoQTujfre#stY-nvEG@<H5DuLzL zx0N*a8;Q}*sLn&Q=Zc6}e!pm=@>N1_sM*jFdpw=dMf;uK7;#dX&bprO9r=j4U_HIf zLa*2zM;-Id?2B%z*nk~x47g@Ov^-<7W!Ly7yI2m-L?}XgGPc&`GZgd__2aSGz~-BD zU+5i~(@0-MGP#3EKH9V&qP}O(3pg^XDPLde3uye<T@s+$*W{3VvZ!!CXb8zM^te45 zj&oUFP#k%y)c)&3KB17@a$#=_Q|N8$wlMjWsX~EUiZ6%&wp~Pu#5j?cc@`bm9LV}o zIaj87S(-e!R2}3TXBKO9gC_V;=j+;QWkd9kwqgo5IlYe)x`CN$Is4xQHX8g9tLA4B zRXQV__aN>QdiA@s?}igb2A<J)@z{7)2x6b?r(`Av<aTscZZJxrcvq<_zvb6O2l7;M ztS+H=Vn(&l=TvukL{#H=kn7&XO?h15dKHjj!w9WgL*2|`UMJ7Kzu$dBB8%4VB_2!P zxsOKv(-UDV(hzPCrS<=xeBeq2|2H3i^`tE!=2`$tfC0dY($&o<A_35*uz@W=hSJYN z{^o)}3IhaDI=v)?8*mit8bu5IUmWsZ-oQVMql)H1Q&U038Ni_P5Eht%XnO46jk1vs o%O@o?7sU;5Wv&pGt^Fsy=S7@OR;DF=+Z%>WHQpvU{kbCe7ae+W0ssI2 literal 0 HcmV?d00001 diff --git a/mcs/class/System.Net.Http/TestData/testservereku.contoso.com.pfx b/mcs/class/System/Test/TestData/testservereku.contoso.com.pfx similarity index 100% rename from mcs/class/System.Net.Http/TestData/testservereku.contoso.com.pfx rename to mcs/class/System/Test/TestData/testservereku.contoso.com.pfx diff --git a/mcs/class/System/common.sources b/mcs/class/System/common.sources index 180612aa20..e4d69c0da2 100644 --- a/mcs/class/System/common.sources +++ b/mcs/class/System/common.sources @@ -189,7 +189,10 @@ System.Security.Cryptography.X509Certificates/X509Store.cs System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtension.cs ../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509SubjectKeyIdentifierHashAlgorithm.cs ../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509VerificationFlags.cs -../../../external/corefx/src/System.Security.Cryptography.Primitives/src/System/Security/Cryptography/CryptographicOperations.cs +../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/SubjectAlternativeNameBuilder.cs +../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/GeneralNameEncoder.cs +corefx/X509SignatureGenerator.cs +corefx/CertificateRequest.cs System.Threading/ThreadExceptionEventArgs.cs System.Threading/ThreadExceptionEventHandler.cs @@ -563,8 +566,6 @@ ReferenceSources/Win32Exception.cs ../referencesource/System/compmod/system/diagnostics/traceutils.cs ../referencesource/System/net/System/_DomainName.cs -../referencesource/System/net/System/_IPv4Address.cs -../referencesource/System/net/System/_IPv6Address.cs ../referencesource/System/net/System/_UncName.cs ../referencesource/System/net/System/_UriSyntax.cs ../referencesource/System/net/System/GenericUriParser.cs @@ -622,7 +623,13 @@ ReferenceSources/Win32Exception.cs ../referencesource/System/net/System/Net/ICredentials.cs ../referencesource/System/net/System/Net/ICredentialsByHost.cs ../referencesource/System/net/System/Net/Internal.cs -../referencesource/System/net/System/Net/IPAddress.cs +../../../external/corefx/src/Common/src/System/Net/IPAddressParserStatics.cs +../../../external/corefx/src/System.Net.Primitives/src/System/Net/IPAddressParser.cs +../../../external/corefx/src/Common/src/System/Net/IPv6AddressHelper.Common.cs +../../../external/corefx/src/Common/src/System/Net/IPv4AddressHelper.Common.cs +../../../external/corefx/src/System.Net.Primitives/src/System/Net/IPAddress.cs +../../../external/corefx/src/System.Private.Uri/src/System/IPv4AddressHelper.cs +../../../external/corefx/src/System.Private.Uri/src/System/IPv6AddressHelper.cs ../../../external/corefx/src/System.Net.Primitives/src/System/Net/IPEndPoint.cs ../../../external/corefx/src/Common/src/System/Net/TcpValidationHelpers.cs ../referencesource/System/net/System/Net/IPHostEntry.cs @@ -771,6 +778,7 @@ ReferenceSources/Win32Exception.cs ../referencesource/System/services/monitoring/system/diagnosticts/AsyncStreamReader.cs ../referencesource/System/services/monitoring/system/diagnosticts/Process.cs +../../../external/corefx/src/Common/src/System/PasteArguments.cs ../referencesource/System/services/monitoring/system/diagnosticts/ProcessModuleCollection.cs ../referencesource/System/services/monitoring/system/diagnosticts/ProcessStartInfo.cs ../referencesource/System/services/monitoring/system/diagnosticts/processwaithandle.cs @@ -871,7 +879,6 @@ ReferenceSources/Win32Exception.cs ../../../external/corefx/src/System.Runtime.Extensions/src/System/StringNormalizationExtensions.cs ../../../external/corefx/src/System.Diagnostics.StackTrace/src/System/Diagnostics/StackFrameExtensions.cs -../../../external/corefx/src/System.IO.FileSystem/src/System/IO/Enumeration/FileSystemName.cs ../../../external/corefx/src/System.IO.FileSystem.Watcher/src/System/IO/FileSystemWatcher.cs # Everything except compiled diff --git a/mcs/class/System/corefx/CertificateRequest.cs b/mcs/class/System/corefx/CertificateRequest.cs new file mode 100644 index 0000000000..402b52e0e2 --- /dev/null +++ b/mcs/class/System/corefx/CertificateRequest.cs @@ -0,0 +1,26 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.ObjectModel; + +namespace System.Security.Cryptography.X509Certificates +{ + public sealed partial class CertificateRequest + { + public CertificateRequest(X500DistinguishedName subjectName, ECDsa key, HashAlgorithmName hashAlgorithm) => throw new PlatformNotSupportedException(); + public CertificateRequest(X500DistinguishedName subjectName, RSA key, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) => throw new PlatformNotSupportedException(); + public CertificateRequest(X500DistinguishedName subjectName, PublicKey publicKey, HashAlgorithmName hashAlgorithm) => throw new PlatformNotSupportedException(); + public CertificateRequest(string subjectName, ECDsa key, HashAlgorithmName hashAlgorithm) => throw new PlatformNotSupportedException(); + public CertificateRequest(string subjectName, RSA key, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) => throw new PlatformNotSupportedException(); + public Collection<X509Extension> CertificateExtensions => throw new PlatformNotSupportedException(); + public HashAlgorithmName HashAlgorithm => throw new PlatformNotSupportedException(); + public PublicKey PublicKey => throw new PlatformNotSupportedException(); + public X500DistinguishedName SubjectName => throw new PlatformNotSupportedException(); + public X509Certificate2 Create(X500DistinguishedName issuerName, X509SignatureGenerator generator, System.DateTimeOffset notBefore, System.DateTimeOffset notAfter, byte[] serialNumber) => throw new PlatformNotSupportedException(); + public X509Certificate2 Create(X509Certificate2 issuerCertificate, System.DateTimeOffset notBefore, System.DateTimeOffset notAfter, byte[] serialNumber) => throw new PlatformNotSupportedException(); + public X509Certificate2 CreateSelfSigned(System.DateTimeOffset notBefore, System.DateTimeOffset notAfter) => throw new PlatformNotSupportedException(); + public byte[] CreateSigningRequest() => throw new PlatformNotSupportedException(); + public byte[] CreateSigningRequest(X509SignatureGenerator signatureGenerator) => throw new PlatformNotSupportedException(); + } +} \ No newline at end of file diff --git a/mcs/class/System/corefx/X509SignatureGenerator.cs b/mcs/class/System/corefx/X509SignatureGenerator.cs new file mode 100644 index 0000000000..98b247e5b7 --- /dev/null +++ b/mcs/class/System/corefx/X509SignatureGenerator.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Security.Cryptography.X509Certificates +{ + public abstract partial class X509SignatureGenerator + { + protected X509SignatureGenerator() => throw new PlatformNotSupportedException(); + public PublicKey PublicKey => throw new PlatformNotSupportedException(); + protected abstract PublicKey BuildPublicKey(); + public static X509SignatureGenerator CreateForECDsa(ECDsa key) => throw new PlatformNotSupportedException(); + public static X509SignatureGenerator CreateForRSA(RSA key, RSASignaturePadding signaturePadding) => throw new PlatformNotSupportedException(); + public abstract byte[] GetSignatureAlgorithmIdentifier(HashAlgorithmName hashAlgorithm); + public abstract byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm); + } +} \ No newline at end of file diff --git a/mcs/class/System/macos_networkinfo.sources b/mcs/class/System/macos_networkinfo.sources index 8a03393938..c263b16274 100644 --- a/mcs/class/System/macos_networkinfo.sources +++ b/mcs/class/System/macos_networkinfo.sources @@ -1,3 +1,4 @@ +System.Net.NetworkInformation/FreeBSDNetworkInterface.cs System.Net.NetworkInformation/MacOsIPInterfaceProperties.cs System.Net.NetworkInformation/MacOsIPv4InterfaceProperties.cs System.Net.NetworkInformation/MacOsIPv4InterfaceStatistics.cs diff --git a/mcs/class/System/mobile_System.dll.sources b/mcs/class/System/mobile_System.dll.sources index 734c58b369..67c169460d 100644 --- a/mcs/class/System/mobile_System.dll.sources +++ b/mcs/class/System/mobile_System.dll.sources @@ -3,4 +3,5 @@ #include corefx.unix.sources ../../../external/corefx/src/Common/src/System/Net/ContextAwareResult.Unix.cs ../../../external/corefx/src/System.IO.FileSystem.Watcher/src/System/IO/FileSystemWatcher.UnknownUnix.cs +System.IO/FileSystemWatcher.DefaultEventAttribute.cs Internal.Cryptography/OidLookup.Managed.cs diff --git a/mcs/class/System/monotouch_System_xtest.dll.exclude.sources b/mcs/class/System/monotouch_System_xtest.dll.exclude.sources index 63393652ba..ea6429003a 100644 --- a/mcs/class/System/monotouch_System_xtest.dll.exclude.sources +++ b/mcs/class/System/monotouch_System_xtest.dll.exclude.sources @@ -8,3 +8,9 @@ ../../../external/corefx/src/System.CodeDom/tests/Microsoft/CSharp/*.cs ../../../external/corefx/src/System.CodeDom/tests/Microsoft/VisualBasic/*.cs ../../../external/corefx/src/System.CodeDom/tests/*.cs + +System/RemoteExecutorTests.cs + +../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/Utility/FileSystemWatcherTest.cs +../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.cs +../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs diff --git a/mcs/class/System/monotouch_tv_System_xtest.dll.exclude.sources b/mcs/class/System/monotouch_tv_System_xtest.dll.exclude.sources index fde28e6e4b..2d2ae38bcd 100644 --- a/mcs/class/System/monotouch_tv_System_xtest.dll.exclude.sources +++ b/mcs/class/System/monotouch_tv_System_xtest.dll.exclude.sources @@ -1,14 +1 @@ #include monotouch_System_xtest.dll.exclude.sources -../../../external/corefx/src/System.CodeDom/tests/CodeCollections/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeExpressions/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeObjects/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeStatements/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeTypeMembers/*.cs -../../../external/corefx/src/System.CodeDom/tests/Compiler/*.cs -../../../external/corefx/src/System.CodeDom/tests/Other/*.cs -../../../external/corefx/src/System.CodeDom/tests/Microsoft/CSharp/*.cs -../../../external/corefx/src/System.CodeDom/tests/Microsoft/VisualBasic/*.cs -../../../external/corefx/src/System.CodeDom/tests/*.cs -../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/Utility/FileSystemWatcherTest.cs -../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.cs -../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs diff --git a/mcs/class/System/monotouch_watch_System.dll.sources b/mcs/class/System/monotouch_watch_System.dll.sources index 8ed3a4d14e..4200aeb977 100644 --- a/mcs/class/System/monotouch_watch_System.dll.sources +++ b/mcs/class/System/monotouch_watch_System.dll.sources @@ -41,3 +41,6 @@ System.Net.WebSockets/HttpListenerWebSocketContext.platformnotsupported.cs ../Mono.Security/Mono.Security.X509.Extensions/BasicConstraintsExtension.cs ../Mono.Security/Mono.Security.X509.Extensions/KeyUsageExtension.cs ../Mono.Security/Mono.Security.X509.Extensions/SubjectKeyIdentifierExtension.cs +System.Net.Security/SslApplicationProtocol.pns.cs +System.Net.Security/SslClientAuthenticationOptions.pns.cs +System.Net.Security/SslServerAuthenticationOptions.pns.cs diff --git a/mcs/class/System/monotouch_watch_System_xtest.dll.exclude.sources b/mcs/class/System/monotouch_watch_System_xtest.dll.exclude.sources index fde28e6e4b..4742b73fbb 100644 --- a/mcs/class/System/monotouch_watch_System_xtest.dll.exclude.sources +++ b/mcs/class/System/monotouch_watch_System_xtest.dll.exclude.sources @@ -1,14 +1,8 @@ #include monotouch_System_xtest.dll.exclude.sources -../../../external/corefx/src/System.CodeDom/tests/CodeCollections/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeExpressions/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeObjects/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeStatements/*.cs -../../../external/corefx/src/System.CodeDom/tests/CodeTypeMembers/*.cs -../../../external/corefx/src/System.CodeDom/tests/Compiler/*.cs -../../../external/corefx/src/System.CodeDom/tests/Other/*.cs -../../../external/corefx/src/System.CodeDom/tests/Microsoft/CSharp/*.cs -../../../external/corefx/src/System.CodeDom/tests/Microsoft/VisualBasic/*.cs -../../../external/corefx/src/System.CodeDom/tests/*.cs -../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/Utility/FileSystemWatcherTest.cs -../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.cs -../../../external/corefx/src/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.unit.cs + +../../../external/corefx/src/System.Net.Security/tests/FunctionalTests/*.cs + +../../../external/corefx/src/System.Net.WebClient/tests/WebClientTest.cs + +../../../external/corefx/src/Common/tests/System/Net/WebSockets/WebSocketCreateTest.cs +../../../external/corefx/src/System.Net.WebSockets/tests/WebSocketTests.netcoreapp.cs diff --git a/mcs/class/System/net_4_x_System.dll.sources b/mcs/class/System/net_4_x_System.dll.sources index f2ee5601ee..fd666f0c65 100644 --- a/mcs/class/System/net_4_x_System.dll.sources +++ b/mcs/class/System/net_4_x_System.dll.sources @@ -200,6 +200,8 @@ System.Net.Mail/SmtpPermissionAttribute.cs System.Runtime.InteropServices/StandardOleMarshalObject.cs +ReferenceSources/DynamicRoleClaimProvider.cs + System.Security.Permissions/PermissionHelper.cs System.Security.Permissions/ResourcePermissionBase.cs System.Security.Permissions/ResourcePermissionBaseEntry.cs diff --git a/mcs/class/System/win32_net_4_x_System_test.dll.sources b/mcs/class/System/win32_net_4_x_System_test.dll.sources new file mode 100644 index 0000000000..441b409010 --- /dev/null +++ b/mcs/class/System/win32_net_4_x_System_test.dll.sources @@ -0,0 +1,3 @@ +#include System_test.dll.sources + +System.Net.Sockets/AbortBlockingSocketCallTest.cs diff --git a/mcs/class/System/win32_net_4_x_System_xtest.dll.exclude.sources b/mcs/class/System/win32_net_4_x_System_xtest.dll.exclude.sources new file mode 100644 index 0000000000..ee09d9ec6a --- /dev/null +++ b/mcs/class/System/win32_net_4_x_System_xtest.dll.exclude.sources @@ -0,0 +1 @@ +../../../external/corefx/src/System.Net.Security/tests/FunctionalTests/*.cs diff --git a/mcs/class/System/winaot_System_test.dll.sources b/mcs/class/System/winaot_System_test.dll.sources new file mode 100644 index 0000000000..63be736f17 --- /dev/null +++ b/mcs/class/System/winaot_System_test.dll.sources @@ -0,0 +1,3 @@ +#include System_test.dll.sources + +System.Net.Sockets/AbortBlockingSocketCallTest.cs \ No newline at end of file diff --git a/mcs/class/System/xammac_net_4_5_System_xtest.dll.exclude.sources b/mcs/class/System/xammac_net_4_5_System_xtest.dll.exclude.sources new file mode 100644 index 0000000000..a47fa20c28 --- /dev/null +++ b/mcs/class/System/xammac_net_4_5_System_xtest.dll.exclude.sources @@ -0,0 +1 @@ +System/RemoteExecutorTests.cs diff --git a/mcs/class/corlib/System/Guid.MonoTouch.cs b/mcs/class/corlib/CommonCrypto/Guid.cs similarity index 90% rename from mcs/class/corlib/System/Guid.MonoTouch.cs rename to mcs/class/corlib/CommonCrypto/Guid.cs index 714bdb6f86..9ed499ee15 100644 --- a/mcs/class/corlib/System/Guid.MonoTouch.cs +++ b/mcs/class/corlib/CommonCrypto/Guid.cs @@ -1,5 +1,3 @@ -#if MONOTOUCH && FULL_AOT_RUNTIME - using Crimson.CommonCrypto; namespace System @@ -21,5 +19,3 @@ namespace System } } } - -#endif \ No newline at end of file diff --git a/mcs/class/corlib/LinkerDescriptor/mscorlib.xml b/mcs/class/corlib/LinkerDescriptor/mscorlib.xml index 604b78613f..c5b53a8b97 100644 --- a/mcs/class/corlib/LinkerDescriptor/mscorlib.xml +++ b/mcs/class/corlib/LinkerDescriptor/mscorlib.xml @@ -3,7 +3,8 @@ <assembly fullname="mscorlib"> <!-- domain.c: mono_defaults.appdomain_class --> - <type fullname="System.AppDomain" preserve="fields"> + <type fullname="System.AppDomain"> + <field name="_mono_app_domain" /> <!-- appdomain.c: mono_domain_try_type_resolve --> <method name="DoTypeResolve" /> <!-- appdomain.c: mono_try_assembly_resolve --> @@ -100,10 +101,14 @@ </type> <!-- domain.c: mono_defaults.boolean_class --> - <type fullname="System.Boolean" preserve="fields" /> + <type fullname="System.Boolean"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.byte_class --> - <type fullname="System.Byte" preserve="fields" /> + <type fullname="System.Byte"> + <field name="m_value"/> + </type> <!-- exception.c" mono_get_exception_cannot_unload_appdomain (called by appdomain.c) --> <type fullname="System.CannotUnloadAppDomainException"> @@ -112,7 +117,9 @@ </type> <!-- domain.c: mono_defaults.char_class --> - <type fullname="System.Char" preserve="fields" /> + <type fullname="System.Char"> + <field name="m_value"/> + </type> <!-- marshal.c: emit_marshal_vtype --> <type fullname="System.DateTime" preserve="fields" /> @@ -153,7 +160,9 @@ </type> <!-- domain.c: mono_defaults.double_class --> - <type fullname="System.Double" preserve="fields" /> + <type fullname="System.Double"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.enum_class --> <type fullname="System.Enum" preserve="fields" /> @@ -203,16 +212,24 @@ </type> <!-- domain.c: mono_defaults.int16_class --> - <type fullname="System.Int16" preserve="fields" /> + <type fullname="System.Int16"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.int32_class --> - <type fullname="System.Int32" preserve="fields" /> + <type fullname="System.Int32"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.int64_class --> - <type fullname="System.Int64" preserve="fields" /> + <type fullname="System.Int64"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.int_class --> - <type fullname="System.IntPtr" preserve="fields" /> + <type fullname="System.IntPtr"> + <field name="m_value"/> + </type> <!-- exception.c (mono_get_exception_invalid_cast) --> <type fullname="System.InvalidCastException"> @@ -284,6 +301,12 @@ <!-- mono_get_exception_not_implemented --> <method signature="System.Void .ctor(System.String)" /> </type> + + <!-- mono-error.c (mono_error_set_ambiguous_implementation) --> + <type fullname="System.Runtime.AmbiguousImplementationException"> + <!-- mono_error_set_ambiguous_implementation --> + <method signature="System.Void .ctor(System.String)" /> + </type> <!-- appdomain.c (create_domain_objects) domain->null_reference_ex --> <!-- exception.c (mono_get_exception_null_reference) --> @@ -344,11 +367,16 @@ <!-- domain.c: mono_defaults.typehandle_class --> <type fullname="System.RuntimeTypeHandle" preserve="fields" /> + <!-- domain.c: mono_defaults.sbyte_class --> - <type fullname="System.SByte" preserve="fields" /> + <type fullname="System.SByte"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.single_class --> - <type fullname="System.Single" preserve="fields" /> + <type fullname="System.Single"> + <field name="m_value"/> + </type> <!-- appdomain.c (create_domain_objects) domain->stack_overflow_ex --> <type fullname="System.StackOverflowException"> @@ -414,16 +442,24 @@ <type fullname="System.TypedReference" preserve="fields" /> <!-- domain.c: mono_defaults.uint16_class --> - <type fullname="System.UInt16" preserve="fields" /> + <type fullname="System.UInt16"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.uint32_class --> - <type fullname="System.UInt32" preserve="fields" /> + <type fullname="System.UInt32"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.uint64_class --> - <type fullname="System.UInt64" preserve="fields" /> + <type fullname="System.UInt64"> + <field name="m_value"/> + </type> <!-- domain.c: mono_defaults.uint_class --> - <type fullname="System.UIntPtr" preserve="fields" /> + <type fullname="System.UIntPtr"> + <field name="m_value"/> + </type> <!-- object.c: create_unhandled_exception_eventargs (assert) --> <type fullname="System.UnhandledExceptionEventArgs"> @@ -562,9 +598,11 @@ </type> <type fullname="System.Reflection.ParameterInfo" preserve="fields" /> <!-- reflection.c: ves_icall_get_parameter_info --> - <type fullname="System.Reflection.RuntimeParameterInfo" preserve="fields" > + <type fullname="System.Reflection.RuntimeParameterInfo" > <!-- reflection.c mono_object_new_checked in event_object_construct --> <method signature="System.Void .ctor()" /> + <!-- reflection.c add_parameter_object_to_array --> + <method signature="System.Void .ctor(System.String,System.Type,System.Int32,System.Int32,System.Object,System.Reflection.MemberInfo,System.Runtime.InteropServices.MarshalAsAttribute)" /> </type> <!-- object.c: mono_field_get_value_object and mono_runtime_invoke_array --> @@ -638,7 +676,7 @@ <type fullname="System.Runtime.InteropServices.ICustomMarshaler" /> <!-- domain.c: mono_defaults.marshal_class --> - <type fullname="System.Runtime.InteropServices.Marshal" preserve="fields" > + <type fullname="System.Runtime.InteropServices.Marshal"> <!-- marshal.c (mono_marshal_get_struct_to_ptr) --> <method name="StructureToPtr" /> </type> diff --git a/mcs/class/corlib/Makefile b/mcs/class/corlib/Makefile index 243904882a..c5d6a51c0f 100644 --- a/mcs/class/corlib/Makefile +++ b/mcs/class/corlib/Makefile @@ -59,7 +59,8 @@ RESX_RESOURCE_STRING = \ ../../../external/corefx/src/System.ObjectModel/src/Resources/Strings.resx \ ../../../external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx \ ../../../external/corefx/src/System.Private.Uri/src/Resources/Strings.resx \ - ../../../external/corefx/src/Microsoft.Win32.Registry/src/Resources/Strings.resx + ../../../external/corefx/src/Microsoft.Win32.Registry/src/Resources/Strings.resx \ + ../../../external/corefx/src/System.Security.Cryptography.Algorithms/src/Resources/Strings.resx LIBRARY_COMPILE = $(BOOT_COMPILE) LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION) @@ -71,18 +72,26 @@ RESOURCE_STRINGS_FILES = --mscorlib-debug RESOURCE_STRINGS = ../referencesource/mscorlib/mscorlib.txt MODULE_DEPS = $(IL_REPLACE) LinkerDescriptor/mscorlib.xml -RESOURCE_FILES = \ - resources/charinfo.nlp \ + +ifdef WASM +MANAGED_COLLATOR_RESOURCES_FILES = +else +MANAGED_COLLATOR_RESOURCES_FILES = \ resources/collation.core.bin \ resources/collation.tailoring.bin \ resources/collation.cjkCHS.bin \ resources/collation.cjkCHT.bin \ resources/collation.cjkJA.bin \ resources/collation.cjkKO.bin \ - resources/collation.cjkKOlv2.bin \ + resources/collation.cjkKOlv2.bin +endif + +RESOURCE_FILES = \ + resources/charinfo.nlp \ + $(MANAGED_COLLATOR_RESOURCES_FILES) \ LinkerDescriptor/mscorlib.xml -REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ENCODINGNLS,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT,HAS_CORLIB_CONTRACTS +REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ENCODINGNLS,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT,FEATURE_DEFAULT_INTERFACES,HAS_CORLIB_CONTRACTS ifndef NO_SRE LIB_MCS_FLAGS += -d:MONO_FEATURE_SRE @@ -93,7 +102,11 @@ REFERENCE_SOURCES_FLAGS += -d:FEATURE_MACL endif ifndef AOT_FRIENDLY_PROFILE +ifndef DISABLE_REMOTING REFERENCE_SOURCES_FLAGS += -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY +else +REFERENCE_SOURCES_FLAGS += -d:FEATURE_ROLE_BASED_SECURITY +endif endif ifndef NO_THREAD_ABORT @@ -150,7 +163,7 @@ endif endif # System.IO/DirectoryInfoTest.cs needs Mono.Posix -TEST_MCS_FLAGS += -debug -nowarn:168,219,618,672 -unsafe \ +TEST_MCS_FLAGS += -debug -nowarn:168,219,618,672 -unsafe -nowarn:67,114,162,169,649,659 \ -define:MONO_DATACONVERTER_STATIC_METHODS $(TEST_RESX_RESOURCES:%=-resource:%) -resource:LinkerDescriptor/mscorlib_test.xml,$(test_lib:.dll=.xml) ifeq ($(PROFILE),net_4_x) @@ -280,6 +293,10 @@ ifdef NO_TEST NO_VTS_TEST = yes endif +ifdef DISABLE_REMOTING +NO_VTS_TEST = yes +endif + ifndef NO_VTS_TEST test: test-vts run-test: run-test-vts diff --git a/mcs/class/corlib/Mono.Globalization.Unicode/MSCompatUnicodeTable.cs b/mcs/class/corlib/Mono.Globalization.Unicode/MSCompatUnicodeTable.cs index 9ec6146670..4a8459e561 100644 --- a/mcs/class/corlib/Mono.Globalization.Unicode/MSCompatUnicodeTable.cs +++ b/mcs/class/corlib/Mono.Globalization.Unicode/MSCompatUnicodeTable.cs @@ -595,7 +595,7 @@ namespace Mono.Globalization.Unicode { int size; Module module; - return Assembly.GetExecutingAssembly ().GetManifestResourceInternal (name, out size, out module); + return ((RuntimeAssembly)Assembly.GetExecutingAssembly ()).GetManifestResourceInternal (name, out size, out module); } #elif USE_C_HEADER const int CollationTableIdxIgnorables = 0; diff --git a/mcs/class/corlib/Mono.Globalization.Unicode/SimpleCollator.cs b/mcs/class/corlib/Mono.Globalization.Unicode/SimpleCollator.cs index c40dd21cc2..47b9cada42 100644 --- a/mcs/class/corlib/Mono.Globalization.Unicode/SimpleCollator.cs +++ b/mcs/class/corlib/Mono.Globalization.Unicode/SimpleCollator.cs @@ -75,7 +75,7 @@ using COpt = System.Globalization.CompareOptions; namespace Mono.Globalization.Unicode { - internal class SimpleCollator + internal class SimpleCollator : ISimpleCollator { /* // this environment variable is for debugging quick check. @@ -756,6 +756,13 @@ Console.WriteLine (" -> '{0}'", c.Replacement); len1 == min ? - 1 : 1; } */ + + int ISimpleCollator.Compare (string s1, int idx1, int len1, + string s2, int idx2, int len2, CompareOptions options) + { + return Compare (s1, idx1, len1, s2, idx2, len2, options); + } + internal unsafe int Compare (string s1, int idx1, int len1, string s2, int idx2, int len2, CompareOptions options) { diff --git a/mcs/class/corlib/Mono.Interop/ComInteropProxy.cs b/mcs/class/corlib/Mono.Interop/ComInteropProxy.cs index 88d713ed8c..3738f0fb03 100644 --- a/mcs/class/corlib/Mono.Interop/ComInteropProxy.cs +++ b/mcs/class/corlib/Mono.Interop/ComInteropProxy.cs @@ -128,9 +128,6 @@ namespace Mono.Interop public override IMessage Invoke (IMessage msg) { - Console.WriteLine ("Invoke"); - Console.WriteLine (System.Environment.StackTrace); - throw new Exception ("The method or operation is not implemented."); } diff --git a/mcs/class/corlib/Mono/RuntimeHandles.cs b/mcs/class/corlib/Mono/RuntimeHandles.cs index 68db33f394..852bc70402 100644 --- a/mcs/class/corlib/Mono/RuntimeHandles.cs +++ b/mcs/class/corlib/Mono/RuntimeHandles.cs @@ -13,136 +13,124 @@ using System; using System.Reflection; using System.Runtime.CompilerServices; -namespace Mono { +namespace Mono +{ + unsafe struct RuntimeClassHandle + { + RuntimeStructs.MonoClass* value; - internal struct RuntimeClassHandle { - unsafe RuntimeStructs.MonoClass* value; - - internal unsafe RuntimeClassHandle (RuntimeStructs.MonoClass* value) { + internal RuntimeClassHandle (RuntimeStructs.MonoClass* value) + { this.value = value; } - internal unsafe RuntimeClassHandle (IntPtr ptr) { + internal RuntimeClassHandle (IntPtr ptr) + { this.value = (RuntimeStructs.MonoClass*) ptr; } - internal unsafe RuntimeStructs.MonoClass* Value { - get { return value; } - } + internal RuntimeStructs.MonoClass* Value => value; public override bool Equals (object obj) { if (obj == null || GetType () != obj.GetType ()) return false; - unsafe { return value == ((RuntimeClassHandle)obj).Value; } + return value == ((RuntimeClassHandle)obj).Value; } - public override int GetHashCode () - { - unsafe { return ((IntPtr)value).GetHashCode (); } - } + public override int GetHashCode () => ((IntPtr)value).GetHashCode (); public bool Equals (RuntimeClassHandle handle) { - unsafe { return value == handle.Value; } + return value == handle.Value; } - public static bool operator == (RuntimeClassHandle left, Object right) + public static bool operator == (RuntimeClassHandle left, object right) { - return (right != null) && (right is RuntimeClassHandle) && left.Equals ((RuntimeClassHandle)right); + return right != null && right is RuntimeClassHandle rch && left.Equals (rch); } - public static bool operator != (RuntimeClassHandle left, Object right) + public static bool operator != (RuntimeClassHandle left, object right) { - return (right == null) || !(right is RuntimeClassHandle) || !left.Equals ((RuntimeClassHandle)right); + return !(left == right); } - public static bool operator == (Object left, RuntimeClassHandle right) + public static bool operator == (object left, RuntimeClassHandle right) { - return (left != null) && (left is RuntimeClassHandle) && ((RuntimeClassHandle)left).Equals (right); + return left != null && left is RuntimeClassHandle rch && rch.Equals (right); } - public static bool operator != (Object left, RuntimeClassHandle right) + public static bool operator != (object left, RuntimeClassHandle right) { - return (left == null) || !(left is RuntimeClassHandle) || !((RuntimeClassHandle)left).Equals (right); + return !(left == right); } [MethodImpl(MethodImplOptions.InternalCall)] internal unsafe extern static IntPtr GetTypeFromClass (RuntimeStructs.MonoClass *klass); - internal RuntimeTypeHandle GetTypeHandle () - { - unsafe { return new RuntimeTypeHandle (GetTypeFromClass (value)); } - } + internal RuntimeTypeHandle GetTypeHandle () => new RuntimeTypeHandle (GetTypeFromClass (value)); } - internal struct RuntimeRemoteClassHandle { - unsafe RuntimeStructs.RemoteClass* value; + unsafe struct RuntimeRemoteClassHandle + { + RuntimeStructs.RemoteClass* value; - internal unsafe RuntimeRemoteClassHandle (RuntimeStructs.RemoteClass* value) + internal RuntimeRemoteClassHandle (RuntimeStructs.RemoteClass* value) { this.value = value; } internal RuntimeClassHandle ProxyClass { get { - unsafe { - return new RuntimeClassHandle (value->proxy_class); - } + return new RuntimeClassHandle (value->proxy_class); } } } - internal struct RuntimeGenericParamInfoHandle { - unsafe RuntimeStructs.GenericParamInfo* value; + unsafe struct RuntimeGenericParamInfoHandle + { + RuntimeStructs.GenericParamInfo* value; - internal unsafe RuntimeGenericParamInfoHandle (RuntimeStructs.GenericParamInfo* value) + internal RuntimeGenericParamInfoHandle (RuntimeStructs.GenericParamInfo* value) { this.value = value; } - internal unsafe RuntimeGenericParamInfoHandle (IntPtr ptr) + internal RuntimeGenericParamInfoHandle (IntPtr ptr) { this.value = (RuntimeStructs.GenericParamInfo*) ptr; } + internal Type[] Constraints => GetConstraints (); - internal Type[] Constraints { get { return GetConstraints (); } } + internal GenericParameterAttributes Attributes => (GenericParameterAttributes) value->flags; - internal GenericParameterAttributes Attributes { - get { - unsafe { - return (GenericParameterAttributes) value->flags; - } - } - } - - Type[] GetConstraints () { + Type[] GetConstraints () + { int n = GetConstraintsCount (); - var a = new Type[n]; + var a = new Type [n]; for (int i = 0; i < n; i++) { - unsafe { - RuntimeClassHandle c = new RuntimeClassHandle (value->constraints[i]); - a[i] = Type.GetTypeFromHandle (c.GetTypeHandle ()); - } + RuntimeClassHandle c = new RuntimeClassHandle (value->constraints[i]); + a[i] = Type.GetTypeFromHandle (c.GetTypeHandle ()); } + return a; } - int GetConstraintsCount () { + int GetConstraintsCount () + { int i = 0; - unsafe { - RuntimeStructs.MonoClass** p = value->constraints; - while (p != null && *p != null) { - p++; i++; - } + RuntimeStructs.MonoClass** p = value->constraints; + while (p != null && *p != null) { + p++; i++; } return i; } } - internal struct RuntimeEventHandle { + internal struct RuntimeEventHandle + { IntPtr value; internal RuntimeEventHandle (IntPtr v) @@ -150,11 +138,7 @@ namespace Mono { value = v; } - public IntPtr Value { - get { - return value; - } - } + public IntPtr Value => value; public override bool Equals (object obj) { @@ -185,7 +169,8 @@ namespace Mono { } } - internal struct RuntimePropertyHandle { + internal struct RuntimePropertyHandle + { IntPtr value; internal RuntimePropertyHandle (IntPtr v) @@ -193,11 +178,7 @@ namespace Mono { value = v; } - public IntPtr Value { - get { - return value; - } - } + public IntPtr Value => value; public override bool Equals (object obj) { @@ -228,47 +209,38 @@ namespace Mono { } } - internal struct RuntimeGPtrArrayHandle { - unsafe RuntimeStructs.GPtrArray* value; + unsafe struct RuntimeGPtrArrayHandle + { + RuntimeStructs.GPtrArray* value; - internal unsafe RuntimeGPtrArrayHandle (RuntimeStructs.GPtrArray* value) + internal RuntimeGPtrArrayHandle (RuntimeStructs.GPtrArray* value) { this.value = value; } - internal unsafe RuntimeGPtrArrayHandle (IntPtr ptr) + internal RuntimeGPtrArrayHandle (IntPtr ptr) { this.value = (RuntimeStructs.GPtrArray*) ptr; } - internal int Length { - get { - unsafe { - return value->len; - } - } - } + internal int Length => value->len; - internal IntPtr this[int i] => Lookup (i); + internal IntPtr this [int i] => Lookup (i); internal IntPtr Lookup (int i) { if (i >= 0 && i < Length) { - unsafe { - return value->data[i]; - } + return value->data[i]; } else throw new IndexOutOfRangeException (); } [MethodImpl(MethodImplOptions.InternalCall)] - unsafe extern static void GPtrArrayFree (RuntimeStructs.GPtrArray* value); + extern static void GPtrArrayFree (RuntimeStructs.GPtrArray* value); internal static void DestroyAndFree (ref RuntimeGPtrArrayHandle h) { - unsafe { - GPtrArrayFree (h.value); - h.value = null; - } + GPtrArrayFree (h.value); + h.value = null; } } } diff --git a/mcs/class/corlib/Mono/RuntimeStructs.cs b/mcs/class/corlib/Mono/RuntimeStructs.cs index bb0ce74cad..e0538761c7 100644 --- a/mcs/class/corlib/Mono/RuntimeStructs.cs +++ b/mcs/class/corlib/Mono/RuntimeStructs.cs @@ -71,7 +71,11 @@ namespace Mono { internal uint hash_alg; internal uint hash_len; internal uint flags; +#if NETCORE + internal int major, minor, build, revision; +#else internal ushort major, minor, build, revision; +#endif internal ushort arch; } @@ -117,4 +121,11 @@ namespace Mono { public T4 Item4; public T5 Item5; } + + internal class NullByRefReturnException : Exception + { + public NullByRefReturnException () + { + } + } } diff --git a/mcs/class/corlib/ReferenceSources/CompareInfo.cs b/mcs/class/corlib/ReferenceSources/CompareInfo.cs index 809dd2ff7d..58b009dade 100644 --- a/mcs/class/corlib/ReferenceSources/CompareInfo.cs +++ b/mcs/class/corlib/ReferenceSources/CompareInfo.cs @@ -26,6 +26,10 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // +// Disable unreachable code warnings in this entire file. +#pragma warning disable 162 + + using System.Collections.Generic; using System.Runtime.CompilerServices; using Mono.Globalization.Unicode; @@ -33,16 +37,44 @@ using System.Threading; namespace System.Globalization { + interface ISimpleCollator + { + SortKey GetSortKey (string source, CompareOptions options); + + int Compare (string s1, string s2); + + int Compare (string s1, int idx1, int len1, string s2, int idx2, int len2, CompareOptions options); + + bool IsPrefix (string src, string target, CompareOptions opt); + + bool IsSuffix (string src, string target, CompareOptions opt); + + int IndexOf (string s, string target, int start, int length, CompareOptions opt); + + int IndexOf (string s, char target, int start, int length, CompareOptions opt); + + int LastIndexOf (string s, string target, CompareOptions opt); + + int LastIndexOf (string s, string target, int start, int length, CompareOptions opt); + + int LastIndexOf (string s, char target, CompareOptions opt); + + int LastIndexOf (string s, char target, int start, int length, CompareOptions opt); + } + partial class CompareInfo { [NonSerialized] - SimpleCollator collator; + ISimpleCollator collator; // Maps culture IDs to SimpleCollator objects - static Dictionary<string, SimpleCollator> collators; + static Dictionary<string, ISimpleCollator> collators; static bool managedCollation; static bool managedCollationChecked; +#if WASM + const bool UseManagedCollation = false; +#else static bool UseManagedCollation { get { if (!managedCollationChecked) { @@ -53,14 +85,18 @@ namespace System.Globalization return managedCollation; } } +#endif - SimpleCollator GetCollator () + ISimpleCollator GetCollator () { +#if WASM + return null; +#else if (collator != null) return collator; if (collators == null) { - Interlocked.CompareExchange (ref collators, new Dictionary<string, SimpleCollator> (StringComparer.Ordinal), null); + Interlocked.CompareExchange (ref collators, new Dictionary<string, ISimpleCollator> (StringComparer.Ordinal), null); } lock (collators) { @@ -71,6 +107,7 @@ namespace System.Globalization } return collator; +#endif } SortKey CreateSortKeyCore (string source, CompareOptions options) diff --git a/mcs/class/corlib/ReferenceSources/CultureData.cs b/mcs/class/corlib/ReferenceSources/CultureData.cs index 0f31270e11..c3799169ab 100644 --- a/mcs/class/corlib/ReferenceSources/CultureData.cs +++ b/mcs/class/corlib/ReferenceSources/CultureData.cs @@ -624,7 +624,59 @@ namespace System.Globalization return false; } - internal void GetNFIValues (NumberFormatInfo nfi) + // mono/metadta/culture-info.h NumberFormatEntryManaged must match + // mcs/class/corlib/ReferenceSources/CultureData.cs NumberFormatEntryManaged. + // This is sorted alphabetically. + [StructLayout (LayoutKind.Sequential)] + internal struct NumberFormatEntryManaged + { + internal int currency_decimal_digits; + internal int currency_decimal_separator; + internal int currency_group_separator; + internal int currency_group_sizes0; + internal int currency_group_sizes1; + internal int currency_negative_pattern; + internal int currency_positive_pattern; + internal int currency_symbol; + internal int nan_symbol; + internal int negative_infinity_symbol; + internal int negative_sign; + internal int number_decimal_digits; + internal int number_decimal_separator; + internal int number_group_separator; + internal int number_group_sizes0; + internal int number_group_sizes1; + internal int number_negative_pattern; + internal int per_mille_symbol; + internal int percent_negative_pattern; + internal int percent_positive_pattern; + internal int percent_symbol; + internal int positive_infinity_symbol; + internal int positive_sign; + } + + static private unsafe int strlen (byte* s) + { + int length = 0; + while (s [length] != 0) + ++length; + return length; + } + + static private unsafe string idx2string (byte* data, int idx) + { + return Encoding.UTF8.GetString (data + idx, strlen (data + idx)); + } + + private int [] create_group_sizes_array (int gs0, int gs1) + { + // group_sizes is an array of up to two integers, -1 terminated. + return (gs0 == -1) ? new int [ ] { } + : (gs1 == -1) ? new int [ ] {gs0} + : new int [ ] {gs0, gs1}; + } + + internal unsafe void GetNFIValues (NumberFormatInfo nfi) { if (this.IsInvariantCulture) { @@ -641,7 +693,29 @@ namespace System.Globalization // PercentGroupSize // PercentGroupSeparator // - fill_number_data (nfi, numberIndex); + var nfe = new NumberFormatEntryManaged (); + byte* data = fill_number_data (numberIndex, ref nfe); + nfi.currencyGroupSizes = create_group_sizes_array (nfe.currency_group_sizes0, nfe.currency_group_sizes1); + nfi.numberGroupSizes = create_group_sizes_array (nfe.number_group_sizes0, nfe.number_group_sizes1); + nfi.NaNSymbol = idx2string (data, nfe.nan_symbol); + nfi.currencyDecimalDigits = nfe.currency_decimal_digits; + nfi.currencyDecimalSeparator = idx2string (data, nfe.currency_decimal_separator); + nfi.currencyGroupSeparator = idx2string (data, nfe.currency_group_separator); + nfi.currencyNegativePattern = nfe.currency_negative_pattern; + nfi.currencyPositivePattern = nfe.currency_positive_pattern; + nfi.currencySymbol = idx2string (data, nfe.currency_symbol); + nfi.negativeInfinitySymbol = idx2string (data, nfe.negative_infinity_symbol); + nfi.negativeSign = idx2string (data, nfe.negative_sign); + nfi.numberDecimalDigits = nfe.number_decimal_digits; + nfi.numberDecimalSeparator = idx2string (data, nfe.number_decimal_separator); + nfi.numberGroupSeparator = idx2string (data, nfe.number_group_separator); + nfi.numberNegativePattern = nfe.number_negative_pattern; + nfi.perMilleSymbol = idx2string (data, nfe.per_mille_symbol); + nfi.percentNegativePattern = nfe.percent_negative_pattern; + nfi.percentPositivePattern = nfe.percent_positive_pattern; + nfi.percentSymbol = idx2string (data, nfe.percent_symbol); + nfi.positiveInfinitySymbol = idx2string (data, nfe.positive_infinity_symbol); + nfi.positiveSign = idx2string (data, nfe.positive_sign); } // @@ -654,6 +728,6 @@ namespace System.Globalization } [MethodImplAttribute (MethodImplOptions.InternalCall)] - extern static void fill_number_data (NumberFormatInfo nfi, int numberIndex); + extern unsafe static byte* fill_number_data (int index, ref NumberFormatEntryManaged nfe); } } diff --git a/mcs/class/corlib/ReferenceSources/JitHelpers.cs b/mcs/class/corlib/ReferenceSources/JitHelpers.cs index 80038fdf94..79f242e4fc 100644 --- a/mcs/class/corlib/ReferenceSources/JitHelpers.cs +++ b/mcs/class/corlib/ReferenceSources/JitHelpers.cs @@ -17,5 +17,13 @@ namespace System.Runtime.CompilerServices { { return Array.UnsafeMov<T, long> (val); } + +#if NETCORE + [Intrinsic] + internal static bool EnumEquals<T>(T x, T y) where T : struct, Enum => throw new NotImplementedException (); + + [Intrinsic] + internal static int EnumCompareTo<T>(T x, T y) where T : struct, Enum => throw new NotImplementedException (); +#endif } } \ No newline at end of file diff --git a/mcs/class/corlib/ReferenceSources/RuntimeType.cs b/mcs/class/corlib/ReferenceSources/RuntimeType.cs index d66cc128aa..d5c1be1951 100644 --- a/mcs/class/corlib/ReferenceSources/RuntimeType.cs +++ b/mcs/class/corlib/ReferenceSources/RuntimeType.cs @@ -95,19 +95,18 @@ namespace System [MethodImplAttribute(MethodImplOptions.InternalCall)] extern ConstructorInfo GetCorrespondingInflatedConstructor (ConstructorInfo generic); -#if !NETCORE internal override MethodInfo GetMethod (MethodInfo fromNoninstanciated) - { + { if (fromNoninstanciated == null) throw new ArgumentNullException ("fromNoninstanciated"); - return GetCorrespondingInflatedMethod (fromNoninstanciated); - } + return GetCorrespondingInflatedMethod (fromNoninstanciated); + } internal override ConstructorInfo GetConstructor (ConstructorInfo fromNoninstanciated) { if (fromNoninstanciated == null) throw new ArgumentNullException ("fromNoninstanciated"); - return GetCorrespondingInflatedConstructor (fromNoninstanciated); + return GetCorrespondingInflatedConstructor (fromNoninstanciated); } internal override FieldInfo GetField (FieldInfo fromNoninstanciated) @@ -117,7 +116,6 @@ namespace System flags |= fromNoninstanciated.IsPublic ? BindingFlags.Public : BindingFlags.NonPublic; return GetField (fromNoninstanciated.Name, flags); } -#endif string GetDefaultMemberName () { @@ -142,7 +140,7 @@ namespace System return m_serializationCtor; } - internal Object CreateInstanceSlow(bool publicOnly, bool wrapExceptions, bool skipCheckThis, bool fillCache, ref StackCrawlMark stackMark) + internal Object CreateInstanceSlow(bool publicOnly, bool wrapExceptions, bool skipCheckThis, bool fillCache) { //bool bNeedSecurityCheck = true; //bool bCanBeCached = false; @@ -161,7 +159,11 @@ namespace System { var ctor = GetDefaultConstructor (); if (!nonPublic && ctor != null && !ctor.IsPublic) { +#if NETCORE + throw new MissingMethodException(SR.Format(SR.Arg_NoDefCTor, FullName)); +#else ctor = null; +#endif } if (ctor == null) { @@ -431,7 +433,7 @@ namespace System public override StructLayoutAttribute StructLayoutAttribute { get { #if NETCORE - throw new NotImplementedException (); + return GetStructLayoutAttribute (); #else return StructLayoutAttribute.GetCustomAttribute (this); #endif @@ -697,11 +699,7 @@ namespace System var a = new RuntimeFieldInfo[n]; for (int i = 0; i < n; i++) { var fh = new RuntimeFieldHandle (h[i]); -#if NETCORE - throw new NotImplementedException (); -#else a[i] = (RuntimeFieldInfo) FieldInfo.GetFieldFromHandle (fh, refh); -#endif } return a; } @@ -717,7 +715,7 @@ namespace System for (int i = 0; i < n; i++) { var eh = new Mono.RuntimeEventHandle (h[i]); #if NETCORE - throw new NotImplementedException (); + a[i] = (RuntimeEventInfo) RuntimeEventInfo.GetEventFromHandle (eh, refh); #else a[i] = (RuntimeEventInfo) EventInfo.GetEventFromHandle (eh, refh); #endif @@ -736,7 +734,8 @@ namespace System { string internalName = null; #if NETCORE - throw new NotImplementedException (); + if (displayName != null) + internalName = displayName; #else if (displayName != null) internalName = TypeIdentifiers.FromDisplay (displayName).InternalName; @@ -774,7 +773,19 @@ namespace System get; } -#if MOBILE +#if NETCORE + public override bool IsSecurityTransparent { + get { return false; } + } + + public override bool IsSecurityCritical { + get { return true; } + } + + public override bool IsSecuritySafeCritical { + get { return false; } + } +#elif MOBILE static int get_core_clr_security_level () { return 1; @@ -797,6 +808,7 @@ namespace System } #endif +#if !NETCORE public override int GetHashCode() { Type t = UnderlyingSystemType; @@ -804,6 +816,7 @@ namespace System return t.GetHashCode (); return (int)_impl.Value; } +#endif public override string FullName { get { @@ -822,9 +835,7 @@ namespace System } } -#if !NETCORE public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeType> (other); -#endif public override bool IsSZArray { get { @@ -833,13 +844,11 @@ namespace System } } -#if !NETCORE internal override bool IsUserType { get { return false; } } -#endif [System.Runtime.InteropServices.ComVisible(true)] [Pure] @@ -862,5 +871,44 @@ namespace System } public override bool IsTypeDefinition => RuntimeTypeHandle.IsTypeDefinition (this); + +#if NETCORE + private const int DEFAULT_PACKING_SIZE = 8; + + internal StructLayoutAttribute GetStructLayoutAttribute () + { + if (IsInterface || HasElementType || IsGenericParameter) + return null; + + int pack = 0, size = 0; + LayoutKind layoutKind = LayoutKind.Auto; + switch (Attributes & TypeAttributes.LayoutMask) + { + case TypeAttributes.ExplicitLayout: layoutKind = LayoutKind.Explicit; break; + case TypeAttributes.AutoLayout: layoutKind = LayoutKind.Auto; break; + case TypeAttributes.SequentialLayout: layoutKind = LayoutKind.Sequential; break; + default: Contract.Assume(false); break; + } + + CharSet charSet = CharSet.None; + switch (Attributes & TypeAttributes.StringFormatMask) + { + case TypeAttributes.AnsiClass: charSet = CharSet.Ansi; break; + case TypeAttributes.AutoClass: charSet = CharSet.Auto; break; + case TypeAttributes.UnicodeClass: charSet = CharSet.Unicode; break; + default: Contract.Assume(false); break; + } + + GetPacking (out pack, out size); + + // Metadata parameter checking should not have allowed 0 for packing size. + // The runtime later converts a packing size of 0 to 8 so do the same here + // because it's more useful from a user perspective. + if (pack == 0) + pack = DEFAULT_PACKING_SIZE; + + return new StructLayoutAttribute (layoutKind) { Pack = pack, Size = size, CharSet = charSet }; + } +#endif // NETCORE } } diff --git a/mcs/class/corlib/System.Diagnostics.Tracing/EventCounter.cs b/mcs/class/corlib/System.Diagnostics.Tracing/EventCounter.cs index 5b369914cf..57467c5129 100644 --- a/mcs/class/corlib/System.Diagnostics.Tracing/EventCounter.cs +++ b/mcs/class/corlib/System.Diagnostics.Tracing/EventCounter.cs @@ -28,9 +28,9 @@ namespace System.Diagnostics.Tracing { - public class EventCounter : IDisposable + public class EventCounter : DiagnosticCounter { - public EventCounter (string name, EventSource eventSource) + public EventCounter (string name, EventSource eventSource) : base (name, eventSource) { } @@ -38,7 +38,7 @@ namespace System.Diagnostics.Tracing { } - public void Dispose () + public void WriteMetric (double value) { } } diff --git a/mcs/class/corlib/System.Diagnostics.Tracing/EventSource.cs b/mcs/class/corlib/System.Diagnostics.Tracing/EventSource.cs index ecd2464140..66de7367cd 100644 --- a/mcs/class/corlib/System.Diagnostics.Tracing/EventSource.cs +++ b/mcs/class/corlib/System.Diagnostics.Tracing/EventSource.cs @@ -174,6 +174,10 @@ namespace System.Diagnostics.Tracing { } + internal void ReportOutOfBandMessage (string msg, bool flush) + { + } + protected void WriteEvent (int eventId) { WriteEvent (eventId, new object[] { } ); diff --git a/mcs/class/corlib/System.Diagnostics.Tracing/EventWrittenEventArgs.cs b/mcs/class/corlib/System.Diagnostics.Tracing/EventWrittenEventArgs.cs index d9ddcbd12d..ef51bee5d7 100644 --- a/mcs/class/corlib/System.Diagnostics.Tracing/EventWrittenEventArgs.cs +++ b/mcs/class/corlib/System.Diagnostics.Tracing/EventWrittenEventArgs.cs @@ -54,6 +54,18 @@ namespace System.Diagnostics.Tracing internal set; } + public long OSThreadId + { + get; + internal set; + } + + public DateTime TimeStamp + { + get; + internal set; + } + public string EventName { get; diff --git a/mcs/class/corlib/System.Diagnostics/Debugger.cs b/mcs/class/corlib/System.Diagnostics/Debugger.cs index 90b27cb9eb..7a59550812 100644 --- a/mcs/class/corlib/System.Diagnostics/Debugger.cs +++ b/mcs/class/corlib/System.Diagnostics/Debugger.cs @@ -40,7 +40,6 @@ namespace System.Diagnostics /// Enables communication with a debugger. /// </summary> [ComVisible (true)] - [MonoTODO ("The Debugger class is not functional")] public sealed class Debugger { @@ -83,7 +82,6 @@ namespace System.Diagnostics /// <summary> /// Launches and attaches a debugger to the process. /// </summary> - [MonoTODO ("Not implemented")] public static bool Launch() { throw new NotImplementedException(); diff --git a/mcs/class/corlib/System.Diagnostics/StackTrace.cs b/mcs/class/corlib/System.Diagnostics/StackTrace.cs index 981f30a42c..dc2c7a4339 100644 --- a/mcs/class/corlib/System.Diagnostics/StackTrace.cs +++ b/mcs/class/corlib/System.Diagnostics/StackTrace.cs @@ -202,9 +202,9 @@ namespace System.Diagnostics { static string GetAotId () { if (!isAotidSet) { - aotid = Assembly.GetAotId (); - if (aotid != null) - aotid = new Guid (aotid).ToString ("N"); + var arr = RuntimeAssembly.GetAotId (); + if (arr != null) + aotid = new Guid (arr).ToString ("N"); isAotidSet = true; } diff --git a/mcs/class/corlib/System.Globalization/CultureInfo.cs b/mcs/class/corlib/System.Globalization/CultureInfo.cs index 21bf5e16cb..deeecd8b56 100644 --- a/mcs/class/corlib/System.Globalization/CultureInfo.cs +++ b/mcs/class/corlib/System.Globalization/CultureInfo.cs @@ -555,7 +555,11 @@ namespace System.Globalization if (!constructed) Construct (); CheckNeutral (); - var temp = new DateTimeFormatInfo (m_cultureData, Calendar); + DateTimeFormatInfo temp; + if (GlobalizationMode.Invariant) + temp = new DateTimeFormatInfo(); + else + temp = new DateTimeFormatInfo(m_cultureData, Calendar); temp._isReadOnly = m_isReadOnly; System.Threading.Thread.MemoryBarrier(); dateTimeInfo = temp; diff --git a/mcs/class/corlib/System.IO.IsolatedStorage/IsolatedStorage.cs b/mcs/class/corlib/System.IO.IsolatedStorage/IsolatedStorage.cs index 884b00cd89..e54a2a2693 100644 --- a/mcs/class/corlib/System.IO.IsolatedStorage/IsolatedStorage.cs +++ b/mcs/class/corlib/System.IO.IsolatedStorage/IsolatedStorage.cs @@ -144,7 +144,7 @@ namespace System.IO.IsolatedStorage { } // Methods - protected abstract IsolatedStoragePermission GetPermission (PermissionSet ps); + protected virtual IsolatedStoragePermission GetPermission (PermissionSet ps) => null; protected void InitStore (IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) { diff --git a/mcs/class/corlib/System.IO/DriveInfo.cs b/mcs/class/corlib/System.IO/DriveInfo.cs index 616ff37377..a247f55dbd 100644 --- a/mcs/class/corlib/System.IO/DriveInfo.cs +++ b/mcs/class/corlib/System.IO/DriveInfo.cs @@ -55,11 +55,11 @@ namespace System.IO { } DriveInfo [] drives = GetDrives (); + Array.Sort (drives, (DriveInfo di1, DriveInfo di2) => String.Compare (di2.path, di1.path, true)); foreach (DriveInfo d in drives){ - if (d.path == driveName){ + if (driveName.StartsWith (d.path, StringComparison.OrdinalIgnoreCase)){ this.path = d.path; this.drive_format = d.drive_format; - this.path = d.path; return; } } diff --git a/mcs/class/corlib/System.IO/FileStream.cs b/mcs/class/corlib/System.IO/FileStream.cs index f6b752d178..794b3dd5b9 100644 --- a/mcs/class/corlib/System.IO/FileStream.cs +++ b/mcs/class/corlib/System.IO/FileStream.cs @@ -343,7 +343,7 @@ namespace System.IO } } - public string Name { + public virtual string Name { get { return name; } diff --git a/mcs/class/corlib/System.IO/Path.cs b/mcs/class/corlib/System.IO/Path.cs index 1a9c837f9c..12bf6e6d57 100644 --- a/mcs/class/corlib/System.IO/Path.cs +++ b/mcs/class/corlib/System.IO/Path.cs @@ -51,7 +51,7 @@ using System.Diagnostics; namespace System.IO { [ComVisible (true)] - public static class Path { + public static partial class Path { [Obsolete ("see GetInvalidPathChars and GetInvalidFileNameChars methods.")] public static readonly char[] InvalidPathChars; @@ -278,7 +278,6 @@ namespace System.IO { return path; } - public static string GetFileNameWithoutExtension (string path) { return ChangeExtension (GetFileName (path), null); @@ -434,7 +433,6 @@ namespace System.IO { internal static bool IsDirectorySeparator (char c) { return c == DirectorySeparatorChar || c == AltDirectorySeparatorChar; } - public static string GetPathRoot (string path) { if (path == null) @@ -569,6 +567,7 @@ namespace System.IO { public static char[] GetInvalidFileNameChars () { +#pragma warning disable 162 // return a new array as we do not want anyone to be able to change the values if (Environment.IsRunningOnWindows) { return new char [41] { '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', @@ -578,10 +577,12 @@ namespace System.IO { } else { return new char [2] { '\x00', '/' }; } +#pragma warning restore 162 } public static char[] GetInvalidPathChars () { +#pragma warning disable 162 // return a new array as we do not want anyone to be able to change the values if (Environment.IsRunningOnWindows) { return new char [36] { '\x22', '\x3C', '\x3E', '\x7C', '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', @@ -591,6 +592,7 @@ namespace System.IO { } else { return new char [1] { '\x00' }; } +#pragma warning restore 162 } public static string GetRandomFileName () @@ -699,6 +701,7 @@ namespace System.IO { static string CanonicalizePath (string path) { +#pragma warning disable 162 // STEP 1: Check for empty string if (path == null) return path; @@ -780,6 +783,7 @@ namespace System.IO { } return ret; } +#pragma warning restore 162 } // required for FileIOPermission (and most proibably reusable elsewhere too) diff --git a/mcs/class/corlib/System.IO/Path.ns21.cs b/mcs/class/corlib/System.IO/Path.ns21.cs new file mode 100644 index 0000000000..54a485ffc0 --- /dev/null +++ b/mcs/class/corlib/System.IO/Path.ns21.cs @@ -0,0 +1,185 @@ +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security; +using System.Security.Cryptography; +using System.Security.Permissions; +using System.Text; +using System.Diagnostics; + +namespace System.IO +{ + partial class Path + { + public static ReadOnlySpan<char> GetExtension (ReadOnlySpan<char> path) => GetExtension (path.ToString ()).AsSpan (); + + public static ReadOnlySpan<char> GetFileNameWithoutExtension (ReadOnlySpan<char> path) => GetFileNameWithoutExtension (path.ToString ()).AsSpan (); + + public static ReadOnlySpan<char> GetPathRoot (ReadOnlySpan<char> path) => GetPathRoot (path.ToString ()).AsSpan (); + + public static bool HasExtension (ReadOnlySpan<char> path) => HasExtension (path.ToString ()); + + public static string GetRelativePath(string relativeTo, string path) + { + return GetRelativePath(relativeTo, path, StringComparison); + } + + private static string GetRelativePath(string relativeTo, string path, StringComparison comparisonType) + { + if (string.IsNullOrEmpty(relativeTo)) throw new ArgumentNullException(nameof(relativeTo)); + if (PathInternal.IsEffectivelyEmpty(path.AsSpan())) throw new ArgumentNullException(nameof(path)); + Debug.Assert(comparisonType == StringComparison.Ordinal || comparisonType == StringComparison.OrdinalIgnoreCase); + + relativeTo = GetFullPath(relativeTo); + path = GetFullPath(path); + + // Need to check if the roots are different- if they are we need to return the "to" path. + if (!PathInternal.AreRootsEqual(relativeTo, path, comparisonType)) + return path; + + int commonLength = PathInternal.GetCommonPathLength(relativeTo, path, ignoreCase: comparisonType == StringComparison.OrdinalIgnoreCase); + + // If there is nothing in common they can't share the same root, return the "to" path as is. + if (commonLength == 0) + return path; + + // Trailing separators aren't significant for comparison + int relativeToLength = relativeTo.Length; + if (PathInternal.EndsInDirectorySeparator(relativeTo.AsSpan())) + relativeToLength--; + + bool pathEndsInSeparator = PathInternal.EndsInDirectorySeparator(path.AsSpan()); + int pathLength = path.Length; + if (pathEndsInSeparator) + pathLength--; + + // If we have effectively the same path, return "." + if (relativeToLength == pathLength && commonLength >= relativeToLength) return "."; + + // We have the same root, we need to calculate the difference now using the + // common Length and Segment count past the length. + // + // Some examples: + // + // C:\Foo C:\Bar L3, S1 -> ..\Bar + // C:\Foo C:\Foo\Bar L6, S0 -> Bar + // C:\Foo\Bar C:\Bar\Bar L3, S2 -> ..\..\Bar\Bar + // C:\Foo\Foo C:\Foo\Bar L7, S1 -> ..\Bar + + StringBuilder sb = StringBuilderCache.Acquire(Math.Max(relativeTo.Length, path.Length)); + + // Add parent segments for segments past the common on the "from" path + if (commonLength < relativeToLength) + { + sb.Append(".."); + + for (int i = commonLength + 1; i < relativeToLength; i++) + { + if (PathInternal.IsDirectorySeparator(relativeTo[i])) + { + sb.Append(DirectorySeparatorChar); + sb.Append(".."); + } + } + } + else if (PathInternal.IsDirectorySeparator(path[commonLength])) + { + // No parent segments and we need to eat the initial separator + // (C:\Foo C:\Foo\Bar case) + commonLength++; + } + + // Now add the rest of the "to" path, adding back the trailing separator + int differenceLength = pathLength - commonLength; + if (pathEndsInSeparator) + differenceLength++; + + if (differenceLength > 0) + { + if (sb.Length > 0) + { + sb.Append(DirectorySeparatorChar); + } + + sb.Append(path, commonLength, differenceLength); + } + + return StringBuilderCache.GetStringAndRelease(sb); + } + + /// <summary>Returns a comparison that can be used to compare file and directory names for equality.</summary> + internal static StringComparison StringComparison + { + get + { + return IsCaseSensitive ? + StringComparison.Ordinal : + StringComparison.OrdinalIgnoreCase; + } + } + + internal static bool IsCaseSensitive => !IsWindows; + + static bool IsWindows + { + get + { + PlatformID platform = Environment.OSVersion.Platform; + if (platform == PlatformID.Win32S || + platform == PlatformID.Win32Windows || + platform == PlatformID.Win32NT || + platform == PlatformID.WinCE) { + return true; + } + return false; + } + } + + public static bool IsPathFullyQualified(string path) + { + if (path == null) + throw new ArgumentNullException(nameof(path)); + + return IsPathFullyQualified(path.AsSpan()); + } + + public static bool IsPathFullyQualified(ReadOnlySpan<char> path) + { + return !PathInternal.IsPartiallyQualified(path); + } + + public static string GetFullPath(string path, string basePath) + { + if (path == null) + throw new ArgumentNullException(nameof(path)); + + if (basePath == null) + throw new ArgumentNullException(nameof(basePath)); + + if (!IsPathFullyQualified(basePath)) + throw new ArgumentException(SR.Arg_BasePathNotFullyQualified, nameof(basePath)); + + if (basePath.Contains('\0') || path.Contains('\0')) + throw new ArgumentException(SR.Argument_InvalidPathChars); + + if (IsPathFullyQualified(path)) + return GetFullPath(path); + + return GetFullPath(CombineInternal(basePath, path)); + } + + private static string CombineInternal(string first, string second) + { + if (string.IsNullOrEmpty(first)) + return second; + + if (string.IsNullOrEmpty(second)) + return first; + + if (IsPathRooted(second.AsSpan())) + return second; + + return JoinInternal(first.AsSpan(), second.AsSpan()); + } + } +} diff --git a/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs b/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs index 1c6c7dc48f..51c023e074 100644 --- a/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs +++ b/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs @@ -239,6 +239,20 @@ namespace System.Reflection.Emit [StructLayout (LayoutKind.Sequential)] public sealed partial class AssemblyBuilder : Assembly { + // + // AssemblyBuilder inherits from Assembly, but the runtime thinks its layout inherits from RuntimeAssembly + // + #region Sync with RuntimeAssembly.cs and ReflectionAssembly in object-internals.h +#pragma warning disable 649 + internal IntPtr _mono_assembly; +#pragma warning restore 649 +#if !MOBILE + internal Evidence _evidence; +#else + object _evidence; +#endif + #endregion + #pragma warning disable 169, 414, 649 #region Sync with object-internals.h private UIntPtr dynamic_assembly; /* GC-tracked */ @@ -268,7 +282,17 @@ namespace System.Reflection.Emit byte[] pktoken; #endregion #pragma warning restore 169, 414, 649 - + +#if !MOBILE + internal PermissionSet _minimum; // for SecurityAction.RequestMinimum + internal PermissionSet _optional; // for SecurityAction.RequestOptional + internal PermissionSet _refuse; // for SecurityAction.RequestRefuse + internal PermissionSet _granted; // for the resolved assembly granted permissions + internal PermissionSet _denied; // for the resolved assembly denied permissions +#else + object _minimum, _optional, _refuse, _granted, _denied; +#endif + string assemblyName; internal Type corlib_object_type = typeof (System.Object); internal Type corlib_value_type = typeof (System.ValueType); internal Type corlib_enum_type = typeof (System.Enum); @@ -352,9 +376,11 @@ namespace System.Reflection.Emit } public override string CodeBase { - get { - throw not_supported (); - } + get { throw not_supported (); } + } + + public override string EscapedCodeBase { + get { return RuntimeAssembly.GetCodeBase (this, true); } } public override MethodInfo EntryPoint { @@ -372,13 +398,14 @@ namespace System.Reflection.Emit /* This is to keep signature compatibility with MS.NET */ public override string ImageRuntimeVersion { get { - return base.ImageRuntimeVersion; + return RuntimeAssembly.InternalImageRuntimeVersion (this); } } - [MonoTODO] public override bool ReflectionOnly { - get { return base.ReflectionOnly; } + get { + return access == (uint)AssemblyBuilderAccess.ReflectionOnly; + } } public void AddResourceFile (string name, string fileName) @@ -891,7 +918,7 @@ namespace System.Reflection.Emit ModuleBuilder mainModule = null; if (modules != null) { foreach (ModuleBuilder module in modules) - if (module.FullyQualifiedName == assemblyFileName) + if (module.FileName == assemblyFileName) mainModule = module; } if (mainModule == null) @@ -1203,23 +1230,59 @@ namespace System.Reflection.Emit return base.GetHashCode (); } + public override string ToString () + { + if (assemblyName != null) + return assemblyName; + + assemblyName = FullName; + return assemblyName; + } + public override bool IsDefined (Type attributeType, bool inherit) { - return base.IsDefined (attributeType, inherit); + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); } public override object[] GetCustomAttributes (bool inherit) { - return base.GetCustomAttributes (inherit); + return MonoCustomAttrs.GetCustomAttributes (this, inherit); } public override object[] GetCustomAttributes (Type attributeType, bool inherit) { - return base.GetCustomAttributes (attributeType, inherit); + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); } public override string FullName { - get { return base.FullName; } + get { return RuntimeAssembly.get_fullname (this); } + } + + internal override IntPtr MonoAssembly { + get { + return _mono_assembly; + } + } + + public override Evidence Evidence { + [SecurityPermission (SecurityAction.Demand, ControlEvidence = true)] + get { return UnprotectedGetEvidence (); } + } + + internal override Evidence UnprotectedGetEvidence () + { +#if MOBILE || DISABLE_SECURITY + return null; +#else + // if the host (runtime) hasn't provided it's own evidence... + if (_evidence == null) { + // ... we will provide our own + lock (this) { + _evidence = Evidence.GetDefaultHostEvidence (this); + } + } + return _evidence; +#endif } } } diff --git a/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.pns.cs b/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.pns.cs index ac7b7bf2be..bebcb24f75 100644 --- a/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.pns.cs +++ b/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.pns.cs @@ -48,6 +48,18 @@ namespace System.Reflection.Emit } } + public override string EscapedCodeBase { + get { + throw new PlatformNotSupportedException (); + } + } + + public override System.Security.Policy.Evidence Evidence { + get { + throw new PlatformNotSupportedException (); + } + } + public override string FullName { get { throw new PlatformNotSupportedException (); @@ -190,6 +202,8 @@ namespace System.Reflection.Emit public void SetEntryPoint (MethodInfo entryMethod) => throw new PlatformNotSupportedException (); public void SetEntryPoint (MethodInfo entryMethod, PEFileKinds fileKind) => throw new PlatformNotSupportedException (); + + public override string ToString () => throw new PlatformNotSupportedException (); } } diff --git a/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs b/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs index 744a2afa5b..f9aed5dbc1 100644 --- a/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs +++ b/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs @@ -134,30 +134,33 @@ namespace System.Reflection.Emit { private static extern void create_dynamic_method (DynamicMethod m); private void CreateDynMethod () { - if (mhandle.Value == IntPtr.Zero) { - if (ilgen == null || ilgen.ILOffset == 0) - throw new InvalidOperationException ("Method '" + name + "' does not have a method body."); + // Clearing of ilgen in create_dynamic_method is not yet synchronized for multiple threads + lock (this) { + if (mhandle.Value == IntPtr.Zero) { + if (ilgen == null || ilgen.ILOffset == 0) + throw new InvalidOperationException ("Method '" + name + "' does not have a method body."); - ilgen.label_fixup (this); + ilgen.label_fixup (this); - // Have to create all DynamicMethods referenced by this one - try { - // Used to avoid cycles - creating = true; - if (refs != null) { - for (int i = 0; i < refs.Length; ++i) { - if (refs [i] is DynamicMethod) { - DynamicMethod m = (DynamicMethod)refs [i]; - if (!m.creating) - m.CreateDynMethod (); + // Have to create all DynamicMethods referenced by this one + try { + // Used to avoid cycles + creating = true; + if (refs != null) { + for (int i = 0; i < refs.Length; ++i) { + if (refs [i] is DynamicMethod) { + DynamicMethod m = (DynamicMethod)refs [i]; + if (!m.creating) + m.CreateDynMethod (); + } } } + } finally { + creating = false; } - } finally { - creating = false; + create_dynamic_method (this); + ilgen = null; } - - create_dynamic_method (this); } } diff --git a/mcs/class/corlib/System.Reflection.Emit/EventToken.cs b/mcs/class/corlib/System.Reflection.Emit/EventToken.cs index 165e9f180e..1f77e80de2 100644 --- a/mcs/class/corlib/System.Reflection.Emit/EventToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/EventToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [ComVisible (true)] [Serializable] - public struct EventToken { + public readonly struct EventToken : IEquatable<EventToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly EventToken Empty = new EventToken (); diff --git a/mcs/class/corlib/System.Reflection.Emit/FieldToken.cs b/mcs/class/corlib/System.Reflection.Emit/FieldToken.cs index 6a878fc644..825f5e200e 100644 --- a/mcs/class/corlib/System.Reflection.Emit/FieldToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/FieldToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [ComVisible (true)] [Serializable] - public struct FieldToken { + public readonly struct FieldToken : IEquatable<FieldToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly FieldToken Empty = new FieldToken (); diff --git a/mcs/class/corlib/System.Reflection.Emit/Label.cs b/mcs/class/corlib/System.Reflection.Emit/Label.cs index 4834aa2cf2..a891d45ff2 100644 --- a/mcs/class/corlib/System.Reflection.Emit/Label.cs +++ b/mcs/class/corlib/System.Reflection.Emit/Label.cs @@ -36,8 +36,8 @@ namespace System.Reflection.Emit { [ComVisible (true)] [Serializable] - public struct Label { - internal int label; + public readonly struct Label : IEquatable<Label> { + internal readonly int label; internal Label (int val) { label = val; diff --git a/mcs/class/corlib/System.Reflection.Emit/MethodBuilder.pns.cs b/mcs/class/corlib/System.Reflection.Emit/MethodBuilder.pns.cs index cbae5560f8..ea6335451b 100644 --- a/mcs/class/corlib/System.Reflection.Emit/MethodBuilder.pns.cs +++ b/mcs/class/corlib/System.Reflection.Emit/MethodBuilder.pns.cs @@ -28,7 +28,6 @@ #if !MONO_FEATURE_SRE - using System; using System.Collections.Generic; diff --git a/mcs/class/corlib/System.Reflection.Emit/MethodToken.cs b/mcs/class/corlib/System.Reflection.Emit/MethodToken.cs index 40f270675e..a06ab5670e 100644 --- a/mcs/class/corlib/System.Reflection.Emit/MethodToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/MethodToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [ComVisible (true)] [Serializable] - public struct MethodToken { + public readonly struct MethodToken : IEquatable<MethodToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly MethodToken Empty = new MethodToken (); diff --git a/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs b/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs index e9c9206193..598795926a 100644 --- a/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs +++ b/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs @@ -177,7 +177,19 @@ namespace System.Reflection.Emit { Console.Error.WriteLine ("WARNING: {0}", message); } - public override string FullyQualifiedName {get { return fqname;}} + public override string FullyQualifiedName { + get { + string fullyQualifiedName = fqname; + if (fullyQualifiedName == null) + return null; + if (assemblyb.AssemblyDir != null) { + fullyQualifiedName = Path.Combine (assemblyb.AssemblyDir, fullyQualifiedName); + fullyQualifiedName = Path.GetFullPath (fullyQualifiedName); + } + + return fullyQualifiedName; + } + } public bool IsTransient () { return transient; @@ -1094,78 +1106,41 @@ namespace System.Reflection.Emit { } public override FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { - ResolveTokenError error; - - IntPtr handle = ResolveFieldToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); - if (handle == IntPtr.Zero) - throw resolve_token_exception (metadataToken, error, "Field"); - else - return FieldInfo.GetFieldFromHandle (new RuntimeFieldHandle (handle)); + return RuntimeModule.ResolveField (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); } public override MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { - - ResolveTokenError error; - - MemberInfo m = ResolveMemberToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); - if (m == null) - throw resolve_token_exception (metadataToken, error, "MemberInfo"); - else - return m; + return RuntimeModule.ResolveMember (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); } internal MemberInfo ResolveOrGetRegisteredToken (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { ResolveTokenError error; - MemberInfo m = ResolveMemberToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + MemberInfo m = RuntimeModule.ResolveMemberToken (_impl, metadataToken, RuntimeModule.ptrs_from_types (genericTypeArguments), RuntimeModule.ptrs_from_types (genericMethodArguments), out error); if (m != null) return m; m = GetRegisteredToken (metadataToken) as MemberInfo; if (m == null) - throw resolve_token_exception (metadataToken, error, "MemberInfo"); + throw RuntimeModule.resolve_token_exception (Name, metadataToken, error, "MemberInfo"); else return m; } public override MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { - ResolveTokenError error; - - IntPtr handle = ResolveMethodToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); - if (handle == IntPtr.Zero) - throw resolve_token_exception (metadataToken, error, "MethodBase"); - else - return RuntimeMethodInfo.GetMethodFromHandleNoGenericCheck (new RuntimeMethodHandle (handle)); + return RuntimeModule.ResolveMethod (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); } public override string ResolveString (int metadataToken) { - ResolveTokenError error; - - string s = ResolveStringToken (_impl, metadataToken, out error); - if (s == null) - throw resolve_token_exception (metadataToken, error, "string"); - else - return s; + return RuntimeModule.ResolveString (this, _impl, metadataToken); } public override byte[] ResolveSignature (int metadataToken) { - ResolveTokenError error; - - byte[] res = ResolveSignature (_impl, metadataToken, out error); - if (res == null) - throw resolve_token_exception (metadataToken, error, "signature"); - else - return res; + return RuntimeModule.ResolveSignature (this, _impl, metadataToken); } public override Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { - ResolveTokenError error; - - IntPtr handle = ResolveTypeToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); - if (handle == IntPtr.Zero) - throw resolve_token_exception (metadataToken, error, "Type"); - else - return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle)); + return RuntimeModule.ResolveType (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); } public override bool Equals (object obj) @@ -1233,13 +1208,9 @@ namespace System.Reflection.Emit { public override int MetadataToken { get { - return get_MetadataToken (this); + return RuntimeModule.get_MetadataToken (this); } } - - internal override IntPtr GetImpl () { - return _impl; - } } internal class ModuleBuilderTokenGenerator : TokenGenerator { diff --git a/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.pns.cs b/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.pns.cs index dd064bdd50..b576e95201 100644 --- a/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.pns.cs +++ b/mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.pns.cs @@ -101,7 +101,7 @@ namespace System.Reflection.Emit public void SetUserEntryPoint(System.Reflection.MethodInfo entryPoint) => throw new PlatformNotSupportedException(); } - public readonly partial struct MethodToken + public readonly partial struct MethodToken : System.IEquatable<MethodToken> { public static readonly System.Reflection.Emit.MethodToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } @@ -112,7 +112,7 @@ namespace System.Reflection.Emit public static bool operator !=(System.Reflection.Emit.MethodToken a, System.Reflection.Emit.MethodToken b) { throw new PlatformNotSupportedException(); } } - public readonly partial struct SignatureToken + public readonly partial struct SignatureToken : System.IEquatable<SignatureToken> { public static readonly System.Reflection.Emit.SignatureToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } @@ -123,7 +123,7 @@ namespace System.Reflection.Emit public static bool operator !=(System.Reflection.Emit.SignatureToken a, System.Reflection.Emit.SignatureToken b) { throw new PlatformNotSupportedException(); } } - public readonly partial struct FieldToken + public readonly partial struct FieldToken : System.IEquatable<FieldToken> { public static readonly System.Reflection.Emit.FieldToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } @@ -134,7 +134,7 @@ namespace System.Reflection.Emit public static bool operator !=(System.Reflection.Emit.FieldToken a, System.Reflection.Emit.FieldToken b) { throw new PlatformNotSupportedException(); } } - public readonly partial struct StringToken + public readonly partial struct StringToken : System.IEquatable<StringToken> { public int Token { get { throw new PlatformNotSupportedException(); } } public override bool Equals(object obj) { throw new PlatformNotSupportedException(); } @@ -144,7 +144,7 @@ namespace System.Reflection.Emit public static bool operator !=(System.Reflection.Emit.StringToken a, System.Reflection.Emit.StringToken b) { throw new PlatformNotSupportedException(); } } - public readonly partial struct TypeToken + public readonly partial struct TypeToken : System.IEquatable<TypeToken> { public static readonly System.Reflection.Emit.TypeToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } @@ -178,7 +178,7 @@ namespace System.Reflection.Emit public void SetLocalSignature(byte[] localSignature) => throw new PlatformNotSupportedException(); } - public readonly partial struct EventToken + public readonly partial struct EventToken : System.IEquatable<EventToken> { public static readonly System.Reflection.Emit.EventToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } @@ -189,7 +189,7 @@ namespace System.Reflection.Emit public static bool operator !=(System.Reflection.Emit.EventToken a, System.Reflection.Emit.EventToken b) { throw new PlatformNotSupportedException(); } } - public readonly partial struct ParameterToken + public readonly partial struct ParameterToken : System.IEquatable<ParameterToken> { public static readonly System.Reflection.Emit.ParameterToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } @@ -200,7 +200,7 @@ namespace System.Reflection.Emit public static bool operator !=(System.Reflection.Emit.ParameterToken a, System.Reflection.Emit.ParameterToken b) { throw new PlatformNotSupportedException(); } } - public readonly partial struct PropertyToken + public readonly partial struct PropertyToken : System.IEquatable<PropertyToken> { public static readonly System.Reflection.Emit.PropertyToken Empty; public int Token { get { throw new PlatformNotSupportedException(); } } diff --git a/mcs/class/corlib/System.Reflection.Emit/OpCode.cs b/mcs/class/corlib/System.Reflection.Emit/OpCode.cs index aa3453d200..b27dc2b9bf 100644 --- a/mcs/class/corlib/System.Reflection.Emit/OpCode.cs +++ b/mcs/class/corlib/System.Reflection.Emit/OpCode.cs @@ -31,10 +31,10 @@ using System.Runtime.InteropServices; namespace System.Reflection.Emit { [ComVisible (true)] - public struct OpCode { + public readonly struct OpCode : IEquatable<OpCode> { - internal byte op1, op2; - byte push, pop, size, type, args, flow; + internal readonly byte op1, op2; + readonly byte push, pop, size, type, args, flow; // // The order is: diff --git a/mcs/class/corlib/System.Reflection.Emit/ParameterToken.cs b/mcs/class/corlib/System.Reflection.Emit/ParameterToken.cs index ae259bf9db..3049c4ab52 100644 --- a/mcs/class/corlib/System.Reflection.Emit/ParameterToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/ParameterToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [ComVisible (true)] [Serializable] - public struct ParameterToken { + public readonly struct ParameterToken : IEquatable<ParameterToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly ParameterToken Empty = new ParameterToken (); diff --git a/mcs/class/corlib/System.Reflection.Emit/PropertyBuilder.pns.cs b/mcs/class/corlib/System.Reflection.Emit/PropertyBuilder.pns.cs index d366340583..68f8064b06 100644 --- a/mcs/class/corlib/System.Reflection.Emit/PropertyBuilder.pns.cs +++ b/mcs/class/corlib/System.Reflection.Emit/PropertyBuilder.pns.cs @@ -31,7 +31,7 @@ namespace System.Reflection.Emit { public sealed partial class PropertyBuilder : System.Reflection.PropertyInfo - { + { internal PropertyBuilder() { throw new PlatformNotSupportedException (); } public override System.Reflection.PropertyAttributes Attributes { get { throw new PlatformNotSupportedException (); } } public override bool CanRead { get { throw new PlatformNotSupportedException (); } } @@ -59,7 +59,7 @@ namespace System.Reflection.Emit public void SetSetMethod(System.Reflection.Emit.MethodBuilder mdBuilder) { throw new PlatformNotSupportedException (); } public override void SetValue(object obj, object value, object[] index) { throw new PlatformNotSupportedException (); } public override void SetValue(object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture) { throw new PlatformNotSupportedException (); } - } + } } #endif diff --git a/mcs/class/corlib/System.Reflection.Emit/PropertyToken.cs b/mcs/class/corlib/System.Reflection.Emit/PropertyToken.cs index 8fe7b1f768..2913853c3d 100644 --- a/mcs/class/corlib/System.Reflection.Emit/PropertyToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/PropertyToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [ComVisible (true)] [Serializable] - public struct PropertyToken { + public readonly struct PropertyToken : IEquatable<PropertyToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly PropertyToken Empty = new PropertyToken (); diff --git a/mcs/class/corlib/System.Reflection.Emit/SignatureToken.cs b/mcs/class/corlib/System.Reflection.Emit/SignatureToken.cs index 11726593c2..84a29141e8 100644 --- a/mcs/class/corlib/System.Reflection.Emit/SignatureToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/SignatureToken.cs @@ -35,9 +35,9 @@ namespace System.Reflection.Emit { /// Represents the Token returned by the metadata to represent a Signature. /// </summary> [ComVisible (true)] - public struct SignatureToken { + public readonly struct SignatureToken : IEquatable<SignatureToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly SignatureToken Empty = new SignatureToken (); diff --git a/mcs/class/corlib/System.Reflection.Emit/StringToken.cs b/mcs/class/corlib/System.Reflection.Emit/StringToken.cs index 7afac177c4..d6c514811e 100644 --- a/mcs/class/corlib/System.Reflection.Emit/StringToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/StringToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [ComVisible (true)] [Serializable] - public struct StringToken { + public readonly struct StringToken : IEquatable<StringToken> { - internal int tokValue; + internal readonly int tokValue; internal StringToken (int val) { diff --git a/mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs b/mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs index aa65093c85..cc94347531 100644 --- a/mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs +++ b/mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs @@ -120,6 +120,7 @@ namespace System.Reflection.Emit return attrs; } + [PreserveDependency ("DoTypeBuilderResolve", "System.AppDomain")] internal TypeBuilder (ModuleBuilder mb, TypeAttributes attr, int table_idx) { this.parent = null; @@ -791,7 +792,7 @@ namespace System.Reflection.Emit if (!fb.IsStatic && (ft is TypeBuilder) && ft.IsValueType && (ft != this) && is_nested_in (ft)) { TypeBuilder tb = (TypeBuilder)ft; if (!tb.is_created) { - AppDomain.CurrentDomain.DoTypeResolve (tb); + AppDomain.CurrentDomain.DoTypeBuilderResolve (tb); if (!tb.is_created) { // FIXME: We should throw an exception here, // but mcs expects that the type is created diff --git a/mcs/class/corlib/System.Reflection.Emit/TypeBuilderInstantiation.cs b/mcs/class/corlib/System.Reflection.Emit/TypeBuilderInstantiation.cs index cbb05df157..648f101206 100644 --- a/mcs/class/corlib/System.Reflection.Emit/TypeBuilderInstantiation.cs +++ b/mcs/class/corlib/System.Reflection.Emit/TypeBuilderInstantiation.cs @@ -83,12 +83,12 @@ namespace System.Reflection.Emit // Called from the runtime to return the corresponding finished Type object internal override Type RuntimeResolve () { - if (generic_type is TypeBuilder && !(generic_type as TypeBuilder).IsCreated ()) - AppDomain.CurrentDomain.DoTypeResolve (generic_type); + if (generic_type is TypeBuilder type_builder && !type_builder.IsCreated ()) + AppDomain.CurrentDomain.DoTypeBuilderResolve (type_builder); for (int i = 0; i < type_arguments.Length; ++i) { var t = type_arguments [i]; - if (t is TypeBuilder && !(t as TypeBuilder).IsCreated ()) - AppDomain.CurrentDomain.DoTypeResolve (t); + if (t is TypeBuilder tb && !tb.IsCreated ()) + AppDomain.CurrentDomain.DoTypeBuilderResolve (tb); } return InternalResolve (); } diff --git a/mcs/class/corlib/System.Reflection.Emit/TypeToken.cs b/mcs/class/corlib/System.Reflection.Emit/TypeToken.cs index a35a73edb1..b969b9588e 100644 --- a/mcs/class/corlib/System.Reflection.Emit/TypeToken.cs +++ b/mcs/class/corlib/System.Reflection.Emit/TypeToken.cs @@ -36,9 +36,9 @@ namespace System.Reflection.Emit { /// </summary> [Serializable] [ComVisible (true)] - public struct TypeToken { + public readonly struct TypeToken : IEquatable<TypeToken> { - internal int tokValue; + internal readonly int tokValue; public static readonly TypeToken Empty = new TypeToken (); diff --git a/mcs/class/corlib/System.Reflection/Assembly.cs b/mcs/class/corlib/System.Reflection/Assembly.cs index 1e5a025300..6aa3a9cddf 100644 --- a/mcs/class/corlib/System.Reflection/Assembly.cs +++ b/mcs/class/corlib/System.Reflection/Assembly.cs @@ -64,58 +64,6 @@ namespace System.Reflection { #pragma warning restore } - internal class UnmanagedMemoryStreamForModule : UnmanagedMemoryStream - { -#pragma warning disable 414 - Module module; -#pragma warning restore - - public unsafe UnmanagedMemoryStreamForModule (byte* pointer, long length, Module module) - : base (pointer, length) - { - this.module = module; - } - - protected override void Dispose (bool disposing) - { - if (_isOpen) { - /* - * The returned pointer points inside metadata, so - * we have to increase the refcount of the module, and decrease - * it when the stream is finalized. - */ - module = null; - } - - base.Dispose (disposing); - } - } - - // Note: changes to fields must be reflected in _MonoReflectionAssembly struct (object-internals.h) -#pragma warning disable 649 - internal IntPtr _mono_assembly; -#pragma warning restore 649 - - private ResolveEventHolder resolve_event_holder; -#if !MOBILE - private Evidence _evidence; - internal PermissionSet _minimum; // for SecurityAction.RequestMinimum - internal PermissionSet _optional; // for SecurityAction.RequestOptional - internal PermissionSet _refuse; // for SecurityAction.RequestRefuse - private PermissionSet _granted; // for the resolved assembly granted permissions - private PermissionSet _denied; // for the resolved assembly denied permissions -#else - object _evidence, _minimum, _optional, _refuse, _granted, _denied; -#endif - private bool fromByteArray; - private string assemblyName; - - protected - Assembly () - { - resolve_event_holder = new ResolveEventHolder (); - } - // // We can't store the event directly in this class, since the // compiler would silently insert the fields before _mono_assembly @@ -123,117 +71,72 @@ namespace System.Reflection { public virtual event ModuleResolveEventHandler ModuleResolve { [SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)] add { - resolve_event_holder.ModuleResolve += value; + throw new NotImplementedException (); } [SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)] remove { - resolve_event_holder.ModuleResolve -= value; + throw new NotImplementedException (); } } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern string get_code_base (bool escaped); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern string get_fullname (); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern string get_location (); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern string InternalImageRuntimeVersion (); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - static internal extern string GetAotId (); - - // SECURITY: this should be the only caller to icall get_code_base - private string GetCodeBase (bool escaped) - { - string cb = get_code_base (escaped); -#if !MOBILE - if (SecurityManager.SecurityEnabled) { - // we cannot divulge local file informations - if (String.Compare ("FILE://", 0, cb, 0, 7, true, CultureInfo.InvariantCulture) == 0) { - string file = cb.Substring (7); - new FileIOPermission (FileIOPermissionAccess.PathDiscovery, file).Demand (); - } - } -#endif - return cb; - } - public virtual string CodeBase { - get { return GetCodeBase (false); } + get { + throw new NotImplementedException (); + } } public virtual string EscapedCodeBase { - get { return GetCodeBase (true); } + get { + throw new NotImplementedException (); + } } public virtual string FullName { get { - // - // FIXME: This is wrong, but it gets us going - // in the compiler for now - // - return ToString (); + throw new NotImplementedException (); } } - public virtual extern MethodInfo EntryPoint { - [MethodImplAttribute (MethodImplOptions.InternalCall)] - get; + public virtual MethodInfo EntryPoint { + get { + throw new NotImplementedException (); + } } public virtual Evidence Evidence { [SecurityPermission (SecurityAction.Demand, ControlEvidence = true)] - get { return UnprotectedGetEvidence (); } - } - - // note: the security runtime requires evidences but may be unable to do so... - internal Evidence UnprotectedGetEvidence () - { -#if MOBILE - return null; -#else - // if the host (runtime) hasn't provided it's own evidence... - if (_evidence == null) { - // ... we will provide our own - lock (this) { - _evidence = Evidence.GetDefaultHostEvidence (this); - } + get { + throw new NotImplementedException (); } - return _evidence; -#endif } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern bool get_global_assembly_cache (); + internal virtual Evidence UnprotectedGetEvidence () + { + throw new NotImplementedException (); + } - internal bool FromByteArray { - set { fromByteArray = value; } + internal virtual IntPtr MonoAssembly { + get { + throw new NotImplementedException (); + } + } + + internal virtual bool FromByteArray { + set { + throw new NotImplementedException (); + } } public virtual String Location { get { - if (fromByteArray) - return String.Empty; - - string loc = get_location (); -#if !MOBILE - if ((loc != String.Empty) && SecurityManager.SecurityEnabled) { - // we cannot divulge local file informations - new FileIOPermission (FileIOPermissionAccess.PathDiscovery, loc).Demand (); - } -#endif - return loc; + throw new NotImplementedException (); } } [ComVisible (false)] public virtual string ImageRuntimeVersion { get { - return InternalImageRuntimeVersion (); + throw new NotImplementedException (); } } @@ -244,22 +147,19 @@ namespace System.Reflection { public virtual bool IsDefined (Type attributeType, bool inherit) { - return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + throw new NotImplementedException (); } public virtual object [] GetCustomAttributes (bool inherit) { - return MonoCustomAttrs.GetCustomAttributes (this, inherit); + throw new NotImplementedException (); } public virtual object [] GetCustomAttributes (Type attributeType, bool inherit) { - return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + throw new NotImplementedException (); } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern object GetFilesInternal (String name, bool getResourceModules); - public virtual FileStream[] GetFiles () { return GetFiles (false); @@ -267,90 +167,22 @@ namespace System.Reflection { public virtual FileStream [] GetFiles (bool getResourceModules) { - string[] names = (string[]) GetFilesInternal (null, getResourceModules); - if (names == null) - return EmptyArray<FileStream>.Value; - - string location = Location; - - FileStream[] res; - if (location != String.Empty) { - res = new FileStream [names.Length + 1]; - res [0] = new FileStream (location, FileMode.Open, FileAccess.Read); - for (int i = 0; i < names.Length; ++i) - res [i + 1] = new FileStream (names [i], FileMode.Open, FileAccess.Read); - } else { - res = new FileStream [names.Length]; - for (int i = 0; i < names.Length; ++i) - res [i] = new FileStream (names [i], FileMode.Open, FileAccess.Read); - } - return res; + throw new NotImplementedException (); } public virtual FileStream GetFile (String name) { - if (name == null) - throw new ArgumentNullException (null, "Name cannot be null."); - if (name.Length == 0) - throw new ArgumentException ("Empty name is not valid"); - - string filename = (string)GetFilesInternal (name, true); - if (filename != null) - return new FileStream (filename, FileMode.Open, FileAccess.Read); - else - return null; + throw new NotImplementedException (); } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern IntPtr GetManifestResourceInternal (String name, out int size, out Module module); - public virtual Stream GetManifestResourceStream (String name) { - if (name == null) - throw new ArgumentNullException ("name"); - if (name.Length == 0) - throw new ArgumentException ("String cannot have zero length.", - "name"); - - ManifestResourceInfo info = GetManifestResourceInfo (name); - if (info == null) { - Assembly a = AppDomain.CurrentDomain.DoResourceResolve (name, this); - if (a != null && a != this) - return a.GetManifestResourceStream (name); - else - return null; - } - - if (info.ReferencedAssembly != null) - return info.ReferencedAssembly.GetManifestResourceStream (name); - if ((info.FileName != null) && (info.ResourceLocation == 0)) { - if (fromByteArray) - throw new FileNotFoundException (info.FileName); - - string location = Path.GetDirectoryName (Location); - string filename = Path.Combine (location, info.FileName); - return new FileStream (filename, FileMode.Open, FileAccess.Read); - } - - int size; - Module module; - IntPtr data = GetManifestResourceInternal (name, out size, out module); - if (data == (IntPtr) 0) - return null; - else { - UnmanagedMemoryStream stream; - unsafe { - stream = new UnmanagedMemoryStreamForModule ((byte*) data, size, module); - } - return stream; - } + throw new NotImplementedException (); } - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public virtual Stream GetManifestResourceStream (Type type, String name) { - StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; - return GetManifestResourceStream(type, name, false, ref stackMark); + throw new NotImplementedException (); } internal Stream GetManifestResourceStream (Type type, String name, bool skipSecurityCheck, ref StackCrawlMark stackMark) @@ -413,7 +245,7 @@ namespace System.Reflection { public virtual Type[] GetExportedTypes () { - return GetTypes (true); + throw new NotImplementedException (); } public virtual Type GetType (String name, Boolean throwOnError) @@ -443,13 +275,7 @@ namespace System.Reflection { public override string ToString () { - // note: ToString work without requiring CodeBase (so no checks are needed) - - if (assemblyName != null) - return assemblyName; - - assemblyName = get_fullname (); - return assemblyName; + return base.ToString (); } public static String CreateQualifiedName (String assemblyName, String typeName) @@ -759,12 +585,10 @@ namespace System.Reflection { return GetModules (false); } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal virtual extern Module[] GetModulesInternal (); + internal virtual Module[] GetModulesInternal () { + throw new NotImplementedException (); + } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - public extern virtual String[] GetManifestResourceNames (); - [MethodImplAttribute (MethodImplOptions.InternalCall)] public extern static Assembly GetExecutingAssembly (); @@ -774,6 +598,11 @@ namespace System.Reflection { [MethodImplAttribute (MethodImplOptions.InternalCall)] internal static extern IntPtr InternalGetReferencedAssemblies (Assembly module); + public virtual String[] GetManifestResourceNames () + { + throw new NotImplementedException (); + } + internal static AssemblyName[] GetReferencedAssemblies (Assembly module) { using (var nativeNames = new Mono.SafeGPtrArrayHandle (InternalGetReferencedAssemblies (module))) { @@ -804,21 +633,9 @@ namespace System.Reflection { } } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern bool GetManifestResourceInfoInternal (String name, ManifestResourceInfo info); - public virtual ManifestResourceInfo GetManifestResourceInfo (String resourceName) { - if (resourceName == null) - throw new ArgumentNullException ("resourceName"); - if (resourceName.Length == 0) - throw new ArgumentException ("String cannot have zero length."); - ManifestResourceInfo result = new ManifestResourceInfo (null, null, 0); - bool found = GetManifestResourceInfoInternal (resourceName, result); - if (found) - return result; - else - return null; + throw new NotImplementedException (); } [MonoTODO ("Currently it always returns zero")] @@ -829,18 +646,15 @@ namespace System.Reflection { get { return 0; } } - internal virtual Module GetManifestModule () { - return GetManifestModuleInternal (); + throw new NotImplementedException (); } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern Module GetManifestModuleInternal (); - [ComVisible (false)] - public virtual extern bool ReflectionOnly { - [MethodImplAttribute (MethodImplOptions.InternalCall)] - get; + public virtual bool ReflectionOnly { + get { + throw new NotImplementedException (); + } } public override int GetHashCode () @@ -850,100 +664,26 @@ namespace System.Reflection { public override bool Equals (object o) { - if (((object) this) == o) - return true; - - if (o == null) - return false; - - Assembly other = (Assembly) o; - return other._mono_assembly == _mono_assembly; + return base.Equals (o); } #if !MOBILE - // Code Access Security - - internal void Resolve () - { - lock (this) { - // FIXME: As we (currently) delay the resolution until the first CAS - // Demand it's too late to evaluate the Minimum permission set as a - // condition to load the assembly into the AppDomain - LoadAssemblyPermissions (); - Evidence e = new Evidence (UnprotectedGetEvidence ()); // we need a copy to add PRE - e.AddHost (new PermissionRequestEvidence (_minimum, _optional, _refuse)); - _granted = SecurityManager.ResolvePolicy (e, - _minimum, _optional, _refuse, out _denied); - } - } - - internal PermissionSet GrantedPermissionSet { + internal virtual PermissionSet GrantedPermissionSet { get { - if (_granted == null) { - if (SecurityManager.ResolvingPolicyLevel != null) { - if (SecurityManager.ResolvingPolicyLevel.IsFullTrustAssembly (this)) - return DefaultPolicies.FullTrust; - else - return null; // we can't resolve during resolution - } - Resolve (); - } - return _granted; + throw new NotImplementedException (); } } - internal PermissionSet DeniedPermissionSet { + internal virtual PermissionSet DeniedPermissionSet { get { - // yes we look for granted, as denied may be null - if (_granted == null) { - if (SecurityManager.ResolvingPolicyLevel != null) { - if (SecurityManager.ResolvingPolicyLevel.IsFullTrustAssembly (this)) - return null; - else - return DefaultPolicies.FullTrust; // deny unrestricted - } - Resolve (); - } - return _denied; - } - } - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - extern internal static bool LoadPermissions (Assembly a, - ref IntPtr minimum, ref int minLength, - ref IntPtr optional, ref int optLength, - ref IntPtr refused, ref int refLength); - - // Support for SecurityAction.RequestMinimum, RequestOptional and RequestRefuse - private void LoadAssemblyPermissions () - { - IntPtr minimum = IntPtr.Zero, optional = IntPtr.Zero, refused = IntPtr.Zero; - int minLength = 0, optLength = 0, refLength = 0; - if (LoadPermissions (this, ref minimum, ref minLength, ref optional, - ref optLength, ref refused, ref refLength)) { - - // Note: no need to cache these permission sets as they will only be created once - // at assembly resolution time. - if (minLength > 0) { - byte[] data = new byte [minLength]; - Marshal.Copy (minimum, data, 0, minLength); - _minimum = SecurityManager.Decode (data); - } - if (optLength > 0) { - byte[] data = new byte [optLength]; - Marshal.Copy (optional, data, 0, optLength); - _optional = SecurityManager.Decode (data); - } - if (refLength > 0) { - byte[] data = new byte [refLength]; - Marshal.Copy (refused, data, 0, refLength); - _refuse = SecurityManager.Decode (data); - } + throw new NotImplementedException (); } } public virtual PermissionSet PermissionSet { - get { return this.GrantedPermissionSet; } + get { + throw new NotImplementedException (); + } } #endif @@ -958,7 +698,7 @@ namespace System.Reflection { public virtual IList<CustomAttributeData> GetCustomAttributesData () { - return CustomAttributeData.GetCustomAttributes (this); + throw new NotImplementedException (); } [MonoTODO] @@ -1051,5 +791,7 @@ namespace System.Reflection { public virtual IEnumerable<CustomAttributeData> CustomAttributes { get { return GetCustomAttributesData (); } } + + public virtual Type[] GetForwardedTypes() => throw new PlatformNotSupportedException(); } } diff --git a/mcs/class/corlib/System.Reflection/AssemblyName.cs b/mcs/class/corlib/System.Reflection/AssemblyName.cs index 7f826d2ccf..abcd1664c6 100644 --- a/mcs/class/corlib/System.Reflection/AssemblyName.cs +++ b/mcs/class/corlib/System.Reflection/AssemblyName.cs @@ -151,11 +151,7 @@ namespace System.Reflection { if (codebase == null) return null; -#if NETCORE - throw new NotImplementedException (); -#else return Mono.Security.Uri.EscapeString (codebase, false, true, true); -#endif } } @@ -286,12 +282,7 @@ namespace System.Reflection { #if MOBILE || NETCORE return true; #else - try { - CryptoConvert.FromCapiPublicKeyBlob ( - publicKey, 12); - return true; - } catch (CryptographicException) { - } + return CryptoConvert.TryImportCapiPublicKeyBlob (publicKey, 12); #endif } break; @@ -299,12 +290,7 @@ namespace System.Reflection { #if MOBILE || NETCORE return true; #else - try { - CryptoConvert.FromCapiPublicKeyBlob (publicKey); - return true; - } catch (CryptographicException) { - } - break; + return CryptoConvert.TryImportCapiPublicKeyBlob (publicKey, 0); #endif case 0x07: // private key break; @@ -487,8 +473,13 @@ namespace System.Reflection { this.major = native->major; this.minor = native->minor; +#if NETCORE + this.build = native->build == 65535 ? -1 : native->build; + this.revision = native->revision == 65535 ? -1 : native->revision; +#else this.build = native->build; this.revision = native->revision; +#endif this.flags = (AssemblyNameFlags)native->flags; @@ -497,13 +488,29 @@ namespace System.Reflection { this.versioncompat = AssemblyVersionCompatibility.SameMachine; this.processor_architecture = (ProcessorArchitecture)native->arch; +#if NETCORE + if (addVersion) { + if (this.build == -1) + this.version = new Version (this.major, this.minor); + else if (this.revision == -1) + this.version = new Version (this.major, this.minor, this.build); + else + this.version = new Version (this.major, this.minor, this.build, this.revision); + } +#else if (addVersion) this.version = new Version (this.major, this.minor, this.build, this.revision); +#endif this.codebase = codeBase; +#if NETCORE + if (native->culture != IntPtr.Zero) + this.cultureinfo = CultureInfo.GetCultureInfo (RuntimeMarshal.PtrToUtf8String (native->culture)); +#else if (native->culture != IntPtr.Zero) this.cultureinfo = CultureInfo.CreateCulture ( RuntimeMarshal.PtrToUtf8String (native->culture), assemblyRef); +#endif if (native->public_key != IntPtr.Zero) { this.publicKey = RuntimeMarshal.DecodeBlobArray (native->public_key); @@ -530,10 +537,16 @@ namespace System.Reflection { { AssemblyName aname = new AssemblyName (); unsafe { - MonoAssemblyName *native = GetNativeName (assembly._mono_assembly); + MonoAssemblyName *native = GetNativeName (assembly.MonoAssembly); aname.FillName (native, fillCodebase ? assembly.CodeBase : null, true, true, true, false); } return aname; } + +#if NETCORE + internal static string EscapeCodeBase (string codebase) { + throw new NotImplementedException (); + } +#endif } } diff --git a/mcs/class/corlib/System.Reflection/CustomAttributeData.cs b/mcs/class/corlib/System.Reflection/CustomAttributeData.cs index f86eaf2277..069db8bf86 100644 --- a/mcs/class/corlib/System.Reflection/CustomAttributeData.cs +++ b/mcs/class/corlib/System.Reflection/CustomAttributeData.cs @@ -144,6 +144,9 @@ namespace System.Reflection { return MonoCustomAttrs.GetCustomAttributesData (target); } +#if NETCORE + virtual +#endif public Type AttributeType { get { return ctorInfo.DeclaringType; } } @@ -185,6 +188,9 @@ namespace System.Reflection { public override bool Equals (object obj) { +#if NETCORE + return obj == (object)this; +#else CustomAttributeData other = obj as CustomAttributeData; if (other == null || other.ctorInfo != ctorInfo || other.ctorArgs.Count != ctorArgs.Count || @@ -204,10 +210,14 @@ namespace System.Reflection { return false; } return true; +#endif } public override int GetHashCode () { +#if NETCORE + return base.GetHashCode (); +#else int ret = ctorInfo == null ? 13 : (ctorInfo.GetHashCode () << 16); // argument order-dependent if (ctorArgs != null) { @@ -221,6 +231,7 @@ namespace System.Reflection { ret += (namedArgs [i].GetHashCode () << 5); } return ret; +#endif } } diff --git a/mcs/class/corlib/System.Reflection/EventInfo.cs b/mcs/class/corlib/System.Reflection/EventInfo.cs index 8ec46a0189..e39d018995 100644 --- a/mcs/class/corlib/System.Reflection/EventInfo.cs +++ b/mcs/class/corlib/System.Reflection/EventInfo.cs @@ -35,7 +35,11 @@ namespace System.Reflection { [Serializable] public abstract partial class EventInfo : MemberInfo { + +// Field needed by runtime, just disable warning. +#pragma warning disable CS0169 AddEventAdapter cached_add_event; +#pragma warning restore CS0169 [DebuggerHidden] [DebuggerStepThrough] diff --git a/mcs/class/corlib/System.Reflection/Module.cs b/mcs/class/corlib/System.Reflection/Module.cs index f348d225f0..414eb476db 100644 --- a/mcs/class/corlib/System.Reflection/Module.cs +++ b/mcs/class/corlib/System.Reflection/Module.cs @@ -37,62 +37,15 @@ using System.Collections.Generic; namespace System.Reflection { - internal enum ResolveTokenError { - OutOfRange, - BadTable, - Other - }; - [Serializable] [StructLayout (LayoutKind.Sequential)] partial class Module { - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern int get_MetadataToken (Module module); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern int GetMDStreamVersion (IntPtr module_handle); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern Type[] InternalGetTypes (); - internal Guid MvId { get { return GetModuleVersionId (); } } - internal Exception resolve_token_exception (int metadataToken, ResolveTokenError error, string tokenType) { - if (error == ResolveTokenError.OutOfRange) - return new ArgumentOutOfRangeException ("metadataToken", String.Format ("Token 0x{0:x} is not valid in the scope of module {1}", metadataToken, Name)); - else - return new ArgumentException (String.Format ("Token 0x{0:x} is not a valid {1} token in the scope of module {2}", metadataToken, tokenType, Name), "metadataToken"); - } - - internal IntPtr[] ptrs_from_types (Type[] types) { - if (types == null) - return null; - else { - IntPtr[] res = new IntPtr [types.Length]; - for (int i = 0; i < types.Length; ++i) { - if (types [i] == null) - throw new ArgumentException (); - res [i] = types [i].TypeHandle.Value; - } - return res; - } - } - - internal static Type MonoDebugger_ResolveType (Module module, int token) - { - ResolveTokenError error; - - IntPtr handle = ResolveTypeToken (module.GetImpl (), token, null, null, out error); - if (handle == IntPtr.Zero) - return null; - else - return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle)); - } - // Used by mcs, the symbol writer, and mdb through reflection internal static Guid Mono_GetGuid (Module module) { @@ -101,46 +54,12 @@ namespace System.Reflection { internal virtual Guid GetModuleVersionId () { - return new Guid (GetGuidInternal ()); + throw new NotImplementedException (); } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern IntPtr GetHINSTANCE (); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern string GetGuidInternal (); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern Type GetGlobalType (); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern string ResolveStringToken (IntPtr module, int token, out ResolveTokenError error); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern byte[] ResolveSignature (IntPtr module, int metadataToken, out ResolveTokenError error); - - [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal static extern void GetPEKind (IntPtr module, out PortableExecutableKinds peKind, out ImageFileMachine machine); - public virtual X509Certificate GetSignerCertificate () { throw NotImplemented.ByDesign; } - - internal virtual IntPtr GetImpl () { - throw NotImplemented.ByDesign; - } } } diff --git a/mcs/class/corlib/System.Reflection/RuntimeAssembly.cs b/mcs/class/corlib/System.Reflection/RuntimeAssembly.cs index 2f7a07298a..e4b1d19410 100644 --- a/mcs/class/corlib/System.Reflection/RuntimeAssembly.cs +++ b/mcs/class/corlib/System.Reflection/RuntimeAssembly.cs @@ -27,6 +27,7 @@ // using System; +using System.IO; using System.Collections; using System.Globalization; using System.Runtime.InteropServices; @@ -50,8 +51,65 @@ namespace System.Reflection { [ComDefaultInterfaceAttribute (typeof (_Assembly))] [Serializable] [ClassInterface(ClassInterfaceType.None)] + [StructLayout (LayoutKind.Sequential)] class RuntimeAssembly : Assembly { + #region Sync with AssemblyBuilder.cs and ReflectionAssembly in object-internals.h +#pragma warning disable 649 + internal IntPtr _mono_assembly; +#pragma warning restore 649 +#if !MOBILE + internal Evidence _evidence; +#else + object _evidence; +#endif + #endregion + + internal ResolveEventHolder resolve_event_holder; +#if !MOBILE + internal PermissionSet _minimum; // for SecurityAction.RequestMinimum + internal PermissionSet _optional; // for SecurityAction.RequestOptional + internal PermissionSet _refuse; // for SecurityAction.RequestRefuse + internal PermissionSet _granted; // for the resolved assembly granted permissions + internal PermissionSet _denied; // for the resolved assembly denied permissions +#else + object _minimum, _optional, _refuse, _granted, _denied; +#endif + internal bool fromByteArray; + internal string assemblyName; + + internal class UnmanagedMemoryStreamForModule : UnmanagedMemoryStream + { +#pragma warning disable 414 + Module module; +#pragma warning restore + + public unsafe UnmanagedMemoryStreamForModule (byte* pointer, long length, Module module) + : base (pointer, length) + { + this.module = module; + } + + protected override void Dispose (bool disposing) + { + if (_isOpen) { + /* + * The returned pointer points inside metadata, so + * we have to increase the refcount of the module, and decrease + * it when the stream is finalized. + */ + module = null; + } + + base.Dispose (disposing); + } + } + + protected RuntimeAssembly () + { + resolve_event_holder = new ResolveEventHolder (); + } + public override void GetObjectData (SerializationInfo info, StreamingContext context) { if (info == null) @@ -162,7 +220,6 @@ namespace System.Reflection { // the security runtime requires access to the assemblyname (e.g. to get the strongname) public override AssemblyName GetName (bool copiedName) { - #if !MOBILE // CodeBase, which is restricted, will be copied into the AssemblyName object so... if (SecurityManager.SecurityEnabled) { @@ -269,7 +326,406 @@ namespace System.Reflection { return get_global_assembly_cache (); } } + + public override Type[] GetExportedTypes () + { + return GetTypes (true); + } + + internal static byte[] GetAotId () { + var guid = new byte [16]; + var res = GetAotIdInternal (guid); + if (res) + return guid; + else + return null; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern static string get_code_base (Assembly a, bool escaped); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern string get_location (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static string get_fullname (Assembly a); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static bool GetAotIdInternal (byte[] aotid); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static string InternalImageRuntimeVersion (Assembly a); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern bool get_global_assembly_cache (); + + public override extern MethodInfo EntryPoint { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + [ComVisible (false)] + public override extern bool ReflectionOnly { + [MethodImplAttribute (MethodImplOptions.InternalCall)] + get; + } + + // SECURITY: this should be the only caller to icall get_code_base + internal static string GetCodeBase (Assembly a, bool escaped) + { + string cb = get_code_base (a, escaped); +#if !MOBILE + if (SecurityManager.SecurityEnabled) { + // we cannot divulge local file informations + if (String.Compare ("FILE://", 0, cb, 0, 7, true, CultureInfo.InvariantCulture) == 0) { + string file = cb.Substring (7); + new FileIOPermission (FileIOPermissionAccess.PathDiscovery, file).Demand (); + } + } +#endif + return cb; + } + + public override string CodeBase { + get { return GetCodeBase (this, false); } + } + + public override string EscapedCodeBase { + get { return GetCodeBase (this, true); } + } + + public override string FullName { + get { + return get_fullname (this); + } + } + + [ComVisible (false)] + public override string ImageRuntimeVersion { + get { + return InternalImageRuntimeVersion (this); + } + } + + internal override IntPtr MonoAssembly { + get { + return _mono_assembly; + } + } + + internal override bool FromByteArray { + set { fromByteArray = value; } + } + + public override String Location { + get { + if (fromByteArray) + return String.Empty; + + string loc = get_location (); +#if !MOBILE + if ((loc != String.Empty) && SecurityManager.SecurityEnabled) { + // we cannot divulge local file informations + new FileIOPermission (FileIOPermissionAccess.PathDiscovery, loc).Demand (); + } +#endif + return loc; + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern bool GetManifestResourceInfoInternal (String name, ManifestResourceInfo info); + + public override ManifestResourceInfo GetManifestResourceInfo (String resourceName) + { + if (resourceName == null) + throw new ArgumentNullException ("resourceName"); + if (resourceName.Length == 0) + throw new ArgumentException ("String cannot have zero length."); + ManifestResourceInfo result = new ManifestResourceInfo (null, null, 0); + bool found = GetManifestResourceInfoInternal (resourceName, result); + if (found) + return result; + else + return null; + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public override extern String[] GetManifestResourceNames (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern IntPtr GetManifestResourceInternal (String name, out int size, out Module module); + + public override Stream GetManifestResourceStream (String name) + { + if (name == null) + throw new ArgumentNullException ("name"); + if (name.Length == 0) + throw new ArgumentException ("String cannot have zero length.", + "name"); + + ManifestResourceInfo info = GetManifestResourceInfo (name); + if (info == null) { + Assembly a = AppDomain.CurrentDomain.DoResourceResolve (name, this); + if (a != null && a != this) + return a.GetManifestResourceStream (name); + else + return null; + } + + if (info.ReferencedAssembly != null) + return info.ReferencedAssembly.GetManifestResourceStream (name); + if ((info.FileName != null) && (info.ResourceLocation == 0)) { + if (fromByteArray) + throw new FileNotFoundException (info.FileName); + + string location = Path.GetDirectoryName (Location); + string filename = Path.Combine (location, info.FileName); + return new FileStream (filename, FileMode.Open, FileAccess.Read); + } + + int size; + Module module; + IntPtr data = GetManifestResourceInternal (name, out size, out module); + if (data == (IntPtr) 0) + return null; + else { + UnmanagedMemoryStream stream; + unsafe { + stream = new UnmanagedMemoryStreamForModule ((byte*) data, size, module); + } + return stream; + } + } + + [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + public override Stream GetManifestResourceStream (Type type, String name) + { + StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; + return GetManifestResourceStream(type, name, false, ref stackMark); + } + + public override bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public override object [] GetCustomAttributes (bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + + public override object [] GetCustomAttributes (Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + + public override IList<CustomAttributeData> GetCustomAttributesData () + { + return CustomAttributeData.GetCustomAttributes (this); + } + + // + // We can't store the event directly in this class, since the + // compiler would silently insert the fields before _mono_assembly + // + public override event ModuleResolveEventHandler ModuleResolve { + [SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)] + add { + resolve_event_holder.ModuleResolve += value; + } + [SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)] + remove { + resolve_event_holder.ModuleResolve -= value; + } + } + + internal override Module GetManifestModule () { + return GetManifestModuleInternal (); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern Module GetManifestModuleInternal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal override extern Module[] GetModulesInternal (); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern object GetFilesInternal (String name, bool getResourceModules); + + public override FileStream [] GetFiles (bool getResourceModules) + { + string[] names = (string[]) GetFilesInternal (null, getResourceModules); + if (names == null) + return EmptyArray<FileStream>.Value; + + string location = Location; + + FileStream[] res; + if (location != String.Empty) { + res = new FileStream [names.Length + 1]; + res [0] = new FileStream (location, FileMode.Open, FileAccess.Read); + for (int i = 0; i < names.Length; ++i) + res [i + 1] = new FileStream (names [i], FileMode.Open, FileAccess.Read); + } else { + res = new FileStream [names.Length]; + for (int i = 0; i < names.Length; ++i) + res [i] = new FileStream (names [i], FileMode.Open, FileAccess.Read); + } + return res; + } + + public override FileStream GetFile (String name) + { + if (name == null) + throw new ArgumentNullException (null, "Name cannot be null."); + if (name.Length == 0) + throw new ArgumentException ("Empty name is not valid"); + + string filename = (string)GetFilesInternal (name, true); + if (filename != null) + return new FileStream (filename, FileMode.Open, FileAccess.Read); + else + return null; + } + + public override int GetHashCode () + { + return base.GetHashCode (); + } + + public override bool Equals (object o) + { + if (((object) this) == o) + return true; + + if (o == null) + return false; + + if (!(o is RuntimeAssembly)) + return false; + var other = (RuntimeAssembly) o; + return other._mono_assembly == _mono_assembly; + } + + public override string ToString () + { + // note: ToString work without requiring CodeBase (so no checks are needed) + + if (assemblyName != null) + return assemblyName; + + assemblyName = FullName; + return assemblyName; + } + + public override Evidence Evidence { + [SecurityPermission (SecurityAction.Demand, ControlEvidence = true)] + get { return UnprotectedGetEvidence (); } + } + + // note: the security runtime requires evidences but may be unable to do so... + internal override Evidence UnprotectedGetEvidence () + { +#if MOBILE || DISABLE_SECURITY + return null; +#else + // if the host (runtime) hasn't provided it's own evidence... + if (_evidence == null) { + // ... we will provide our own + lock (this) { + _evidence = Evidence.GetDefaultHostEvidence (this); + } + } + return _evidence; +#endif + } + +#if !MOBILE + // Code Access Security + + internal void Resolve () + { + lock (this) { + // FIXME: As we (currently) delay the resolution until the first CAS + // Demand it's too late to evaluate the Minimum permission set as a + // condition to load the assembly into the AppDomain + LoadAssemblyPermissions (); + Evidence e = new Evidence (UnprotectedGetEvidence ()); // we need a copy to add PRE + e.AddHost (new PermissionRequestEvidence (_minimum, _optional, _refuse)); + _granted = SecurityManager.ResolvePolicy (e, + _minimum, _optional, _refuse, out _denied); + } + } + + internal override PermissionSet GrantedPermissionSet { + get { + if (_granted == null) { + if (SecurityManager.ResolvingPolicyLevel != null) { + if (SecurityManager.ResolvingPolicyLevel.IsFullTrustAssembly (this)) + return DefaultPolicies.FullTrust; + else + return null; // we can't resolve during resolution + } + Resolve (); + } + return _granted; + } + } + + internal override PermissionSet DeniedPermissionSet { + get { + // yes we look for granted, as denied may be null + if (_granted == null) { + if (SecurityManager.ResolvingPolicyLevel != null) { + if (SecurityManager.ResolvingPolicyLevel.IsFullTrustAssembly (this)) + return null; + else + return DefaultPolicies.FullTrust; // deny unrestricted + } + Resolve (); + } + return _denied; + } + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern internal static bool LoadPermissions (Assembly a, + ref IntPtr minimum, ref int minLength, + ref IntPtr optional, ref int optLength, + ref IntPtr refused, ref int refLength); + + // Support for SecurityAction.RequestMinimum, RequestOptional and RequestRefuse + private void LoadAssemblyPermissions () + { + IntPtr minimum = IntPtr.Zero, optional = IntPtr.Zero, refused = IntPtr.Zero; + int minLength = 0, optLength = 0, refLength = 0; + if (LoadPermissions (this, ref minimum, ref minLength, ref optional, + ref optLength, ref refused, ref refLength)) { + + // Note: no need to cache these permission sets as they will only be created once + // at assembly resolution time. + if (minLength > 0) { + byte[] data = new byte [minLength]; + Marshal.Copy (minimum, data, 0, minLength); + _minimum = SecurityManager.Decode (data); + } + if (optLength > 0) { + byte[] data = new byte [optLength]; + Marshal.Copy (optional, data, 0, optLength); + _optional = SecurityManager.Decode (data); + } + if (refLength > 0) { + byte[] data = new byte [refLength]; + Marshal.Copy (refused, data, 0, refLength); + _refuse = SecurityManager.Decode (data); + } + } + } + + public override PermissionSet PermissionSet { + get { return this.GrantedPermissionSet; } + } +#endif } } - - diff --git a/mcs/class/corlib/System.Reflection/RuntimeEventInfo.cs b/mcs/class/corlib/System.Reflection/RuntimeEventInfo.cs index 7679c83bdb..0d2a7ed3d4 100644 --- a/mcs/class/corlib/System.Reflection/RuntimeEventInfo.cs +++ b/mcs/class/corlib/System.Reflection/RuntimeEventInfo.cs @@ -231,11 +231,24 @@ namespace System.Reflection { } } -#if !NETCORE public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeEventInfo> (other); -#endif [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern int get_metadata_token (RuntimeEventInfo monoEvent); + +#if NETCORE + [MethodImplAttribute (MethodImplOptions.InternalCall)] + static extern EventInfo internal_from_handle_type (IntPtr event_handle, IntPtr type_handle); + + internal static EventInfo GetEventFromHandle (Mono.RuntimeEventHandle handle, RuntimeTypeHandle reflectedType) + { + if (handle.Value == IntPtr.Zero) + throw new ArgumentException ("The handle is invalid."); + EventInfo ei = internal_from_handle_type (handle.Value, reflectedType.Value); + if (ei == null) + throw new ArgumentException ("The event handle and the type handle are incompatible."); + return ei; + } +#endif } } diff --git a/mcs/class/corlib/System.Reflection/RuntimeFieldInfo.cs b/mcs/class/corlib/System.Reflection/RuntimeFieldInfo.cs index 519081d2c5..97ade33167 100644 --- a/mcs/class/corlib/System.Reflection/RuntimeFieldInfo.cs +++ b/mcs/class/corlib/System.Reflection/RuntimeFieldInfo.cs @@ -228,10 +228,8 @@ namespace System.Reflection { return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); } -#if !NETCORE [MethodImplAttribute(MethodImplOptions.InternalCall)] internal override extern int GetFieldOffset (); -#endif [MethodImplAttribute(MethodImplOptions.InternalCall)] private extern object GetValueInternal (object obj); @@ -311,6 +309,24 @@ namespace System.Reflection { { return 1; } +#elif NETCORE + public override bool IsSecurityTransparent { + get { + return false; + } + } + + public override bool IsSecurityCritical { + get { + return true; + } + } + + public override bool IsSecuritySafeCritical { + get { + return false; + } + } #else //seclevel { transparent = 0, safe-critical = 1, critical = 2} [MethodImplAttribute(MethodImplOptions.InternalCall)] @@ -329,9 +345,7 @@ namespace System.Reflection { } #endif -#if !NETCORE public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeFieldInfo> (other); -#endif public override int MetadataToken { get { @@ -350,15 +364,5 @@ namespace System.Reflection { public override Type[] GetRequiredCustomModifiers () => GetCustomModifiers (false); private Type[] GetCustomModifiers (bool optional) => GetTypeModifiers (optional) ?? Type.EmptyTypes; - -#if NETCORE - internal object[] GetPseudoCustomAttributes () { - throw new NotImplementedException (); - } - - internal CustomAttributeData[] GetPseudoCustomAttributesData () { - throw new NotImplementedException (); - } -#endif } } diff --git a/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs b/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs index 0fe271f487..3cb1b43173 100644 --- a/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs +++ b/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs @@ -259,7 +259,11 @@ namespace System.Reflection { } [MethodImplAttribute (MethodImplOptions.InternalCall)] +#if NETCORE + [PreserveDependency(".ctor(System.Reflection.ExceptionHandlingClause[],System.Reflection.LocalVariableInfo[],System.Byte[],System.Boolean,System.Int32,System.Int32)", "System.Reflection.RuntimeMethodBody")] +#else [PreserveDependency(".ctor(System.Reflection.ExceptionHandlingClause[],System.Reflection.LocalVariableInfo[],System.Byte[],System.Boolean,System.Int32,System.Int32)", "System.Reflection.MethodBody")] +#endif internal extern static MethodBody GetMethodBodyInternal (IntPtr handle); internal static MethodBody GetMethodBody (IntPtr handle) @@ -394,6 +398,10 @@ namespace System.Reflection { #if MOBILE } catch (MethodAccessException) { throw; +#endif +#if NETCORE + } catch (Mono.NullByRefReturnException) { + throw new NullReferenceException (); #endif } catch (OverflowException) { throw; @@ -403,7 +411,15 @@ namespace System.Reflection { } else { +#if NETCORE + try { + o = InternalInvoke (obj, parameters, out exc); + } catch (Mono.NullByRefReturnException) { + throw new NullReferenceException (); + } +#else o = InternalInvoke (obj, parameters, out exc); +#endif } if (exc != null) @@ -510,7 +526,7 @@ namespace System.Reflection { attrs [count ++] = new PreserveSigAttribute (); if ((info.attrs & MethodAttributes.PinvokeImpl) != 0) { #if NETCORE - throw new NotImplementedException (); + attrs [count ++] = GetDllImportAttribute (); #else attrs [count ++] = DllImportAttribute.GetCustomAttribute (this); #endif @@ -519,6 +535,52 @@ namespace System.Reflection { return attrs; } +#if NETCORE + Attribute GetDllImportAttribute () + { + string entryPoint, dllName = null; + int token = MetadataToken; + PInvokeAttributes flags = 0; + + GetPInvoke (out flags, out entryPoint, out dllName); + + CharSet charSet = CharSet.None; + + switch (flags & PInvokeAttributes.CharSetMask) { + case PInvokeAttributes.CharSetNotSpec: charSet = CharSet.None; break; + case PInvokeAttributes.CharSetAnsi: charSet = CharSet.Ansi; break; + case PInvokeAttributes.CharSetUnicode: charSet = CharSet.Unicode; break; + case PInvokeAttributes.CharSetAuto: charSet = CharSet.Auto; break; + + // Invalid: default to CharSet.None + default: break; + } + + CallingConvention callingConvention = InteropServicesCallingConvention.Cdecl; + + switch (flags & PInvokeAttributes.CallConvMask) { + case PInvokeAttributes.CallConvWinapi: callingConvention = InteropServicesCallingConvention.Winapi; break; + case PInvokeAttributes.CallConvCdecl: callingConvention = InteropServicesCallingConvention.Cdecl; break; + case PInvokeAttributes.CallConvStdcall: callingConvention = InteropServicesCallingConvention.StdCall; break; + case PInvokeAttributes.CallConvThiscall: callingConvention = InteropServicesCallingConvention.ThisCall; break; + case PInvokeAttributes.CallConvFastcall: callingConvention = InteropServicesCallingConvention.FastCall; break; + + // Invalid: default to CallingConvention.Cdecl + default: break; + } + + bool exactSpelling = (flags & PInvokeAttributes.NoMangle) != 0; + bool setLastError = (flags & PInvokeAttributes.SupportsLastError) != 0; + bool bestFitMapping = (flags & PInvokeAttributes.BestFitMask) == PInvokeAttributes.BestFitEnabled; + bool throwOnUnmappableChar = (flags & PInvokeAttributes.ThrowOnUnmappableCharMask) == PInvokeAttributes.ThrowOnUnmappableCharEnabled; + bool preserveSig = (GetMethodImplementationFlags() & MethodImplAttributes.PreserveSig) != 0; + + return new DllImportAttribute (dllName) { EntryPoint = entryPoint, CharSet = charSet, SetLastError = setLastError, + ExactSpelling = exactSpelling, PreserveSig = preserveSig, BestFitMapping = bestFitMapping, + ThrowOnUnmappableChar = throwOnUnmappableChar, CallingConvention = callingConvention }; + } +#endif // NETCORE + internal CustomAttributeData[] GetPseudoCustomAttributesData () { int count = 0; @@ -649,13 +711,11 @@ namespace System.Reflection { } if (hasUserType) { -#if FULL_AOT_RUNTIME - throw new NotSupportedException ("User types are not supported under full aot"); -#elif NETCORE - throw new NotImplementedException (); -#else - return new MethodOnTypeBuilderInst (this, methodInstantiation); +#if !FULL_AOT_RUNTIME + if (RuntimeFeature.IsDynamicCodeSupported) + return new MethodOnTypeBuilderInst (this, methodInstantiation); #endif + throw new NotSupportedException ("User types are not supported under full aot"); } MethodInfo ret = MakeGenericMethod_impl (methodInstantiation); @@ -704,11 +764,7 @@ namespace System.Reflection { } public override MethodBody GetMethodBody () { -#if NETCORE - throw new NotImplementedException (); -#else return GetMethodBody (mhandle); -#endif } public override IList<CustomAttributeData> GetCustomAttributesData () { @@ -738,9 +794,7 @@ namespace System.Reflection { get { return get_core_clr_security_level () == 1; } } -#if !NETCORE public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeMethodInfo> (other); -#endif } [Serializable()] @@ -966,7 +1020,16 @@ namespace System.Reflection { public override string ToString () { #if NETCORE - throw new NotImplementedException (); + StringBuilder sbName = new StringBuilder(Name); + sbName.Append ("Void "); + + TypeNameFormatFlags format = TypeNameFormatFlags.FormatBasic; + + sbName.Append("("); + RuntimeParameterInfo.FormatParameters (sbName, GetParametersNoCopy (), CallingConvention, false); + sbName.Append(")"); + + return sbName.ToString(); #else return "Void " + FormatNameAndSig (false); #endif @@ -986,9 +1049,7 @@ namespace System.Reflection { public extern int get_core_clr_security_level (); #endif -#if !NETCORE public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeConstructorInfo> (other); -#endif public override bool IsSecurityTransparent { get { return get_core_clr_security_level () == 0; } diff --git a/mcs/class/corlib/System.Reflection/RuntimeModule.cs b/mcs/class/corlib/System.Reflection/RuntimeModule.cs index b584b5caa2..92caa4c854 100644 --- a/mcs/class/corlib/System.Reflection/RuntimeModule.cs +++ b/mcs/class/corlib/System.Reflection/RuntimeModule.cs @@ -31,15 +31,20 @@ using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +#if !NETCORE using System.Security.Cryptography.X509Certificates; using System.Security; using System.Security.Permissions; +#endif using System.Runtime.Serialization; namespace System.Reflection { [ComVisible (true)] +#if !NETCORE [ComDefaultInterfaceAttribute (typeof (_Module))] +#endif [Serializable] [ClassInterface(ClassInterfaceType.None)] [StructLayout (LayoutKind.Sequential)] @@ -100,7 +105,7 @@ namespace System.Reflection { public override string FullyQualifiedName { get { -#if !MOBILE +#if !MOBILE && !NETCORE if (SecurityManager.SecurityEnabled) { new FileIOPermission (FileIOPermissionAccess.PathDiscovery, fqname).Demand (); } @@ -148,7 +153,7 @@ namespace System.Reflection { if (IsResource ()) return null; - Type globalType = GetGlobalType (); + Type globalType = GetGlobalType (_impl); return (globalType != null) ? globalType.GetField (name, bindingAttr) : null; } @@ -158,14 +163,17 @@ namespace System.Reflection { if (IsResource ()) return new FieldInfo [0]; - Type globalType = GetGlobalType (); + Type globalType = GetGlobalType (_impl); return (globalType != null) ? globalType.GetFields (bindingFlags) : new FieldInfo [0]; } public override int MetadataToken { - get { return get_MetadataToken (this); } + get { + return get_MetadataToken (this); + } } + protected override MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) @@ -173,7 +181,7 @@ namespace System.Reflection { if (IsResource ()) return null; - Type globalType = GetGlobalType (); + Type globalType = GetGlobalType (_impl); if (globalType == null) return null; if (types == null) @@ -187,15 +195,17 @@ namespace System.Reflection { if (IsResource ()) return new MethodInfo [0]; - Type globalType = GetGlobalType (); + Type globalType = GetGlobalType (_impl); return (globalType != null) ? globalType.GetMethods (bindingFlags) : new MethodInfo [0]; } +#if !NETCORE internal override ModuleHandle GetModuleHandleImpl() => new ModuleHandle (_impl); +#endif public override void GetPEKind (out PortableExecutableKinds peKind, out ImageFileMachine machine) { - ModuleHandle.GetPEKind (out peKind, out machine); + RuntimeModule.GetPEKind (_impl, out peKind, out machine); } public override @@ -217,11 +227,15 @@ namespace System.Reflection { public override FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveField (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static FieldInfo ResolveField (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { ResolveTokenError error; - IntPtr handle = ResolveFieldToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + IntPtr handle = ResolveFieldToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); if (handle == IntPtr.Zero) - throw resolve_token_exception (metadataToken, error, "Field"); + throw resolve_token_exception (module.Name, metadataToken, error, "Field"); else return FieldInfo.GetFieldFromHandle (new RuntimeFieldHandle (handle)); } @@ -229,12 +243,15 @@ namespace System.Reflection { public override MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveMember (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + internal static MemberInfo ResolveMember (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { ResolveTokenError error; - MemberInfo m = ResolveMemberToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + MemberInfo m = ResolveMemberToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); if (m == null) - throw resolve_token_exception (metadataToken, error, "MemberInfo"); + throw resolve_token_exception (module.Name, metadataToken, error, "MemberInfo"); else return m; } @@ -242,11 +259,15 @@ namespace System.Reflection { public override MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveMethod (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static MethodBase ResolveMethod (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { ResolveTokenError error; - IntPtr handle = ResolveMethodToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + IntPtr handle = ResolveMethodToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); if (handle == IntPtr.Zero) - throw resolve_token_exception (metadataToken, error, "MethodBase"); + throw resolve_token_exception (module.Name, metadataToken, error, "MethodBase"); else return RuntimeMethodInfo.GetMethodFromHandleNoGenericCheck (new RuntimeMethodHandle (handle)); } @@ -254,11 +275,15 @@ namespace System.Reflection { public override string ResolveString (int metadataToken) { + return ResolveString (this, _impl, metadataToken); + } + + internal static string ResolveString (Module module, IntPtr monoModule, int metadataToken) { ResolveTokenError error; - string s = ResolveStringToken (_impl, metadataToken, out error); + string s = ResolveStringToken (monoModule, metadataToken, out error); if (s == null) - throw resolve_token_exception (metadataToken, error, "string"); + throw resolve_token_exception (module.Name, metadataToken, error, "string"); else return s; } @@ -266,11 +291,15 @@ namespace System.Reflection { public override Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + return ResolveType (this, _impl, metadataToken, genericTypeArguments, genericMethodArguments); + } + + internal static Type ResolveType (Module module, IntPtr monoModule, int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { ResolveTokenError error; - IntPtr handle = ResolveTypeToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); + IntPtr handle = ResolveTypeToken (monoModule, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error); if (handle == IntPtr.Zero) - throw resolve_token_exception (metadataToken, error, "Type"); + throw resolve_token_exception (module.Name, metadataToken, error, "Type"); else return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle)); } @@ -278,15 +307,20 @@ namespace System.Reflection { public override byte[] ResolveSignature (int metadataToken) { + return ResolveSignature (this, _impl, metadataToken); + } + + internal static byte[] ResolveSignature (Module module, IntPtr monoModule, int metadataToken) { ResolveTokenError error; - byte[] res = ResolveSignature (_impl, metadataToken, out error); + byte[] res = ResolveSignature (monoModule, metadataToken, out error); if (res == null) - throw resolve_token_exception (metadataToken, error, "signature"); + throw resolve_token_exception (module.Name, metadataToken, error, "signature"); else return res; } +#if !NETCORE public override void GetObjectData (SerializationInfo info, StreamingContext context) { if (info == null) @@ -294,9 +328,9 @@ namespace System.Reflection { UnitySerializationHolder.GetUnitySerializationInfo (info, UnitySerializationHolder.ModuleUnity, this.ScopeName, this.GetRuntimeAssembly ()); } +#endif -#if !MOBILE - +#if !MOBILE && !NETCORE public override X509Certificate GetSignerCertificate () @@ -313,7 +347,7 @@ namespace System.Reflection { public override Type[] GetTypes() { - return InternalGetTypes (); + return InternalGetTypes (_impl); } public override IList<CustomAttributeData> GetCustomAttributesData () { @@ -325,8 +359,88 @@ namespace System.Reflection { return (RuntimeAssembly)assembly; } - internal override IntPtr GetImpl () { - return _impl; + internal IntPtr MonoModule { + get { + return _impl; + } } + +#if NETCORE + internal Guid GetModuleVersionId () +#else + internal override Guid GetModuleVersionId () +#endif + { + var guid = new byte [16]; + GetGuidInternal (_impl, guid); + return new Guid (guid); + } + + internal static Exception resolve_token_exception (string name, int metadataToken, ResolveTokenError error, string tokenType) { + if (error == ResolveTokenError.OutOfRange) + return new ArgumentOutOfRangeException ("metadataToken", String.Format ("Token 0x{0:x} is not valid in the scope of module {1}", metadataToken, name)); + else + return new ArgumentException (String.Format ("Token 0x{0:x} is not a valid {1} token in the scope of module {2}", metadataToken, tokenType, name), "metadataToken"); + } + + internal static IntPtr[] ptrs_from_types (Type[] types) { + if (types == null) + return null; + else { + IntPtr[] res = new IntPtr [types.Length]; + for (int i = 0; i < types.Length; ++i) { + if (types [i] == null) + throw new ArgumentException (); + res [i] = types [i].TypeHandle.Value; + } + return res; + } + } + + // This calls ves_icall_reflection_get_token, so needs a Module argument + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int get_MetadataToken (Module module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern int GetMDStreamVersion (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Type[] InternalGetTypes (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr GetHINSTANCE (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private static extern void GetGuidInternal (IntPtr module, byte[] guid); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern Type GetGlobalType (IntPtr module); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern string ResolveStringToken (IntPtr module, int token, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern byte[] ResolveSignature (IntPtr module, int metadataToken, out ResolveTokenError error); + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal static extern void GetPEKind (IntPtr module, out PortableExecutableKinds peKind, out ImageFileMachine machine); } + + internal enum ResolveTokenError { + OutOfRange, + BadTable, + Other + } } diff --git a/mcs/class/corlib/System.Reflection/RuntimeParameterInfo.cs b/mcs/class/corlib/System.Reflection/RuntimeParameterInfo.cs index 604d4d6194..0b49a1aff3 100644 --- a/mcs/class/corlib/System.Reflection/RuntimeParameterInfo.cs +++ b/mcs/class/corlib/System.Reflection/RuntimeParameterInfo.cs @@ -44,15 +44,22 @@ namespace System.Reflection [Serializable] [ClassInterfaceAttribute (ClassInterfaceType.None)] #endif - [StructLayout (LayoutKind.Sequential)] class RuntimeParameterInfo : ParameterInfo { internal MarshalAsAttribute marshalAs; + // Called by the runtime + internal RuntimeParameterInfo (string name, Type type, int position, int attrs, object defaultValue, MemberInfo member, MarshalAsAttribute marshalAs) { + NameImpl = name; + ClassImpl = type; + PositionImpl = position; + AttrsImpl = (ParameterAttributes)attrs; + DefaultValueImpl = defaultValue; + MemberImpl = member; + this.marshalAs = marshalAs; + } + internal static void FormatParameters (StringBuilder sb, ParameterInfo[] p, CallingConventions callingConvention, bool serialization) { -#if NETCORE - throw new NotImplementedException (); -#else for (int i = 0; i < p.Length; ++i) { if (i > 0) sb.Append (", "); @@ -77,7 +84,6 @@ namespace System.Reflection sb.Append (", "); sb.Append ("..."); } -#endif } #if MONO_FEATURE_SRE @@ -244,7 +250,7 @@ namespace System.Reflection if (marshalAs != null) { #if NETCORE - throw new NotImplementedException (); + attrs [count ++] = (MarshalAsAttribute)marshalAs.CloneInternal (); #else attrs [count ++] = marshalAs.Copy (); #endif @@ -304,7 +310,7 @@ namespace System.Reflection } [MethodImplAttribute (MethodImplOptions.InternalCall)] - internal extern Type[] GetTypeModifiers (bool optional); + internal static extern Type[] GetTypeModifiers (Type type, MemberInfo member, int position, bool optional); internal static ParameterInfo New (ParameterInfo pinfo, Type type, MemberInfo member, int position) { @@ -321,6 +327,6 @@ namespace System.Reflection return new RuntimeParameterInfo (type, member, marshalAs); } - private Type[] GetCustomModifiers (bool optional) => GetTypeModifiers (optional) ?? Type.EmptyTypes; + private Type[] GetCustomModifiers (bool optional) => GetTypeModifiers (ParameterType, Member, Position, optional) ?? Type.EmptyTypes; } } diff --git a/mcs/class/corlib/System.Reflection/RuntimePropertyInfo.cs b/mcs/class/corlib/System.Reflection/RuntimePropertyInfo.cs index ef488b3770..65a222522b 100644 --- a/mcs/class/corlib/System.Reflection/RuntimePropertyInfo.cs +++ b/mcs/class/corlib/System.Reflection/RuntimePropertyInfo.cs @@ -90,12 +90,42 @@ namespace System.Reflection { [MethodImplAttribute (MethodImplOptions.InternalCall)] internal static extern object get_default_value (RuntimePropertyInfo prop); + +#if NETCORE internal BindingFlags BindingFlags { get { - return 0; + CachePropertyInfo (PInfo.GetMethod | PInfo.SetMethod); + bool isPublic = info.set_method?.IsPublic == true || info.get_method?.IsPublic == true; + bool isStatic = info.set_method?.IsStatic == true || info.get_method?.IsStatic == true; + bool isInherited = DeclaringType != ReflectedType; + return FilterPreCalculate (isPublic, isInherited, isStatic); } } - + + // Copied from https://github.com/dotnet/coreclr/blob/7a24a538cd265993e5864179f51781398c28ecdf/src/System.Private.CoreLib/src/System/RtType.cs#L2022 + static BindingFlags FilterPreCalculate (bool isPublic, bool isInherited, bool isStatic) + { + BindingFlags bindingFlags = isPublic ? BindingFlags.Public : BindingFlags.NonPublic; + if (isInherited) { + // We arrange things so the DeclaredOnly flag means "include inherited members" + bindingFlags |= BindingFlags.DeclaredOnly; + if (isStatic) + bindingFlags |= BindingFlags.Static | BindingFlags.FlattenHierarchy; + else + bindingFlags |= BindingFlags.Instance; + } + else { + if (isStatic) + bindingFlags |= BindingFlags.Static; + else + bindingFlags |= BindingFlags.Instance; + } + return bindingFlags; + } +#else + internal BindingFlags BindingFlags => 0; +#endif + public override Module Module { get { return GetRuntimeModule (); @@ -126,9 +156,6 @@ namespace System.Reflection { private string FormatNameAndSig(bool serialization) { -#if NETCORE - throw new NotImplementedException (); -#else StringBuilder sbName = new StringBuilder(PropertyType.FormatTypeName(serialization)); sbName.Append(" "); @@ -142,7 +169,6 @@ namespace System.Reflection { } return sbName.ToString(); -#endif } #endregion @@ -381,7 +407,7 @@ namespace System.Reflection { MethodInfo method = GetGetMethod (true); if (method == null) throw new ArgumentException ($"Get Method not found for '{Name}'"); - if (!DeclaringType.IsValueType && !method.ContainsGenericParameters) { //FIXME find a way to build an invoke delegate for value types. + if (!DeclaringType.IsValueType && !PropertyType.IsByRef && !method.ContainsGenericParameters) { //FIXME find a way to build an invoke delegate for value types. cached_getter = CreateGetterDelegate (method); // The try-catch preserves the .Invoke () behaviour try { @@ -453,9 +479,7 @@ namespace System.Reflection { return CustomAttributeData.GetCustomAttributes (this); } -#if !NETCORE public sealed override bool HasSameMetadataDefinitionAs (MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimePropertyInfo> (other); -#endif public override int MetadataToken { get { diff --git a/mcs/class/corlib/System.Runtime.CompilerServices/RuntimeHelpers.cs b/mcs/class/corlib/System.Runtime.CompilerServices/RuntimeHelpers.cs index ff6800bf4d..292083a0bf 100644 --- a/mcs/class/corlib/System.Runtime.CompilerServices/RuntimeHelpers.cs +++ b/mcs/class/corlib/System.Runtime.CompilerServices/RuntimeHelpers.cs @@ -195,5 +195,25 @@ namespace System.Runtime.CompilerServices return FormatterServices.GetUninitializedObject (type); } #endif + + /// <summary> + /// GetSubArray helper method for the compiler to slice an array using a range. + /// </summary> + public static T[] GetSubArray<T> (T[] array, Range range) + { + Type elementType = array.GetType ().GetElementType (); + Span<T> source = array.AsSpan (range); + + if (elementType.IsValueType) + { + return source.ToArray (); + } + else + { + T[] newArray = (T[]) Array.CreateInstance (elementType, source.Length); + source.CopyTo (newArray); + return newArray; + } + } } } diff --git a/mcs/class/corlib/System.Runtime.InteropServices.RuntimeInformation/RuntimeInformation.cs b/mcs/class/corlib/System.Runtime.InteropServices.RuntimeInformation/RuntimeInformation.cs index 7b11484ead..8e2c82b19e 100644 --- a/mcs/class/corlib/System.Runtime.InteropServices.RuntimeInformation/RuntimeInformation.cs +++ b/mcs/class/corlib/System.Runtime.InteropServices.RuntimeInformation/RuntimeInformation.cs @@ -36,13 +36,93 @@ namespace System.Runtime.InteropServices { public static class RuntimeInformation { - /* gets the runtime's arch from the value it uses for DllMap */ - static extern string RuntimeArchitecture + static readonly Architecture _osArchitecture; + static readonly Architecture _processArchitecture; + static readonly OSPlatform _osPlatform; + + static RuntimeInformation () { - [MethodImpl (MethodImplOptions.InternalCall)] - get; + // we can use the runtime's compiled config options for DllMaps here + // process architecure for us is runtime architecture + // see for values: mono-config.c + var runtimeArchitecture = GetRuntimeArchitecture (); + var osName = GetOSName (); + + // check OS/process architecture + switch (runtimeArchitecture) { + case "arm": + _osArchitecture = Environment.Is64BitOperatingSystem ? Architecture.Arm64 : Architecture.Arm; + _processArchitecture = Architecture.Arm; + break; + case "armv8": + _osArchitecture = Environment.Is64BitOperatingSystem ? Architecture.Arm64 : Architecture.Arm; + _processArchitecture = Architecture.Arm64; + break; + case "x86": + _osArchitecture = Environment.Is64BitOperatingSystem ? Architecture.X64 : Architecture.X86; + _processArchitecture = Architecture.X86; + break; + case "x86-64": + _osArchitecture = Environment.Is64BitOperatingSystem ? Architecture.X64 : Architecture.X86; + _processArchitecture = Architecture.X64; + break; + // upstream only has these values; try to pretend we're x86 if nothing matches + // want more? bug: https://github.com/dotnet/corefx/issues/30706 + default: + _osArchitecture = Environment.Is64BitOperatingSystem ? Architecture.X64 : Architecture.X86; + _processArchitecture = Environment.Is64BitProcess ? Architecture.X64 : Architecture.X86; + break; + } + + // check OS platform + switch (osName) { + case "linux": + _osPlatform = OSPlatform.Linux; + break; + case "osx": + _osPlatform = OSPlatform.OSX; + break; + case "windows": + _osPlatform = OSPlatform.Windows; + break; + case "solaris": + _osPlatform = OSPlatform.Create ("SOLARIS"); + break; + case "freebsd": + _osPlatform = OSPlatform.Create ("FREEBSD"); + break; + case "netbsd": + _osPlatform = OSPlatform.Create ("NETBSD"); + break; + case "openbsd": + _osPlatform = OSPlatform.Create ("OPENBSD"); + break; + case "aix": + _osPlatform = OSPlatform.Create ("AIX"); + break; + case "hpux": + _osPlatform = OSPlatform.Create ("HPUX"); + break; + case "haiku": + _osPlatform = OSPlatform.Create ("HAIKU"); + break; + case "wasm": + _osPlatform = OSPlatform.Create ("WEBASSEMBLY"); + break; + default: + _osPlatform = OSPlatform.Create ("UNKNOWN"); + break; + } } + /* gets the runtime's arch from the value it uses for DllMap */ + [MethodImpl (MethodImplOptions.InternalCall)] + static extern string GetRuntimeArchitecture (); + + /* gets the runtime's OS from the value it uses for DllMap */ + [MethodImpl (MethodImplOptions.InternalCall)] + static extern string GetOSName (); + public static string FrameworkDescription { get { return "Mono " + Mono.Runtime.GetDisplayName (); @@ -51,20 +131,7 @@ namespace System.Runtime.InteropServices public static bool IsOSPlatform (OSPlatform osPlatform) { -#if WASM - return osPlatform == OSPlatform.Create ("WEBASSEMBLY"); -#else - switch (Environment.Platform) { - case PlatformID.Win32NT: - return osPlatform == OSPlatform.Windows; - case PlatformID.MacOSX: - return osPlatform == OSPlatform.OSX; - case PlatformID.Unix: - return osPlatform == OSPlatform.Linux; - default: - return false; - } -#endif + return _osPlatform == osPlatform; } public static string OSDescription @@ -83,17 +150,7 @@ namespace System.Runtime.InteropServices { get { - switch (RuntimeArchitecture) { - case "arm": - case "armv8": - return Environment.Is64BitOperatingSystem ? Architecture.Arm64 : Architecture.Arm; - case "x86": - case "x86-64": - // upstream only has these values; try to pretend we're x86 if nothing matches - // want more? bug: https://github.com/dotnet/corefx/issues/30706 - default: - return Environment.Is64BitOperatingSystem ? Architecture.X64 : Architecture.X86; - } + return _osArchitecture; } } @@ -101,22 +158,7 @@ namespace System.Runtime.InteropServices { get { - // we can use the runtime's compiled config options for DllMaps here - // process architecure for us is runtime architecture (OS is much harder) - // see for values: mono-config.c - switch (RuntimeArchitecture) { - case "x86": - return Architecture.X86; - case "x86-64": - return Architecture.X64; - case "arm": - return Architecture.Arm; - case "armv8": - return Architecture.Arm64; - // see comment in OSArchiteture default case - default: - return Environment.Is64BitProcess ? Architecture.X64 : Architecture.X86; - } + return _processArchitecture; } } } diff --git a/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs b/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs index 294a879b76..0cf8fdab3a 100644 --- a/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs +++ b/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs @@ -41,7 +41,7 @@ using System.Runtime.InteropServices.ComTypes; using System.Text; using System.Runtime.ConstrainedExecution; -#if !FULL_AOT_RUNTIME && !NETCORE +#if !FULL_AOT_RUNTIME && !NETCORE && !DISABLE_REMOTING using Mono.Interop; #endif @@ -53,14 +53,14 @@ namespace System.Runtime.InteropServices public static readonly int SystemMaxDBCSCharSize = 2; // don't know what this is public static readonly int SystemDefaultCharSize = Environment.IsRunningOnWindows ? 2 : 1; -#if !MOBILE +#if !MOBILE || WINAOT [MethodImplAttribute (MethodImplOptions.InternalCall)] private extern static int AddRefInternal (IntPtr pUnk); #endif public static int AddRef (IntPtr pUnk) { -#if !MOBILE +#if !MOBILE || WINAOT if (pUnk == IntPtr.Zero) throw new ArgumentException ("Value cannot be null.", "pUnk"); return AddRefInternal (pUnk); @@ -294,7 +294,7 @@ namespace System.Runtime.InteropServices public static object CreateWrapperOfType (object o, Type t) { -#if FULL_AOT_RUNTIME || NETCORE +#if FULL_AOT_RUNTIME || NETCORE || DISABLE_REMOTING throw new PlatformNotSupportedException (); #else __ComObject co = o as __ComObject; @@ -513,8 +513,19 @@ namespace System.Runtime.InteropServices if (m == null) throw new ArgumentNullException ("m"); - return m.GetHINSTANCE (); + if (m is RuntimeModule rm) + return RuntimeModule.GetHINSTANCE (rm.MonoModule); + + return (IntPtr)(-1); } +#else + public static IntPtr GetHINSTANCE (Module m) => throw new PlatformNotSupportedException(); + public static IntPtr GetIDispatchForObject (object o) => throw new PlatformNotSupportedException(); + public static object GetTypedObjectForIUnknown (IntPtr pUnk, Type t) => throw new PlatformNotSupportedException(); + public static bool SetComObjectData (object obj, object key, object data) => throw new PlatformNotSupportedException(); + public static object GetComObjectData (object obj, object key) => throw new PlatformNotSupportedException(); + public static string GenerateProgIdForType (Type type) => throw new PlatformNotSupportedException(); + public static Guid GenerateGuidForType (Type type) => throw new PlatformNotSupportedException(); #endif // !FULL_AOT_RUNTIME public static int GetExceptionCode () @@ -713,7 +724,7 @@ namespace System.Runtime.InteropServices public static object GetTypedObjectForIUnknown (IntPtr pUnk, Type t) { -#if NETCORE +#if NETCORE || DISABLE_REMOTING throw new NotImplementedException (); #else ComInteropProxy proxy = new ComInteropProxy (pUnk, t); @@ -915,14 +926,14 @@ namespace System.Runtime.InteropServices return (T) PtrToStructure (ptr, typeof (T)); } -#if !MOBILE +#if !MOBILE || WINAOT [MethodImplAttribute (MethodImplOptions.InternalCall)] private extern static int QueryInterfaceInternal (IntPtr pUnk, ref Guid iid, out IntPtr ppv); #endif public static int QueryInterface (IntPtr pUnk, ref Guid iid, out IntPtr ppv) { -#if !MOBILE +#if !MOBILE || WINAOT if (pUnk == IntPtr.Zero) throw new ArgumentException ("Value cannot be null.", "pUnk"); return QueryInterfaceInternal (pUnk, ref iid, out ppv); @@ -1086,7 +1097,7 @@ namespace System.Runtime.InteropServices [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static IntPtr ReAllocHGlobal (IntPtr pv, IntPtr cb); -#if !MOBILE +#if !MOBILE || WINAOT [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)] [MethodImplAttribute (MethodImplOptions.InternalCall)] private extern static int ReleaseInternal (IntPtr pUnk); @@ -1095,7 +1106,7 @@ namespace System.Runtime.InteropServices [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)] public static int Release (IntPtr pUnk) { -#if !MOBILE +#if !MOBILE || WINAOT if (pUnk == IntPtr.Zero) throw new ArgumentException ("Value cannot be null.", "pUnk"); @@ -1277,7 +1288,19 @@ namespace System.Runtime.InteropServices #endif } - public static IntPtr SecureStringToCoTaskMemAnsi (SecureString s) + internal delegate IntPtr SecureStringAllocator(int len); + + internal static IntPtr SecureStringCoTaskMemAllocator (int len) + { + return AllocCoTaskMem (len); + } + + internal static IntPtr SecureStringGlobalAllocator (int len) + { + return AllocHGlobal (len); + } + + internal static IntPtr SecureStringToAnsi (SecureString s, SecureStringAllocator allocator) { if (s == null) throw new ArgumentNullException ("s"); @@ -1286,7 +1309,7 @@ namespace System.Runtime.InteropServices return s.MarshalToString (false, false); #else int len = s.Length; - IntPtr ctm = AllocCoTaskMem (len + 1); + IntPtr ctm = allocator (len + 1); byte [] copy = new byte [len+1]; try { @@ -1310,7 +1333,7 @@ namespace System.Runtime.InteropServices #endif } - public static IntPtr SecureStringToCoTaskMemUnicode (SecureString s) + internal static IntPtr SecureStringToUnicode (SecureString s, SecureStringAllocator allocator) { if (s == null) throw new ArgumentNullException ("s"); @@ -1318,7 +1341,7 @@ namespace System.Runtime.InteropServices return s.MarshalToString (false, true); #else int len = s.Length; - IntPtr ctm = AllocCoTaskMem (len * 2 + 2); + IntPtr ctm = allocator (len * 2 + 2); byte [] buffer = null; try { buffer = s.GetBuffer (); @@ -1334,6 +1357,17 @@ namespace System.Runtime.InteropServices } return ctm; #endif + + } + + public static IntPtr SecureStringToCoTaskMemAnsi (SecureString s) + { + return SecureStringToAnsi (s, SecureStringCoTaskMemAllocator); + } + + public static IntPtr SecureStringToCoTaskMemUnicode (SecureString s) + { + return SecureStringToUnicode (s, SecureStringCoTaskMemAllocator); } public static IntPtr SecureStringToGlobalAllocAnsi (SecureString s) @@ -1343,7 +1377,7 @@ namespace System.Runtime.InteropServices #if NETCORE return s.MarshalToString (true, false); #else - return SecureStringToCoTaskMemAnsi (s); + return SecureStringToAnsi (s, SecureStringGlobalAllocator); #endif } @@ -1354,7 +1388,7 @@ namespace System.Runtime.InteropServices #if NETCORE return s.MarshalToString (true, true); #else - return SecureStringToCoTaskMemUnicode (s); + return SecureStringToUnicode (s, SecureStringGlobalAllocator); #endif } @@ -1586,7 +1620,9 @@ namespace System.Runtime.InteropServices const int ERROR_FILENAME_EXCED_RANGE = unchecked ((int)0xCE); const int COR_E_RANK = unchecked ((int)0x80131517L); const int COR_E_REFLECTIONTYPELOAD = unchecked ((int)0x80131602L); +#if !DISABLE_REMOTING const int COR_E_REMOTING = unchecked ((int)0x8013150BL); +#endif const int COR_E_SAFEARRAYTYPEMISMATCH = unchecked ((int)0x80131533L); const int COR_E_SECURITY = unchecked ((int)0x8013150AL); const int COR_E_SERIALIZATION = unchecked ((int)0x8013150CL); @@ -1703,8 +1739,10 @@ namespace System.Runtime.InteropServices return new RankException (); case COR_E_REFLECTIONTYPELOAD: return new System.Reflection.ReflectionTypeLoadException (new Type[] { }, new Exception[] { }); +#if !DISABLE_REMOTING case COR_E_REMOTING: return new System.Runtime.Remoting.RemotingException (); +#endif case COR_E_SAFEARRAYTYPEMISMATCH: return new SafeArrayTypeMismatchException (); case COR_E_SECURITY: @@ -2016,5 +2054,29 @@ namespace System.Runtime.InteropServices return result; } + + public static unsafe IntPtr StringToCoTaskMemUTF8(string s) + { + if (s == null) + { + return IntPtr.Zero; + } + + int nb = Encoding.UTF8.GetMaxByteCount(s.Length); + + IntPtr pMem = AllocCoTaskMem(nb + 1); + + int nbWritten; + byte* pbMem = (byte*)pMem; + + fixed (char* firstChar = s) + { + nbWritten = Encoding.UTF8.GetBytes(firstChar, s.Length, pbMem, nb); + } + + pbMem[nbWritten] = 0; + + return pMem; + } } } diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/AsyncResult.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/AsyncResult.cs index 7e4b12c7ef..811fc75715 100644 --- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/AsyncResult.cs +++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/AsyncResult.cs @@ -56,8 +56,10 @@ public class AsyncResult : IAsyncResult, IMessageSink, IThreadPoolWorkItem { long add_time; #pragma warning restore 169, 414, 649 +#if !DISABLE_REMOTING // not part of MonoAsyncResult... MonoMethodMessage call_message; +#endif #pragma warning disable 0414 IMessageCtrl message_ctrl; #pragma warning restore @@ -173,11 +175,13 @@ public class AsyncResult : IAsyncResult, IMessageSink, IThreadPoolWorkItem { return null; } +#if !DISABLE_REMOTING internal MonoMethodMessage CallMessage { get { return call_message; } set { call_message = value; } } +#endif void IThreadPoolWorkItem.ExecuteWorkItem() { diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/CADMessages.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/CADMessages.cs index 22128deff3..f7a57f93d0 100644 --- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/CADMessages.cs +++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/CADMessages.cs @@ -431,7 +431,11 @@ namespace System.Runtime.Remoting.Messaging { ArrayList ret = null; if (null != _serializedArgs) { - object[] oret = (object[]) CADSerializer.DeserializeObject (new MemoryStream (_serializedArgs)); + // Avoid cross domain refs between MemoryStream and _serializedArgs byte array + byte[] copyArray = new byte [_serializedArgs.Length]; + Array.Copy (_serializedArgs, copyArray, _serializedArgs.Length); + + object[] oret = (object[]) CADSerializer.DeserializeObject (new MemoryStream (copyArray)); ret = new ArrayList (oret); _serializedArgs = null; } @@ -498,7 +502,11 @@ namespace System.Runtime.Remoting.Messaging { ArrayList ret = null; if (null != _serializedArgs) { - object[] oret = (object[]) CADSerializer.DeserializeObject (new MemoryStream (_serializedArgs)); + // Avoid cross domain refs between MemoryStream and _serializedArgs byte array + byte[] copyArray = new byte [_serializedArgs.Length]; + Array.Copy (_serializedArgs, copyArray, _serializedArgs.Length); + + object[] oret = (object[]) CADSerializer.DeserializeObject (new MemoryStream (copyArray)); ret = new ArrayList (oret); _serializedArgs = null; } diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MonoMethodMessage.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MonoMethodMessage.cs index 46eb498a9c..0cfa94b13e 100644 --- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MonoMethodMessage.cs +++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MonoMethodMessage.cs @@ -41,8 +41,11 @@ namespace System.Runtime.Remoting.Messaging { [Serializable] [StructLayout (LayoutKind.Sequential)] - internal class MonoMethodMessage : IMethodCallMessage, IMethodReturnMessage, IInternalMessage { - + internal class MonoMethodMessage +#if !DISABLE_REMOTING + : IMethodCallMessage, IMethodReturnMessage, IInternalMessage +#endif + { #pragma warning disable 649 #region keep in sync with MonoMessage in object-internals.h RuntimeMethodInfo method; @@ -59,12 +62,13 @@ namespace System.Runtime.Remoting.Messaging { string uri; +#if !DISABLE_REMOTING MCMDictionary properties; + Identity identity; +#endif Type[] methodSignature; - Identity identity; - internal void InitMessage (RuntimeMethodInfo method, object [] out_args) { this.method = method; @@ -132,8 +136,12 @@ namespace System.Runtime.Remoting.Messaging { public IDictionary Properties { get { +#if DISABLE_REMOTING + throw new PlatformNotSupportedException (); +#else if (properties == null) properties = new MCMDictionary (this); return properties; +#endif } } @@ -365,6 +373,7 @@ namespace System.Runtime.Remoting.Messaging { return null; } +#if !DISABLE_REMOTING Identity IInternalMessage.TargetIdentity { get { return identity; } @@ -375,6 +384,7 @@ namespace System.Runtime.Remoting.Messaging { { return properties != null; } +#endif public bool IsAsync { @@ -392,8 +402,10 @@ namespace System.Runtime.Remoting.Messaging { { // FIXME: ideally, the OneWay type would be set by the runtime +#if !DISABLE_REMOTING if (call_type == CallType.Sync && RemotingServices.IsOneWay (method)) call_type = CallType.OneWay; +#endif return call_type; } } diff --git a/mcs/class/corlib/System.Runtime.Remoting/Identity.cs b/mcs/class/corlib/System.Runtime.Remoting/Identity.cs index 608798ccba..3e283fa7ba 100644 --- a/mcs/class/corlib/System.Runtime.Remoting/Identity.cs +++ b/mcs/class/corlib/System.Runtime.Remoting/Identity.cs @@ -157,7 +157,7 @@ namespace System.Runtime.Remoting public MarshalByRefObject ClientProxy { - get { return (MarshalByRefObject) _proxyReference.Target; } + get { return (MarshalByRefObject) _proxyReference?.Target; } set { _proxyReference = new WeakReference (value); } } diff --git a/mcs/class/corlib/System.Runtime.Remoting/RemotingConfiguration.cs b/mcs/class/corlib/System.Runtime.Remoting/RemotingConfiguration.cs index eb45ced822..40f8419460 100644 --- a/mcs/class/corlib/System.Runtime.Remoting/RemotingConfiguration.cs +++ b/mcs/class/corlib/System.Runtime.Remoting/RemotingConfiguration.cs @@ -53,7 +53,7 @@ namespace System.Runtime.Remoting static string processGuid = null; static bool defaultConfigRead = false; static bool defaultDelayedConfigRead = false; - static string _errorMode; + static CustomErrorsModes _errorMode = CustomErrorsModes.RemoteOnly; static Hashtable wellKnownClientEntries = new Hashtable(); static Hashtable activatedClientEntries = new Hashtable(); @@ -81,11 +81,10 @@ namespace System.Runtime.Remoting set { applicationName = value; } } - [MonoTODO] public static CustomErrorsModes CustomErrorsMode { - get { throw new NotImplementedException (); } - set { throw new NotImplementedException (); } + get { return _errorMode; } + set { _errorMode = value; } } public static string ProcessId @@ -387,8 +386,8 @@ namespace System.Runtime.Remoting public static bool CustomErrorsEnabled (bool isLocalRequest) { - if (_errorMode == "off") return false; - if (_errorMode == "on") return true; + if (_errorMode == CustomErrorsModes.Off) return false; + if (_errorMode == CustomErrorsModes.On) return true; return !isLocalRequest; } @@ -403,7 +402,7 @@ namespace System.Runtime.Remoting if (m != "on" && m != "off" && m != "remoteonly") throw new RemotingException ("Invalid custom error mode: " + mode); - _errorMode = m; + _errorMode = (CustomErrorsModes) Enum.Parse(typeof(CustomErrorsModes), m, true); } } diff --git a/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs b/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs index 37b06e040a..6255bfff65 100644 --- a/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs +++ b/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs @@ -100,7 +100,7 @@ namespace System.Runtime.Remoting [MethodImplAttribute(MethodImplOptions.InternalCall)] internal extern static MethodBase GetVirtualMethod (Type type, MethodBase method); -#if DISABLE_REMOTING +#if !FEATURE_REMOTING public static bool IsTransparentProxy (object proxy) { throw new NotSupportedException (); diff --git a/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs b/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs index 702cd0bcdc..c10664874a 100644 --- a/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs +++ b/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs @@ -119,6 +119,9 @@ namespace System.Security.Policy public void FromXml (SecurityElement element) { +#if DISABLE_SECURITY + throw new PlatformNotSupportedException (); +#else if (element == null) throw new ArgumentNullException ("element"); @@ -161,10 +164,14 @@ namespace System.Security.Policy } } } +#endif } public SecurityElement ToXml () { +#if DISABLE_SECURITY + throw new PlatformNotSupportedException (); +#else SecurityElement se = new SecurityElement ("ApplicationTrust"); se.AddAttribute ("version", "1"); @@ -197,6 +204,7 @@ namespace System.Security.Policy } return se; +#endif } public IList<StrongName> FullTrustAssemblies { diff --git a/mcs/class/corlib/System.Threading/Interlocked.cs b/mcs/class/corlib/System.Threading/Interlocked.cs index 43bfb471a9..55eb29ac47 100644 --- a/mcs/class/corlib/System.Threading/Interlocked.cs +++ b/mcs/class/corlib/System.Threading/Interlocked.cs @@ -125,5 +125,8 @@ namespace System.Threading public static void MemoryBarrier () { Thread.MemoryBarrier (); } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static void MemoryBarrierProcessWide (); } } diff --git a/mcs/class/corlib/System.Threading/Monitor.cs b/mcs/class/corlib/System.Threading/Monitor.cs index 9b7fe9b936..3113ce05ba 100644 --- a/mcs/class/corlib/System.Threading/Monitor.cs +++ b/mcs/class/corlib/System.Threading/Monitor.cs @@ -31,7 +31,7 @@ // using System.Runtime.CompilerServices; -#if !DISABLE_REMOTING +#if FEATURE_REMOTING using System.Runtime.Remoting.Contexts; #endif using System.Runtime.ConstrainedExecution; @@ -77,14 +77,14 @@ namespace System.Threading throw new SynchronizationLockException ("Object is not synchronized"); try { -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (exitContext) SynchronizationAttribute.ExitContext (); #endif return Monitor_wait (obj, millisecondsTimeout); } finally { -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (exitContext) SynchronizationAttribute.EnterContext (); #endif @@ -116,5 +116,9 @@ namespace System.Threading { return Monitor_test_owner (obj); } + +#if NETCORE + public static long LockContentionCount => throw new PlatformNotSupportedException (); +#endif } } diff --git a/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs b/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs index 3bd11264b1..6069bf116d 100644 --- a/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs +++ b/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs @@ -83,8 +83,14 @@ namespace System.Threading lock (this) { _unregistered = true; - if (_callsInProcess == 0 && _finalEvent != null) + if (_callsInProcess == 0 && _finalEvent != null) { +#if NETCORE + throw new NotImplementedException (); +#else NativeEventCalls.SetEvent (_finalEvent.SafeWaitHandle); + _finalEvent = null; +#endif + } } } catch (ObjectDisposedException) { // Can happen if we called Unregister before we had time to execute Wait @@ -105,8 +111,14 @@ namespace System.Threading lock (this) { _callsInProcess--; - if (_unregistered && _callsInProcess == 0 && _finalEvent != null) + if (_unregistered && _callsInProcess == 0 && _finalEvent != null) { +#if NETCORE + EventWaitHandle.Set (_finalEvent.SafeWaitHandle); +#else NativeEventCalls.SetEvent (_finalEvent.SafeWaitHandle); +#endif + _finalEvent = null; + } } } } diff --git a/mcs/class/corlib/System.Threading/Thread.cs b/mcs/class/corlib/System.Threading/Thread.cs index 682ede5491..ae0196379b 100644 --- a/mcs/class/corlib/System.Threading/Thread.cs +++ b/mcs/class/corlib/System.Threading/Thread.cs @@ -166,14 +166,17 @@ namespace System.Threading { private extern static byte[] ByteArrayToCurrentDomain (byte[] arr); #if !NETCORE - IPrincipal principal; - int principal_version; - +#if !DISABLE_REMOTING public static Context CurrentContext { get { return(AppDomain.InternalGetContext ()); } } +#endif + +#if !DISABLE_SECURITY + IPrincipal principal; + int principal_version; static void DeserializePrincipal (Thread th) { @@ -291,6 +294,12 @@ namespace System.Threading { th.principal = value; } } +#else + public static IPrincipal CurrentPrincipal { + get => throw new PlatformNotSupportedException (); + set => throw new PlatformNotSupportedException (); + } +#endif public static AppDomain GetDomain() { return AppDomain.CurrentDomain; diff --git a/mcs/class/corlib/System.Threading/Timer.cs b/mcs/class/corlib/System.Threading/Timer.cs index 1ca96a2d22..47c5754669 100644 --- a/mcs/class/corlib/System.Threading/Timer.cs +++ b/mcs/class/corlib/System.Threading/Timer.cs @@ -32,6 +32,7 @@ using System.Runtime.InteropServices; using System.Collections.Generic; using System.Collections; using System.Runtime.CompilerServices; +using System.Threading.Tasks; namespace System.Threading @@ -64,7 +65,7 @@ namespace System.Threading [ComVisible (true)] public sealed class Timer - : MarshalByRefObject, IDisposable + : MarshalByRefObject, IDisposable, IAsyncDisposable { static Scheduler scheduler => Scheduler.Instance; #region Timer instance fields @@ -200,6 +201,12 @@ namespace System.Threading return true; } + public ValueTask DisposeAsync () + { + Dispose (); + return new ValueTask (Task.FromResult<object> (null)); + } + // extracted from ../../../../external/referencesource/mscorlib/system/threading/timer.cs internal void KeepRootedWhileScheduled() { diff --git a/mcs/class/corlib/System.Threading/WaitHandle.cs b/mcs/class/corlib/System.Threading/WaitHandle.cs index 9f4ed84739..a0d945c18a 100644 --- a/mcs/class/corlib/System.Threading/WaitHandle.cs +++ b/mcs/class/corlib/System.Threading/WaitHandle.cs @@ -31,7 +31,7 @@ using System; using System.Reflection; using System.Runtime.CompilerServices; -#if !DISABLE_REMOTING +#if FEATURE_REMOTING using System.Runtime.Remoting.Contexts; #endif using System.Runtime.InteropServices; @@ -61,7 +61,7 @@ namespace System.Threading try { waitableSafeHandle.DangerousAddRef (ref release); -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (exitContext) SynchronizationAttribute.ExitContext (); #endif @@ -94,7 +94,7 @@ namespace System.Threading if (release) waitableSafeHandle.DangerousRelease (); -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (exitContext) SynchronizationAttribute.EnterContext (); #endif @@ -111,7 +111,7 @@ namespace System.Threading var context = SynchronizationContext.Current; try { -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (exitContext) SynchronizationAttribute.ExitContext (); #endif @@ -151,7 +151,7 @@ namespace System.Threading waitHandles [i].SafeWaitHandle.DangerousRelease (); } -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (exitContext) SynchronizationAttribute.EnterContext (); #endif diff --git a/mcs/class/corlib/System/AppDomain.cs b/mcs/class/corlib/System/AppDomain.cs index 2a12495b40..0b72b70f0d 100644 --- a/mcs/class/corlib/System/AppDomain.cs +++ b/mcs/class/corlib/System/AppDomain.cs @@ -45,7 +45,9 @@ using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Runtime.Remoting; using System.Runtime.Remoting.Contexts; +#if !DISABLE_REMOTING using System.Runtime.Remoting.Channels; +#endif using System.Runtime.Remoting.Messaging; using System.Security; using System.Security.Permissions; @@ -72,8 +74,10 @@ namespace System { #endif #pragma warning disable 169 #region Sync with object-internals.h + #region Sync with LinkerDescriptor/mscorlib.xml IntPtr _mono_app_domain; #endregion + #endregion #pragma warning restore 169 static string _process_guid; @@ -194,6 +198,7 @@ namespace System { } } +#if !DISABLE_SECURITY public Evidence Evidence { get { #if MONOTOUCH @@ -239,6 +244,7 @@ namespace System { return (IPrincipal)_principal; } } +#endif // for AppDomain there is only an allowed (i.e. granted) set // http://msdn.microsoft.com/library/en-us/cpguide/html/cpcondetermininggrantedpermissions.asp @@ -269,7 +275,11 @@ namespace System { if (rd == CurrentDomain) default_domain = rd; else +#if DISABLE_REMOTING + throw new PlatformNotSupportedException (); +#else default_domain = (AppDomain) RemotingServices.GetDomainProxy (rd); +#endif } return default_domain; } @@ -1043,6 +1053,7 @@ namespace System { info.SerializeNonPrimitives (); AppDomain ad = (AppDomain) RemotingServices.GetDomainProxy (createDomain (friendlyName, info)); +#if !DISABLE_SECURITY if (securityInfo == null) { // get default domain's Evidence (unless we're are the default!) if (def == null) @@ -1052,6 +1063,7 @@ namespace System { } else ad._evidence = new Evidence (securityInfo); // copy +#endif #if !MOBILE if (info.AppDomainInitializer != null) { @@ -1338,19 +1350,20 @@ namespace System { } } - internal Assembly DoTypeResolve (Object name_or_tb) +#if MONO_FEATURE_SRE + internal Assembly DoTypeBuilderResolve (TypeBuilder tb) { if (TypeResolve == null) return null; - string name; - -#if MONO_FEATURE_SRE - if (name_or_tb is TypeBuilder) - name = ((TypeBuilder) name_or_tb).FullName; - else + return DoTypeResolve (tb.FullName); + } #endif - name = (string) name_or_tb; + + internal Assembly DoTypeResolve (string name) + { + if (TypeResolve == null) + return null; /* Prevent infinite recursion */ var ht = type_resolve_in_progress; @@ -1408,6 +1421,7 @@ namespace System { UnhandledException (this, args); } +#if !DISABLE_REMOTING internal byte[] GetMarshalledDomainObjRef () { ObjRef oref = RemotingServices.Marshal (AppDomain.CurrentDomain, null, typeof (AppDomain)); @@ -1433,6 +1447,7 @@ namespace System { else arrResponse = null; } +#endif #pragma warning restore 169 diff --git a/mcs/class/corlib/System/AppDomainSetup.cs b/mcs/class/corlib/System/AppDomainSetup.cs index ded3fb527c..fd43c4ae4d 100644 --- a/mcs/class/corlib/System/AppDomainSetup.cs +++ b/mcs/class/corlib/System/AppDomainSetup.cs @@ -91,6 +91,10 @@ namespace System byte [] serialized_non_primitives; + string manager_assembly; + string manager_type; + string [] partial_visible_assemblies; + public AppDomainSetup () { } @@ -118,6 +122,9 @@ namespace System domain_initializer_args = setup.domain_initializer_args; disallow_appbase_probe = setup.disallow_appbase_probe; configuration_bytes = setup.configuration_bytes; + manager_assembly = setup.manager_assembly; + manager_type = setup.manager_type; + partial_visible_assemblies = setup.partial_visible_assemblies; } public AppDomainSetup (ActivationArguments activationArguments) @@ -257,6 +264,31 @@ namespace System } } + // AppDomainManagerAssembly, ManagerType, and PartialTrustVisibleAssemblies + // don't really do anything within Mono, but will help with refsrc compat. + public string AppDomainManagerAssembly { + get { return manager_assembly; } + set { manager_assembly = value; } + } + + public string AppDomainManagerType { + get { return manager_type; } + set { manager_type = value; } + } + + public string [] PartialTrustVisibleAssemblies { + get { return partial_visible_assemblies; } + set { + if (value != null) { + partial_visible_assemblies = (string [])value.Clone(); + Array.Sort<string> (partial_visible_assemblies, StringComparer.OrdinalIgnoreCase); + } + else { + partial_visible_assemblies = null; + } + } + } + public string PrivateBinPath { get { return private_bin_path; diff --git a/mcs/class/corlib/System/ArgIterator.cs b/mcs/class/corlib/System/ArgIterator.cs index 16701f212f..1a9a56d854 100644 --- a/mcs/class/corlib/System/ArgIterator.cs +++ b/mcs/class/corlib/System/ArgIterator.cs @@ -58,6 +58,8 @@ namespace System sig = IntPtr.Zero; args = IntPtr.Zero; next_arg = num_args = 0; + if (arglist.args == IntPtr.Zero) + throw new PlatformNotSupportedException (); Setup (arglist.args, IntPtr.Zero); } @@ -67,6 +69,8 @@ namespace System sig = IntPtr.Zero; args = IntPtr.Zero; next_arg = num_args = 0; + if (arglist.args == IntPtr.Zero) + throw new PlatformNotSupportedException (); Setup (arglist.args, (IntPtr) ptr); } diff --git a/mcs/class/corlib/System/Array.cs b/mcs/class/corlib/System/Array.cs index 0951146787..7099848655 100644 --- a/mcs/class/corlib/System/Array.cs +++ b/mcs/class/corlib/System/Array.cs @@ -36,11 +36,6 @@ using System.Collections; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; - -#if NETCORE -using Internal.Runtime.CompilerServices; -#endif - using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime.ConstrainedExecution; diff --git a/mcs/class/corlib/System/Delegate.cs b/mcs/class/corlib/System/Delegate.cs index 7bf39bf2db..c42b60ca57 100644 --- a/mcs/class/corlib/System/Delegate.cs +++ b/mcs/class/corlib/System/Delegate.cs @@ -623,7 +623,7 @@ namespace System internal bool IsTransparentProxy () { -#if DISABLE_REMOTING +#if !FEATURE_REMOTING return false; #else return RemotingServices.IsTransparentProxy (m_target); diff --git a/mcs/class/corlib/System/DelegateSerializationHolder.cs b/mcs/class/corlib/System/DelegateSerializationHolder.cs index 91cbb36e24..e4b4a6f2c1 100644 --- a/mcs/class/corlib/System/DelegateSerializationHolder.cs +++ b/mcs/class/corlib/System/DelegateSerializationHolder.cs @@ -77,7 +77,7 @@ namespace System Type dt = dasm.GetType (type); if (realTarget != null) { -#if !DISABLE_REMOTING +#if FEATURE_REMOTING if (RemotingServices.IsTransparentProxy (realTarget)) { // The call to IsInstanceOfType will force the proxy // to load the real type of the remote object. This is diff --git a/mcs/class/corlib/System/Environment.cs b/mcs/class/corlib/System/Environment.cs index 4bdfaec043..c4617c0aed 100644 --- a/mcs/class/corlib/System/Environment.cs +++ b/mcs/class/corlib/System/Environment.cs @@ -563,10 +563,12 @@ namespace System { string dir = null; +#pragma warning disable 162 if (Environment.IsRunningOnWindows) dir = GetWindowsFolderPath ((int) folder); else dir = UnixGetFolderPath (folder, option); +#pragma warning restore 162 #if MONO_FEATURE_CAS if ((dir != null) && (dir.Length > 0) && SecurityManager.SecurityEnabled) { @@ -957,7 +959,7 @@ namespace System { } // private methods -#if (MONOTOUCH || MONODROID || XAMMAC) && !MOBILE_DESKTOP_HOST +#if (MONOTOUCH || MONODROID || XAMMAC || WASM) && !MOBILE_DESKTOP_HOST internal const bool IsRunningOnWindows = false; #else internal static bool IsRunningOnWindows { diff --git a/mcs/class/corlib/System/Guid.cs b/mcs/class/corlib/System/Guid.cs index 753855f7a7..4103cd3144 100644 --- a/mcs/class/corlib/System/Guid.cs +++ b/mcs/class/corlib/System/Guid.cs @@ -38,44 +38,13 @@ namespace System { partial struct Guid { - private static object _rngAccess = new object (); - private static RandomNumberGenerator _rng; - private static RandomNumberGenerator _fastRng; - - public static Guid NewGuid () - { - byte[] b = new byte [16]; - // thread-safe access to the prng - lock (_rngAccess) { - if (_rng == null) - _rng = RandomNumberGenerator.Create (); - _rng.GetBytes (b); - } - - Guid res = new Guid (b); - // Mask in Variant 1-0 in Bit[7..6] - res._d = (byte) ((res._d & 0x3fu) | 0x80u); - // Mask in Version 4 (random based Guid) in Bits[15..13] - res._c = (short) ((res._c & 0x0fffu) | 0x4000u); - - return res; - } - // used in ModuleBuilder so mcs doesn't need to invoke // CryptoConfig for simple assemblies. - internal static byte[] FastNewGuidArray () + internal static unsafe byte[] FastNewGuidArray () { byte[] guid = new byte [16]; - - // thread-safe access to the prng - lock (_rngAccess) { - // if known, use preferred RNG - if (_rng != null) - _fastRng = _rng; - // else use hardcoded default RNG (bypassing CryptoConfig) - if (_fastRng == null) - _fastRng = new RNGCryptoServiceProvider (); - _fastRng.GetBytes (guid); + fixed (byte *ptr = guid) { + Interop.GetRandomBytes(ptr, 16); } // Mask in Variant 1-0 in Bit[7..6] diff --git a/mcs/class/corlib/System/IntPtr.cs b/mcs/class/corlib/System/IntPtr.cs index d030bb19d3..fd0c84ee0e 100644 --- a/mcs/class/corlib/System/IntPtr.cs +++ b/mcs/class/corlib/System/IntPtr.cs @@ -51,9 +51,9 @@ namespace System { [Serializable] [System.Runtime.InteropServices.ComVisible (true)] - public unsafe struct IntPtr : ISerializable, IEquatable<IntPtr> + public unsafe readonly struct IntPtr : ISerializable, IEquatable<IntPtr> { - private void *m_value; + private readonly void* m_value; public static readonly IntPtr Zero; diff --git a/mcs/class/corlib/System/MarshalByRefObject.cs b/mcs/class/corlib/System/MarshalByRefObject.cs index 3ad8685b9a..0bafcbddc1 100644 --- a/mcs/class/corlib/System/MarshalByRefObject.cs +++ b/mcs/class/corlib/System/MarshalByRefObject.cs @@ -42,7 +42,7 @@ namespace System public abstract class MarshalByRefObject { [NonSerialized] -#if DISABLE_REMOTING +#if !FEATURE_REMOTING private object _identity; //Keep layout equal to avoid runtime issues #else private ServerIdentity _identity; // Holds marshalling iformation of the object @@ -52,7 +52,7 @@ namespace System { } -#if DISABLE_REMOTING +#if !FEATURE_REMOTING internal ServerIdentity ObjectIdentity { get { throw new NotSupportedException (); } set { throw new NotSupportedException (); } @@ -84,7 +84,7 @@ namespace System [SecurityPermission (SecurityAction.LinkDemand, Infrastructure = true)] public virtual ObjRef CreateObjRef (Type requestedType) { -#if DISABLE_REMOTING +#if !FEATURE_REMOTING throw new NotSupportedException (); #else // This method can only be called when this object has been marshalled @@ -99,7 +99,7 @@ namespace System [SecurityPermission (SecurityAction.LinkDemand, Infrastructure = true)] public object GetLifetimeService () { -#if DISABLE_REMOTING +#if !FEATURE_REMOTING throw new NotSupportedException (); #else if (_identity == null) @@ -111,7 +111,7 @@ namespace System [SecurityPermission (SecurityAction.LinkDemand, Infrastructure = true)] public virtual object InitializeLifetimeService () { -#if DISABLE_REMOTING +#if !FEATURE_REMOTING throw new NotSupportedException (); #else if (_identity != null && _identity.Lease != null) @@ -123,7 +123,7 @@ namespace System protected MarshalByRefObject MemberwiseClone (bool cloneIdentity) { -#if DISABLE_REMOTING +#if !FEATURE_REMOTING throw new NotSupportedException (); #else MarshalByRefObject mbr = (MarshalByRefObject) MemberwiseClone (); diff --git a/mcs/class/corlib/System/ModuleHandle.cs b/mcs/class/corlib/System/ModuleHandle.cs index c4cea13df1..c52cb47b39 100644 --- a/mcs/class/corlib/System/ModuleHandle.cs +++ b/mcs/class/corlib/System/ModuleHandle.cs @@ -61,7 +61,7 @@ namespace System get { if (value == IntPtr.Zero) throw new ArgumentNullException (String.Empty, "Invalid handle"); - return Module.GetMDStreamVersion (value); + return RuntimeModule.GetMDStreamVersion (value); } } @@ -69,7 +69,7 @@ namespace System { if (value == IntPtr.Zero) throw new ArgumentNullException (String.Empty, "Invalid handle"); - Module.GetPEKind (value, out peKind, out machine); + RuntimeModule.GetPEKind (value, out peKind, out machine); } public RuntimeFieldHandle ResolveFieldHandle (int fieldToken) @@ -104,7 +104,7 @@ namespace System ResolveTokenError error; if (value == IntPtr.Zero) throw new ArgumentNullException (String.Empty, "Invalid handle"); - IntPtr res = Module.ResolveTypeToken (value, typeToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); + IntPtr res = RuntimeModule.ResolveTypeToken (value, typeToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); if (res == IntPtr.Zero) throw new TypeLoadException (String.Format ("Could not load type '0x{0:x}' from assembly '0x{1:x}'", typeToken, value.ToInt64 ())); else @@ -117,7 +117,7 @@ namespace System ResolveTokenError error; if (value == IntPtr.Zero) throw new ArgumentNullException (String.Empty, "Invalid handle"); - IntPtr res = Module.ResolveMethodToken (value, methodToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); + IntPtr res = RuntimeModule.ResolveMethodToken (value, methodToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); if (res == IntPtr.Zero) throw new Exception (String.Format ("Could not load method '0x{0:x}' from assembly '0x{1:x}'", methodToken, value.ToInt64 ())); else @@ -130,7 +130,7 @@ namespace System ResolveTokenError error; if (value == IntPtr.Zero) throw new ArgumentNullException (String.Empty, "Invalid handle"); - IntPtr res = Module.ResolveFieldToken (value, fieldToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); + IntPtr res = RuntimeModule.ResolveFieldToken (value, fieldToken, ptrs_from_handles (typeInstantiationContext), ptrs_from_handles (methodInstantiationContext), out error); if (res == IntPtr.Zero) throw new Exception (String.Format ("Could not load field '0x{0:x}' from assembly '0x{1:x}'", fieldToken, value.ToInt64 ())); else diff --git a/mcs/class/corlib/System/MonoCustomAttrs.cs b/mcs/class/corlib/System/MonoCustomAttrs.cs index 65ad11c801..356af0cc91 100644 --- a/mcs/class/corlib/System/MonoCustomAttrs.cs +++ b/mcs/class/corlib/System/MonoCustomAttrs.cs @@ -54,7 +54,7 @@ namespace System { Type type = obj as Type; #if !FULL_AOT_RUNTIME - if ((type is RuntimeType) || (type is TypeBuilder)) + if ((type is RuntimeType) || (RuntimeFeature.IsDynamicCodeSupported && type is TypeBuilder)) #else if (type is RuntimeType) #endif @@ -88,7 +88,7 @@ namespace System return pseudoAttrs; else return new object [] { pseudoAttrs [i] }; - return EmptyArray<object>.Value; + return Array.Empty<object> (); } return pseudoAttrs; @@ -121,6 +121,7 @@ namespace System internal static object[] GetCustomAttributesBase (ICustomAttributeProvider obj, Type attributeType, bool inheritedOnly) { object[] attrs; + if (IsUserCattrProvider (obj)) attrs = obj.GetCustomAttributes (attributeType, true); else @@ -146,13 +147,18 @@ namespace System internal static object[] GetCustomAttributes (ICustomAttributeProvider obj, Type attributeType, bool inherit) { if (obj == null) - throw new ArgumentNullException ("obj"); + throw new ArgumentNullException (nameof (obj)); if (attributeType == null) - throw new ArgumentNullException ("attributeType"); + throw new ArgumentNullException (nameof (attributeType)); if (attributeType == typeof (MonoCustomAttrs)) attributeType = null; - + +#if NETCORE + if (attributeType == typeof (Attribute)) + attributeType = null; +#endif + object[] r; object[] res = GetCustomAttributesBase (obj, attributeType, false); // shortcut @@ -613,7 +619,16 @@ namespace System return GetBaseEventDefinition ((RuntimeEventInfo)obj); else if (obj is RuntimeMethodInfo) method = (MethodInfo) obj; - + if (obj is RuntimeParameterInfo parinfo) { + var member = parinfo.Member; + if (member is MethodInfo) { + method = (MethodInfo)member; + MethodInfo bmethod = ((RuntimeMethodInfo)method).GetBaseMethod (); + if (bmethod == method) + return null; + return bmethod.GetParameters ()[parinfo.Position]; + } + } /** * ParameterInfo -> null * Assembly -> null diff --git a/mcs/class/corlib/System/MulticastDelegate.cs b/mcs/class/corlib/System/MulticastDelegate.cs index 6a67652037..50f312941a 100644 --- a/mcs/class/corlib/System/MulticastDelegate.cs +++ b/mcs/class/corlib/System/MulticastDelegate.cs @@ -286,5 +286,12 @@ namespace System return !d1.Equals (d2); } + +#if NETCORE + internal override object GetTarget() + { + return delegates?.Length > 0 ? delegates [delegates.Length - 1].GetTarget () : base.GetTarget (); + } +#endif } } diff --git a/mcs/class/corlib/System/RuntimeFieldHandle.cs b/mcs/class/corlib/System/RuntimeFieldHandle.cs index 15419df69e..40a467ffb2 100644 --- a/mcs/class/corlib/System/RuntimeFieldHandle.cs +++ b/mcs/class/corlib/System/RuntimeFieldHandle.cs @@ -67,6 +67,11 @@ namespace System } } + internal bool IsNullHandle () + { + return value == IntPtr.Zero; + } + public void GetObjectData (SerializationInfo info, StreamingContext context) { if (info == null) @@ -116,12 +121,11 @@ namespace System SetValueInternal (field, obj, value); } - unsafe internal static Object GetValueDirect (RuntimeFieldInfo field, RuntimeType fieldType, void *pTypedRef, RuntimeType contextType) - { - throw new NotImplementedException ("GetValueDirect"); - } + [MethodImplAttribute(MethodImplOptions.InternalCall)] + static unsafe extern internal Object GetValueDirect (RuntimeFieldInfo field, RuntimeType fieldType, void *pTypedRef, RuntimeType contextType); [MethodImplAttribute(MethodImplOptions.InternalCall)] static unsafe extern internal void SetValueDirect (RuntimeFieldInfo field, RuntimeType fieldType, void* pTypedRef, Object value, RuntimeType contextType); } + } diff --git a/mcs/class/corlib/System/RuntimeTypeHandle.cs b/mcs/class/corlib/System/RuntimeTypeHandle.cs index 9ef2f5404b..c308ba2e48 100644 --- a/mcs/class/corlib/System/RuntimeTypeHandle.cs +++ b/mcs/class/corlib/System/RuntimeTypeHandle.cs @@ -156,37 +156,64 @@ namespace System return GetGenericTypeDefinition_impl (type); } - internal static bool HasElementType (RuntimeType type) - { - return IsArray (type) || IsByRef (type) || IsPointer (type); - } - internal static bool HasProxyAttribute (RuntimeType type) { throw new NotImplementedException ("HasProxyAttribute"); } + internal static bool IsPrimitive (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return (corElemType >= CorElementType.ELEMENT_TYPE_BOOLEAN && corElemType <= CorElementType.ELEMENT_TYPE_R8) || + corElemType == CorElementType.ELEMENT_TYPE_I || + corElemType == CorElementType.ELEMENT_TYPE_U; + } + + internal static bool IsByRef (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_BYREF; + } + + internal static bool IsPointer (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_PTR; + } + + internal static bool IsArray (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_ARRAY || corElemType == CorElementType.ELEMENT_TYPE_SZARRAY; + } + + internal static bool IsSzArray (RuntimeType type) + { + CorElementType corElemType = GetCorElementType (type); + return corElemType == CorElementType.ELEMENT_TYPE_SZARRAY; + } + + internal static bool HasElementType (RuntimeType type) + { + CorElementType corElemType = GetCorElementType(type); + + return ((corElemType == CorElementType.ELEMENT_TYPE_ARRAY || corElemType == CorElementType.ELEMENT_TYPE_SZARRAY) // IsArray + || (corElemType == CorElementType.ELEMENT_TYPE_PTR) // IsPointer + || (corElemType == CorElementType.ELEMENT_TYPE_BYREF)); // IsByRef + } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern CorElementType GetCorElementType (RuntimeType type); + [MethodImplAttribute(MethodImplOptions.InternalCall)] internal extern static bool HasInstantiation (RuntimeType type); - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal extern static bool IsArray(RuntimeType type); - - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal extern static bool IsByRef (RuntimeType type); - [MethodImplAttribute (MethodImplOptions.InternalCall)] internal extern static bool IsComObject (RuntimeType type); [MethodImplAttribute(MethodImplOptions.InternalCall)] internal extern static bool IsInstanceOfType (RuntimeType type, Object o); - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal extern static bool IsPointer (RuntimeType type); - - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal extern static bool IsPrimitive (RuntimeType type); - [MethodImplAttribute(MethodImplOptions.InternalCall)] internal extern static bool HasReferences (RuntimeType type); @@ -210,12 +237,6 @@ namespace System return false; } - internal static bool IsSzArray(RuntimeType type) - { - // TODO: Better check - return IsArray (type) && type.GetArrayRank () == 1; - } - internal static bool IsInterface (RuntimeType type) { return (type.Attributes & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Interface; @@ -323,5 +344,19 @@ namespace System throw new TypeLoadException ("Error loading '" + typeName + "'"); return t; } + + internal static IntPtr[] CopyRuntimeTypeHandles (RuntimeTypeHandle[] inHandles, out int length) + { + if (inHandles == null || inHandles.Length == 0) { + length = 0; + return null; + } + + IntPtr[] outHandles = new IntPtr [inHandles.Length]; + for (int i = 0; i < inHandles.Length; i++) + outHandles [i] = inHandles [i].Value; + length = outHandles.Length; + return outHandles; + } } } diff --git a/mcs/class/corlib/System/TimeZoneInfo.MonoTouch.cs b/mcs/class/corlib/System/TimeZoneInfo.MonoTouch.cs index ba161b3f2e..49b682b8a9 100644 --- a/mcs/class/corlib/System/TimeZoneInfo.MonoTouch.cs +++ b/mcs/class/corlib/System/TimeZoneInfo.MonoTouch.cs @@ -44,10 +44,13 @@ namespace System { public partial class TimeZoneInfo { + [DllImport ("__Internal")] + extern static string xamarin_timezone_get_local_name (); + static TimeZoneInfo CreateLocal () { using (Stream stream = GetMonoTouchData (null)) { - return BuildFromStream ("Local", stream); + return BuildFromStream (xamarin_timezone_get_local_name (), stream); } } @@ -68,7 +71,7 @@ namespace System { } } } - + [DllImport ("__Internal")] extern static IntPtr xamarin_timezone_get_names (ref int count); diff --git a/mcs/class/corlib/System/TimeZoneInfo.WinRT.cs b/mcs/class/corlib/System/TimeZoneInfo.WinRT.cs index fc27fe267d..9b6c00579b 100755 --- a/mcs/class/corlib/System/TimeZoneInfo.WinRT.cs +++ b/mcs/class/corlib/System/TimeZoneInfo.WinRT.cs @@ -338,8 +338,17 @@ namespace System // EnumDynamicTimeZoneInformation() might not be available. } - if (result.Count == 0) + if (result.Count == 0) { result.Add (Local); + result.Add (Utc); + } + + result.Sort ((x, y) => + { + int comparison = x.BaseUtcOffset.CompareTo(y.BaseUtcOffset); + return comparison == 0 ? string.CompareOrdinal(x.DisplayName, y.DisplayName) : comparison; + }); + return result; } } diff --git a/mcs/class/corlib/System/TimeZoneInfo.cs b/mcs/class/corlib/System/TimeZoneInfo.cs index 72ad64ad3f..28366d5868 100644 --- a/mcs/class/corlib/System/TimeZoneInfo.cs +++ b/mcs/class/corlib/System/TimeZoneInfo.cs @@ -919,8 +919,9 @@ namespace System DateTime DST_end = TransitionPoint (rule.DaylightTransitionEnd, year + ((rule.DaylightTransitionStart.Month < rule.DaylightTransitionEnd.Month) ? 0 : 1)); if (dateTime.Kind == DateTimeKind.Utc) { DST_start -= BaseUtcOffset; - DST_end -= (BaseUtcOffset + rule.DaylightDelta); + DST_end -= BaseUtcOffset; } + DST_end -= rule.DaylightDelta; return (dateTime >= DST_start && dateTime < DST_end); } diff --git a/mcs/class/corlib/System/TypeSpec.cs b/mcs/class/corlib/System/TypeSpec.cs index 3204323679..3391c1fd34 100644 --- a/mcs/class/corlib/System/TypeSpec.cs +++ b/mcs/class/corlib/System/TypeSpec.cs @@ -142,7 +142,7 @@ namespace System { if (nested != null) return nested; else - return EmptyArray<TypeName>.Value; + return Array.Empty<TypeName> (); } } @@ -151,7 +151,7 @@ namespace System { if (modifier_spec != null) return modifier_spec; else - return EmptyArray<ModifierSpec>.Value; + return Array.Empty<ModifierSpec> (); } } diff --git a/mcs/class/corlib/System/UIntPtr.cs b/mcs/class/corlib/System/UIntPtr.cs index 41c5d99d64..781f321147 100644 --- a/mcs/class/corlib/System/UIntPtr.cs +++ b/mcs/class/corlib/System/UIntPtr.cs @@ -46,10 +46,10 @@ namespace System [Serializable] [CLSCompliant (false)] [System.Runtime.InteropServices.ComVisible (true)] - public unsafe struct UIntPtr : ISerializable, IEquatable<UIntPtr> + public unsafe readonly struct UIntPtr : ISerializable, IEquatable<UIntPtr> { public static readonly UIntPtr Zero = new UIntPtr (0u); - private void* _pointer; + private readonly void* _pointer; public UIntPtr (ulong value) { diff --git a/mcs/class/corlib/System/__ComObject.cs b/mcs/class/corlib/System/__ComObject.cs index 38f14ade22..dceb2fa7e3 100644 --- a/mcs/class/corlib/System/__ComObject.cs +++ b/mcs/class/corlib/System/__ComObject.cs @@ -32,7 +32,7 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if !FULL_AOT_RUNTIME +#if !FULL_AOT_RUNTIME && !DISABLE_REMOTING using Mono.Interop; using System.Collections; using System.Runtime.InteropServices; diff --git a/mcs/class/corlib/Test/Mono/MonoNativePlatformType.cs b/mcs/class/corlib/Test/Mono/MonoNativePlatformType.cs index 6e16d9dda5..45f624b3d9 100644 --- a/mcs/class/corlib/Test/Mono/MonoNativePlatformType.cs +++ b/mcs/class/corlib/Test/Mono/MonoNativePlatformType.cs @@ -36,6 +36,8 @@ namespace Mono MONO_NATIVE_PLATFORM_TYPE_IOS = 2, MONO_NATIVE_PLATFORM_TYPE_LINUX = 3, MONO_NATIVE_PLATFORM_TYPE_AIX = 4, + MONO_NATIVE_PLATFORM_TYPE_ANDROID = 5, + MONO_NATIVE_PLATFORM_TYPE_FREEBSD = 6, MONO_NATIVE_PLATFORM_TYPE_IPHONE = 0x100, MONO_NATIVE_PLATFORM_TYPE_TV = 0x200, diff --git a/mcs/class/corlib/Test/System.Collections.ObjectModel/CollectionTest.cs b/mcs/class/corlib/Test/System.Collections.ObjectModel/CollectionTest.cs index 922cc4722e..c73126efa3 100644 --- a/mcs/class/corlib/Test/System.Collections.ObjectModel/CollectionTest.cs +++ b/mcs/class/corlib/Test/System.Collections.ObjectModel/CollectionTest.cs @@ -60,7 +60,6 @@ namespace MonoTests.System.Collections.ObjectModel object cLock = ((ICollection) c).SyncRoot; Assert.IsNotNull (cLock); - Assert.IsTrue (cLock.GetType ().Equals (typeof (object))); } [Test] diff --git a/mcs/class/corlib/Test/System.Collections/CaseInsensitiveComparerTest.cs b/mcs/class/corlib/Test/System.Collections/CaseInsensitiveComparerTest.cs index aa022569a3..a016721ba7 100644 --- a/mcs/class/corlib/Test/System.Collections/CaseInsensitiveComparerTest.cs +++ b/mcs/class/corlib/Test/System.Collections/CaseInsensitiveComparerTest.cs @@ -33,6 +33,7 @@ namespace MonoTests.System.Collections { } [Test] + [Category ("ManagedCollator")] public void TestCompare_Culture () { CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture; diff --git a/mcs/class/corlib/Test/System.Collections/CaseInsensitiveHashCodeProviderTest.cs b/mcs/class/corlib/Test/System.Collections/CaseInsensitiveHashCodeProviderTest.cs index c7ac092903..a0e9a8da49 100644 --- a/mcs/class/corlib/Test/System.Collections/CaseInsensitiveHashCodeProviderTest.cs +++ b/mcs/class/corlib/Test/System.Collections/CaseInsensitiveHashCodeProviderTest.cs @@ -80,6 +80,7 @@ namespace MonoTests.System.Collections } [Test] + [Category ("ManagedCollator")] public void HashCode () { CaseInsensitiveHashCodeProvider cih = new CaseInsensitiveHashCodeProvider (); diff --git a/mcs/class/corlib/Test/System.Collections/ComparerTest.cs b/mcs/class/corlib/Test/System.Collections/ComparerTest.cs index dd4044d92a..64016803a8 100644 --- a/mcs/class/corlib/Test/System.Collections/ComparerTest.cs +++ b/mcs/class/corlib/Test/System.Collections/ComparerTest.cs @@ -51,6 +51,7 @@ namespace MonoTests.System.Collections { } [Test] + [Category ("ManagedCollator")] public void Invariant () { Comparer c = Comparer.DefaultInvariant; @@ -71,6 +72,7 @@ namespace MonoTests.System.Collections { } [Test] + [Category ("ManagedCollator")] public void Constructor () { Comparer c = new Comparer (CultureInfo.InvariantCulture); diff --git a/mcs/class/corlib/Test/System.Collections/HashtableTest.cs b/mcs/class/corlib/Test/System.Collections/HashtableTest.cs index bd60687f6f..67564e7ca2 100644 --- a/mcs/class/corlib/Test/System.Collections/HashtableTest.cs +++ b/mcs/class/corlib/Test/System.Collections/HashtableTest.cs @@ -532,6 +532,7 @@ public class HashtableTest { } [Test] + [Category ("Remoting")] public void TestSerialization2 () { // Test from bug #70570 MemoryStream stream = new MemoryStream(); @@ -723,7 +724,8 @@ public class HashtableTest { /// Test hashtable with CaseInsensitiveHashCodeProvider /// and CaseInsensitive comparer. /// </summary> - [Test] + [Test] + [Category ("ManagedCollator")] public void TestCaseInsensitive () { // Not very meaningfull test, just to make diff --git a/mcs/class/corlib/Test/System.Globalization/CalendarTest.cs b/mcs/class/corlib/Test/System.Globalization/CalendarTest.cs index ef0af8056c..0e4307f1bf 100644 --- a/mcs/class/corlib/Test/System.Globalization/CalendarTest.cs +++ b/mcs/class/corlib/Test/System.Globalization/CalendarTest.cs @@ -123,6 +123,7 @@ sealed class Date { } // class Date [TestFixture] +[Category ("Calendars")] public class CalendarTest { private Calendar[] acal; private GregorianCalendar gcal; @@ -427,7 +428,7 @@ public class CalendarTest { new Date(28,10,2038,1), new Date(13,10,1460,1), new Date(12,2,5799,1), - new Date(10,11,50,4), + new Date(10,11,20,5), new Date(10,11,127,1), new Date(10,11,4371,1), new Date(10,11,2581,1)); @@ -435,7 +436,7 @@ public class CalendarTest { new Date(5,7,2094,1), new Date(6,3,1518,1), new Date(5,11,5854,1), - new Date(18,7,106,4), + new Date(18,7,76,5), new Date(18,7,183,1), new Date(18,7,4427,1), new Date(18,7,2637,1)); @@ -494,7 +495,7 @@ public class CalendarTest { foreach (Calendar cal in acal) { int check = 1; if (cal is JapaneseCalendar) - check = 4; + check = 5; Assert.AreEqual(check, cal.Eras.Length, String.Format("D01 {0}.Eras.Length", cal)); cal.Eras[0] = 29; @@ -506,11 +507,12 @@ public class CalendarTest { public void TestErasProperty2() { Assert.AreEqual(1, clcal.Eras.Length, "cn"); Assert.AreEqual(1, tlcal.Eras.Length, "tw"); - Assert.AreEqual(2, jlcal.Eras.Length, "jp"); + Assert.AreEqual(3, jlcal.Eras.Length, "jp"); Assert.AreEqual(1, klcal.Eras.Length, "kr"); - Assert.AreEqual(4, jlcal.Eras [0], "jp.1"); - Assert.AreEqual(3, jlcal.Eras [1], "jp.2"); + Assert.AreEqual(5, jlcal.Eras [0], "jp.1"); + Assert.AreEqual(4, jlcal.Eras [1], "jp.2"); + Assert.AreEqual(3, jlcal.Eras [2], "jp.3"); } [Test] diff --git a/mcs/class/corlib/Test/System.Globalization/CompareInfoTest.cs b/mcs/class/corlib/Test/System.Globalization/CompareInfoTest.cs index 1cfd65c2ef..fca3fbd546 100644 --- a/mcs/class/corlib/Test/System.Globalization/CompareInfoTest.cs +++ b/mcs/class/corlib/Test/System.Globalization/CompareInfoTest.cs @@ -15,6 +15,7 @@ namespace MonoTests.System.Globalization { [TestFixture] +[Category ("ManagedCollator")] public class CompareInfoTest { static bool doTest = Environment.GetEnvironmentVariable ("MONO_DISABLE_MANAGED_COLLATION") != "yes"; diff --git a/mcs/class/corlib/Test/System.Globalization/DateTimeFormatInfoTest.cs b/mcs/class/corlib/Test/System.Globalization/DateTimeFormatInfoTest.cs index 223a153204..a2c5a02005 100644 --- a/mcs/class/corlib/Test/System.Globalization/DateTimeFormatInfoTest.cs +++ b/mcs/class/corlib/Test/System.Globalization/DateTimeFormatInfoTest.cs @@ -92,6 +92,7 @@ namespace MonoTests.System.Globalization } [Test] + [Category ("Calendars")] public void TestSpecificCultureFormats_es_ES () { CultureInfo ci = new CultureInfo ("es-ES"); @@ -119,6 +120,7 @@ namespace MonoTests.System.Globalization } [Test] + [Category ("Calendars")] public void MonthGenitiveNames () { var dfi = new CultureInfo ("cs-CZ").DateTimeFormat; @@ -127,6 +129,7 @@ namespace MonoTests.System.Globalization } [Test] + [Category ("Calendars")] public void QuoteInValue () { var culture = new CultureInfo("mt-MT"); @@ -144,6 +147,7 @@ namespace MonoTests.System.Globalization } [Test] + [Category ("Calendars")] public void TestFirstYearOfJapaneseEra () { DateTimeFormatInfo jpnFormat = new CultureInfo ("ja-JP").DateTimeFormat; diff --git a/mcs/class/corlib/Test/System.Globalization/EastAsianLunisolarCalendarTest.cs b/mcs/class/corlib/Test/System.Globalization/EastAsianLunisolarCalendarTest.cs index 8cf1f629c3..a7be08cbd7 100644 --- a/mcs/class/corlib/Test/System.Globalization/EastAsianLunisolarCalendarTest.cs +++ b/mcs/class/corlib/Test/System.Globalization/EastAsianLunisolarCalendarTest.cs @@ -37,6 +37,7 @@ using System.IO; namespace MonoTests.System.Globalization { [TestFixture] + [Category ("Calendars")] public class EastAsianLunisolarCalendarTest { static ChineseLunisolarCalendar cn = new ChineseLunisolarCalendar (); @@ -48,30 +49,30 @@ namespace MonoTests.System.Globalization public void ToDateTime () { Assert.AreEqual (new DateTime (2000, 2, 5), cn.ToDateTime (2000, 1, 1, 0, 0, 0, 0), "cn1"); - Assert.AreEqual (new DateTime (2000, 2, 5), jp.ToDateTime (12, 1, 1, 0, 0, 0, 0), "jp1"); // since 1988 (current epoch) + Assert.AreEqual (new DateTime (2000, 2, 5), jp.ToDateTime (12, 1, 1, 0, 0, 0, 0, 4), "jp1"); // since 1988 (current epoch) Assert.AreEqual (new DateTime (2000, 2, 5), tw.ToDateTime (89, 1, 1, 0, 0, 0, 0), "tw1"); // since 1912 (current epoch) Assert.AreEqual (new DateTime (2000, 2, 5), kr.ToDateTime (2000, 1, 1, 0, 0, 0, 0), "kr1"); Assert.AreEqual (new DateTime (2001, 1, 24), cn.ToDateTime (2001, 1, 1, 0, 0, 0, 0), "cn2"); - Assert.AreEqual (new DateTime (2001, 1, 24), jp.ToDateTime (13, 1, 1, 0, 0, 0, 0), "jp2"); + Assert.AreEqual (new DateTime (2001, 1, 24), jp.ToDateTime (13, 1, 1, 0, 0, 0, 0, 4), "jp2"); Assert.AreEqual (new DateTime (2001, 1, 24), tw.ToDateTime (90, 1, 1, 0, 0, 0, 0), "tw2"); Assert.AreEqual (new DateTime (2001, 1, 24), kr.ToDateTime (2001, 1, 1, 0, 0, 0, 0), "kr2"); Assert.AreEqual (new DateTime (2002, 2, 12), cn.ToDateTime (2002, 1, 1, 0, 0, 0, 0), "cn3"); - Assert.AreEqual (new DateTime (2002, 2, 12), jp.ToDateTime (14, 1, 1, 0, 0, 0, 0), "jp3"); + Assert.AreEqual (new DateTime (2002, 2, 12), jp.ToDateTime (14, 1, 1, 0, 0, 0, 0, 4), "jp3"); Assert.AreEqual (new DateTime (2002, 2, 12), tw.ToDateTime (91, 1, 1, 0, 0, 0, 0), "tw3"); Assert.AreEqual (new DateTime (2002, 2, 12), kr.ToDateTime (2002, 1, 1, 0, 0, 0, 0), "kr3"); // actually it is 5th month which is leap, but that // does not afffect on resulting DateTime Assert.AreEqual (new DateTime (2001, 5, 23), cn.ToDateTime (2001, 5, 1, 0, 0, 0, 0), "cn4"); - Assert.AreEqual (new DateTime (2001, 5, 23), jp.ToDateTime (13, 5, 1, 0, 0, 0, 0), "jp4"); + Assert.AreEqual (new DateTime (2001, 5, 23), jp.ToDateTime (13, 5, 1, 0, 0, 0, 0, 4), "jp4"); Assert.AreEqual (new DateTime (2001, 5, 23), tw.ToDateTime (90, 5, 1, 0, 0, 0, 0), "tw4"); Assert.AreEqual (new DateTime (2001, 5, 23), kr.ToDateTime (2001, 5, 1, 0, 0, 0, 0), "kr4"); // here the leap month works. Assert.AreEqual (new DateTime (2002, 2, 11), cn.ToDateTime (2001, 13, 30, 0, 0, 0, 0), "cn5"); - Assert.AreEqual (new DateTime (2002, 2, 11), jp.ToDateTime (13, 13, 30, 0, 0, 0, 0), "jp5"); + Assert.AreEqual (new DateTime (2002, 2, 11), jp.ToDateTime (13, 13, 30, 0, 0, 0, 0, 4), "jp5"); Assert.AreEqual (new DateTime (2002, 2, 11), tw.ToDateTime (90, 13, 30, 0, 0, 0, 0), "tw5"); Assert.AreEqual (new DateTime (2002, 2, 11), kr.ToDateTime (2001, 13, 30, 0, 0, 0, 0), "kr5"); @@ -114,7 +115,7 @@ namespace MonoTests.System.Globalization for (int i = 0; i < 60; i++) Assert.AreEqual (leapYears [i % 19], cn.IsLeapYear (2000 + i), "cn" + i); for (int i = 0; i < 48; i++) // only 1-to-61 are allowed - Assert.AreEqual (leapYears [i % 19], jp.IsLeapYear (12 + i), "jp" + i); + Assert.AreEqual (leapYears [i % 19], jp.IsLeapYear (12 + i, 4), "jp" + i); for (int i = 0; i < 50; i++) Assert.AreEqual (leapYears [i % 19], tw.IsLeapYear (89 + i), "tw" + i); for (int i = 0; i < 50; i++) @@ -177,7 +178,7 @@ namespace MonoTests.System.Globalization d [29] = 6; for (int y = 12; y < 32; y++) for (int m = 1; m <= 12; m++) - Assert.AreEqual (d.ContainsKey (y) && d [y] == m, jp.IsLeapMonth (y, m), "jp" + y + "/" + m); + Assert.AreEqual (d.ContainsKey (y) && d [y] == m, jp.IsLeapMonth (y, m, 4), "jp" + y + "/" + m); d = new Dictionary<int,int> (); d [2001] = 5; diff --git a/mcs/class/corlib/Test/System.Globalization/IdnMappingTest.cs b/mcs/class/corlib/Test/System.Globalization/IdnMappingTest.cs index da61f089ef..13c5f240bf 100644 --- a/mcs/class/corlib/Test/System.Globalization/IdnMappingTest.cs +++ b/mcs/class/corlib/Test/System.Globalization/IdnMappingTest.cs @@ -95,7 +95,7 @@ namespace MonoTests.System.Globalization public void GetAscii () { IdnMapping m = new IdnMapping (); - GetAscii (m, "www.mono-project.com", "www.mono-project.com", 1); + GetAscii (m, "www.example.com", "www.example.com", 1); GetAscii (m, "a\uFF61b", "a.b", 2); // umm... does it reject anything larger than U+FFFF ?? @@ -168,7 +168,7 @@ namespace MonoTests.System.Globalization public void GetUnicode () { IdnMapping m = new IdnMapping (); - GetAscii (m, "www.mono-project.com", "www.mono-project.com", 1); + GetAscii (m, "www.example.com", "www.example.com", 1); GetAscii (m, "a\uFF61b", "a.b", 2); // umm... does it reject anything larger than U+FFFF ?? diff --git a/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileTest.cs b/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileTest.cs index e1702b7ab9..7dbdcc17c4 100644 --- a/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileTest.cs +++ b/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileTest.cs @@ -994,6 +994,7 @@ namespace MonoTests.System.IO.IsolatedStorageTest { } [Test] + [Category("AndroidSdksNotWorking")] public void MoveFile () { IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly (); diff --git a/mcs/class/corlib/Test/System.IO/DirectoryTest.cs b/mcs/class/corlib/Test/System.IO/DirectoryTest.cs index 07a6d439e7..52adeafa86 100644 --- a/mcs/class/corlib/Test/System.IO/DirectoryTest.cs +++ b/mcs/class/corlib/Test/System.IO/DirectoryTest.cs @@ -1723,13 +1723,14 @@ public class DirectoryTest Directory.SetCurrentDirectory (" "); } - [Test] // https://github.com/mono/mono/issues/13030 - public void GetLogicalDrivesNotEmpty () - { - CollectionAssert.IsNotEmpty (Directory.GetLogicalDrives ()); - } + [Test] // https://github.com/mono/mono/issues/13030 + public void GetLogicalDrivesNotEmpty () + { + CollectionAssert.IsNotEmpty (Directory.GetLogicalDrives ()); + } [Test] + [Category("AndroidSdksNotWorking")] public void GetNoFiles () // Bug 58875. This throwed an exception on windows. { DirectoryInfo dir = new DirectoryInfo ("."); diff --git a/mcs/class/corlib/Test/System.IO/DriveInfoTest.cs b/mcs/class/corlib/Test/System.IO/DriveInfoTest.cs index 7776faaa6a..51e19cd4b1 100644 --- a/mcs/class/corlib/Test/System.IO/DriveInfoTest.cs +++ b/mcs/class/corlib/Test/System.IO/DriveInfoTest.cs @@ -30,6 +30,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.IO; +using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; @@ -43,7 +44,7 @@ namespace MonoTests.System.IO [Test] public void Constructor () { - if (Environment.OSVersion.Platform != PlatformID.Win32NT) + if (!RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) Assert.Ignore ("The Jenkins builders don't have '/' mounted, just testing Windows for now."); var drive = new DriveInfo ("C:\\"); @@ -54,7 +55,22 @@ namespace MonoTests.System.IO [Test] public void ConstructorThrowsOnNonExistingDrive () { - Assert.Throws<ArgumentException> (() => new DriveInfo ("/monodriveinfotest")); + Assert.Throws<ArgumentException> (() => new DriveInfo ("monodriveinfotest")); + } + + [Test] + [Category ("NotWasm")] // it doesn't know about 'memfs' drive format + public void ConstructorGetsValidDriveFromNonDriveString () + { + if (!RuntimeInformation.IsOSPlatform (OSPlatform.Windows) && !RuntimeInformation.IsOSPlatform (OSPlatform.OSX)) + Assert.Ignore ("Some Linux-hosted CI builders don't have '/' mounted, just testing Windows and MacOS for now."); + + var tempPath = Path.GetTempPath (); + var drive = new DriveInfo (tempPath); + ValidateDriveInfo (drive); + + drive = new DriveInfo (tempPath.ToUpper()); + ValidateDriveInfo (drive); } [Test] diff --git a/mcs/class/corlib/Test/System.IO/FileInfoTest.cs b/mcs/class/corlib/Test/System.IO/FileInfoTest.cs index ea492a40c7..68618e44c4 100644 --- a/mcs/class/corlib/Test/System.IO/FileInfoTest.cs +++ b/mcs/class/corlib/Test/System.IO/FileInfoTest.cs @@ -622,6 +622,7 @@ namespace MonoTests.System.IO } [Test] + [Category("AndroidSdksNotWorking")] public void MoveTo () { string path1 = TempFolder + DSC + "FIT.MoveTo.Source.Test"; @@ -651,6 +652,7 @@ namespace MonoTests.System.IO } [Test] //Covers #18361 + [Category("AndroidSdksNotWorking")] public void MoveTo_SameName () { string name = "FIT.MoveTo.SameName.Test"; @@ -880,6 +882,7 @@ namespace MonoTests.System.IO } [Test] //Covers #38796 + [Category("AndroidSdksNotWorking")] public void ToStringAfterMoveTo () { string name1 = "FIT.ToStringAfterMoveTo.Test"; diff --git a/mcs/class/corlib/Test/System.IO/FileTest.cs b/mcs/class/corlib/Test/System.IO/FileTest.cs index 7ed89fef46..13f9221b02 100644 --- a/mcs/class/corlib/Test/System.IO/FileTest.cs +++ b/mcs/class/corlib/Test/System.IO/FileTest.cs @@ -913,6 +913,7 @@ namespace MonoTests.System.IO } [Test] + [Category("AndroidSdksNotWorking")] public void Move () { string bar = tmpFolder + Path.DirectorySeparatorChar + "bar"; @@ -923,7 +924,7 @@ namespace MonoTests.System.IO } Assert.IsTrue (File.Exists (bar), "#1"); - Assert.DoesNotThrow (() => File.Move (bar, baz), "#5"); + File.Move (bar, baz); Assert.IsFalse (File.Exists (bar), "#2"); Assert.IsTrue (File.Exists (baz), "#3"); @@ -939,7 +940,7 @@ namespace MonoTests.System.IO Directory.CreateDirectory (dir); Directory.CreateDirectory (dir2); File.Create (dir_foo).Close (); - Assert.DoesNotThrow (() => File.Move (dir_foo, dir2_foo), "#6"); + File.Move (dir_foo, dir2_foo); Assert.IsTrue (File.Exists (dir2_foo), "#4"); Directory.Delete (dir, true); @@ -2507,6 +2508,7 @@ namespace MonoTests.System.IO [Test] [Category("NotWasm")] + [Category("AndroidSdksNotWorking")] public void ReplaceTest () { string tmp = Path.Combine (tmpFolder, "ReplaceTest"); diff --git a/mcs/class/corlib/Test/System.Reflection.Emit/AssemblyBuilderTest.cs b/mcs/class/corlib/Test/System.Reflection.Emit/AssemblyBuilderTest.cs index c099198667..3d21daf732 100644 --- a/mcs/class/corlib/Test/System.Reflection.Emit/AssemblyBuilderTest.cs +++ b/mcs/class/corlib/Test/System.Reflection.Emit/AssemblyBuilderTest.cs @@ -99,12 +99,14 @@ public class AssemblyBuilderTest return mb; } +#if !DISABLE_SECURITY [Test] [Category ("MobileNotWorking")] public void DefaultCtor () { Assert.IsNotNull (ab.Evidence, "#1"); } +#endif [Test] [Category ("NotWorking")] @@ -1789,8 +1791,7 @@ public class AssemblyBuilderTest // load assembly in separate domain, so we can clean-up after the // test - newDomain = AppDomain.CreateDomain ("test2", currentDomain.Evidence, - currentDomain.SetupInformation); + newDomain = AppDomain.CreateDomain ("test2", null, currentDomain.SetupInformation); Helper helper = new Helper (Path.Combine (tempDir, assemblyName.Name + ".dll"), fullName); @@ -1906,6 +1907,17 @@ public class AssemblyBuilderTest }); } + [Test] + public void GetReflectionOnly () + { + // Regression test for 13028. + // Asserts ReflectionOnly is actually implemented. + AssemblyBuilder ab1 = genAssembly (); + AssemblyBuilder ab2 = genAssembly (AssemblyBuilderAccess.ReflectionOnly); + Assert.IsFalse (ab1.ReflectionOnly, "#1"); + Assert.IsTrue (ab2.ReflectionOnly, "#2"); + } + } } diff --git a/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs b/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs index a94e25a3e0..a67503f0e1 100644 --- a/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs +++ b/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs @@ -527,8 +527,7 @@ namespace MonoTests.System.Reflection AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Save, - TempFolder, - AppDomain.CurrentDomain.Evidence); + TempFolder); ab.Save (Path.GetFileName (assemblyFileName)); using (FileStream fs = File.OpenRead (assemblyFileName)) { @@ -623,8 +622,7 @@ namespace MonoTests.System.Reflection AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Save, - Path.GetDirectoryName (assemblyFileName), - AppDomain.CurrentDomain.Evidence); + Path.GetDirectoryName (assemblyFileName)); ab.Save (Path.GetFileName (assemblyFileName)); using (FileStream fs = File.OpenRead (assemblyFileName)) { @@ -664,8 +662,7 @@ namespace MonoTests.System.Reflection AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Save, - TempFolder, - AppDomain.CurrentDomain.Evidence); + TempFolder); ab.AddResourceFile ("read", "readme.txt"); ab.Save (Path.GetFileName (assemblyFileNameA)); @@ -930,8 +927,7 @@ namespace MonoTests.System.Reflection setup.ApplicationBase = baseDirectory; setup.ApplicationName = "testdomain"; - AppDomain ad = AppDomain.CreateDomain ("testdomain", - AppDomain.CurrentDomain.Evidence, setup); + AppDomain ad = AppDomain.CreateDomain ("testdomain", null, setup); if (assemblyResolver) { Assembly ea = Assembly.GetExecutingAssembly (); @@ -1025,8 +1021,7 @@ namespace MonoTests.System.Reflection AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Save, - Path.GetDirectoryName (assemblyFileName), - AppDomain.CurrentDomain.Evidence); + Path.GetDirectoryName (assemblyFileName)); ab.Save (Path.GetFileName (assemblyFileName)); Assembly assembly; @@ -1040,7 +1035,7 @@ namespace MonoTests.System.Reflection Assert.AreEqual (string.Empty, assembly.Location, "#1"); - assembly = Assembly.LoadFrom (assemblyFileName, AppDomain.CurrentDomain.Evidence); + assembly = Assembly.LoadFrom (assemblyFileName); Assert.IsFalse (assembly.Location == string.Empty, "#2"); Assert.AreEqual (Path.GetFileName (assemblyFileName), Path.GetFileName(assembly.Location), "#3"); // note: we cannot check if directory names match, as MS.NET seems to @@ -1050,7 +1045,7 @@ namespace MonoTests.System.Reflection public void bug78465 (string assemblyFileName) { - Assembly assembly = Assembly.LoadFrom (assemblyFileName, AppDomain.CurrentDomain.Evidence); + Assembly assembly = Assembly.LoadFrom (assemblyFileName); Assert.IsFalse (assembly.Location == string.Empty, "#2"); Assert.AreEqual (Path.GetFileName (assemblyFileName), Path.GetFileName (assembly.Location), "#3"); // note: we cannot check if directory names match, as MS.NET seems to @@ -1066,12 +1061,11 @@ namespace MonoTests.System.Reflection AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Save, - Path.GetDirectoryName (assemblyFileName), - AppDomain.CurrentDomain.Evidence); + Path.GetDirectoryName (assemblyFileName)); ab.AddResourceFile ("read", "readme.txt"); ab.Save (Path.GetFileName (assemblyFileName)); - Assembly assembly = Assembly.LoadFrom (assemblyFileName, AppDomain.CurrentDomain.Evidence); + Assembly assembly = Assembly.LoadFrom (assemblyFileName); Assert.IsTrue (assembly.Location != string.Empty, "#B1"); string[] resNames = assembly.GetManifestResourceNames (); Assert.IsNotNull (resNames, "#B2"); diff --git a/mcs/class/corlib/Test/System.Reflection/FieldInfoTest.cs b/mcs/class/corlib/Test/System.Reflection/FieldInfoTest.cs index d21482dd20..62367d9eb2 100644 --- a/mcs/class/corlib/Test/System.Reflection/FieldInfoTest.cs +++ b/mcs/class/corlib/Test/System.Reflection/FieldInfoTest.cs @@ -1371,7 +1371,9 @@ namespace MonoTests.System.Reflection Assert.AreEqual ("B", fields.str); } +#if !DISABLE_REMOTING [Test] + [Category ("Remoting")] public void GetValueContextBoundObject () { var instance = new CBOTest (); @@ -1394,6 +1396,7 @@ namespace MonoTests.System.Reflection } [Test] + [Category ("Remoting")] public void SetValueContextBoundObject () { var instance = new CBOTest (); @@ -1419,6 +1422,7 @@ namespace MonoTests.System.Reflection Assert.AreEqual (s2, "This is a string", "s2"); } +#endif class CBOTest : ContextBoundObject { public double d1 = 14.0; diff --git a/mcs/class/corlib/Test/System.Resources/ResourceManagerTest.cs b/mcs/class/corlib/Test/System.Resources/ResourceManagerTest.cs index 3f092a25a7..53ecc03202 100644 --- a/mcs/class/corlib/Test/System.Resources/ResourceManagerTest.cs +++ b/mcs/class/corlib/Test/System.Resources/ResourceManagerTest.cs @@ -791,6 +791,7 @@ namespace MonoTests.System.Resources } [Test] + [Category ("Globalization")] [Category ("StackWalks")] [Category ("NotWasm")] public void TestSatellites () diff --git a/mcs/class/corlib/Test/System.Runtime.CompilerServices/RuntimeFeatureTest.cs b/mcs/class/corlib/Test/System.Runtime.CompilerServices/RuntimeFeatureTest.cs index f8a39bf47f..07f24df703 100644 --- a/mcs/class/corlib/Test/System.Runtime.CompilerServices/RuntimeFeatureTest.cs +++ b/mcs/class/corlib/Test/System.Runtime.CompilerServices/RuntimeFeatureTest.cs @@ -38,7 +38,8 @@ namespace MonoTests.System.Runtime.CompilerServices public class RuntimeFeatureTest { readonly Dictionary<string, bool> ExpectedFeatures = new Dictionary<string, bool> { - {"PortablePdb", true} + {"PortablePdb", true}, + {"DefaultImplementationsOfInterfaces", true} }; [Test] @@ -47,6 +48,12 @@ namespace MonoTests.System.Runtime.CompilerServices Assert.IsTrue (RuntimeFeature.IsSupported (RuntimeFeature.PortablePdb)); } + [Test] + public void DefaultImplementationsOfInterfacesSupported () + { + Assert.IsTrue (RuntimeFeature.IsSupported (RuntimeFeature.DefaultImplementationsOfInterfaces)); + } + [Test] public void NonExistingFeatureNotSupported () { diff --git a/mcs/class/corlib/Test/System.Runtime.InteropServices/MarshalTest.cs b/mcs/class/corlib/Test/System.Runtime.InteropServices/MarshalTest.cs index a05483f00e..fc37043f6d 100644 --- a/mcs/class/corlib/Test/System.Runtime.InteropServices/MarshalTest.cs +++ b/mcs/class/corlib/Test/System.Runtime.InteropServices/MarshalTest.cs @@ -197,7 +197,7 @@ namespace MonoTests.System.Runtime.InteropServices if (srcString.Contains("\0")) continue; - IntPtr ptrString = Marshal.StringToAllocatedMemoryUTF8(srcString); + IntPtr ptrString = Marshal.StringToCoTaskMemUTF8(srcString); string retString = Marshal.PtrToStringUTF8(ptrString); Assert.AreEqual (srcString, retString, "#" + i); @@ -206,7 +206,7 @@ namespace MonoTests.System.Runtime.InteropServices string retString2 = Marshal.PtrToStringUTF8(ptrString, srcString.Length - 1); Assert.AreEqual (srcString.Substring(0, srcString.Length - 1), retString2, "#s" + i); } - Marshal.FreeHGlobal(ptrString); + Marshal.ZeroFreeCoTaskMemUTF8 (ptrString); } } diff --git a/mcs/class/corlib/Test/System.Runtime.Serialization.Formatters.Binary/BinaryFormatterTest.cs b/mcs/class/corlib/Test/System.Runtime.Serialization.Formatters.Binary/BinaryFormatterTest.cs index 46297ab28f..c290707eab 100644 --- a/mcs/class/corlib/Test/System.Runtime.Serialization.Formatters.Binary/BinaryFormatterTest.cs +++ b/mcs/class/corlib/Test/System.Runtime.Serialization.Formatters.Binary/BinaryFormatterTest.cs @@ -417,6 +417,7 @@ namespace MonoTests.System.Runtime.Serialization.Formatters.Binary } [Test] + [Category ("Remoting")] public void NestedObjectReference () { MemoryStream ms = new MemoryStream(); @@ -590,6 +591,7 @@ namespace MonoTests.System.Runtime.Serialization.Formatters.Binary } [Test] + [Category ("Remoting")] public void NestedObjectReferences () { MemoryStream ms = new MemoryStream (); diff --git a/mcs/class/corlib/Test/System.Runtime.Serialization/SerializationTest.cs b/mcs/class/corlib/Test/System.Runtime.Serialization/SerializationTest.cs index 189b8ab0fc..deca92da95 100644 --- a/mcs/class/corlib/Test/System.Runtime.Serialization/SerializationTest.cs +++ b/mcs/class/corlib/Test/System.Runtime.Serialization/SerializationTest.cs @@ -13,9 +13,11 @@ using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Reflection; using System.Runtime.Remoting; +#if !DISABLE_REMOTING using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Proxies; using System.Runtime.Remoting.Messaging; +#endif using System.Collections; using NUnit.Framework; using System.Text; @@ -200,7 +202,7 @@ namespace MonoTests.System.Runtime.Serialization return list; } - +#if !DISABLE_REMOTING object[][] ProcessMessages (Stream stream, IMessage[] messages) { object[][] results = new object[9][]; @@ -250,6 +252,7 @@ namespace MonoTests.System.Runtime.Serialization return results; } +#endif void CheckMessages (string label, object[][] original, object[][] serialized) { @@ -759,6 +762,7 @@ namespace MonoTests.System.Runtime.Serialization } } +#if !DISABLE_REMOTING class AuxProxy: RealProxy { public static bool useHeaders = false; @@ -828,6 +832,7 @@ namespace MonoTests.System.Runtime.Serialization return hs; } } +#endif public class TestBinder : SerializationBinder { diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/DSACryptoServiceProviderTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/DSACryptoServiceProviderTest.cs index bc0d6994d5..c5ff3a5f6d 100644 --- a/mcs/class/corlib/Test/System.Security.Cryptography/DSACryptoServiceProviderTest.cs +++ b/mcs/class/corlib/Test/System.Security.Cryptography/DSACryptoServiceProviderTest.cs @@ -828,6 +828,7 @@ public class DSACryptoServiceProviderTest { } [Test] + [Category("AndroidSdksNotWorking")] public void UseMachineKeyStore () { // note only applicable when CspParameters isn't used - which don't @@ -850,7 +851,7 @@ public class DSACryptoServiceProviderTest { catch (CryptographicException ce) { // only root can create the required directory (if inexistant) // afterward anyone can use (read from) it - if (!(ce.InnerException is UnauthorizedAccessException) && !(ce.InnerException is IOException)) + if (!(ce.InnerException is UnauthorizedAccessException) && !(ce.InnerException is IOException ioe && ioe.HResult == 30 /* Read-only file system */)) throw; } catch (UnauthorizedAccessException) { diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/RSACryptoServiceProviderTest.cs.REMOVED.git-id b/mcs/class/corlib/Test/System.Security.Cryptography/RSACryptoServiceProviderTest.cs.REMOVED.git-id index ec8422255e..86091f04d3 100644 --- a/mcs/class/corlib/Test/System.Security.Cryptography/RSACryptoServiceProviderTest.cs.REMOVED.git-id +++ b/mcs/class/corlib/Test/System.Security.Cryptography/RSACryptoServiceProviderTest.cs.REMOVED.git-id @@ -1 +1 @@ -181cf71935494b79c12bbaaf91e3e070add5033e \ No newline at end of file +0c81b56738aa7f7a25f3660fd98f2e34c17a5beb \ No newline at end of file diff --git a/mcs/class/corlib/Test/System.Security.Policy/AllMembershipConditionTest.cs b/mcs/class/corlib/Test/System.Security.Policy/AllMembershipConditionTest.cs index a0dfd980f3..410c7e5681 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/AllMembershipConditionTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/AllMembershipConditionTest.cs @@ -53,10 +53,10 @@ namespace MonoTests.System.Security.Policy { Assert.IsTrue (all.Check (e), "Check (empty)"); e.AddHost (new Zone (SecurityZone.MyComputer)); Assert.IsTrue (all.Check (e), "Check (zone)"); - Url u = new Url ("http://www.go-mono.com/"); + Url u = new Url ("http://www.example.com/"); e.AddAssembly (u); Assert.IsTrue (all.Check (e), "Check (all-assembly)"); - Site s = new Site ("www.go-mono.com"); + Site s = new Site ("www.example.com"); e.AddHost (s); Assert.IsTrue (all.Check (e), "Check (all-host)"); } diff --git a/mcs/class/corlib/Test/System.Security.Policy/ApplicationDirectoryTest.cs b/mcs/class/corlib/Test/System.Security.Policy/ApplicationDirectoryTest.cs index 784ea6b6f7..9b734eb6e0 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/ApplicationDirectoryTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/ApplicationDirectoryTest.cs @@ -84,8 +84,8 @@ namespace MonoTests.System.Security.Policy { [Test] public void ApplicationDirectory_HttpUrl () { - ApplicationDirectory ad = new ApplicationDirectory ("http://www.go-mono.com/"); - Assert.AreEqual ("http://www.go-mono.com/", ad.Directory, "Directory"); + ApplicationDirectory ad = new ApplicationDirectory ("http://www.example.com/"); + Assert.AreEqual ("http://www.example.com/", ad.Directory, "Directory"); } [Test] diff --git a/mcs/class/corlib/Test/System.Security.Policy/SiteMembershipConditionTest.cs b/mcs/class/corlib/Test/System.Security.Policy/SiteMembershipConditionTest.cs index 37aeb389ed..0560bb6e7c 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/SiteMembershipConditionTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/SiteMembershipConditionTest.cs @@ -64,15 +64,15 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentException))] public void SiteMembershipCondition_FullUrlWithPort () { - SiteMembershipCondition smc = new SiteMembershipCondition ("http://www.go-mono.com:8080/index.html"); + SiteMembershipCondition smc = new SiteMembershipCondition ("http://www.example.com:8080/index.html"); } [Test] public void SiteMembershipCondition_GoMonoWebSite () { - SiteMembershipCondition smc = new SiteMembershipCondition ("www.go-mono.com"); - Assert.AreEqual ("www.go-mono.com", smc.Site, "Site"); - Assert.AreEqual ("Site - www.go-mono.com", smc.ToString (), "ToString"); + SiteMembershipCondition smc = new SiteMembershipCondition ("www.example.com"); + Assert.AreEqual ("www.example.com", smc.Site, "Site"); + Assert.AreEqual ("Site - www.example.com", smc.ToString (), "ToString"); SiteMembershipCondition smc2 = (SiteMembershipCondition) smc.Copy (); Assert.AreEqual (smc.Site, smc2.Site, "Copy.Site"); @@ -84,16 +84,16 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (smc.Site, smc3.Site, "ToXml/FromXml"); Assert.IsTrue (smc.Equals (smc2), "Equals"); - SiteMembershipCondition smc4 = new SiteMembershipCondition ("go-mono.com"); + SiteMembershipCondition smc4 = new SiteMembershipCondition ("example.com"); Assert.IsFalse (smc.Equals (smc4), "!Equals"); } [Test] public void Site_AllGoMonoSite () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); - Assert.AreEqual ("*.go-mono.com", smc.Site, "Site"); - Assert.AreEqual ("Site - *.go-mono.com", smc.ToString (), "ToString"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); + Assert.AreEqual ("*.example.com", smc.Site, "Site"); + Assert.AreEqual ("Site - *.example.com", smc.ToString (), "ToString"); SiteMembershipCondition smc2 = (SiteMembershipCondition) smc.Copy (); Assert.AreEqual (smc.Site, smc2.Site, "Copy.Site"); @@ -105,14 +105,14 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (smc.Site, smc3.Site, "ToXml/FromXml"); Assert.IsTrue (smc.Equals (smc2), "Equals"); - SiteMembershipCondition smc4 = new SiteMembershipCondition ("go-mono.com"); + SiteMembershipCondition smc4 = new SiteMembershipCondition ("example.com"); Assert.IsFalse (smc.Equals (smc4), "!Equals"); } [Test] public void Check () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); Evidence e = null; Assert.IsFalse (smc.Check (e), "Check(null)"); @@ -121,14 +121,14 @@ namespace MonoTests.System.Security.Policy { e.AddHost (new Zone (SecurityZone.MyComputer)); Assert.IsFalse (smc.Check (e), "Check (zone)"); - Site s = new Site ("*.go-mono.com"); + Site s = new Site ("*.example.com"); e.AddAssembly (s); Assert.IsFalse (smc.Check (e), "Check (site-assembly)"); e.AddHost (s); Assert.IsTrue (smc.Check (e), "Check (site-host)"); e = new Evidence (); - e.AddHost (new Site ("www.go-mono.com")); + e.AddHost (new Site ("www.example.com")); Assert.IsTrue (smc.Check (e), "Check(+-)"); e = new Evidence (); @@ -139,9 +139,9 @@ namespace MonoTests.System.Security.Policy { [Test] public void Equals () { - SiteMembershipCondition smc1 = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc1 = new SiteMembershipCondition ("*.example.com"); Assert.IsFalse (smc1.Equals (null), "Null"); - SiteMembershipCondition smc2 = new SiteMembershipCondition ("*.Go-Mono.com"); + SiteMembershipCondition smc2 = new SiteMembershipCondition ("*.Example.com"); Assert.IsTrue (smc1.Equals (smc2), "CaseSensitive"); } @@ -149,7 +149,7 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentNullException))] public void FromXml_Null () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); smc.FromXml (null); } @@ -157,7 +157,7 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentException))] public void FromXml_InvalidTag () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); se.Tag = "IMonoship"; smc.FromXml (se); @@ -166,7 +166,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_InvalidClass () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); se.Attributes ["class"] = "Hello world"; smc.FromXml (se); @@ -175,7 +175,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_NoClass () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); SecurityElement w = new SecurityElement (se.Tag); @@ -187,7 +187,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_InvalidVersion () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); se.Attributes ["version"] = "2"; smc.FromXml (se); @@ -196,7 +196,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_NoVersion () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); SecurityElement w = new SecurityElement (se.Tag); @@ -210,7 +210,7 @@ namespace MonoTests.System.Security.Policy { #endif public void FromXml_PolicyLevel () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); // is it accepted for all policy levels ? IEnumerator e = SecurityManager.PolicyHierarchy (); @@ -226,7 +226,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void ToXml_Null () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); // no ArgumentNullException here SecurityElement se = smc.ToXml (null); Assert.IsNotNull (se, "ToXml(null)"); @@ -238,7 +238,7 @@ namespace MonoTests.System.Security.Policy { #endif public void ToXml_PolicyLevel () { - SiteMembershipCondition smc = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc.ToXml (); string s = smc.ToXml ().ToString (); // is it accepted for all policy levels ? @@ -255,7 +255,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void ToFromXmlRoundTrip () { - SiteMembershipCondition smc1 = new SiteMembershipCondition ("*.go-mono.com"); + SiteMembershipCondition smc1 = new SiteMembershipCondition ("*.example.com"); SecurityElement se = smc1.ToXml (); SiteMembershipCondition smc2 = new SiteMembershipCondition ("*"); diff --git a/mcs/class/corlib/Test/System.Security.Policy/SiteTest.cs b/mcs/class/corlib/Test/System.Security.Policy/SiteTest.cs index ee7e717bf8..b63f7adf05 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/SiteTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/SiteTest.cs @@ -64,22 +64,22 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentException))] public void Site_AllGoMono () { - Site s = new Site ("http://*.go-mono.com"); + Site s = new Site ("http://*.example.com"); } [Test] [ExpectedException (typeof (ArgumentException))] public void Site_FullUrlWithPort () { - Site s = new Site ("http://www.go-mono.com:8080/index.html"); + Site s = new Site ("http://www.example.com:8080/index.html"); } [Test] public void Site_GoMonoWebSite () { - Site s = new Site ("www.go-mono.com"); - Assert.AreEqual ("www.go-mono.com", s.Name, "Name"); - Assert.AreEqual ("<System.Security.Policy.Site version=\"1\">" + Environment.NewLine + "<Name>www.go-mono.com</Name>" + Environment.NewLine + "</System.Security.Policy.Site>" + Environment.NewLine, s.ToString (), "ToString"); + Site s = new Site ("www.example.com"); + Assert.AreEqual ("www.example.com", s.Name, "Name"); + Assert.AreEqual ("<System.Security.Policy.Site version=\"1\">" + Environment.NewLine + "<Name>www.example.com</Name>" + Environment.NewLine + "</System.Security.Policy.Site>" + Environment.NewLine, s.ToString (), "ToString"); Site s2 = (Site) s.Copy (); Assert.AreEqual (s.Name, s2.Name, "Copy.Name"); Assert.AreEqual (s.GetHashCode (), s2.GetHashCode (), "Copy.GetHashCode"); @@ -88,16 +88,16 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (s.Name, sip.Site, "CreateIdentityPermission"); Assert.IsTrue (s.Equals (s2), "Equals"); - Site s3 = new Site ("go-mono.com"); + Site s3 = new Site ("example.com"); Assert.IsTrue (!s.Equals (s3), "!Equals"); } [Test] public void Site_AllGoMonoSite () { - Site s = new Site ("*.go-mono.com"); - Assert.AreEqual ("*.go-mono.com", s.Name, "Name"); - Assert.AreEqual ("<System.Security.Policy.Site version=\"1\">" + Environment.NewLine + "<Name>*.go-mono.com</Name>" + Environment.NewLine + "</System.Security.Policy.Site>" + Environment.NewLine, s.ToString (), "ToString"); + Site s = new Site ("*.example.com"); + Assert.AreEqual ("*.example.com", s.Name, "Name"); + Assert.AreEqual ("<System.Security.Policy.Site version=\"1\">" + Environment.NewLine + "<Name>*.example.com</Name>" + Environment.NewLine + "</System.Security.Policy.Site>" + Environment.NewLine, s.ToString (), "ToString"); Site s2 = (Site) s.Copy (); Assert.AreEqual (s.Name, s2.Name, "Copy.Name"); Assert.AreEqual (s.GetHashCode (), s2.GetHashCode (), "Copy.GetHashCode"); @@ -106,7 +106,7 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (s.Name, sip.Site, "CreateIdentityPermission"); Assert.IsTrue (s.Equals (s2), "Equals"); - Site s3 = new Site ("go-mono.com"); + Site s3 = new Site ("example.com"); Assert.IsTrue (!s.Equals (s3), "!Equals"); } @@ -121,21 +121,21 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentException))] public void Site_TwoStars () { - Site s = new Site ("*.*.go-mono.com"); + Site s = new Site ("*.*.example.com"); } [Test] public void EqualsCaseSensitive () { - Site s1 = new Site ("*.go-mono.com"); - Site s2 = new Site ("*.Go-Mono.com"); + Site s1 = new Site ("*.example.com"); + Site s2 = new Site ("*.Example.com"); Assert.IsTrue (s1.Equals (s2), "CaseSensitive"); } [Test] public void EqualsPartial () { - Site s1 = new Site ("www.go-mono.com"); - Site s2 = new Site ("*.go-mono.com"); + Site s1 = new Site ("www.example.com"); + Site s2 = new Site ("*.example.com"); Assert.IsTrue (!s1.Equals (s2), "Partial:1-2"); Assert.IsTrue (!s2.Equals (s1), "Partial:2-1"); } @@ -143,7 +143,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void EqualsNull () { - Site s1 = new Site ("*.go-mono.com"); + Site s1 = new Site ("*.example.com"); Assert.IsTrue (!s1.Equals (null), "EqualsNull"); } @@ -161,7 +161,7 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (s.Name, sip.Site, "CreateIdentityPermission"); Assert.IsTrue (s.Equals (s2), "Equals"); - Site s3 = new Site ("go-mono.com"); + Site s3 = new Site ("example.com"); Assert.IsTrue (!s.Equals (s3), "!Equals"); } @@ -206,9 +206,9 @@ namespace MonoTests.System.Security.Policy { } string[] valid_urls = { - "http://www.go-mono.com", - "http://*.go-mono.com", - "http://www.go-mono.com:8080/index.html", + "http://www.example.com", + "http://*.example.com", + "http://www.example.com:8080/index.html", }; [Test] @@ -216,7 +216,7 @@ namespace MonoTests.System.Security.Policy { { foreach (string url in valid_urls) { Site s = Site.CreateFromUrl (url); - Assert.IsTrue ((s.Name.ToUpper (CultureInfo.InvariantCulture).IndexOf ("MONO") != -1), s.Name); + Assert.IsTrue ((s.Name.ToUpper (CultureInfo.InvariantCulture).IndexOf ("EXAMPLE") != -1), s.Name); } } diff --git a/mcs/class/corlib/Test/System.Security.Policy/UrlMembershipConditionTest.cs b/mcs/class/corlib/Test/System.Security.Policy/UrlMembershipConditionTest.cs index dd6e7131f5..b734d2a8fd 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/UrlMembershipConditionTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/UrlMembershipConditionTest.cs @@ -61,15 +61,15 @@ namespace MonoTests.System.Security.Policy { [Test] public void UrlMembershipCondition_FullUrlWithPort () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com:8080/index.html"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com:8080/index.html"); } [Test] public void UrlMembershipCondition_GoMonoWebUrl () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/"); - Assert.AreEqual ("http://www.go-mono.com/", umc.Url, "Url"); - Assert.AreEqual ("Url - http://www.go-mono.com/", umc.ToString (), "ToString"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com/"); + Assert.AreEqual ("http://www.example.com/", umc.Url, "Url"); + Assert.AreEqual ("Url - http://www.example.com/", umc.ToString (), "ToString"); UrlMembershipCondition umc2 = (UrlMembershipCondition) umc.Copy (); Assert.AreEqual (umc.Url, umc2.Url, "Copy.Url"); @@ -81,7 +81,7 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (umc.Url, umc3.Url, "ToXml/FromXml"); Assert.IsTrue (umc.Equals (umc2), "Equals"); - UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.example.com"); // note that a last slash is added to Url - so it's equal Assert.IsTrue (umc.Equals (umc4), "Equals-AutoAddedLastSlash"); } @@ -89,9 +89,9 @@ namespace MonoTests.System.Security.Policy { [Test] public void Url_AllGoMonoUrl () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/*"); - Assert.AreEqual ("http://www.go-mono.com/*", umc.Url, "Url"); - Assert.AreEqual ("Url - http://www.go-mono.com/*", umc.ToString (), "ToString"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com/*"); + Assert.AreEqual ("http://www.example.com/*", umc.Url, "Url"); + Assert.AreEqual ("Url - http://www.example.com/*", umc.ToString (), "ToString"); UrlMembershipCondition umc2 = (UrlMembershipCondition) umc.Copy (); Assert.AreEqual (umc.Url, umc2.Url, "Copy.Url"); @@ -103,7 +103,7 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (umc.Url, umc3.Url, "ToXml/FromXml"); Assert.IsTrue (umc.Equals (umc2), "Equals"); - UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.go-mono.com/"); + UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.example.com/"); Assert.IsTrue (umc.Equals (umc4), "Equals-*"); } @@ -117,51 +117,51 @@ namespace MonoTests.System.Security.Policy { [Test] public void Url_NoProtocol () { - UrlMembershipCondition umc = new UrlMembershipCondition ("www.go-mono.com"); - Assert.AreEqual ("www.go-mono.com", umc.Url, "Url"); - Assert.AreEqual ("Url - www.go-mono.com", umc.ToString (), "ToString"); + UrlMembershipCondition umc = new UrlMembershipCondition ("www.example.com"); + Assert.AreEqual ("www.example.com", umc.Url, "Url"); + Assert.AreEqual ("Url - www.example.com", umc.ToString (), "ToString"); } [Test] public void Url_WellKnownProtocol () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); - Assert.AreEqual ("http://www.go-mono.com", umc.Url, "http-Url"); - Assert.AreEqual ("Url - http://www.go-mono.com", umc.ToString (), "http-ToString"); - umc = new UrlMembershipCondition ("https://www.go-mono.com"); - Assert.AreEqual ("https://www.go-mono.com", umc.Url, "https-Url"); - Assert.AreEqual ("Url - https://www.go-mono.com", umc.ToString (), "https-ToString"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); + Assert.AreEqual ("http://www.example.com", umc.Url, "http-Url"); + Assert.AreEqual ("Url - http://www.example.com", umc.ToString (), "http-ToString"); + umc = new UrlMembershipCondition ("https://www.example.com"); + Assert.AreEqual ("https://www.example.com", umc.Url, "https-Url"); + Assert.AreEqual ("Url - https://www.example.com", umc.ToString (), "https-ToString"); - umc = new UrlMembershipCondition ("ftp://www.go-mono.com"); - Assert.AreEqual ("ftp://www.go-mono.com", umc.Url, "ftp-Url"); - Assert.AreEqual ("Url - ftp://www.go-mono.com", umc.ToString (), "ftp-ToString"); + umc = new UrlMembershipCondition ("ftp://www.example.com"); + Assert.AreEqual ("ftp://www.example.com", umc.Url, "ftp-Url"); + Assert.AreEqual ("Url - ftp://www.example.com", umc.ToString (), "ftp-ToString"); - umc = new UrlMembershipCondition ("file://www.go-mono.com"); - Assert.AreEqual ("file://www.go-mono.com", umc.Url, "file-Url"); - Assert.AreEqual ("Url - file://www.go-mono.com", umc.ToString (), "file-ToString"); + umc = new UrlMembershipCondition ("file://www.example.com"); + Assert.AreEqual ("file://www.example.com", umc.Url, "file-Url"); + Assert.AreEqual ("Url - file://www.example.com", umc.ToString (), "file-ToString"); } [Test] public void Url_UnknownProtocol () { - UrlMembershipCondition umc = new UrlMembershipCondition ("mono://www.go-mono.com"); - Assert.AreEqual ("mono://www.go-mono.com", umc.Url, "Url"); - Assert.AreEqual ("Url - mono://www.go-mono.com", umc.ToString (), "ToString"); + UrlMembershipCondition umc = new UrlMembershipCondition ("mono://www.example.com"); + Assert.AreEqual ("mono://www.example.com", umc.Url, "Url"); + Assert.AreEqual ("Url - mono://www.example.com", umc.ToString (), "ToString"); } [Test] public void Url_RelativePath () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/path/../newpath/index.html"); - Assert.AreEqual ("http://www.go-mono.com/path/../newpath/index.html", umc.Url, "Url"); - Assert.AreEqual ("Url - http://www.go-mono.com/path/../newpath/index.html", umc.ToString (), "ToString"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com/path/../newpath/index.html"); + Assert.AreEqual ("http://www.example.com/path/../newpath/index.html", umc.Url, "Url"); + Assert.AreEqual ("Url - http://www.example.com/path/../newpath/index.html", umc.ToString (), "ToString"); } [Test] [ExpectedException (typeof (ArgumentNullException))] public void Url_Null () { - UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.example.com"); umc.Url = null; } @@ -169,14 +169,14 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (FormatException))] public void Url_Empty () { - UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.example.com"); umc.Url = String.Empty; } [Test] public void Check () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); Evidence e = null; Assert.IsFalse (umc.Check (e), "Check(null)"); @@ -187,7 +187,7 @@ namespace MonoTests.System.Security.Policy { e.AddHost (new Zone (SecurityZone.MyComputer)); Assert.IsFalse (umc.Check (e), "Check(zone)"); - Url u = new Url ("http://www.go-mono.com"); + Url u = new Url ("http://www.example.com"); e.AddAssembly (u); Assert.IsFalse (umc.Check (e), "Check(url-assembly)"); e.AddHost (u); @@ -197,16 +197,16 @@ namespace MonoTests.System.Security.Policy { [Test] public void CheckPositive_Partial () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/*"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com/*"); Evidence e = new Evidence (); - e.AddHost (new Url ("http://www.go-mono.com/index.html")); + e.AddHost (new Url ("http://www.example.com/index.html")); Assert.IsTrue (umc.Check (e), "Check(+-)"); } [Test] public void CheckNegative () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); Evidence e = new Evidence (); e.AddHost (new Url ("http://www.go-mono.org")); Assert.IsFalse (umc.Check (e), "Check(-)"); @@ -215,10 +215,10 @@ namespace MonoTests.System.Security.Policy { [Test] public void CheckMultipleEvidences () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); Evidence e = new Evidence (); e.AddHost (new Url ("http://www.go-mono.org")); // the bad - e.AddHost (new Url ("http://www.go-mono.com")); // the good + e.AddHost (new Url ("http://www.example.com")); // the good e.AddHost (new Zone (SecurityZone.MyComputer)); // and the ugly (couldn't resist ;) Assert.IsTrue (umc.Check (e), "Check(n)"); // check all Url evidence (i.e. do not stop at the first Url evidence) @@ -227,8 +227,8 @@ namespace MonoTests.System.Security.Policy { [Test] public void EqualsCaseSensitive_Http () { - UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.go-mono.com"); - UrlMembershipCondition umc2 = new UrlMembershipCondition ("http://www.Go-Mono.com"); + UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.example.com"); + UrlMembershipCondition umc2 = new UrlMembershipCondition ("http://www.Example.com"); Assert.IsTrue (umc1.Equals (umc2), "CaseSensitive"); } @@ -243,7 +243,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void EqualsNull () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); Assert.IsFalse (umc.Equals (null), "EqualsNull"); } @@ -251,7 +251,7 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentNullException))] public void FromXml_Null () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); umc.FromXml (null); } @@ -259,7 +259,7 @@ namespace MonoTests.System.Security.Policy { [ExpectedException (typeof (ArgumentException))] public void FromXml_InvalidTag () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); se.Tag = "IMonoship"; umc.FromXml (se); @@ -268,7 +268,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_InvalidClass () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); se.Attributes ["class"] = "Hello world"; umc.FromXml (se); @@ -277,7 +277,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_NoClass () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); SecurityElement w = new SecurityElement (se.Tag); @@ -289,7 +289,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_InvalidVersion () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); SecurityElement w = new SecurityElement (se.Tag); @@ -302,7 +302,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void FromXml_NoVersion () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); SecurityElement w = new SecurityElement (se.Tag); @@ -316,7 +316,7 @@ namespace MonoTests.System.Security.Policy { #endif public void FromXml_PolicyLevel () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); // is it accepted for all policy levels ? IEnumerator e = SecurityManager.PolicyHierarchy (); @@ -332,7 +332,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void ToXml_Null () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); // no ArgumentNullException here SecurityElement se = umc.ToXml (null); Assert.IsNotNull (se, "ToXml(null)"); @@ -344,7 +344,7 @@ namespace MonoTests.System.Security.Policy { #endif public void ToXml_PolicyLevel () { - UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc.ToXml (); string s = umc.ToXml ().ToString (); // is it accepted for all policy levels ? @@ -361,7 +361,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void ToFromXmlRoundTrip () { - UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.go-mono.com"); + UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.example.com"); SecurityElement se = umc1.ToXml (); UrlMembershipCondition umc2 = new UrlMembershipCondition ("*"); diff --git a/mcs/class/corlib/Test/System.Security.Policy/UrlTest.cs b/mcs/class/corlib/Test/System.Security.Policy/UrlTest.cs index 0cf9a442c5..5dab88ac51 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/UrlTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/UrlTest.cs @@ -63,19 +63,19 @@ namespace MonoTests.System.Security.Policy { public void Url_WellKnownProtocol () { Url u1 = new Url ("file://mono/index.html"); - Url u2 = new Url ("ftp://www.go-mono.com"); - Url u3 = new Url ("http://www.go-mono.com"); - Url u4 = new Url ("https://www.go-mono.com"); + Url u2 = new Url ("ftp://www.example.com"); + Url u3 = new Url ("http://www.example.com"); + Url u4 = new Url ("https://www.example.com"); Assert.AreEqual ("file://mono/index.html", u1.Value, "file.Value"); - Assert.AreEqual ("ftp://www.go-mono.com", u2.Value, "ftp.Value"); - Assert.AreEqual ("http://www.go-mono.com", u3.Value, "http.Value"); - Assert.AreEqual ("https://www.go-mono.com", u4.Value, "https.Value"); + Assert.AreEqual ("ftp://www.example.com", u2.Value, "ftp.Value"); + Assert.AreEqual ("http://www.example.com", u3.Value, "http.Value"); + Assert.AreEqual ("https://www.example.com", u4.Value, "https.Value"); } [Test] public void Url_UnknownProtocol () { - string url = "mono://www.go-mono.com"; + string url = "mono://www.example.com"; Url u = new Url (url); // Fx 2.0 returns the original url, while 1.0/1.1 adds a '/' at it's end Assert.IsTrue (u.Value.StartsWith (url), "mono.Value"); @@ -84,19 +84,19 @@ namespace MonoTests.System.Security.Policy { [Test] public void Url_RelativePath () { - Url u = new Url ("http://www.go-mono.com/path/../newpath/index.html"); - Assert.AreEqual ("http://www.go-mono.com/path/../newpath/index.html", u.Value, "Value"); + Url u = new Url ("http://www.example.com/path/../newpath/index.html"); + Assert.AreEqual ("http://www.example.com/path/../newpath/index.html", u.Value, "Value"); } [Test] public void Url_GoMonoWebUrl () { - string url = "http://www.go-mono.com"; + string url = "http://www.example.com"; Url u = new Url (url); Assert.IsTrue (u.Value.StartsWith (url), "Value"); // no spaces in XML, no ending '/' on url - Assert.AreEqual ("<System.Security.Policy.Url version=\"1\">" + Environment.NewLine + "<Url>http://www.go-mono.com</Url>" + Environment.NewLine + "</System.Security.Policy.Url>" + Environment.NewLine, u.ToString (), "ToString"); + Assert.AreEqual ("<System.Security.Policy.Url version=\"1\">" + Environment.NewLine + "<Url>http://www.example.com</Url>" + Environment.NewLine + "</System.Security.Policy.Url>" + Environment.NewLine, u.ToString (), "ToString"); Url u2 = (Url) u.Copy (); Assert.AreEqual (u.Value, u2.Value, "Copy.Value"); Assert.AreEqual (u.GetHashCode (), u2.GetHashCode (), "Copy.GetHashCode"); @@ -105,7 +105,7 @@ namespace MonoTests.System.Security.Policy { Assert.AreEqual (u.Value, uip.Url, "CreateIdentityPermission"); Assert.IsTrue (u.Equals (u2), "Equals"); - Url u3 = new Url ("go-mono.com"); + Url u3 = new Url ("example.com"); Assert.IsFalse (u.Equals (u3), "!Equals"); } @@ -119,16 +119,16 @@ namespace MonoTests.System.Security.Policy { [Test] public void EqualsCaseSensitive () { - Url u1 = new Url ("http://www.go-mono.com"); - Url u2 = new Url ("http://www.Go-Mono.com"); + Url u1 = new Url ("http://www.example.com"); + Url u2 = new Url ("http://www.Example.com"); Assert.IsTrue (u1.Equals (u2), "CaseSensitive"); } [Test] public void EqualsPartial () { - Url u1 = new Url ("http://www.go-mono.com/index.html"); - Url u2 = new Url ("http://www.go-mono.com/*"); + Url u1 = new Url ("http://www.example.com/index.html"); + Url u2 = new Url ("http://www.example.com/*"); Assert.IsFalse (u1.Equals (u2), "Partial:1-2"); Assert.IsFalse (u2.Equals (u1), "Partial:2-1"); } @@ -136,7 +136,7 @@ namespace MonoTests.System.Security.Policy { [Test] public void EqualsNull () { - Url u = new Url ("http://www.go-mono.com"); + Url u = new Url ("http://www.example.com"); Assert.IsFalse (u.Equals (null), "EqualsNull"); } diff --git a/mcs/class/corlib/Test/System.Security.Policy/ZoneTest.cs b/mcs/class/corlib/Test/System.Security.Policy/ZoneTest.cs index f75b723ff4..592cfaafda 100644 --- a/mcs/class/corlib/Test/System.Security.Policy/ZoneTest.cs +++ b/mcs/class/corlib/Test/System.Security.Policy/ZoneTest.cs @@ -223,11 +223,11 @@ namespace MonoTests.System.Security.Policy { } string[] internetUrls = { - "http://www.go-mono.com", + "http://www.example.com", "http://64.14.94.188/", - "HTTP://WWW.GO-MONO.COM", - "http://*.go-mono.com", - "http://www.go-mono.com:8080/index.html", + "HTTP://WWW.EXAMPLE.COM", + "http://*.example.com", + "http://www.example.com:8080/index.html", "mono://unknown/protocol", "/mono/index.html", }; diff --git a/mcs/class/corlib/Test/System.Security/SecurityExceptionCas.cs b/mcs/class/corlib/Test/System.Security/SecurityExceptionCas.cs index c97abfc2f5..387d247117 100644 --- a/mcs/class/corlib/Test/System.Security/SecurityExceptionCas.cs +++ b/mcs/class/corlib/Test/System.Security/SecurityExceptionCas.cs @@ -358,7 +358,7 @@ namespace MonoCasTests.System.Security { [PermissionSet (SecurityAction.Deny, Unrestricted = true)] public void SetUrl () { - se.Url = "http://www.mono-project.com/"; + se.Url = "http://www.example.com/"; } [Test] diff --git a/mcs/class/corlib/Test/System.Threading/CancellationTokenSourceTest.cs b/mcs/class/corlib/Test/System.Threading/CancellationTokenSourceTest.cs index bfb46b3fed..9dd43881ed 100644 --- a/mcs/class/corlib/Test/System.Threading/CancellationTokenSourceTest.cs +++ b/mcs/class/corlib/Test/System.Threading/CancellationTokenSourceTest.cs @@ -445,8 +445,9 @@ namespace MonoTests.System.Threading bool canceled = false; cts.Token.Register (() => canceled = true); - using (var linked = CancellationTokenSource.CreateLinkedTokenSource (cts.Token)) + using (var linked = CancellationTokenSource.CreateLinkedTokenSource (cts.Token)) { ; + } Assert.IsFalse (canceled, "#1"); Assert.IsFalse (cts.IsCancellationRequested, "#2"); diff --git a/mcs/class/corlib/Test/System.Threading/InterlockedTest.cs b/mcs/class/corlib/Test/System.Threading/InterlockedTest.cs index ac4d7d6647..20ed84b0a1 100644 --- a/mcs/class/corlib/Test/System.Threading/InterlockedTest.cs +++ b/mcs/class/corlib/Test/System.Threading/InterlockedTest.cs @@ -10,6 +10,7 @@ using NUnit.Framework; using System; using System.Threading; +using System.Runtime.InteropServices; namespace MonoTests.System.Threading { @@ -42,9 +43,19 @@ namespace MonoTests.System.Threading readonly IntPtr iptr_2 = (IntPtr)int32_2; readonly IntPtr iptr_3 = (IntPtr)int32_3; + // The exchange tests are broken on AIX and cause a runtime lockup. + void AssertNotAix() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("AIX"))) + { + Assert.Ignore ("Skipping on AIX/i"); + } + } + [Test] public void TestExchange_Int32 () { + AssertNotAix(); int32 = int32_1; Assert.AreEqual(int32_1, Interlocked.Exchange(ref int32, int32_2)); Assert.AreEqual(int32_2, int32); @@ -53,6 +64,7 @@ namespace MonoTests.System.Threading [Test] public void TestExchange_Flt () { + AssertNotAix(); flt = flt_1; Assert.AreEqual(flt_1, Interlocked.Exchange(ref flt, flt_2)); Assert.AreEqual(flt_2, flt); @@ -61,6 +73,7 @@ namespace MonoTests.System.Threading [Test] public void TestExchange_Obj () { + AssertNotAix(); obj = obj_1; Assert.AreEqual(obj_1, Interlocked.Exchange(ref obj, obj_2)); Assert.AreEqual(obj_2, obj); @@ -69,6 +82,7 @@ namespace MonoTests.System.Threading [Test] public void TestExchange_Int64 () { + AssertNotAix(); int64 = int64_1; Assert.AreEqual(int64_1, Interlocked.Exchange(ref int64, int64_2)); Assert.AreEqual(int64_2, int64); @@ -77,6 +91,7 @@ namespace MonoTests.System.Threading [Test] public void TestExchange_Dbl () { + AssertNotAix(); dbl = dbl_1; Assert.AreEqual(dbl_1, Interlocked.Exchange(ref dbl, dbl_2)); Assert.AreEqual(dbl_2, dbl); @@ -85,6 +100,7 @@ namespace MonoTests.System.Threading [Test] public void TestExchange_Iptr () { + AssertNotAix(); iptr = iptr_1; Assert.AreEqual(iptr_1, Interlocked.Exchange(ref iptr, iptr_2)); Assert.AreEqual(iptr_2, iptr); @@ -93,6 +109,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Int32 () { + AssertNotAix(); int32 = int32_1; Assert.AreEqual(int32_1, Interlocked.CompareExchange(ref int32, int32_2, int32_1)); Assert.AreEqual(int32_2, int32); @@ -101,6 +118,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Flt () { + AssertNotAix(); flt = flt_1; Assert.AreEqual(flt_1, Interlocked.CompareExchange(ref flt, flt_2, flt_1)); Assert.AreEqual(flt_2, flt); @@ -109,6 +127,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Obj () { + AssertNotAix(); obj = obj_1; Assert.AreEqual(obj_1, Interlocked.CompareExchange(ref obj, obj_2, obj_1)); Assert.AreEqual(obj_2, obj); @@ -117,6 +136,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Int64 () { + AssertNotAix(); int64 = int64_1; Assert.AreEqual(int64_1, Interlocked.CompareExchange(ref int64, int64_2, int64_1)); Assert.AreEqual(int64_2, int64); @@ -125,6 +145,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Dbl () { + AssertNotAix(); dbl = dbl_1; Assert.AreEqual(dbl_1, Interlocked.CompareExchange(ref dbl, dbl_2, dbl_1)); Assert.AreEqual(dbl_2, dbl); @@ -133,6 +154,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Iptr () { + AssertNotAix(); iptr = iptr_1; Assert.AreEqual(iptr_1, Interlocked.CompareExchange(ref iptr, iptr_2, iptr_1)); Assert.AreEqual(iptr_2, iptr); @@ -141,6 +163,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Failed_Int32 () { + AssertNotAix(); int32 = int32_1; Assert.AreEqual(int32_1, Interlocked.CompareExchange(ref int32, int32_2, int32_3)); Assert.AreEqual(int32_1, int32); @@ -149,6 +172,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Failed_Flt () { + AssertNotAix(); flt = flt_1; Assert.AreEqual(flt_1, Interlocked.CompareExchange(ref flt, flt_2, flt_3)); Assert.AreEqual(flt_1, flt); @@ -157,6 +181,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Failed_Obj () { + AssertNotAix(); obj = obj_1; Assert.AreEqual(obj_1, Interlocked.CompareExchange(ref obj, obj_2, obj_3)); Assert.AreEqual(obj_1, obj); @@ -165,6 +190,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Failed_Int64 () { + AssertNotAix(); int64 = int64_1; Assert.AreEqual(int64_1, Interlocked.CompareExchange(ref int64, int64_2, int64_3)); Assert.AreEqual(int64_1, int64); @@ -173,6 +199,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Failed_Dbl () { + AssertNotAix(); dbl = dbl_1; Assert.AreEqual(dbl_1, Interlocked.CompareExchange(ref dbl, dbl_2, dbl_3)); Assert.AreEqual(dbl_1, dbl); @@ -181,6 +208,7 @@ namespace MonoTests.System.Threading [Test] public void TestCompareExchange_Failed_Iptr () { + AssertNotAix(); iptr = iptr_1; Assert.AreEqual(iptr_1, Interlocked.CompareExchange(ref iptr, iptr_2, iptr_3)); Assert.AreEqual(iptr_1, iptr); diff --git a/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs b/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs index 73a2912324..05acef90c8 100644 --- a/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs +++ b/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs @@ -234,11 +234,11 @@ namespace MonoTests.System.Threading int count = 2; SpinWait wait = new SpinWait (); - ThreadPool.QueueUserWorkItem (_ => { while (count > 1) wait.SpinOnce (); mre.Set (); Interlocked.Decrement (ref count); }); + ThreadPool.QueueUserWorkItem (_ => { while (count > 1) wait.SpinOnce (100); mre.Set (); Interlocked.Decrement (ref count); }); ThreadPool.QueueUserWorkItem (_ => { mre.Reset (); Interlocked.Decrement (ref count); }); while (count > 0) - wait.SpinOnce (); + wait.SpinOnce (100); Assert.AreEqual (mre.IsSet, mre.WaitHandle.WaitOne (0)); } } diff --git a/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs b/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs index ef26b5a045..a57862a11a 100644 --- a/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs +++ b/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs @@ -200,10 +200,10 @@ namespace MonoTests.System.Threading if (workerThreads == 0) break; - Console.WriteLine ("workerThreads = {0}, completionPortThreads = {1}", workerThreads, completionPortThreads); - - if (sw.Elapsed.TotalSeconds >= 10) + if (sw.Elapsed.TotalSeconds >= 30) { + Console.WriteLine ("workerThreads = {0}, completionPortThreads = {1}", workerThreads, completionPortThreads); Assert.Fail ("did not reach 0 available threads"); + } ThreadPool.QueueUserWorkItem (GetAvailableThreads_Callback, mre); Thread.Sleep (1); diff --git a/mcs/class/corlib/Test/System.Threading/ThreadTest.cs b/mcs/class/corlib/Test/System.Threading/ThreadTest.cs index f0788eded7..0b605c3d1a 100644 --- a/mcs/class/corlib/Test/System.Threading/ThreadTest.cs +++ b/mcs/class/corlib/Test/System.Threading/ThreadTest.cs @@ -22,6 +22,7 @@ using NUnit.Framework; namespace MonoTests.System.Threading { +#if !DISABLE_SECURITY // These tests seem to hang the 2.0 framework. So they are disabled for now // Don't reenable them until you can run a few thousand times on an SMP box. [Category ("NotWorking")] @@ -84,6 +85,7 @@ namespace MonoTests.System.Threading Assert.AreEqual ("good", Thread.CurrentPrincipal.Identity.Name, "#2"); } } +#endif [TestFixture] [Category("MobileNotWorking")] // Abort #10240 @@ -700,6 +702,7 @@ namespace MonoTests.System.Threading "#103 Wrong Thread State: " + TestThread.ThreadState.ToString ()); } +#if !DISABLE_SECURITY [Test] [Ignore ("see comment below.")] public void CurrentPrincipal_PrincipalPolicy_NoPrincipal () @@ -773,6 +776,7 @@ namespace MonoTests.System.Threading #endif } } +#endif int counter = 0; diff --git a/mcs/class/corlib/Test/System/ActivatorTest.cs b/mcs/class/corlib/Test/System/ActivatorTest.cs index 49eb5ab176..1a23878d2f 100644 --- a/mcs/class/corlib/Test/System/ActivatorTest.cs +++ b/mcs/class/corlib/Test/System/ActivatorTest.cs @@ -17,8 +17,10 @@ using System.Reflection; using System.Reflection.Emit; #endif using System.Runtime.InteropServices; +#if !DISABLE_REMOTING using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; +#endif using System.Security; using System.Security.Permissions; @@ -273,6 +275,7 @@ namespace MonoTests.System { Activator.CreateInstance (new CustomUserType ()); } +#if !DISABLE_REMOTING [Test] public void CreateInstance_StringString () { @@ -281,6 +284,7 @@ namespace MonoTests.System { objCOMTest.Id = 2; Assert.AreEqual (2, objCOMTest.Id, "#A03"); } +#endif [Test] [ExpectedException (typeof (ArgumentNullException))] @@ -422,6 +426,7 @@ namespace MonoTests.System { // TODO: Implemente the test methods for all the overriden function using activationAttribute +#if !DISABLE_REMOTING [Test] [Category ("AndroidNotWorking")] // Assemblies aren't accessible using filesystem paths (they're either in apk, embedded in native code or not there at all public void CreateInstanceFrom () @@ -431,6 +436,7 @@ namespace MonoTests.System { objHandle.Unwrap (); // TODO: Implement the test methods for all the overriden function using activationAttribute } +#endif #if !MOBILE @@ -505,6 +511,7 @@ namespace MonoTests.System { Assert.IsNotNull (Activator.CreateInstance (typeof (foo2<long, int>)), "foo2<long, int>"); } +#if !DISABLE_REMOTING [Test] public void CreateInstanceCrossDomain () { @@ -513,8 +520,9 @@ namespace MonoTests.System { BindingFlags.Public | BindingFlags.Instance, null, null, CultureInfo.InvariantCulture, null, null); } +#endif -#if !MONOTOUCH && !FULL_AOT_RUNTIME +#if !MONOTOUCH && !FULL_AOT_RUNTIME && !DISABLE_REMOTING [Test] public void CreateInstanceCustomDomain () { @@ -524,6 +532,8 @@ namespace MonoTests.System { null, null); } #endif + +#if !DISABLE_REMOTING [Test] public void CreateInstanceCrossDomainNonSerializableArgs () { @@ -531,6 +541,7 @@ namespace MonoTests.System { Activator.CreateInstance (AppDomain.CurrentDomain, "mscorlib.dll", "System.WeakReference", false, BindingFlags.Public | BindingFlags.Instance, null, new object [] {ModuleHandle.EmptyHandle}, null, null, null); } +#endif [Test] [ExpectedException (typeof (NotSupportedException))] diff --git a/mcs/class/corlib/Test/System/DateTimeOffsetTest.cs b/mcs/class/corlib/Test/System/DateTimeOffsetTest.cs index 7a65b9f31e..bcd4e5057e 100644 --- a/mcs/class/corlib/Test/System/DateTimeOffsetTest.cs +++ b/mcs/class/corlib/Test/System/DateTimeOffsetTest.cs @@ -110,6 +110,7 @@ namespace MonoTests.System { } [Test] + [Category ("Calendars")] public void ParameterlessToString () { DateTimeOffset dt = new DateTimeOffset (2007, 12, 18, 12, 16, 30, new TimeSpan (1, 0, 0)); @@ -121,6 +122,7 @@ namespace MonoTests.System { } [Test] + [Category ("Calendars")] public void ToStringWithCultureInfo () { DateTimeOffset dto = new DateTimeOffset(2007, 5, 1, 9, 0, 0, TimeSpan.Zero); @@ -146,6 +148,7 @@ namespace MonoTests.System { } [Test] + [Category ("Calendars")] public void ToStringWithFormat () { DateTimeOffset dto = new DateTimeOffset (2007, 10, 31, 21, 0, 0, new TimeSpan(-8, 0, 0)); @@ -173,8 +176,10 @@ namespace MonoTests.System { DateTimeOffset dto = new DateTimeOffset (2007, 11, 1, 9, 0, 0, new TimeSpan(-7, 0, 0)); const string format = "dddd, MMM dd yyyy HH:mm:ss zzz"; Assert.AreEqual ("Thursday, Nov 01 2007 09:00:00 -07:00", dto.ToString (format, CultureInfo.InvariantCulture), "ts2"); - Assert.AreEqual ("jeudi, nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("fr-FR")), "ts3"); - Assert.AreEqual ("jueves, nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("es-ES")), "ts4"); + if (!GlobalizationMode.Invariant) { + Assert.AreEqual ("jeudi, nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("fr-FR")), "ts3"); + Assert.AreEqual ("jueves, nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("es-ES")), "ts4"); + } } [Test] @@ -251,6 +256,7 @@ namespace MonoTests.System { // see bug 589227 // [Test] + [Category ("Calendars")] public void ParseExactWithKFormat () { DateTimeOffset o = DateTimeOffset.ParseExact ("Wed Mar 17 22:25:08 +0000 2010", "ddd MMM d H:m:ss K yyyy", CultureInfo.InvariantCulture); diff --git a/mcs/class/corlib/Test/System/DateTimeTest.cs b/mcs/class/corlib/Test/System/DateTimeTest.cs index 57adc89269..bd952e4676 100644 --- a/mcs/class/corlib/Test/System/DateTimeTest.cs +++ b/mcs/class/corlib/Test/System/DateTimeTest.cs @@ -364,6 +364,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void TestToStringGenitive () { DateTime dt = new DateTime (2010, 1, 2, 3, 4, 5); @@ -1134,6 +1135,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void TestParseWithDifferentMonthDayPatterns () { CultureInfo cultureInfo = new CultureInfo("en-US"); @@ -1175,16 +1177,19 @@ namespace MonoTests.System { string s = "Wednesday, 09 June 2004"; DateTime.ParseExact (s, "dddd, dd MMMM yyyy", CultureInfo.InvariantCulture); - try { - DateTime.ParseExact (s, "dddd, dd MMMM yyyy", new CultureInfo ("ja-JP")); - Assert.Fail ("ja-JP culture does not support format \"dddd, dd MMMM yyyy\""); - } catch (FormatException) { + if (!GlobalizationMode.Invariant) { + try { + DateTime.ParseExact (s, "dddd, dd MMMM yyyy", new CultureInfo ("ja-JP")); + Assert.Fail ("ja-JP culture does not support format \"dddd, dd MMMM yyyy\""); + } catch (FormatException) { + } } // Ok, now we can assume ParseExact() works expectedly. DateTime.Parse (s, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces); - DateTime.Parse (s, new CultureInfo ("ja-JP"), DateTimeStyles.AllowWhiteSpaces); + if (!GlobalizationMode.Invariant) + DateTime.Parse (s, new CultureInfo ("ja-JP"), DateTimeStyles.AllowWhiteSpaces); //DateTime.Parse (s, null); currently am not sure if it works for _every_ culture. } @@ -1242,6 +1247,7 @@ namespace MonoTests.System } [Test] // bug #72788 + [Category ("Calendars")] public void Parse_Bug72788 () { DateTime dt = DateTime.Parse ("21/02/05", new CultureInfo ("fr-FR")); @@ -1276,6 +1282,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void Parse_Bug53023b () { foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.SpecificCultures)) { @@ -1297,6 +1304,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void Parse_SameTimeAndDateSeparator () { var fiFI = (CultureInfo) CultureInfo.GetCultureInfo("fi-FI").Clone(); @@ -1341,6 +1349,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void ParseCOMDependentFormat () { // Japanese format. @@ -1359,6 +1368,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] [ExpectedException(typeof (FormatException))] public void ParseFormatException1 () { @@ -1399,6 +1409,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void ParseUtcNonUtc () { Thread.CurrentThread.CurrentCulture = new CultureInfo ("es-ES"); @@ -1463,6 +1474,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void TimeZoneAdjustment () { CultureInfo ci = Thread.CurrentThread.CurrentCulture; @@ -1851,6 +1863,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void ParseExact_Bug80094 () { // we can safely change the curernt culture, as the original value will @@ -2584,6 +2597,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void GenitiveMonth () { var ci = new CultureInfo ("ru-RU"); @@ -2592,6 +2606,7 @@ namespace MonoTests.System } [Test] + [Category ("Calendars")] public void Parse_ThaiCalendar () { var culture = CultureInfo.GetCultureInfo ("th-TH"); @@ -2670,6 +2685,7 @@ namespace MonoTests.System } [Test] // https://github.com/mono/mono/issues/11317 + [Category ("Calendars")] public void DateTimeKoCulture () { foreach (var culture in new [] { new CultureInfo ("ko"), new CultureInfo ("ko-KR") }) diff --git a/mcs/class/corlib/Test/System/DecimalTest2.cs.REMOVED.git-id b/mcs/class/corlib/Test/System/DecimalTest2.cs.REMOVED.git-id index 27811882f9..a88cbaa985 100644 --- a/mcs/class/corlib/Test/System/DecimalTest2.cs.REMOVED.git-id +++ b/mcs/class/corlib/Test/System/DecimalTest2.cs.REMOVED.git-id @@ -1 +1 @@ -02eacf31cdf3198ab2430b3f31ae5ab17acfb7f8 \ No newline at end of file +3d3aeeb40f0c0834bd9616ab9cf4cd5c8ae579d6 \ No newline at end of file diff --git a/mcs/class/corlib/Test/System/ExceptionTest.cs b/mcs/class/corlib/Test/System/ExceptionTest.cs index af7dae809b..48883666ab 100644 --- a/mcs/class/corlib/Test/System/ExceptionTest.cs +++ b/mcs/class/corlib/Test/System/ExceptionTest.cs @@ -407,21 +407,21 @@ namespace MonoTests.System } #if !MOBILE - void NestedStackTraces (int depth) + void NestedStackTraces (int depth) { - if (depth == 0) - throw new ArgumentException ("Depth 0 exception"); - + if (depth == 0) + throw new ArgumentException ("Depth 0 exception"); + try { - NestedStackTraces (depth - 1); - } catch (Exception exc) { - throw new Exception (String.Format ("Depth {0} exception, expect nested", depth), exc); - } - } - void StacktraceToStateTest (int depth) - { - try { - NestedStackTraces (depth); + NestedStackTraces (depth - 1); + } catch (Exception exc) { + throw new Exception (String.Format ("Depth {0} exception, expect nested", depth), exc); + } + } + void StacktraceToStateTest (int depth) + { + try { + NestedStackTraces (depth); } catch (Exception exc) { var monoType = Type.GetType ("Mono.Runtime", false); var convert = monoType.GetMethod("ExceptionToState", BindingFlags.NonPublic | BindingFlags.Static); @@ -432,41 +432,41 @@ namespace MonoTests.System var portable_hash = output.Item2; var unportable_hash = output.Item3; - // To see what we're working with - // Console.WriteLine (dump); - + // To see what we're working with + // Console.WriteLine (dump); + Assert.IsTrue (portable_hash != 0, "#1"); Assert.IsTrue (unportable_hash != 0, "#2"); Assert.IsTrue (dump.Length > 0, "#3"); } } - // Ensure that we can convert a stacktrace to a - // telemetry message - // - [Test] - [Category("NotOnWindows")] - public void StacktraceToStateBase () - { - StacktraceToStateTest (0); - } - - [Test] - [Category("NotOnWindows")] - public void StacktraceToStateDeeper () - { - StacktraceToStateTest (2); - } - - [Test] - [Category("NotOnWindows")] - public void StacktraceToStateOverflow () - { - // We set a limit on 15 nested exceptions. Lets check that we're valid - // when exceeding that limit. - StacktraceToStateTest (20); - } - + // Ensure that we can convert a stacktrace to a + // telemetry message + // + [Test] + [Category("NotOnWindows")] + public void StacktraceToStateBase () + { + StacktraceToStateTest (0); + } + + [Test] + [Category("NotOnWindows")] + public void StacktraceToStateDeeper () + { + StacktraceToStateTest (2); + } + + [Test] + [Category("NotOnWindows")] + public void StacktraceToStateOverflow () + { + // We set a limit on 15 nested exceptions. Lets check that we're valid + // when exceeding that limit. + StacktraceToStateTest (20); + } + void DumpSingle () { var monoType = Type.GetType ("Mono.Runtime", false); diff --git a/mcs/class/corlib/Test/System/StringTest.cs.REMOVED.git-id b/mcs/class/corlib/Test/System/StringTest.cs.REMOVED.git-id index 7e97d4a91d..f0e7922677 100644 --- a/mcs/class/corlib/Test/System/StringTest.cs.REMOVED.git-id +++ b/mcs/class/corlib/Test/System/StringTest.cs.REMOVED.git-id @@ -1 +1 @@ -29cd9e998c4364233a67531eea5afb4eae336256 \ No newline at end of file +eabaa07fe124189e2be6ebda3b3e69664ea27672 \ No newline at end of file diff --git a/mcs/class/corlib/Test/System/TimeSpanTest.cs b/mcs/class/corlib/Test/System/TimeSpanTest.cs index feb0224fbd..926c9c5738 100644 --- a/mcs/class/corlib/Test/System/TimeSpanTest.cs +++ b/mcs/class/corlib/Test/System/TimeSpanTest.cs @@ -657,18 +657,20 @@ public class TimeSpanTest { ParseHelper ("10:11:12:13", false, false, "10.11:12:13"); // Days using : instead of . as separator ParseHelper ("10.11", true, false, "dontcare"); // days+hours is invalid - // Force the use of french culture -which is using a non common NumberDecimalSeparator- - // as current culture, to show that the Parse method is *actually* being culture sensitive - // *and* also keeping the compatibility with '.' - CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); - CultureInfo prev_culture = CultureInfo.CurrentCulture; - try { - Thread.CurrentThread.CurrentCulture = french_culture; - ParseHelper ("10:10:10,006", false, false, "10:10:10.0060000"); - ParseHelper ("10:10:10.006", false, false, "10:10:10.0060000"); - } finally { - // restore culture - Thread.CurrentThread.CurrentCulture = prev_culture; + if (!GlobalizationMode.Invariant) { + // Force the use of french culture -which is using a non common NumberDecimalSeparator- + // as current culture, to show that the Parse method is *actually* being culture sensitive + // *and* also keeping the compatibility with '.' + CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); + CultureInfo prev_culture = CultureInfo.CurrentCulture; + try { + Thread.CurrentThread.CurrentCulture = french_culture; + ParseHelper ("10:10:10,006", false, false, "10:10:10.0060000"); + ParseHelper ("10:10:10.006", false, false, "10:10:10.0060000"); + } finally { + // restore culture + Thread.CurrentThread.CurrentCulture = prev_culture; + } } ParseHelper ("00:00:00", false, false, "00:00:00"); @@ -812,18 +814,20 @@ public class TimeSpanTest { Assert.AreEqual (true, TimeSpan.TryParse ("-10675199.02:48:05.4775808", out result), "MinValue#1"); Assert.AreEqual (TimeSpan.MinValue, result, "MinValue#2"); - // Force the use of french culture -which is using a non common NumberDecimalSeparator- - // as current culture, to show that the Parse method is *actually* being culture sensitive - CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); - CultureInfo prev_culture = CultureInfo.CurrentCulture; - result = new TimeSpan (0, 10, 10, 10, 6); - try { - Thread.CurrentThread.CurrentCulture = french_culture; - Assert.AreEqual (true, TimeSpan.TryParse ("10:10:10,006", out result), "#CultureSensitive1"); - Assert.AreEqual ("10:10:10.0060000", result.ToString (), "#CultureSensitive2"); - } finally { - // restore culture - Thread.CurrentThread.CurrentCulture = prev_culture; + if (!GlobalizationMode.Invariant) { + // Force the use of french culture -which is using a non common NumberDecimalSeparator- + // as current culture, to show that the Parse method is *actually* being culture sensitive + CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); + CultureInfo prev_culture = CultureInfo.CurrentCulture; + result = new TimeSpan (0, 10, 10, 10, 6); + try { + Thread.CurrentThread.CurrentCulture = french_culture; + Assert.AreEqual (true, TimeSpan.TryParse ("10:10:10,006", out result), "#CultureSensitive1"); + Assert.AreEqual ("10:10:10.0060000", result.ToString (), "#CultureSensitive2"); + } finally { + // restore culture + Thread.CurrentThread.CurrentCulture = prev_culture; + } } } @@ -842,10 +846,12 @@ public class TimeSpanTest { { TimeSpan result; - // We use fr-FR culture since its NumericDecimalSeparator is not the same used by - // most cultures - including the invariant one. - CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); - Assert.AreEqual (true, TimeSpan.TryParse ("11:50:50,006", french_culture, out result), "#A1"); + if (!GlobalizationMode.Invariant) { + // We use fr-FR culture since its NumericDecimalSeparator is not the same used by + // most cultures - including the invariant one. + CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); + Assert.AreEqual (true, TimeSpan.TryParse ("11:50:50,006", french_culture, out result), "#A1"); + } // LAMESPEC - msdn states that an instance of DateTimeFormatInfo is retrieved to // obtain culture sensitive information, but at least in the betas that's false @@ -858,9 +864,6 @@ public class TimeSpanTest { [Test] public void ParseExact () { - CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); - CultureInfo us_culture = CultureInfo.GetCultureInfo ("en-US"); - // At this point we are only missing the style bites and then we are // pretty much done with the standard formats. @@ -876,17 +879,22 @@ public class TimeSpanTest { ParseExactHelper ("11:12:13", g_format, false, false, "11:12:13"); ParseExactHelper ("-11:12:13", g_format, false, false, "-11:12:13"); ParseExactHelper ("10.11:12:13", g_format, true, false, "dontcare"); // this should work as well - ParseExactHelper ("10.11:12:13", g_format, true, false, "dontcare", us_culture); ParseExactHelper ("10.11:12:13", g_format, true, false, "dontcare", CultureInfo.InvariantCulture); ParseExactHelper ("10:11:12:66", g_format, true, false, "dontcare"); ParseExactHelper ("10:11:12:13", g_format, false, false, "10.11:12:13"); ParseExactHelper ("11:12:13.6", g_format, false, false, "11:12:13.6000000", CultureInfo.InvariantCulture); - ParseExactHelper ("11:12:13,6", g_format, false, false, "11:12:13.6000000", french_culture); - ParseExactHelper ("10:11:12:13.6", g_format, false, false, "10.11:12:13.6000000", us_culture); - ParseExactHelper (" 10:11:12:13.6 ", g_format, false, false, "10.11:12:13.6000000", us_culture); ParseExactHelper ("10:11", g_format, false, false, "10:11:00", null, TimeSpanStyles.None); ParseExactHelper ("10:11", g_format, false, false, "10:11:00", null, TimeSpanStyles.AssumeNegative); // no effect + if (!GlobalizationMode.Invariant) { + CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); + CultureInfo us_culture = CultureInfo.GetCultureInfo ("en-US"); + ParseExactHelper ("10.11:12:13", g_format, true, false, "dontcare", us_culture); + ParseExactHelper ("11:12:13,6", g_format, false, false, "11:12:13.6000000", french_culture); + ParseExactHelper ("10:11:12:13.6", g_format, false, false, "10.11:12:13.6000000", us_culture); + ParseExactHelper (" 10:11:12:13.6 ", g_format, false, false, "10.11:12:13.6000000", us_culture); + } + // // G format // @@ -895,15 +903,20 @@ public class TimeSpanTest { ParseExactHelper ("9:10:12.6", G_format, true, false, "dontcare"); ParseExactHelper ("3.9:10:12", G_format, true, false, "dontcare"); ParseExactHelper ("3.9:10:12.153", G_format, true, false, "dontcare"); // this should be valid... - ParseExactHelper ("3:9:10:12.153", G_format, false, false, "3.09:10:12.1530000", us_culture); - ParseExactHelper ("0:9:10:12.153", G_format, false, false, "09:10:12.1530000", us_culture); - ParseExactHelper ("03:09:10:12.153", G_format, false, false, "3.09:10:12.1530000", us_culture); - ParseExactHelper ("003:009:0010:0012.00153", G_format, false, false, "3.09:10:12.0015300", us_culture); ParseExactHelper ("3:9:10:66.153", G_format, true, false, "dontcare"); // seconds out of range - ParseExactHelper ("3:9:10:12.153", G_format, true, false, "dontcare", french_culture); // fr-FR uses ',' as decimal separator - ParseExactHelper ("3:9:10:12,153", G_format, false, false, "3.09:10:12.1530000", french_culture); - ParseExactHelper (" 3:9:10:12.153 ", G_format, false, false, "3.09:10:12.1530000", us_culture); - ParseExactHelper ("3:9:10:13.153", G_format, false, false, "3.09:10:13.1530000", us_culture, TimeSpanStyles.AssumeNegative); + + if (!GlobalizationMode.Invariant) { + CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); + CultureInfo us_culture = CultureInfo.GetCultureInfo ("en-US"); + ParseExactHelper ("3:9:10:12.153", G_format, false, false, "3.09:10:12.1530000", us_culture); + ParseExactHelper ("0:9:10:12.153", G_format, false, false, "09:10:12.1530000", us_culture); + ParseExactHelper ("03:09:10:12.153", G_format, false, false, "3.09:10:12.1530000", us_culture); + ParseExactHelper ("003:009:0010:0012.00153", G_format, false, false, "3.09:10:12.0015300", us_culture); + ParseExactHelper ("3:9:10:12.153", G_format, true, false, "dontcare", french_culture); // fr-FR uses ',' as decimal separator + ParseExactHelper ("3:9:10:12,153", G_format, false, false, "3.09:10:12.1530000", french_culture); + ParseExactHelper (" 3:9:10:12.153 ", G_format, false, false, "3.09:10:12.1530000", us_culture); + ParseExactHelper ("3:9:10:13.153", G_format, false, false, "3.09:10:13.1530000", us_culture, TimeSpanStyles.AssumeNegative); + } // c format string [] c_format = new string [] { "c" }; @@ -915,7 +928,6 @@ public class TimeSpanTest { ParseExactHelper ("10:11:12:13", c_format, true, false, "dontcare"); // this is normally accepted in the Parse method ParseExactHelper ("10.11:12:13.6", c_format, false, false, "10.11:12:13.6000000"); ParseExactHelper ("10:11:12,6", c_format, true, false, "dontcare"); - ParseExactHelper ("10:11:12,6", c_format, true, false, "dontcare", french_culture); ParseExactHelper (" 10:11:12.6 ", c_format, false, false, "10:11:12.6000000"); ParseExactHelper ("10:12", c_format, false, false, "10:12:00", null, TimeSpanStyles.AssumeNegative); ParseExactHelper ("10:123456789999", c_format, true, false, "dontcare"); @@ -923,6 +935,11 @@ public class TimeSpanTest { ParseExactHelper ("10:12", new string [0], true, false, "dontcare"); ParseExactHelper ("10:12", new string [] { String.Empty }, true, false, "dontcare"); ParseExactHelper ("10:12", new string [] { null }, true, false, "dontcare"); + + if (!GlobalizationMode.Invariant) { + CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); + ParseExactHelper ("10:11:12,6", c_format, true, false, "dontcare", french_culture); + } } [Test] @@ -1072,6 +1089,7 @@ public class TimeSpanTest { // 'Ported' the ParseExact test to use TryParseExact instead. [Test] + [Category ("Calendars")] public void TryParseExact () { CultureInfo french_culture = CultureInfo.GetCultureInfo ("fr-FR"); @@ -1185,21 +1203,23 @@ public class TimeSpanTest { Assert.AreEqual ("1.02:03:04.0060000", ts.ToString (null), "#A3"); Assert.AreEqual ("1.02:03:04.0060000", ts.ToString (String.Empty), "#A4"); - // - // IFormatProvider ones - use a culture changing numeric format. - // Also, we use fr-FR as culture, since it uses some elements different to invariant culture - // - CultureInfo culture = CultureInfo.GetCultureInfo ("fr-FR"); + if (!GlobalizationMode.Invariant) { + // + // IFormatProvider ones - use a culture changing numeric format. + // Also, we use fr-FR as culture, since it uses some elements different to invariant culture + // + CultureInfo culture = CultureInfo.GetCultureInfo ("fr-FR"); - Assert.AreEqual ("1:2:03:04,006", ts.ToString ("g", culture), "#B1"); - Assert.AreEqual ("1:02:03:04,0060000", ts.ToString ("G", culture), "#B2"); - Assert.AreEqual ("1.02:03:04.0060000", ts.ToString ("c", culture), "#B3"); // 'c' format ignores CultureInfo - Assert.AreEqual ("1.02:03:04.0060000", ts.ToString ("t", culture), "#B4"); // 't' and 'T' are the same as 'c' - Assert.AreEqual("1.02:03:04.0060000", ts.ToString("T", culture), "#B5"); + Assert.AreEqual ("1:2:03:04,006", ts.ToString ("g", culture), "#B1"); + Assert.AreEqual ("1:02:03:04,0060000", ts.ToString ("G", culture), "#B2"); + Assert.AreEqual ("1.02:03:04.0060000", ts.ToString ("c", culture), "#B3"); // 'c' format ignores CultureInfo + Assert.AreEqual ("1.02:03:04.0060000", ts.ToString ("t", culture), "#B4"); // 't' and 'T' are the same as 'c' + Assert.AreEqual("1.02:03:04.0060000", ts.ToString("T", culture), "#B5"); - ts = new TimeSpan (4, 5, 6); - Assert.AreEqual ("4:05:06", ts.ToString ("g", culture), "#C1"); - Assert.AreEqual ("0:04:05:06,0000000", ts.ToString ("G", culture), "#C2"); + ts = new TimeSpan (4, 5, 6); + Assert.AreEqual ("4:05:06", ts.ToString ("g", culture), "#C1"); + Assert.AreEqual ("0:04:05:06,0000000", ts.ToString ("G", culture), "#C2"); + } } [Test] diff --git a/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs b/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs index 9f7340d3d1..9f14e72e71 100644 --- a/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs +++ b/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs @@ -121,6 +121,7 @@ namespace MonoTests.System [Test] // Covers #24958 public void LocalId () { +#if !MONOTOUCH && !XAMMAC byte[] buf = new byte [512]; var path = "/etc/localtime"; @@ -131,10 +132,9 @@ namespace MonoTests.System } catch (DllNotFoundException e) { return; } -#if !MONOTOUCH && !XAMMAC - // this assumption is incorrect for the TimeZoneInfo.MonoTouch.cs implementation (iOS, tvOS, watchOS and XamMac Modern) - Assert.IsTrue (TimeZoneInfo.Local.Id != "Local", "Local timezone id should not be \"Local\""); #endif + + Assert.IsTrue (TimeZoneInfo.Local.Id != "Local", "Local timezone id should not be \"Local\""); } } diff --git a/mcs/class/corlib/corefx/AesCcm.cs b/mcs/class/corlib/corefx/AesCcm.cs new file mode 100644 index 0000000000..68000e9d77 --- /dev/null +++ b/mcs/class/corlib/corefx/AesCcm.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Security.Cryptography +{ + public sealed partial class AesCcm : System.IDisposable + { + public AesCcm (byte[] key) => throw new PlatformNotSupportedException (); + public AesCcm (System.ReadOnlySpan<byte> key) => throw new PlatformNotSupportedException (); + public static System.Security.Cryptography.KeySizes NonceByteSizes => throw new PlatformNotSupportedException (); + public static System.Security.Cryptography.KeySizes TagByteSizes => throw new PlatformNotSupportedException (); + public void Decrypt (byte[] nonce, byte[] ciphertext, byte[] tag, byte[] plaintext, byte[] associatedData = null) => throw new PlatformNotSupportedException (); + public void Decrypt (System.ReadOnlySpan<byte> nonce, System.ReadOnlySpan<byte> ciphertext, System.ReadOnlySpan<byte> tag, System.Span<byte> plaintext, System.ReadOnlySpan<byte> associatedData = default(System.ReadOnlySpan<byte>)) => throw new PlatformNotSupportedException (); + public void Dispose () {} + public void Encrypt (byte[] nonce, byte[] plaintext, byte[] ciphertext, byte[] tag, byte[] associatedData = null) => throw new PlatformNotSupportedException (); + public void Encrypt (System.ReadOnlySpan<byte> nonce, System.ReadOnlySpan<byte> plaintext, System.Span<byte> ciphertext, System.Span<byte> tag, System.ReadOnlySpan<byte> associatedData = default(System.ReadOnlySpan<byte>)) => throw new PlatformNotSupportedException (); + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/AesGcm.cs b/mcs/class/corlib/corefx/AesGcm.cs new file mode 100644 index 0000000000..ed0bf0f3cb --- /dev/null +++ b/mcs/class/corlib/corefx/AesGcm.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Security.Cryptography +{ + public sealed partial class AesGcm : System.IDisposable + { + public AesGcm (byte[] key) => throw new PlatformNotSupportedException (); + public AesGcm (System.ReadOnlySpan<byte> key) => throw new PlatformNotSupportedException (); + public static System.Security.Cryptography.KeySizes NonceByteSizes => throw new PlatformNotSupportedException (); + public static System.Security.Cryptography.KeySizes TagByteSizes => throw new PlatformNotSupportedException (); + public void Decrypt (byte[] nonce, byte[] ciphertext, byte[] tag, byte[] plaintext, byte[] associatedData = null) => throw new PlatformNotSupportedException (); + public void Decrypt (System.ReadOnlySpan<byte> nonce, System.ReadOnlySpan<byte> ciphertext, System.ReadOnlySpan<byte> tag, System.Span<byte> plaintext, System.ReadOnlySpan<byte> associatedData = default(System.ReadOnlySpan<byte>)) => throw new PlatformNotSupportedException (); + public void Dispose () {} + public void Encrypt (byte[] nonce, byte[] plaintext, byte[] ciphertext, byte[] tag, byte[] associatedData = null) => throw new PlatformNotSupportedException (); + public void Encrypt (System.ReadOnlySpan<byte> nonce, System.ReadOnlySpan<byte> plaintext, System.Span<byte> ciphertext, System.Span<byte> tag, System.ReadOnlySpan<byte> associatedData = default(System.ReadOnlySpan<byte>)) => throw new PlatformNotSupportedException (); + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/CompareInfo.cs b/mcs/class/corlib/corefx/CompareInfo.cs index 3f8b3ac863..b8205f21ac 100644 --- a/mcs/class/corlib/corefx/CompareInfo.cs +++ b/mcs/class/corlib/corefx/CompareInfo.cs @@ -26,6 +26,9 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // +// Disable unreachable code warnings in this entire file. +#pragma warning disable 162 + namespace System.Globalization { partial class CompareInfo diff --git a/mcs/class/corlib/corefx/DiagnosticCounter.cs b/mcs/class/corlib/corefx/DiagnosticCounter.cs new file mode 100644 index 0000000000..c0df863157 --- /dev/null +++ b/mcs/class/corlib/corefx/DiagnosticCounter.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Diagnostics.Tracing +{ + public abstract partial class DiagnosticCounter : IDisposable + { + internal DiagnosticCounter (string name, EventSource eventSource) { } + internal DiagnosticCounter () { } + public string DisplayName { get; set; } + public string DisplayUnits { get; set; } + public EventSource EventSource { get; } + public string Name { get; } + public void AddMetadata (string key, string value) { } + public void Dispose () { } + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/EnumeratorCancellationAttribute.cs b/mcs/class/corlib/corefx/EnumeratorCancellationAttribute.cs new file mode 100644 index 0000000000..51726d4691 --- /dev/null +++ b/mcs/class/corlib/corefx/EnumeratorCancellationAttribute.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.CompilerServices +{ + [System.AttributeUsage(AttributeTargets.Parameter, Inherited = false)] + public sealed class EnumeratorCancellationAttribute : Attribute + { + public EnumeratorCancellationAttribute() + { + } + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/IncrementingEventCounter.cs b/mcs/class/corlib/corefx/IncrementingEventCounter.cs new file mode 100644 index 0000000000..4cfa742ded --- /dev/null +++ b/mcs/class/corlib/corefx/IncrementingEventCounter.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Diagnostics.Tracing +{ + public partial class IncrementingEventCounter : DiagnosticCounter + { + public IncrementingEventCounter (string name, EventSource eventSource) : base (name, eventSource) {} + public void Increment (double increment = 1) {} + public TimeSpan DisplayRateTimeScale { get; set; } + } +} diff --git a/mcs/class/corlib/corefx/IncrementingPollingCounter.cs b/mcs/class/corlib/corefx/IncrementingPollingCounter.cs new file mode 100644 index 0000000000..a553d52627 --- /dev/null +++ b/mcs/class/corlib/corefx/IncrementingPollingCounter.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Diagnostics.Tracing +{ + public partial class IncrementingPollingCounter : DiagnosticCounter + { + public IncrementingPollingCounter (string name, EventSource eventSource, Func<double> totalValueProvider) : base (name, eventSource) {} + public TimeSpan DisplayRateTimeScale { get; set; } + } +} diff --git a/mcs/class/corlib/corefx/PbeEncryptionAlgorithm.cs b/mcs/class/corlib/corefx/PbeEncryptionAlgorithm.cs new file mode 100644 index 0000000000..566896bbcf --- /dev/null +++ b/mcs/class/corlib/corefx/PbeEncryptionAlgorithm.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Security.Cryptography +{ + public enum PbeEncryptionAlgorithm + { + Unknown = 0, + Aes128Cbc = 1, + Aes192Cbc = 2, + Aes256Cbc = 3, + TripleDes3KeyPkcs12 = 4, + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/PbeParameters.cs b/mcs/class/corlib/corefx/PbeParameters.cs new file mode 100644 index 0000000000..67064a7cff --- /dev/null +++ b/mcs/class/corlib/corefx/PbeParameters.cs @@ -0,0 +1,31 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Security.Cryptography +{ + public sealed class PbeParameters + { + public PbeEncryptionAlgorithm EncryptionAlgorithm { get; } + public HashAlgorithmName HashAlgorithm { get; } + public int IterationCount { get; } + + public PbeParameters( + PbeEncryptionAlgorithm encryptionAlgorithm, + HashAlgorithmName hashAlgorithm, + int iterationCount) + { + if (iterationCount < 1) + { + throw new ArgumentOutOfRangeException( + nameof(iterationCount), + iterationCount, + SR.ArgumentOutOfRange_NeedPosNum); + } + + EncryptionAlgorithm = encryptionAlgorithm; + HashAlgorithm = hashAlgorithm; + IterationCount = iterationCount; + } + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/PollingCounter.cs b/mcs/class/corlib/corefx/PollingCounter.cs new file mode 100644 index 0000000000..5c2c7eeb10 --- /dev/null +++ b/mcs/class/corlib/corefx/PollingCounter.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Diagnostics.Tracing +{ + public partial class PollingCounter : DiagnosticCounter + { + public PollingCounter (string name, EventSource eventSource, Func<double> metricProvider) : base (name, eventSource) {} + } +} diff --git a/mcs/class/corlib/corefx/RandomNumberGenerator.cs b/mcs/class/corlib/corefx/RandomNumberGenerator.cs index 17f19d0fa3..d181358f82 100644 --- a/mcs/class/corlib/corefx/RandomNumberGenerator.cs +++ b/mcs/class/corlib/corefx/RandomNumberGenerator.cs @@ -1,3 +1,6 @@ +using System.Buffers; +using System.Runtime.InteropServices; + namespace System.Security.Cryptography { partial class RandomNumberGenerator @@ -13,5 +16,84 @@ namespace System.Security.Cryptography fixed (byte* ptr = data) Interop.GetRandomBytes (ptr, data.Length); } } + + public virtual void GetBytes(Span<byte> data) + { + byte[] array = ArrayPool<byte>.Shared.Rent(data.Length); + try + { + GetBytes(array, 0, data.Length); + new ReadOnlySpan<byte>(array, 0, data.Length).CopyTo(data); + } + finally + { + Array.Clear(array, 0, data.Length); + ArrayPool<byte>.Shared.Return(array); + } + } + + public virtual void GetNonZeroBytes(Span<byte> data) + { + byte[] array = ArrayPool<byte>.Shared.Rent(data.Length); + try + { + // NOTE: There is no GetNonZeroBytes(byte[], int, int) overload, so this call + // may end up retrieving more data than was intended, if the array pool + // gives back a larger array than was actually needed. + GetNonZeroBytes(array); + new ReadOnlySpan<byte>(array, 0, data.Length).CopyTo(data); + } + finally + { + Array.Clear(array, 0, data.Length); + ArrayPool<byte>.Shared.Return(array); + } + } + + public static int GetInt32(int fromInclusive, int toExclusive) + { + if (fromInclusive >= toExclusive) + throw new ArgumentException(SR.Argument_InvalidRandomRange); + + // The total possible range is [0, 4,294,967,295). + // Subtract one to account for zero being an actual possibility. + uint range = (uint)toExclusive - (uint)fromInclusive - 1; + + // If there is only one possible choice, nothing random will actually happen, so return + // the only possibility. + if (range == 0) + { + return fromInclusive; + } + + // Create a mask for the bits that we care about for the range. The other bits will be + // masked away. + uint mask = range; + mask |= mask >> 1; + mask |= mask >> 2; + mask |= mask >> 4; + mask |= mask >> 8; + mask |= mask >> 16; + + Span<uint> resultSpan = stackalloc uint[1]; + uint result; + + do + { + FillSpan(MemoryMarshal.AsBytes(resultSpan)); + result = mask & resultSpan[0]; + } + while (result > range); + + return (int)result + fromInclusive; + } + + public static int GetInt32(int toExclusive) + { + if (toExclusive <= 0) + throw new ArgumentOutOfRangeException(nameof(toExclusive), SR.ArgumentOutOfRange_NeedPosNum); + + return GetInt32(0, toExclusive); + } } } diff --git a/mcs/class/corlib/corefx/RuntimeFeature.cs b/mcs/class/corlib/corefx/RuntimeFeature.cs new file mode 100644 index 0000000000..404185e4b9 --- /dev/null +++ b/mcs/class/corlib/corefx/RuntimeFeature.cs @@ -0,0 +1,9 @@ +namespace System.Runtime.CompilerServices +{ + partial class RuntimeFeature + { + // https://github.com/dotnet/coreclr/blob/397aaccb5104844998c3bcf6e9245cc81127e1e2/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeFeature.CoreCLR.cs#L9-L10 + public static bool IsDynamicCodeSupported => true; + public static bool IsDynamicCodeCompiled => true; + } +} diff --git a/mcs/class/corlib/corefx/SR.cs.REMOVED.git-id b/mcs/class/corlib/corefx/SR.cs.REMOVED.git-id index d8592db146..6d36f63f8b 100644 --- a/mcs/class/corlib/corefx/SR.cs.REMOVED.git-id +++ b/mcs/class/corlib/corefx/SR.cs.REMOVED.git-id @@ -1 +1 @@ -c924ca12f5eed8122fd0b8ca78a6b339fae2c971 \ No newline at end of file +0d8ca7ea2340d4d83a6e2e36ccfef2a1088c23f7 \ No newline at end of file diff --git a/mcs/class/corlib/corefx/SR.missing.cs b/mcs/class/corlib/corefx/SR.missing.cs index f5c6fcbedb..282c012505 100644 --- a/mcs/class/corlib/corefx/SR.missing.cs +++ b/mcs/class/corlib/corefx/SR.missing.cs @@ -23,4 +23,7 @@ partial class SR public const string Argument_MemberAndArray = "Cannot supply both a MemberInfo and an Array to indicate the parent of a value type."; public const string Argument_MustSupplyContainer = "When supplying a FieldInfo for fixing up a nested type, a valid ID for that containing object must also be supplied."; public const string Serialization_NoID = "Object has never been assigned an objectID"; + public const string Arg_SwitchExpressionException = "Non-exhaustive switch expression failed to match its input."; + public const string SwitchExpressionException_UnmatchedValue = "Unmatched value was {0}."; + public const string Argument_InvalidRandomRange = "Range of random number does not contain at least one possibility."; } \ No newline at end of file diff --git a/mcs/class/corlib/corefx/Stream.cs b/mcs/class/corlib/corefx/Stream.cs new file mode 100644 index 0000000000..cb74022be7 --- /dev/null +++ b/mcs/class/corlib/corefx/Stream.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; + +namespace System.IO +{ + partial class Stream : IAsyncDisposable + { + public virtual ValueTask DisposeAsync() + { + try + { + Dispose(); + return default; + } + catch (Exception exc) + { + return new ValueTask(Task.FromException(exc)); + } + } + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/SwitchExpressionException.cs b/mcs/class/corlib/corefx/SwitchExpressionException.cs new file mode 100644 index 0000000000..755588812d --- /dev/null +++ b/mcs/class/corlib/corefx/SwitchExpressionException.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Runtime.Serialization; + +namespace System.Runtime.CompilerServices +{ + // MONO: this file was copied from CoreFX master for NS2.1 + + /// <summary> + /// Indicates that a switch expression that was non-exhaustive failed to match its input + /// at runtime, e.g. in the C# 8 expression <code>3 switch { 4 => 5 }</code>. + /// The exception optionally contains an object representing the unmatched value. + /// </summary> + [Serializable] + public sealed class SwitchExpressionException : InvalidOperationException + { + public SwitchExpressionException() + : base(SR.Arg_SwitchExpressionException) { } + + public SwitchExpressionException(Exception innerException) : + base(SR.Arg_SwitchExpressionException, innerException) { } + + public SwitchExpressionException(object unmatchedValue) : this() + { + UnmatchedValue = unmatchedValue; + } + + private SwitchExpressionException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + UnmatchedValue = info.GetValue(nameof(UnmatchedValue), typeof(object)); + } + + public SwitchExpressionException(string message) : base(message) { } + + public SwitchExpressionException(string message, Exception innerException) + : base(message, innerException) { } + + public object UnmatchedValue { get; } + + public override void GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue(nameof(UnmatchedValue), UnmatchedValue, typeof(object)); + } + + public override string Message + { + get + { +#if __MonoCS__ + if (UnmatchedValue == null) +#else + if (UnmatchedValue is null) +#endif + { + return base.Message; + } + string valueMessage = SR.Format(SR.SwitchExpressionException_UnmatchedValue, UnmatchedValue.ToString()); + return base.Message + Environment.NewLine + valueMessage; + } + } + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/TaskAsyncEnumerableExtensions.cs b/mcs/class/corlib/corefx/TaskAsyncEnumerableExtensions.cs new file mode 100644 index 0000000000..83d39ea337 --- /dev/null +++ b/mcs/class/corlib/corefx/TaskAsyncEnumerableExtensions.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace System.Threading.Tasks +{ + /// <summary>Provides a set of static methods for configuring <see cref="Task"/>-related behaviors on asynchronous enumerables and disposables.</summary> + public static class TaskAsyncEnumerableExtensions + { + /// <summary>Configures how awaits on the tasks returned from an async disposable will be performed.</summary> + /// <param name="source">The source async disposable.</param> + /// <param name="continueOnCapturedContext">Whether to capture and marshal back to the current context.</param> + /// <returns>The configured async disposable.</returns> + public static ConfiguredAsyncDisposable ConfigureAwait(this IAsyncDisposable source, bool continueOnCapturedContext) => + new ConfiguredAsyncDisposable(source, continueOnCapturedContext); + + /// <summary>Configures how awaits on the tasks returned from an async iteration will be performed.</summary> + /// <typeparam name="T">The type of the objects being iterated.</typeparam> + /// <param name="source">The source enumerable being iterated.</param> + /// <param name="continueOnCapturedContext">Whether to capture and marshal back to the current context.</param> + /// <returns>The configured enumerable.</returns> + public static ConfiguredCancelableAsyncEnumerable<T> ConfigureAwait<T>( + this IAsyncEnumerable<T> source, bool continueOnCapturedContext) => + new ConfiguredCancelableAsyncEnumerable<T>(source, continueOnCapturedContext, cancellationToken: default); + + /// <summary>Sets the <see cref="CancellationToken"/> to be passed to <see cref="IAsyncEnumerable{T}.GetAsyncEnumerator(CancellationToken)"/> when iterating.</summary> + /// <typeparam name="T">The type of the objects being iterated.</typeparam> + /// <param name="source">The source enumerable being iterated.</param> + /// <param name="cancellationToken">The <see cref="CancellationToken"/> to use.</param> + /// <returns>The configured enumerable.</returns> + public static ConfiguredCancelableAsyncEnumerable<T> WithCancellation<T>( + this IAsyncEnumerable<T> source, CancellationToken cancellationToken) => + new ConfiguredCancelableAsyncEnumerable<T>(source, continueOnCapturedContext: true, cancellationToken); + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/TextWriter.cs b/mcs/class/corlib/corefx/TextWriter.cs new file mode 100644 index 0000000000..c7cc5385f1 --- /dev/null +++ b/mcs/class/corlib/corefx/TextWriter.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.IO +{ + // Adds IAsyncDisposable to TextWriter + partial class TextWriter : IAsyncDisposable + { + } +} \ No newline at end of file diff --git a/mcs/class/corlib/corefx/ThrowHelper.cs b/mcs/class/corlib/corefx/ThrowHelper.cs new file mode 100644 index 0000000000..0dd0418ba6 --- /dev/null +++ b/mcs/class/corlib/corefx/ThrowHelper.cs @@ -0,0 +1,11 @@ +namespace System +{ + partial class ThrowHelper + { + internal static void ThrowValueArgumentOutOfRange_NeedNonNegNumException() + { + throw GetArgumentOutOfRangeException(ExceptionArgument.value, + ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); + } + } +} diff --git a/mcs/class/corlib/corert/CancellationTokenRegistration.cs b/mcs/class/corlib/corert/CancellationTokenRegistration.cs new file mode 100644 index 0000000000..42ff4bcb17 --- /dev/null +++ b/mcs/class/corlib/corert/CancellationTokenRegistration.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Threading.Tasks; +using System.Runtime.CompilerServices; + +namespace System.Threading +{ + partial struct CancellationTokenRegistration : IAsyncDisposable + { + public ValueTask DisposeAsync() + { + Dispose(); + return new ValueTask(Task.FromResult<object>(null)); + } + } +} diff --git a/mcs/class/corlib/corert/Decimal.DecCalc.cs.REMOVED.git-id b/mcs/class/corlib/corert/Decimal.DecCalc.cs.REMOVED.git-id index 04f74cc7fa..a2b8cb95c2 100644 --- a/mcs/class/corlib/corert/Decimal.DecCalc.cs.REMOVED.git-id +++ b/mcs/class/corlib/corert/Decimal.DecCalc.cs.REMOVED.git-id @@ -1 +1 @@ -d401155ef021a7c184607b19fe3c53d7ab9bccfe \ No newline at end of file +a7f0f55f625a7889d8557e32c91785d16411b635 \ No newline at end of file diff --git a/mcs/class/corlib/corert/Decimal.cs.REMOVED.git-id b/mcs/class/corlib/corert/Decimal.cs.REMOVED.git-id index 822b717cc0..e63eb6f4ed 100644 --- a/mcs/class/corlib/corert/Decimal.cs.REMOVED.git-id +++ b/mcs/class/corlib/corert/Decimal.cs.REMOVED.git-id @@ -1 +1 @@ -185ecfe95a4f99dcc1009272f8eda1cb0952ea95 \ No newline at end of file +3e35f8c7be8297c4e887ece490627e9a61872c18 \ No newline at end of file diff --git a/mcs/class/corlib/corlib.dll.sources.REMOVED.git-id b/mcs/class/corlib/corlib.dll.sources.REMOVED.git-id index abe32b1a0e..299ef2ea68 100644 --- a/mcs/class/corlib/corlib.dll.sources.REMOVED.git-id +++ b/mcs/class/corlib/corlib.dll.sources.REMOVED.git-id @@ -1 +1 @@ -a609aea256112efd132cab75e3a40b560c42a264 \ No newline at end of file +3abc8e8f55c5cb4a9a3e4efe4cd0763769d9c195 \ No newline at end of file diff --git a/mcs/class/corlib/corlib_test.dll.sources b/mcs/class/corlib/corlib_test.dll.sources index 6a66207846..cb3355acc8 100644 --- a/mcs/class/corlib/corlib_test.dll.sources +++ b/mcs/class/corlib/corlib_test.dll.sources @@ -1,3 +1,5 @@ +../../../../external/corert/src/System.Private.CoreLib/src/System/Globalization/GlobalizationMode.cs +../corefx/GlobalizationMode.cs Microsoft.Win32/RegistryKeyTest.cs Mono/DataConvertTest.cs ../Mono/DataConverter.cs diff --git a/mcs/class/corlib/corlib_xtest.dll.sources b/mcs/class/corlib/corlib_xtest.dll.sources index aa329ac4e0..e761964b26 100644 --- a/mcs/class/corlib/corlib_xtest.dll.sources +++ b/mcs/class/corlib/corlib_xtest.dll.sources @@ -1,3 +1,6 @@ +../../../external/corert/src/System.Private.CoreLib/src/System/Globalization/GlobalizationMode.cs +corefx/GlobalizationMode.cs + ../../../external/corefx/src/CoreFx.Private.TestUtilities/src/System/AssertExtensions.cs ../../../external/corefx/src/Common/tests/System/MockType.cs @@ -287,6 +290,7 @@ ../../../external/corefx/src/System.Runtime/tests/System/GuidTests.netcoreapp.cs ../../../external/corefx/src/System.Runtime/tests/System/HandleTests.cs ../../../external/corefx/src/System.Runtime/tests/System/HashCodeTests.netcoreapp.cs +../../../external/corefx/src/System.Runtime/tests/System/IndexTests.cs ../../../external/corefx/src/System.Runtime/tests/System/Int16Tests.cs ../../../external/corefx/src/System.Runtime/tests/System/Int16Tests.netcoreapp.cs ../../../external/corefx/src/System.Runtime/tests/System/Int32Tests.cs @@ -307,6 +311,7 @@ ../../../external/corefx/src/System.Runtime/tests/System/NullReferenceExceptionTests.cs ../../../external/corefx/src/System.Runtime/tests/System/ObjectTests.cs #../../../external/corefx/src/System.Runtime/tests/System/PseudoCustomAttributeTests.cs +../../../external/corefx/src/System.Runtime/tests/System/RangeTests.cs ../../../external/corefx/src/System.Runtime/tests/System/SByteTests.cs ../../../external/corefx/src/System.Runtime/tests/System/SByteTests.netcoreapp.cs ../../../external/corefx/src/System.Runtime/tests/System/SingleTests.cs diff --git a/mcs/class/corlib/legacy/ActivationServices.cs b/mcs/class/corlib/legacy/ActivationServices.cs new file mode 100644 index 0000000000..3bf76219f5 --- /dev/null +++ b/mcs/class/corlib/legacy/ActivationServices.cs @@ -0,0 +1,22 @@ +using System.Runtime.CompilerServices; + +namespace System.Runtime.Remoting.Activation +{ + internal static class ActivationServices + { +#region Keep this code, it is used by the runtime + // Called from the runtime. + public static object CreateProxyForType (Type type) + { + throw new PlatformNotSupportedException (); + } +#endregion + + // Allocates an uninitialized instance. It never creates proxies. + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public static extern object AllocateUninitializedClassInstance (Type type); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static void EnableProxyActivation (Type type, bool enable); + } +} diff --git a/mcs/class/corlib/legacy/CallContext.cs b/mcs/class/corlib/legacy/CallContext.cs new file mode 100644 index 0000000000..5b9f52ab38 --- /dev/null +++ b/mcs/class/corlib/legacy/CallContext.cs @@ -0,0 +1,43 @@ +namespace System.Runtime.Remoting.Messaging +{ +#region Keep this code, it is used by nunit + public interface ILogicalThreadAffinative + { + } +#endregion + + class LogicalCallContext + { + LogicalCallContext () + { + throw new PlatformNotSupportedException (); + } + } + + public sealed class CallContext + { + CallContext () + { + throw new PlatformNotSupportedException (); + } + +#region Keep this code, it is used by the runtime + internal static object SetCurrentCallContext (LogicalCallContext ctx) + { + throw new PlatformNotSupportedException (); + } +#endregion + +#region Keep this code, it is used by nunit + public static void SetData (String name, Object data) + { + throw new PlatformNotSupportedException (); + } + + public static Object GetData (String name) + { + throw new PlatformNotSupportedException (); + } +#endregion + } +} diff --git a/mcs/class/corlib/legacy/Context.cs b/mcs/class/corlib/legacy/Context.cs new file mode 100644 index 0000000000..42f051ce5b --- /dev/null +++ b/mcs/class/corlib/legacy/Context.cs @@ -0,0 +1,28 @@ +using System.Runtime.Remoting.Messaging; +using System.Runtime.InteropServices; + +namespace System.Runtime.Remoting.Contexts +{ + [StructLayout (LayoutKind.Sequential)] + public sealed class Context + { +#region Keep this code, it is used by the runtime +#pragma warning disable 169, 414 + int domain_id; + int context_id; + UIntPtr static_data; /* GC-tracked */ + UIntPtr data; + + [ContextStatic] + static object[] local_slots; +#pragma warning restore 169, 414 + + internal bool NeedsContextSink => throw new PlatformNotSupportedException (); +#endregion + + Context () + { + throw new PlatformNotSupportedException (); + } + } +} diff --git a/mcs/class/corlib/legacy/IRemotingTypeInfo.cs b/mcs/class/corlib/legacy/IRemotingTypeInfo.cs new file mode 100644 index 0000000000..d36ed3fad4 --- /dev/null +++ b/mcs/class/corlib/legacy/IRemotingTypeInfo.cs @@ -0,0 +1,8 @@ +namespace System.Runtime.Remoting +{ + public interface IRemotingTypeInfo + { + string TypeName { get; set; } + bool CanCastTo (Type fromType, object o); + } +} diff --git a/mcs/class/corlib/legacy/MarshalByRefObject.cs b/mcs/class/corlib/legacy/MarshalByRefObject.cs new file mode 100644 index 0000000000..43e7b55776 --- /dev/null +++ b/mcs/class/corlib/legacy/MarshalByRefObject.cs @@ -0,0 +1,33 @@ +using System.Runtime.InteropServices; + +namespace System +{ + [StructLayout (LayoutKind.Sequential)] + public abstract class MarshalByRefObject + { +#region Keep this code, it is used by the runtime +#pragma warning disable 169, 649 + private object _identity; +#pragma warning restore 169, 649 +#endregion + + protected MarshalByRefObject () + { + } + + public object GetLifetimeService () + { + throw new PlatformNotSupportedException (); + } + + public virtual object InitializeLifetimeService () + { + throw new PlatformNotSupportedException (); + } + + protected MarshalByRefObject MemberwiseClone (bool cloneIdentity) + { + throw new PlatformNotSupportedException (); + } + } +} diff --git a/mcs/class/corlib/legacy/ObjectHandle.cs b/mcs/class/corlib/legacy/ObjectHandle.cs new file mode 100644 index 0000000000..85f3a906d5 --- /dev/null +++ b/mcs/class/corlib/legacy/ObjectHandle.cs @@ -0,0 +1,26 @@ +namespace System.Runtime.Remoting +{ + public sealed class ObjectHandle : MarshalByRefObject + { +#region Keep this code, it is used by the runtime +#pragma warning disable 169, 649 + private object _wrapped; +#pragma warning restore 169, 649 +#endregion + + public ObjectHandle (object o) + { + throw new PlatformNotSupportedException (); + } + + public override object InitializeLifetimeService () + { + throw new PlatformNotSupportedException (); + } + + public object Unwrap () + { + throw new PlatformNotSupportedException (); + } + } +} diff --git a/mcs/class/corlib/legacy/RealProxy.cs b/mcs/class/corlib/legacy/RealProxy.cs new file mode 100644 index 0000000000..fad1ee7cce --- /dev/null +++ b/mcs/class/corlib/legacy/RealProxy.cs @@ -0,0 +1,65 @@ + +using System; +using System.Runtime.Remoting.Messaging; +using System.Runtime.Remoting.Contexts; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Runtime.Remoting.Proxies +{ + [StructLayout (LayoutKind.Sequential)] + internal class TransparentProxy + { +#region Keep this code, it is used by the runtime +#pragma warning disable 169, 649 + public RealProxy _rp; + Mono.RuntimeRemoteClassHandle _class; + bool _custom_type_info; + + internal object LoadRemoteFieldNew (IntPtr classPtr, IntPtr fieldPtr) + { + throw new PlatformNotSupportedException (); + } + + internal void StoreRemoteField (IntPtr classPtr, IntPtr fieldPtr, object arg) + { + throw new PlatformNotSupportedException (); + } +#pragma warning restore 169, 649 +#endregion + } + + [StructLayout (LayoutKind.Sequential)] + public abstract class RealProxy + { +#region Keep this code, it is used by the runtime +#pragma warning disable 169, 649 + Type class_to_proxy; + internal Context _targetContext; + internal MarshalByRefObject _server; + int _targetDomainId = -1; + internal string _targetUri; + internal Object _objectIdentity; + Object _objTP; + object _stubData; + + internal object GetAppDomainTarget () + { + throw new PlatformNotSupportedException (); + } + + internal static object PrivateInvoke (RealProxy rp, IMessage msg, out Exception exc, + out object [] out_args) + { + throw new PlatformNotSupportedException (); + } + +#pragma warning disable 169, 649 +#endregion + + RealProxy () + { + throw new PlatformNotSupportedException (); + } + } +} diff --git a/mcs/class/corlib/legacy/RemotingServices.cs b/mcs/class/corlib/legacy/RemotingServices.cs new file mode 100644 index 0000000000..6afcf4002b --- /dev/null +++ b/mcs/class/corlib/legacy/RemotingServices.cs @@ -0,0 +1,29 @@ +namespace System.Runtime.Remoting +{ + public static class RemotingServices + { +#region Keep this code, it is used by the runtime + + internal static object GetServerObject (string uri) + { + throw new PlatformNotSupportedException (); + } + + internal static byte[] SerializeCallData (object obj) + { + throw new PlatformNotSupportedException (); + } + + internal static object DeserializeCallData (byte[] array) + { + throw new PlatformNotSupportedException (); + } + + internal static byte[] SerializeExceptionData (Exception ex) + { + throw new PlatformNotSupportedException (); + } + +#endregion + } +} diff --git a/mcs/class/corlib/mobile_tests.exclude.sources b/mcs/class/corlib/mobile_tests.exclude.sources index e1a7734049..c23b2a1c43 100644 --- a/mcs/class/corlib/mobile_tests.exclude.sources +++ b/mcs/class/corlib/mobile_tests.exclude.sources @@ -1,6 +1,4 @@ Mono/NativePlatformTest.cs -../Mono/MonoNativePlatform.cs -../Mono/MonoNativePlatformType.cs Microsoft.Win32/RegistryKeyTest.cs System.Diagnostics.Contracts/ContractAssertTest.cs System.Diagnostics.Contracts/ContractAssumeTest.cs diff --git a/mcs/class/corlib/monotouch_corlib.dll.exclude.sources b/mcs/class/corlib/monotouch_corlib.dll.exclude.sources index 2d0448dbd0..e06dece467 100644 --- a/mcs/class/corlib/monotouch_corlib.dll.exclude.sources +++ b/mcs/class/corlib/monotouch_corlib.dll.exclude.sources @@ -1,4 +1,5 @@ #include unix_build_corlib.dll.exclude.sources +../../../external/corefx/src/Common/src/CoreLib/System/Guid.Unix.cs System.Security.Cryptography/MD5CryptoServiceProvider.cs System.Security.Cryptography/SHA1CryptoServiceProvider.cs System.Security.Cryptography/SHA1CryptoServiceProvider.cs diff --git a/mcs/class/corlib/monotouch_corlib.dll.sources b/mcs/class/corlib/monotouch_corlib.dll.sources index ad61182903..c565739ccd 100644 --- a/mcs/class/corlib/monotouch_corlib.dll.sources +++ b/mcs/class/corlib/monotouch_corlib.dll.sources @@ -2,6 +2,7 @@ CommonCrypto/CommonCrypto.cs CommonCrypto/CryptorTransform.cs CommonCrypto/FastCryptorTransform.cs +CommonCrypto/Guid.cs CommonCrypto/CorlibExtras.cs CommonCrypto/RijndaelManaged.cs CommonCrypto/RNGCryptoServiceProvider.cryptor.cs @@ -9,5 +10,4 @@ CommonCrypto/RC4CommonCrypto.cs CoreFoundation/CFHelpers.cs System.Text/EncodingHelper.MonoTouch.cs System/Environment.iOS.cs -System/Guid.MonoTouch.cs System/NotSupportedException.iOS.cs diff --git a/mcs/class/corlib/testing_aot_common_corlib.dll.exclude.sources b/mcs/class/corlib/testing_aot_common_corlib.dll.exclude.sources new file mode 100644 index 0000000000..0f8b60ed70 --- /dev/null +++ b/mcs/class/corlib/testing_aot_common_corlib.dll.exclude.sources @@ -0,0 +1,60 @@ +System/MarshalByRefObject.cs + +System.Runtime.Remoting/*.cs + +System.Runtime.Remoting.Activation/*.cs + +System.Runtime.Remoting.Contexts/*.cs + +System.Runtime.Remoting.Channels/*.cs + +System.Runtime.Remoting.Lifetime/*.cs + +System.Runtime.Remoting.Messaging/ArgInfo.cs +System.Runtime.Remoting.Messaging/CADMessages.cs +System.Runtime.Remoting.Messaging/ClientContextTerminatorSink.cs +System.Runtime.Remoting.Messaging/ConstructionCall.cs +System.Runtime.Remoting.Messaging/ConstructionCallDictionary.cs +System.Runtime.Remoting.Messaging/ConstructionResponse.cs +System.Runtime.Remoting.Messaging/EnvoyTerminatorSink.cs +System.Runtime.Remoting.Messaging/ErrorMessage.cs +System.Runtime.Remoting.Messaging/InternalMessageWrapper.cs +System.Runtime.Remoting.Messaging/IInternalMessage.cs +System.Runtime.Remoting.Messaging/IMethodMessage.cs +System.Runtime.Remoting.Messaging/IMethodCallMessage.cs +System.Runtime.Remoting.Messaging/IMethodReturnMessage.cs +System.Runtime.Remoting.Messaging/IRemotingFormatter.cs +System.Runtime.Remoting.Messaging/ISerializationRootObject.cs +System.Runtime.Remoting.Messaging/MessageSurrogateFilter.cs +System.Runtime.Remoting.Messaging/MethodCall.cs +System.Runtime.Remoting.Messaging/MethodCallDictionary.cs +System.Runtime.Remoting.Messaging/MethodCallMessageWrapper.cs +System.Runtime.Remoting.Messaging/MethodDictionary.cs +System.Runtime.Remoting.Messaging/MethodResponse.cs +System.Runtime.Remoting.Messaging/MethodReturnDictionary.cs +System.Runtime.Remoting.Messaging/MethodReturnMessageWrapper.cs +System.Runtime.Remoting.Messaging/OneWayAttribute.cs +System.Runtime.Remoting.Messaging/RemotingSurrogate.cs +System.Runtime.Remoting.Messaging/RemotingSurrogateSelector.cs +System.Runtime.Remoting.Messaging/ReturnMessage.cs +System.Runtime.Remoting.Messaging/ServerContextTerminatorSink.cs +System.Runtime.Remoting.Messaging/ServerObjectTerminatorSink.cs +System.Runtime.Remoting.Messaging/StackBuilderSink.cs + +System.Runtime.Remoting.Metadata/*.cs +System.Runtime.Remoting.Metadata.W3cXsd2001/*.cs + +../referencesource/mscorlib/system/runtime/serialization/formatters/soapfault.cs + +System.Runtime.Remoting.Proxies/*.cs + +System.Runtime.Remoting.Services/*.cs + +ReferenceSources/RemotingFieldCachedData.cs + +Mono.Interop/*.cs + +../referencesource/mscorlib/system/runtime/remoting/callcontext.cs + +System.Security.Permissions/PrincipalPermission.cs +System.Security.Permissions/PrincipalPermissionAttribute.cs diff --git a/mcs/class/corlib/testing_aot_common_corlib.dll.sources b/mcs/class/corlib/testing_aot_common_corlib.dll.sources new file mode 100644 index 0000000000..d9d369a7d1 --- /dev/null +++ b/mcs/class/corlib/testing_aot_common_corlib.dll.sources @@ -0,0 +1 @@ +legacy/*.cs diff --git a/mcs/class/corlib/testing_aot_common_corlib_test.dll.exclude.sources b/mcs/class/corlib/testing_aot_common_corlib_test.dll.exclude.sources new file mode 100644 index 0000000000..c9e61e280d --- /dev/null +++ b/mcs/class/corlib/testing_aot_common_corlib_test.dll.exclude.sources @@ -0,0 +1,29 @@ +System/AppDomainCas.cs + +System.Security.Claims/*.cs +System.Security.Principal/*.cs +System.Security.Permissions/IBuiltInPermissionTest.cs +System.Security.Permissions/PrincipalPermissionTest.cs +System.Security.Permissions/PrincipalPermissionAttributeTest.cs +System.Security.Policy/ApplicationTrustTest.cs +System.Security.Policy/EvidenceTest.cs + +System.Threading/ExecutionContextTest.cs +System.Threading/ThreadPrincipalTests.cs + +System.Reflection/AssemblyCas.cs +System.Reflection/AssemblyTest.cs + +System.Reflection.Emit/AssemblyBuilderTest.cs +System.Reflection.Emit/FieldBuilderTest.cs + +System.Runtime.InteropServices/GCHandleTest.cs + +System.Runtime.CompilerServices/AsyncTaskMethodBuilderTest.cs + +System.Runtime.Remoting/*.cs +System.Runtime.Remoting.Channels/*.cs +System.Runtime.Remoting.Contexts/*.cs +System.Runtime.Remoting.Proxies/*.cs +System.Runtime.Remoting.Messaging/*.cs +System.Runtime.Remoting.Metadata.W3cXsd2001/*.cs diff --git a/mcs/class/corlib/testing_aot_full_corlib.dll.exclude.sources b/mcs/class/corlib/testing_aot_full_corlib.dll.exclude.sources index e3d03b6c18..9dedaab373 100644 --- a/mcs/class/corlib/testing_aot_full_corlib.dll.exclude.sources +++ b/mcs/class/corlib/testing_aot_full_corlib.dll.exclude.sources @@ -1 +1,2 @@ #include unix_build_corlib.dll.exclude.sources +#include testing_aot_common_corlib.dll.exclude.sources diff --git a/mcs/class/corlib/testing_aot_full_corlib.dll.sources b/mcs/class/corlib/testing_aot_full_corlib.dll.sources index a7708416b7..f688d0f013 100644 --- a/mcs/class/corlib/testing_aot_full_corlib.dll.sources +++ b/mcs/class/corlib/testing_aot_full_corlib.dll.sources @@ -1,2 +1,3 @@ #include corlib.dll.sources #include unix_build_corlib.dll.sources +#include testing_aot_common_corlib.dll.sources diff --git a/mcs/class/corlib/testing_aot_full_corlib_test.dll.exclude.sources b/mcs/class/corlib/testing_aot_full_corlib_test.dll.exclude.sources index 23f611c3ff..31d36ced60 100644 --- a/mcs/class/corlib/testing_aot_full_corlib_test.dll.exclude.sources +++ b/mcs/class/corlib/testing_aot_full_corlib_test.dll.exclude.sources @@ -1,4 +1,5 @@ #include mobile_tests.exclude.sources +#include testing_aot_common_corlib_test.dll.exclude.sources Mono/NativePlatformTest.cs Mono/MonoNativePlatform.cs Mono/MonoNativePlatformType.cs diff --git a/mcs/class/corlib/testing_aot_full_interp_corlib.dll.exclude.sources b/mcs/class/corlib/testing_aot_full_interp_corlib.dll.exclude.sources index e3d03b6c18..9dedaab373 100644 --- a/mcs/class/corlib/testing_aot_full_interp_corlib.dll.exclude.sources +++ b/mcs/class/corlib/testing_aot_full_interp_corlib.dll.exclude.sources @@ -1 +1,2 @@ #include unix_build_corlib.dll.exclude.sources +#include testing_aot_common_corlib.dll.exclude.sources diff --git a/mcs/class/corlib/testing_aot_full_interp_corlib.dll.sources b/mcs/class/corlib/testing_aot_full_interp_corlib.dll.sources index 3185434a62..0d6c00309e 100644 --- a/mcs/class/corlib/testing_aot_full_interp_corlib.dll.sources +++ b/mcs/class/corlib/testing_aot_full_interp_corlib.dll.sources @@ -1 +1,2 @@ #include unix_build_corlib.dll.sources +#include testing_aot_common_corlib.dll.sources diff --git a/mcs/class/corlib/testing_aot_full_interp_corlib_test.dll.exclude.sources b/mcs/class/corlib/testing_aot_full_interp_corlib_test.dll.exclude.sources index 5d480acc84..e6274125f4 100644 --- a/mcs/class/corlib/testing_aot_full_interp_corlib_test.dll.exclude.sources +++ b/mcs/class/corlib/testing_aot_full_interp_corlib_test.dll.exclude.sources @@ -1,3 +1,4 @@ #include mobile_tests.exclude.sources +#include testing_aot_common_corlib_test.dll.exclude.sources System.Reflection.Emit/AssemblyBuilderTest.cs diff --git a/mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.exclude.sources b/mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.exclude.sources deleted file mode 100644 index e3d03b6c18..0000000000 --- a/mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.exclude.sources +++ /dev/null @@ -1 +0,0 @@ -#include unix_build_corlib.dll.exclude.sources diff --git a/mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.sources b/mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.sources deleted file mode 100644 index 3185434a62..0000000000 --- a/mcs/class/corlib/testing_aot_full_interp_llvm_corlib.dll.sources +++ /dev/null @@ -1 +0,0 @@ -#include unix_build_corlib.dll.sources diff --git a/mcs/class/corlib/testing_aot_hybrid_corlib.dll.exclude.sources b/mcs/class/corlib/testing_aot_hybrid_corlib.dll.exclude.sources index e3d03b6c18..9dedaab373 100644 --- a/mcs/class/corlib/testing_aot_hybrid_corlib.dll.exclude.sources +++ b/mcs/class/corlib/testing_aot_hybrid_corlib.dll.exclude.sources @@ -1 +1,2 @@ #include unix_build_corlib.dll.exclude.sources +#include testing_aot_common_corlib.dll.exclude.sources diff --git a/mcs/class/corlib/testing_aot_hybrid_corlib.dll.sources b/mcs/class/corlib/testing_aot_hybrid_corlib.dll.sources index a7708416b7..f688d0f013 100644 --- a/mcs/class/corlib/testing_aot_hybrid_corlib.dll.sources +++ b/mcs/class/corlib/testing_aot_hybrid_corlib.dll.sources @@ -1,2 +1,3 @@ #include corlib.dll.sources #include unix_build_corlib.dll.sources +#include testing_aot_common_corlib.dll.sources diff --git a/mcs/class/corlib/testing_aot_hybrid_corlib_test.dll.exclude.sources b/mcs/class/corlib/testing_aot_hybrid_corlib_test.dll.exclude.sources index 9b651e6fc9..6854335aae 100644 --- a/mcs/class/corlib/testing_aot_hybrid_corlib_test.dll.exclude.sources +++ b/mcs/class/corlib/testing_aot_hybrid_corlib_test.dll.exclude.sources @@ -1,3 +1,4 @@ +#include testing_aot_common_corlib_test.dll.exclude.sources Microsoft.Win32/RegistryKeyTest.cs System.Reflection/VisibilityTest.cs System.Security.AccessControl/AuthorizationRuleTest.cs diff --git a/mcs/class/corlib/wasm_corlib.dll.exclude.sources b/mcs/class/corlib/wasm_corlib.dll.exclude.sources index 379bb30cf2..cfbc4c081a 100644 --- a/mcs/class/corlib/wasm_corlib.dll.exclude.sources +++ b/mcs/class/corlib/wasm_corlib.dll.exclude.sources @@ -1,2 +1,4 @@ #include unix_build_corlib.dll.exclude.sources +#include testing_aot_common_corlib.dll.exclude.sources +Mono.Globalization.Unicode/SimpleCollator.cs diff --git a/mcs/class/corlib/wasm_corlib.dll.sources b/mcs/class/corlib/wasm_corlib.dll.sources index 3185434a62..0d6c00309e 100644 --- a/mcs/class/corlib/wasm_corlib.dll.sources +++ b/mcs/class/corlib/wasm_corlib.dll.sources @@ -1 +1,2 @@ #include unix_build_corlib.dll.sources +#include testing_aot_common_corlib.dll.sources diff --git a/mcs/class/corlib/wasm_corlib_test.dll.exclude.sources b/mcs/class/corlib/wasm_corlib_test.dll.exclude.sources index b8b7ad5d93..3b5110b4dd 100644 --- a/mcs/class/corlib/wasm_corlib_test.dll.exclude.sources +++ b/mcs/class/corlib/wasm_corlib_test.dll.exclude.sources @@ -1,3 +1,4 @@ +#include testing_aot_common_corlib_test.dll.exclude.sources Mono/NativePlatformTest.cs Mono/MonoNativePlatform.cs Mono/MonoNativePlatformType.cs diff --git a/mcs/class/corlib/win32_build_corlib.dll.exclude.sources b/mcs/class/corlib/win32_build_corlib.dll.exclude.sources index 66f65b1b80..94b0ce3521 100644 --- a/mcs/class/corlib/win32_build_corlib.dll.exclude.sources +++ b/mcs/class/corlib/win32_build_corlib.dll.exclude.sources @@ -1 +1,19 @@ #include System.IO.platformnotsupported.sources + +../../../external/corert/src/System.Private.CoreLib/src/System/Number.Unix.cs +../../../external/corert/src/Common/src/Interop/Unix/System.Private.CoreLib.Native/Interop.Number.cs + +corefx/Mono.SafePasswordHandle.Unix.cs +../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Unix.cs + +System/TimeZoneInfo.Android.cs +System/TimeZoneInfo.MonoTouch.cs +System/TimeZoneInfo.WebAssembly.cs + +corefx/Interop.GetRandomBytes.Mono.cs + +System.Text/EncodingHelper.WebAssembly.cs + +System/Console.iOS.cs + +System/AndroidPlatform.cs \ No newline at end of file diff --git a/mcs/class/corlib/win32_build_corlib.dll.sources b/mcs/class/corlib/win32_build_corlib.dll.sources index b17f90f772..66cfae4d2e 100644 --- a/mcs/class/corlib/win32_build_corlib.dll.sources +++ b/mcs/class/corlib/win32_build_corlib.dll.sources @@ -1,7 +1,17 @@ #include corlib.dll.sources -../../../external/corefx/src/Common/src/CoreLib/System/IO/PathInternal.Windows.cs -../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.FILE_FULL_DIR_INFORMATION.cs +../../../external/corefx/src/Common/src/Interop/Windows/Interop.BOOLEAN.cs +../../../external/corefx/src/Common/src/Interop/Windows/Interop.UNICODE_STRING.cs +../../../external/corefx/src/Common/src/Interop/Windows/Interop.Errors.cs +../../../external/corefx/src/Common/src/Interop/Windows/Interop.BOOL.cs +../../../external/corefx/src/Common/src/Interop/Windows/Interop.Libraries.cs +../../../external/corefx/src/Common/src/Interop/Windows/Interop.LongFileTime.cs + +../../../external/corert/src/Common/src/Interop/Windows/Interop.Libraries.cs +../../../external/corert/src/Common/src/Interop/Windows/mincore/Interop.MemAllocFree.cs +../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.MAX_PATH.cs + +../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.SECURITY_ATTRIBUTES.cs ../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.WIN32_FILE_ATTRIBUTE_DATA.cs ../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.WIN32_FIND_DATA.cs ../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.FILE_TIME.cs @@ -30,32 +40,38 @@ ../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.SetThreadErrorMode.cs ../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.GetLogicalDrive.cs ../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.FormatMessage.cs +../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.FindFirstFileEx.cs + +../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.FILE_FULL_DIR_INFORMATION.cs ../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.NtCreateFile.cs ../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.NtQueryDirectoryFile.cs ../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.IO_STATUS_BLOCK.cs ../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.FILE_INFORMATION_CLASS.cs ../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.RtlNtStatusToDosError.cs ../../../external/corefx/src/Common/src/Interop/Windows/NtDll/Interop.NtStatus.cs + +../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.BCryptGenRandom.cs +../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.BCryptGenRandom.GetRandomBytes.cs +../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.NTSTATUS.cs + ../../../external/corefx/src/Common/src/CoreLib/System/IO/Win32Marshal.cs -../../../external/corefx/src/Common/src/Interop/Windows/Interop.BOOLEAN.cs -../../../external/corefx/src/Common/src/Interop/Windows/Interop.UNICODE_STRING.cs -../../../external/corefx/src/Common/src/Interop/Windows/Interop.Libraries.cs - -../../../external/corefx/src/Common/src/System/Memory/FixedBufferExtensions.cs -../../../external/corefx/src/Common/src/CoreLib/System/TupleExtensions.cs - -#TODO add tests -../../../external/corefx/src/Common/src/Interop/Windows/Interop.Errors.cs -../../../external/corefx/src/Common/src/Interop/Windows/Interop.BOOL.cs -../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.SECURITY_ATTRIBUTES.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.MAX_PATH.cs -../../../external/corefx/src/Common/src/Interop/Windows/Interop.LongFileTime.cs -../../../external/corefx/src/Common/src/Interop/Windows/kernel32/Interop.FindFirstFileEx.cs +../../../external/corefx/src/Common/src/CoreLib/System/IO/PathInternal.Windows.cs +../../../external/corefx/src/Common/src/CoreLib/Internal/IO/File.Windows.cs +../../../external/corefx/src/Common/src/System/IO/DriveInfoInternal.Win32.cs ../../../external/corefx/src/System.IO.FileSystem/src/System/IO/FileSystem.Windows.cs ../../../external/corefx/src/System.IO.FileSystem/src/System/IO/FileSystemInfo.Windows.cs -../../../external/corefx/src/Common/src/CoreLib/Internal/IO/File.Windows.cs ../../../external/corefx/src/System.IO.FileSystem/src/System/IO/Enumeration/FileSystemEnumerator.Windows.cs ../../../external/corefx/src/System.IO.FileSystem/src/System/IO/Enumeration/FileSystemEnumerator.Win32.cs ../../../external/corefx/src/System.IO.FileSystem/src/System/IO/Enumeration/FileSystemEntry.Windows.cs -../../../external/corefx/src/Common/src/System/IO/DriveInfoInternal.Win32.cs ../../../external/corefx/src/System.IO.FileSystem/src/System/IO/DisableMediaInsertionPrompt.cs + +../../../external/corefx/src/Common/src/System/Memory/FixedBufferExtensions.cs + +../../../external/corefx/src/Common/src/CoreLib/System/TupleExtensions.cs + +../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Windows.cs + +corert/RuntimeImports.cs +../../../external/corert/src/System.Private.CoreLib/src/System/Number.Windows.cs + +corefx/Mono.SafePasswordHandle.Windows.cs \ No newline at end of file diff --git a/mcs/class/corlib/win32_monodroid_corlib.dll.exclude.sources b/mcs/class/corlib/win32_monodroid_corlib.dll.exclude.sources index 1883c19df8..3b782bfeaa 100644 --- a/mcs/class/corlib/win32_monodroid_corlib.dll.exclude.sources +++ b/mcs/class/corlib/win32_monodroid_corlib.dll.exclude.sources @@ -1,28 +1,18 @@ #include System.IO.platformnotsupported.sources -corert/PreAllocatedOverlapped.platformnotsupported.cs -corert/ThreadPoolBoundHandle.platformnotsupported.cs + ../../../external/corert/src/System.Private.CoreLib/src/System/Number.Unix.cs ../../../external/corert/src/Common/src/Interop/Unix/System.Private.CoreLib.Native/Interop.Number.cs -corefx/Interop.GetRandomBytes.Mono.cs corefx/Mono.SafePasswordHandle.Unix.cs ../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Unix.cs -Microsoft.Win32/IRegistryApi.cs -Microsoft.Win32/Registry.cs -Microsoft.Win32/RegistryKey.cs -Microsoft.Win32/Win32RegistryApi.cs -Microsoft.Win32/Win32ResultCode.cs -Microsoft.Win32/UnixRegistryApi.cs -System.Security.AccessControl/RegistryAccessRule.cs -System.Security.AccessControl/RegistryAuditRule.cs -System.Security.AccessControl/RegistrySecurity.cs -../referencesource/mscorlib/microsoft/win32/safehandles/saferegistryhandle.cs -../referencesource/mscorlib/system/timezoneinfo.cs -corefx/TimeZoneInfo.cs -System/TimeZoneInfo.cs -System/TimeZoneInfo.Android.cs System/TimeZoneInfo.MonoTouch.cs -System/TimeZoneInfo.Serialization.cs -System/TimeZoneInfo.WinRT.cs +System/TimeZoneInfo.WebAssembly.cs +System/TimeZoneInfo.Android.cs +corefx/Interop.GetRandomBytes.Mono.cs + +System.Text/EncodingHelper.WebAssembly.cs + +System/Console.iOS.cs +System/AndroidPlatform.cs diff --git a/mcs/class/corlib/win32_monodroid_corlib.dll.sources b/mcs/class/corlib/win32_monodroid_corlib.dll.sources index f1352900b7..f82b1e98e7 100644 --- a/mcs/class/corlib/win32_monodroid_corlib.dll.sources +++ b/mcs/class/corlib/win32_monodroid_corlib.dll.sources @@ -1,67 +1,2 @@ #include corlib.dll.sources #include win32_build_corlib.dll.sources - -../../../external/corert/src/Common/src/Interop/Windows/Interop.Libraries.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.BCryptGenRandom.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.BCryptGenRandom.GetRandomBytes.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.NTSTATUS.cs - -../../../external/corert/src/Common/src/Interop/Windows/mincore/Interop.MemAllocFree.cs -../../../external/corert/src/Common/src/Interop/Windows/mincore/Interop.ThreadPoolIO.cs -../../../external/corefx/src/Common/src/Interop/Windows/Interop.Errors.cs - -../../../external/corert/src/System.Private.CoreLib/shared/System/Threading/DeferredDisposableLifetime.cs - -../../../external/corert/src/System.Private.CoreLib/src/Microsoft/Win32/SafeHandles/SafeThreadPoolIOHandle.cs - -../../../external/corert/src/System.Private.CoreLib/src/System/Threading/ThreadPoolCallbackWrapper.cs - -../../../external/corert/src/System.Private.CoreLib/src/System/Threading/Win32ThreadPoolBoundHandle.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Threading/Win32ThreadPoolNativeOverlapped.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Threading/Win32ThreadPoolNativeOverlapped.ExecutionContextCallbackArgs.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Threading/Win32ThreadPoolNativeOverlapped.OverlappedData.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Threading/Win32ThreadPoolPreAllocatedOverlapped.cs - -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.TimeZone.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.FreeLibrary.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.TimeZone.Registry.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.MUI.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.LoadLibraryEx.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/Kernel32/Interop.MAX_PATH.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/User32/Interop.LoadString.cs -../../../external/corefx/src/Common/src/Microsoft/Win32/SafeHandles/SafeLibraryHandle.cs -../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.AdjustmentRule.cs -../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.StringSerializer.cs -../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.TransitionTime.cs -../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.Win32.cs -../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.cs - -corert/RuntimeImports.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Number.Windows.cs -../../../external/corert/src/Runtime.Base/src/System/Runtime/InteropServices/NativeCallableAttribute.cs - -../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Windows.cs -corefx/Mono.SafePasswordHandle.Windows.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/System/Security/AccessControl/RegistrySecurity.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/System/Security/AccessControl/RegistrySecurity.Windows.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.Windows.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.Windows.cs -../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/Registry.cs -corefx/Registry.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegCloseKey.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegConnectRegistry.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegCreateKeyEx.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegDeleteKeyEx.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegDeleteValue.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumKeyEx.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumValue.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegFlushKey.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegisterServiceCtrlHandler.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegisterServiceCtrlHandlerEx.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegistryOptions.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegOpenKeyEx.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegQueryInfoKey.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegQueryValueEx.cs -../../../external/corefx/src/Common/src/Interop/Windows/advapi32/Interop.RegSetValueEx.cs diff --git a/mcs/class/corlib/win32_net_4_x_corlib.dll.exclude.sources b/mcs/class/corlib/win32_net_4_x_corlib.dll.exclude.sources index 942bded038..7a71e02bfe 100644 --- a/mcs/class/corlib/win32_net_4_x_corlib.dll.exclude.sources +++ b/mcs/class/corlib/win32_net_4_x_corlib.dll.exclude.sources @@ -1,12 +1,8 @@ #include win32_build_corlib.dll.exclude.sources + corert/PreAllocatedOverlapped.platformnotsupported.cs corert/ThreadPoolBoundHandle.platformnotsupported.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Number.Unix.cs -../../../external/corert/src/Common/src/Interop/Unix/System.Private.CoreLib.Native/Interop.Number.cs -corefx/Interop.GetRandomBytes.Mono.cs -corefx/Mono.SafePasswordHandle.Unix.cs -../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Unix.cs Microsoft.Win32/IRegistryApi.cs Microsoft.Win32/Registry.cs Microsoft.Win32/RegistryKey.cs @@ -21,7 +17,5 @@ System.Security.AccessControl/RegistrySecurity.cs ../referencesource/mscorlib/system/timezoneinfo.cs corefx/TimeZoneInfo.cs System/TimeZoneInfo.cs -System/TimeZoneInfo.Android.cs -System/TimeZoneInfo.MonoTouch.cs System/TimeZoneInfo.Serialization.cs System/TimeZoneInfo.WinRT.cs diff --git a/mcs/class/corlib/win32_net_4_x_corlib.dll.sources b/mcs/class/corlib/win32_net_4_x_corlib.dll.sources index 58aae90d43..ffff904af1 100644 --- a/mcs/class/corlib/win32_net_4_x_corlib.dll.sources +++ b/mcs/class/corlib/win32_net_4_x_corlib.dll.sources @@ -1,12 +1,6 @@ #include net_4_x_corlib.dll.sources #include win32_build_corlib.dll.sources -../../../external/corert/src/Common/src/Interop/Windows/Interop.Libraries.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.BCryptGenRandom.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.BCryptGenRandom.GetRandomBytes.cs -../../../external/corefx/src/Common/src/CoreLib/Interop/Windows/BCrypt/Interop.NTSTATUS.cs - -../../../external/corert/src/Common/src/Interop/Windows/mincore/Interop.MemAllocFree.cs ../../../external/corert/src/Common/src/Interop/Windows/mincore/Interop.ThreadPoolIO.cs ../../../external/corefx/src/Common/src/Interop/Windows/Interop.Errors.cs @@ -36,12 +30,8 @@ ../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.Win32.cs ../../../external/corefx/src/Common/src/CoreLib/System/TimeZoneInfo.cs -corert/RuntimeImports.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Number.Windows.cs ../../../external/corert/src/Runtime.Base/src/System/Runtime/InteropServices/NativeCallableAttribute.cs -../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Windows.cs -corefx/Mono.SafePasswordHandle.Windows.cs ../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.cs ../../../external/corefx/src/Microsoft.Win32.Registry/src/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs ../../../external/corefx/src/Microsoft.Win32.Registry/src/System/Security/AccessControl/RegistrySecurity.cs diff --git a/mcs/class/corlib/win32_net_4_x_corlib_test.dll.sources b/mcs/class/corlib/win32_net_4_x_corlib_test.dll.sources index 011effe162..9367a763ed 100644 --- a/mcs/class/corlib/win32_net_4_x_corlib_test.dll.sources +++ b/mcs/class/corlib/win32_net_4_x_corlib_test.dll.sources @@ -1 +1,3 @@ #include corlib_test.dll.sources + +System/AbortBlockingConsoleIOTest.cs diff --git a/mcs/class/corlib/winaot_corlib.dll.exclude.sources b/mcs/class/corlib/winaot_corlib.dll.exclude.sources index 0105b34b8b..3873c9fe5a 100644 --- a/mcs/class/corlib/winaot_corlib.dll.exclude.sources +++ b/mcs/class/corlib/winaot_corlib.dll.exclude.sources @@ -1,28 +1 @@ -#include win32_build_corlib.dll.exclude.sources -corert/Interop.MemAllocFree.cs -corert/PreAllocatedOverlapped.platformnotsupported.cs -corert/ThreadPoolBoundHandle.platformnotsupported.cs -../../../external/corert/src/System.Private.CoreLib/src/System/Number.Unix.cs -../../../external/corert/src/Common/src/Interop/Unix/System.Private.CoreLib.Native/Interop.Number.cs - -corefx/Interop.GetRandomBytes.Mono.cs -corefx/Mono.SafePasswordHandle.Unix.cs -../../../external/corefx/src/System.Security.Cryptography.X509Certificates/src/Microsoft/Win32/SafeHandles/SafePasswordHandle.Unix.cs -Microsoft.Win32/IRegistryApi.cs -Microsoft.Win32/Registry.cs -Microsoft.Win32/RegistryKey.cs -Microsoft.Win32/Win32RegistryApi.cs -Microsoft.Win32/Win32ResultCode.cs -Microsoft.Win32/UnixRegistryApi.cs -System.Security.AccessControl/RegistryAccessRule.cs -System.Security.AccessControl/RegistryAuditRule.cs -System.Security.AccessControl/RegistrySecurity.cs -../referencesource/mscorlib/microsoft/win32/safehandles/saferegistryhandle.cs - -../referencesource/mscorlib/system/timezoneinfo.cs -corefx/TimeZoneInfo.cs -System/TimeZoneInfo.cs -System/TimeZoneInfo.Android.cs -System/TimeZoneInfo.MonoTouch.cs -System/TimeZoneInfo.Serialization.cs -System/TimeZoneInfo.WinRT.cs +#include win32_build_corlib.dll.exclude.sources \ No newline at end of file diff --git a/mcs/class/corlib/winaot_corlib.dll.sources b/mcs/class/corlib/winaot_corlib.dll.sources index 8574c515a9..48ef171a5f 100644 --- a/mcs/class/corlib/winaot_corlib.dll.sources +++ b/mcs/class/corlib/winaot_corlib.dll.sources @@ -1,2 +1 @@ -#include win32_net_4_x_corlib.dll.sources - +#include win32_build_corlib.dll.sources \ No newline at end of file diff --git a/mcs/class/corlib/winaot_corlib_test.dll.sources b/mcs/class/corlib/winaot_corlib_test.dll.sources new file mode 100644 index 0000000000..9367a763ed --- /dev/null +++ b/mcs/class/corlib/winaot_corlib_test.dll.sources @@ -0,0 +1,3 @@ +#include corlib_test.dll.sources + +System/AbortBlockingConsoleIOTest.cs diff --git a/mcs/class/corlib/xammac_corlib.dll.exclude.sources b/mcs/class/corlib/xammac_corlib.dll.exclude.sources index b55ce09337..820c28b410 100644 --- a/mcs/class/corlib/xammac_corlib.dll.exclude.sources +++ b/mcs/class/corlib/xammac_corlib.dll.exclude.sources @@ -1,6 +1,5 @@ #include monotouch_corlib.dll.exclude.sources System.Text/EncodingHelper.MonoTouch.cs System/Environment.iOS.cs -System/Guid.MonoTouch.cs System/NotSupportedException.iOS.cs diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll new file mode 100644 index 0000000000000000000000000000000000000000..e9a41bc1d0128490a04b4cd35bb7c389c47c94ce GIT binary patch literal 5632 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 az2scI-!9S&nBo77?)&6L8vjKe_P+peHAFK2 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..8211a804970bff1d92649fe4397b1550616fb24a GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll similarity index 100% rename from mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll rename to mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id new file mode 100644 index 0000000000..9a6146503b --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id @@ -0,0 +1 @@ +105fd43c2eec436dcc253a39312c91086c6842f0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id new file mode 100644 index 0000000000..1a36308e3b --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id @@ -0,0 +1 @@ +b6a2f5107e24d506b104067c993b7c8328f7d616 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..40903bc810 --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +d91328b9b5ddb061a57634b615bc01ff35f06645 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id new file mode 100644 index 0000000000..6def05d64f --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id @@ -0,0 +1 @@ +31170238398c8778fd39a555fb81b456ce7c21dc \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id new file mode 100644 index 0000000000..ddad0a0c18 --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id @@ -0,0 +1 @@ +8bd9f3fc422d9960257cf6f14b5674b7f30fa7c6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id new file mode 100644 index 0000000000..311492046e --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id @@ -0,0 +1 @@ +b4ae37670c90eae627a286ea0d87cc6588d789b5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id new file mode 100644 index 0000000000..cca1c16891 --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id @@ -0,0 +1 @@ +60f26fe8c987897301ef74b47ad1fbea4d2f77e0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..5e80f2baf0 --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +708404d19b644f661a3a457ce4b935f08d2ca2b8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id new file mode 100644 index 0000000000..1e634f45c5 --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id @@ -0,0 +1 @@ +5e848061c549e497176bc58eb68c0885091733bb \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id new file mode 100644 index 0000000000..af22d6994a --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id @@ -0,0 +1 @@ +c90132b9da19ecb45f3233fb2a071ba101f00fb8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id new file mode 100644 index 0000000000..d3adb39266 --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id @@ -0,0 +1 @@ +b73c6edff435f9860ae4ea9d298d759229f18cef \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id new file mode 100644 index 0000000000..763a4b27ba --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id @@ -0,0 +1 @@ +7c1ad0298a2cdb3be59abe480b89a8598d9d6ec0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id new file mode 100644 index 0000000000..2178d9b79e --- /dev/null +++ b/mcs/class/lib/monolite-linux/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id @@ -0,0 +1 @@ +b002ed1bf9f9298b507b3a0df8f5e5d4a0e45853 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll deleted file mode 100644 index 49d7afe51ab9a9d8cbaae44fae6299285b01af15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmeHLeQX>@6@Tlq9p}qQS`sDDhD{wHCgJ1|3sLG4pYLpHI48z-+%#=y=I+Mlt#)@# zvwMyYiRMs1s0Gogp;U>GsDzMEh(d)xttyaGDNrF41eHLlfD)vlx~NhciGLa>;rC|u zKGsg5h<}jMInSGUAM?KE&F-uxjyy^!BI-oHc8%y6jNFC|{P&;^cJKS2?WG^BzO>^R zD}QOn%)ArW6|Krzcy>|vz6$Mvv~|_D9pBC!oVGnxlIiv9*X)c{PmU7htrWRGJAATX z?K0hFueAn<)`8L!QO|xDqm4d{PPEa?J0icC!2X+72Lzp4iiW?;qWsqyW0Xl~hoSc% zPljQtse}n}I~KVy1i4!pw0APvP1lWd5AeI%)}=$a7y^H44FGs1*4S@grrAWt(mK#Z zV8*v$OuEr~(c9WEyiaTCDhP7Q=omWddJlSA8zvfQL(TMSoL4mVt%JH~(k60O6Io1b zYd`5Hs<+{9HyxS&^oSL&W?vQt(*x;!1N-*g&MUge1sqNh^*u;*4&xwl-Zvd;$1evg zad}m=mwkt(>1E7$>-s)*Xgr7UZ@?GfSl@`N3M`C<Fs)UH^C3pATKi~A<U8Bu7}my} z=iGOq6FqJ5oRhi7I+5z8(*~X-H?@Jj4X?WC33|!urYi>aT0E~Cm^V-w_)Eh*56HSA zjU4-GnoC)<39y^C0j{Bbz>T!mz}pSX7&va=XAQi^Kw)4SeqW$8-Aum#d><_V_Q9Jp z?KW_qfp<`km8LB90e%LjC{5G!0N}lVopsJ*!zZHc#!Do-**1d~HQNlkJ6^K7FpIIy z2s13|M^3m<qxK;Tjj|;wL33-}SOR-C)y{i0VPQ=|@=poLe<ZLs6YIX3z&0i%pHE<K zV3%5+O(*RAIHBdq1a?nC%dZo>^9kN!Lg(WN$^8l5?-RVCgqBnS+ZJcuHp$+QSa&HA z(a{7io4~vTb|7Kl`ItvT6RK2o<tHgy4MOE*LY%`wHIz9K3i5)Y(ymjWL%t_`QI@3% z=_y^qVU@xgQ#x8qnIMo}!L1z-o}}?9Ip@k^C<?Besa0f?n^k@&{m{@RWH_%%BO;KL zlZ9%z%+gKc%_TEVcs=r%<H}j714sEQ*NppfN_!#%Q@C#{m6JhHI~A5%sUj!mMAZ#5 zt|NjLH><pg;~K?N(iMwl*2ZsSVNxTd#jv%o!N{sgO*`fJ>$1Fx@N2C#Q&m57Jjpg; zr{K6w*v6f%1)=oPai$SNy5zbvB?DE}MVVJc;~T9Iqj7&hxK0TP45iL$2hb6ti$!TN z0S#vBppbVduSBWE%XkH+TvgRzLWITn7JWwOvJ9a(wz{0N9G?`p8Avv-5Mzrw=18~1 zn@3S`L{s5Ab211Up&25_=gtavj-oLX_BLMX6{I%PrX7Q!_<~SlTU5jyT|g;Da#~fS z4r>M(Uv><zmkUlwYLi=cL7HWEDVIr212_fFoC6BG5v3L}up=>&X0wgm$T_0ys~~iW zL4y=;b~>sssi&o0aEdaB&jwzMFab1D%2omzar_b(W3IqkbKDQL3Mx2t*t*e095X%} z!SX}R=d+a2<*J9^mor&yi`l9Kb8K-@X;iU!CcW~-?|tD{NAAshYyZIJ(cND^L7lc` z^`vaFx-i+aiP7Gkr$2w+?6$$n57nRKmu_dB=o?twjTbiKQ`4Efd}-tN<*MIYz5C+% z7vK0!`b%dwoPTTmt4nV^@Y*9^`Fm=?J()lK*!CaZ@yeMOfBT2${&?nvkKMeZ<I%Nx z=*{}$CocZ^_{K+mzUuhF{-uxhKK9qH*Ir)QapAkKFI_3!mtS}4x$mFeb+oYOtlV?! z)!*G29#tRt%asQ|_k#@=zj@~eZ+ZBptlVmQ7fuaM9C_hXj}_lCx3f1h9b4|!qH=(9 z86S<Ad998I7UbA_qAhs4uRLD#UW+zQC|}tnxq#bPg%fRucvuqcvZ&9nu*;tE?Y!{I zRXkH|6rL7QaaOe?y49ksyNdlbS2&KFZ5D|t9+(>Uqjg9YU#Rdij{N@sbH#3Rryk!c znRJHdHqTbJ#{Dzm+@DoC=eiTZ@uT;Tl;+{a+-o0zj^$=nDtwpnKV-l%3EsNmsvq6x zQFHaA^5}la-wua|qx*b=e=aqM=`3!f_XCd76lUZ2(mDWq9B?f9>Y|@^zW&eX?u>_l zY0<d94T}z4Ou&#sx1d#!h8_ps6u5YhPjjS<&`y4^&<wZ&)Bt=zA><UWs6ExW4mVm0 zK828SKrdfM(-I6@G|>DFQUP<KA-W0lEcAK!NvsZGg`lm5F$BfKO??XEobj#LW<8G& zl*ZbM@vnw#;I;*6ZWG2!g;FnpvViV_Qfb<;jeeHLceC-Mk%1g!11g$$Ds2|unO_5V z1X|4;%tDujwpPvt5z#=ivu%!pv(E8qi~^pvBKgm`NFzcQKdzE((3OXtveCkstss}Y zGi92G1w23zSwFH8?K=Bag@1Niz62;Cq?Pd;OHcvq<H1-D?=t(?$QNT#*8dw{=kfBg zXc9UV{I9~Rur2EL{cF?*SDlUMxE9M;Apj*PQN?nNa?R*iR~0j^gh8_(NjuATW%-_b u+^oq!UjQ8*s?|jnIcLe;<aK-7_L6h;Zo5G<U`PKmI`@eiH2xbr?0*3>#8qqn diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll deleted file mode 100644 index 58d1df367600fd3d54c39df636117ae7441c32ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 zcmeHMYm6J!6+YfKd51Iz+K^0Gpc|m>CRw3I5LmD6O{THeX6@Z15FWGkUGI?bj5Raf zWGf1*mPhH2CWV54{^<jxidGZ>Qc+tFkEklBAR0jhDySe)ngSId(N|iUe&^2EGdB-f z6{+F}vzasJea=1i+&kl&{H6P;lZd)-A2~wwFrIu3OZeen9^xfye!7GnI_a6U4<~ZZ ztS!%&p4M=knrqaxiecN1uT2TfZQ7b?Ynehxt2<SZT)cR}nW5`qmME9#q|aXW+Fx7I zUZpd%g^59;Pl3}HaG%|Xr-pkNH_<YQcLaGegY%cyJRtadb<*$+tjhnQXGk&&*ER54 zU}TtRZ`%no!s{xcML@5D-l`Vwzj<oy)TMSG=&dokq%ZdRpr2m>0GS+Xm^UbSX$YHi zJ+}f%<~9tZ2lpwsW7jaUPrAZ#pvbw>Rk+#LQ3($djex6M_j6rwac&*dO+}4p|H(uN zX2z~pHxSLo=o6tMr7w;oLTk=tb|^WR+&H*#{U)~PCJXTAy+r-j5)EK(pTpf>@?F!e zd93j_%oR^V|3r!Y8BSgQmI*xr-lFA1*CVn15zCokWn36$q8EK~GZTjs8@V=|JIChd z!tiFC`&<U0JGz<XVt%D-L0=DD)Xngzju(5E(mBYehhFJ8*xf@9cQQPqi{V+_3?G#E z>k{4~rA<Kg6-)|`{Umy#H$lq*d+0R41+)%u8LgLalY}V=bqOz#aHoWZgh}N67$s>1 zJq7p~It18H?*X1G;YJBBpp}UvrD+gw8|?%v(H_9d0K4Y7j=?AyuBNw8^>~A?q#LDJ z<rTPZj?#Nlj*m!V5iRR^vYQzi6EvVuGpJD{`&!>yy%BYBXPnyI8>e3Hj#G0TacZqX zeXlDnd$H%O-jk4p#;MRZ70vq;>hnsxPS{16ovcJ(rr4zvYFLT>2yN<HjJO&Hr*dLb zU*xkxp?rlJfL)|{Sn+a`BGVPSD?ml@c7&QTIK6?#EN)Gb?<!s%QYaf#<Yh>a4Jh%h zRb<z9$L$XE#mDfVLapqL%SIJ1PbieD*cl3CLNm&<Pw}}6xkMGLDOn%siOV)9vi(Z* zKP$3F73yb7gf|tR&nnbH#pjn5F9}7qMv;vvvZobl4X9}B&nvQ*71@sz*<M9<iV|<L zqItd|`?exmpva6+CL2rk+1ZI!pA9RTcPn1rNW|CJjmrAFN0Hs3>=VCI*4X6=wGewq zRF{htpO+~s^@w8EP*(UAirqmamm$T=ZiV_K?4sxoDqi*}UQA`LdtdSLkh1q|R;c}9 zo<Xf|$BzAtcCD8xBig0dZCB!*qfoagnzIV^zC!(08N*+cn!TX-EGT3DlOpR-M*Fnl zWlv~_@#*EchRB&y8v;zXr=1OSVcw}WEpZW*%BgZDRZda5FgBJ=2l(j3SUQs}rK!BL zn3ag0$;oFiHJ-{#ESt*)$Yg3fP|4cO`e<Q1pDJg|Y?{wzh&^r7$1=n!64A#d3)`|1 zW$zM!3;8VVEXn7np39c?e3nv~$x%Y=(OhZ^$=DL(q)X*3NPY`~=o5MAequ~7j8S$+ zI$PAoMhnEl%IM=Xg80SqxExGQA4!!%Tq0nw%aY7A!1R1E$EgJratn}*UMk8IO48$% zg<`oxnaNbCh_aE+qld1Z8Y@#emCK=?lkM75-K#jRWloWvZhF2`zoaSLIo<Y!J8e`1 z9gm3_5~PneZ5y9#g{iAW#V;FEmY^-^t%h9%QZlARh^AfBH!Fq}l6q0Np6U6cCe$YE zx?vkNQRPOUv{P@#4H%Z;c`B<Fp=FR4^(o;>sx;^MqMl4UuAq$RHS}uA$4BK<(??=W zGe)HqzmXOa$cSm9Y5DD-iZDAX?Bj_tVyaoIaRnmvl;<HeYp!hiadz7=ryOaAVT%TS zGzpY`(y*E_anTi?aA!rytVK2>f~)A~jYb305b+BQ-*jxlia5F*;jO&5{*ycv&T)ji z65YBH_&K3gMtBw1l+hypJTAS8I+@d^a3g+usz;l4g&h|ilbbBk$Q!OVgS5Sf)k-!j zPs%clm=x1ha++>Mw2K-Oh9()y((4V!^-IEVD>FsIpNT2KL&LP>ILC!$?3I`zm#uPa zLPZywRK<@3VYu{+;g&><-x@*MY0SB1Z6+parxtnP6(F;XSdoKz!?5Qf0hXU{)&&m% zX-}D!>BppU(Feb&C~tZmI)vH*qgs%js?M4o8q3~I;RH~)kiq~-SzV`5LIau=;U%k< zMLJvyqaLc#q~Y==)3y}T7WM>8GNld6LhQ6-^V(rfDZ4ehw<2WQU~A7uM8@z9<Z4)E z%@)-d-?GLWf7EH(F{W<MLa|yv7aOi=*giL2WD|}hW4fHkY)ryiQ_6LXIW|Bzw0UJF zGHi>-4SV;o;xH_#9_)LOp?sO~!r^@^wa0KpxLtrFWjs@IV;pHtPYajyykncY8R6Qs z36#nXiYHeHNZ&ARsKH)(^tKAC0h;$X&V9R!9RT!%z1w#7*ex>ax{li-MlfG3JgirX zOgCLu*p;~!9ac`by6yRfT@l;F9H))}A=Th@kg6IDtX)c0e8;6=XHPp8PdezZe=?>~ zvmFnczt>`&prwu$b2w~ISV=+4QLw?HkNC~=pS<A>Q0KYzg2G1iJcc0)?2+t-?WR9d zn4b28f81BzxbW~=!1&eKA$`QOt7(64@U=$t-G$4}{lQ(U(huzW-B~j?tY}b|mPqt< zYLw^(vV1v{OZtBDrCpP!4ZV8v{CDU~{L-E$`W77Y@b7NW<E7Mk{`t-42)(~Py#2s^ zFTMNy<n{M1z3+p?e?0WT)o<^+=^vf5)>m_P-m?0E3;uA|OE0|q_$zlEJb%U7j{OVW z3;#ZU+jR$C+p}!nFM9VB)*afg<d!$P-+ukj+Q;sB=g@oAUAaZKKK{cy2QHsF?_P1< z>4$%_*}vTR-0$DJ_KF`bJ#hQxvsZon<g_?dt3P(@Q2x?`xArB%)3?=}O}XO~Zj&*` zZufn8#&!013FygF1L{xE>JQ&Qh(4X5mFRaztBP41SvBg|8Z@8x6B<ZRzZ78->yEAE z47=9E7lMYB<r<#vV%Kfr1y83Z=+uGAI*q&8X?mJ8GMfI3<Kld05h};0PWVGjKSq~4 zhK%KNcX;;3tVbEw7(4cAozVr7EAf$o-8_$tA^3h1LT<|}J#rR&93AFZhbQDDr17al z^Qua4qK9%G!)HA{JKQmh<3{vt>sr+{1auN7Qda_IX&ji2lh!fNI^bw<>PnAvz4Nc& zq^@NgJTDF%F%>jd%QI01XaZgha^c6snIgVO$);&?q|%x4{HhG80j>wRK|b^xP{DP7 z*EKi{Oduy8S|<3l<9OO3bq1;RH$+pwc~om)n})wS{sgRjd9GNZIXr!E>Nu$zr>2yc zQYR@hWSI*)ybB~Yi`W%l!Kq{pXNWDo4Vn8KDrHD}&O0wh;9!cYu$jeeNnfoTG#Q)q z3ANxHTh+<P7!^6z2DGADeAJu=u|-62CK1QQXd?eZsKj9V=Dhl$&$AWO!p8Wl*eE|r zK1tNY!XICgIC)J_4*Aq%1fH!1=7(pyMl*<x{RXvPhiV3$#5p&SyB4dn0gexCM~;g9 z+A{w_=!ZLp^KaFeDV`0&{QmE~5Ff`3UJ3~+BA$cMHIcC&t5&=xTK&jfu3_Zd`!!e? zfC8Lgh47l-9(6-sO<<hwkeo*~&e5}Z^jv;H+N9vmgO55^hlNpdJ=HE?yY;ai;5vSC aeM~BV4UPY=<hj_p=wp)ECu#g2D)4Uwa$-yX diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id deleted file mode 100644 index 73fc375585..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -e5febbfad83c249583f60b7cecc680248f1e9ad7 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id deleted file mode 100644 index 4ba10110d9..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -168447834ac6a661c73e01146323a94c5fe25b67 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id deleted file mode 100644 index d549967dc1..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -c2958acd9b794fb9864a0467a32a12abd1e4e443 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id deleted file mode 100644 index d679da431e..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -5096249101c7fbf0781b6c1e53d23c7f8f5152f6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id deleted file mode 100644 index fb79156aba..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -714c883658daf608a92d5fdf5837f71e351ddc25 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll deleted file mode 100644 index c54150bd3824e72d6ee3a5da8d26d3796a735771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99328 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 G1OEY63KW?D diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id deleted file mode 100644 index a420086f25..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -41000e60d4f033eab3cff5382413fc5537c29bb2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id deleted file mode 100644 index 626bd33f74..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4d7da2fdef6c7c1feaf2627e2aad0e16099c087f \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id deleted file mode 100644 index e909420b6f..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -18f995973da2f6cce3e118dc2b303e5a944cf699 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id deleted file mode 100644 index 900d266358..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -95a60d8f09db096c54333130fe0c4a3b452e3fe3 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id deleted file mode 100644 index 1f6d95d7ee..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -67f564c659e3a210e285f362896772324d9c53d2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id deleted file mode 100644 index 382dd8de18..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -704a687baf43f44b0d589607ac669498e8247dba \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id deleted file mode 100644 index 3c4b2d137e..0000000000 --- a/mcs/class/lib/monolite-linux/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -265131681fd06dbf97777cd54967d7bdb59cb6f1 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll new file mode 100644 index 0000000000000000000000000000000000000000..e9a41bc1d0128490a04b4cd35bb7c389c47c94ce GIT binary patch literal 5632 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 az2scI-!9S&nBo77?)&6L8vjKe_P+peHAFK2 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..8211a804970bff1d92649fe4397b1550616fb24a GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll similarity index 100% rename from mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll rename to mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id new file mode 100644 index 0000000000..9a6146503b --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id @@ -0,0 +1 @@ +105fd43c2eec436dcc253a39312c91086c6842f0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id new file mode 100644 index 0000000000..1a36308e3b --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id @@ -0,0 +1 @@ +b6a2f5107e24d506b104067c993b7c8328f7d616 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..40903bc810 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +d91328b9b5ddb061a57634b615bc01ff35f06645 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id new file mode 100644 index 0000000000..6def05d64f --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id @@ -0,0 +1 @@ +31170238398c8778fd39a555fb81b456ce7c21dc \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id new file mode 100644 index 0000000000..ddad0a0c18 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id @@ -0,0 +1 @@ +8bd9f3fc422d9960257cf6f14b5674b7f30fa7c6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id new file mode 100644 index 0000000000..311492046e --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id @@ -0,0 +1 @@ +b4ae37670c90eae627a286ea0d87cc6588d789b5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id new file mode 100644 index 0000000000..cca1c16891 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id @@ -0,0 +1 @@ +60f26fe8c987897301ef74b47ad1fbea4d2f77e0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..5e80f2baf0 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +708404d19b644f661a3a457ce4b935f08d2ca2b8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id new file mode 100644 index 0000000000..1e634f45c5 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id @@ -0,0 +1 @@ +5e848061c549e497176bc58eb68c0885091733bb \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id new file mode 100644 index 0000000000..af22d6994a --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id @@ -0,0 +1 @@ +c90132b9da19ecb45f3233fb2a071ba101f00fb8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id new file mode 100644 index 0000000000..d3adb39266 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id @@ -0,0 +1 @@ +b73c6edff435f9860ae4ea9d298d759229f18cef \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id new file mode 100644 index 0000000000..b9c6865bf0 --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id @@ -0,0 +1 @@ +b682dd3328e24315987912c616aa32d9918fd4e5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id new file mode 100644 index 0000000000..2178d9b79e --- /dev/null +++ b/mcs/class/lib/monolite-macos/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id @@ -0,0 +1 @@ +b002ed1bf9f9298b507b3a0df8f5e5d4a0e45853 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll deleted file mode 100644 index 49d7afe51ab9a9d8cbaae44fae6299285b01af15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll deleted file mode 100644 index 58d1df367600fd3d54c39df636117ae7441c32ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 aeM~BV4UPY=<hj_p=wp)ECu#g2D)4Uwa$-yX diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id deleted file mode 100644 index 73fc375585..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -e5febbfad83c249583f60b7cecc680248f1e9ad7 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id deleted file mode 100644 index 4ba10110d9..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -168447834ac6a661c73e01146323a94c5fe25b67 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id deleted file mode 100644 index d549967dc1..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -c2958acd9b794fb9864a0467a32a12abd1e4e443 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id deleted file mode 100644 index d679da431e..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -5096249101c7fbf0781b6c1e53d23c7f8f5152f6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id deleted file mode 100644 index fb79156aba..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -714c883658daf608a92d5fdf5837f71e351ddc25 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll deleted file mode 100644 index c54150bd3824e72d6ee3a5da8d26d3796a735771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99328 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 G1OEY63KW?D diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id deleted file mode 100644 index a420086f25..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -41000e60d4f033eab3cff5382413fc5537c29bb2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id deleted file mode 100644 index 626bd33f74..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4d7da2fdef6c7c1feaf2627e2aad0e16099c087f \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id deleted file mode 100644 index e909420b6f..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -18f995973da2f6cce3e118dc2b303e5a944cf699 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id deleted file mode 100644 index 900d266358..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -95a60d8f09db096c54333130fe0c4a3b452e3fe3 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id deleted file mode 100644 index 1f6d95d7ee..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -67f564c659e3a210e285f362896772324d9c53d2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id deleted file mode 100644 index 382dd8de18..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -704a687baf43f44b0d589607ac669498e8247dba \ No newline at end of file diff --git a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id deleted file mode 100644 index 3c4b2d137e..0000000000 --- a/mcs/class/lib/monolite-macos/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -265131681fd06dbf97777cd54967d7bdb59cb6f1 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll new file mode 100644 index 0000000000000000000000000000000000000000..e9a41bc1d0128490a04b4cd35bb7c389c47c94ce GIT binary patch literal 5632 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 az2scI-!9S&nBo77?)&6L8vjKe_P+peHAFK2 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..8211a804970bff1d92649fe4397b1550616fb24a GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll similarity index 100% rename from mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll rename to mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id new file mode 100644 index 0000000000..9a6146503b --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id @@ -0,0 +1 @@ +105fd43c2eec436dcc253a39312c91086c6842f0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id new file mode 100644 index 0000000000..1a36308e3b --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id @@ -0,0 +1 @@ +b6a2f5107e24d506b104067c993b7c8328f7d616 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..40903bc810 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +d91328b9b5ddb061a57634b615bc01ff35f06645 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id new file mode 100644 index 0000000000..6def05d64f --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id @@ -0,0 +1 @@ +31170238398c8778fd39a555fb81b456ce7c21dc \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id new file mode 100644 index 0000000000..ddad0a0c18 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id @@ -0,0 +1 @@ +8bd9f3fc422d9960257cf6f14b5674b7f30fa7c6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id new file mode 100644 index 0000000000..311492046e --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id @@ -0,0 +1 @@ +b4ae37670c90eae627a286ea0d87cc6588d789b5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id new file mode 100644 index 0000000000..cca1c16891 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id @@ -0,0 +1 @@ +60f26fe8c987897301ef74b47ad1fbea4d2f77e0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..5e80f2baf0 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +708404d19b644f661a3a457ce4b935f08d2ca2b8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id new file mode 100644 index 0000000000..1e634f45c5 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id @@ -0,0 +1 @@ +5e848061c549e497176bc58eb68c0885091733bb \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id new file mode 100644 index 0000000000..af22d6994a --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id @@ -0,0 +1 @@ +c90132b9da19ecb45f3233fb2a071ba101f00fb8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id new file mode 100644 index 0000000000..d3adb39266 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id @@ -0,0 +1 @@ +b73c6edff435f9860ae4ea9d298d759229f18cef \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id new file mode 100644 index 0000000000..b9c6865bf0 --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id @@ -0,0 +1 @@ +b682dd3328e24315987912c616aa32d9918fd4e5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id new file mode 100644 index 0000000000..2178d9b79e --- /dev/null +++ b/mcs/class/lib/monolite-unix/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id @@ -0,0 +1 @@ +b002ed1bf9f9298b507b3a0df8f5e5d4a0e45853 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll deleted file mode 100644 index 49d7afe51ab9a9d8cbaae44fae6299285b01af15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll deleted file mode 100644 index 58d1df367600fd3d54c39df636117ae7441c32ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 aeM~BV4UPY=<hj_p=wp)ECu#g2D)4Uwa$-yX diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id deleted file mode 100644 index 73fc375585..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -e5febbfad83c249583f60b7cecc680248f1e9ad7 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id deleted file mode 100644 index 4ba10110d9..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -168447834ac6a661c73e01146323a94c5fe25b67 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id deleted file mode 100644 index d549967dc1..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -c2958acd9b794fb9864a0467a32a12abd1e4e443 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id deleted file mode 100644 index d679da431e..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -5096249101c7fbf0781b6c1e53d23c7f8f5152f6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id deleted file mode 100644 index fb79156aba..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -714c883658daf608a92d5fdf5837f71e351ddc25 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll deleted file mode 100644 index c54150bd3824e72d6ee3a5da8d26d3796a735771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99328 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 G1OEY63KW?D diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id deleted file mode 100644 index a420086f25..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -41000e60d4f033eab3cff5382413fc5537c29bb2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id deleted file mode 100644 index 626bd33f74..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4d7da2fdef6c7c1feaf2627e2aad0e16099c087f \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id deleted file mode 100644 index e909420b6f..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -18f995973da2f6cce3e118dc2b303e5a944cf699 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id deleted file mode 100644 index 900d266358..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -95a60d8f09db096c54333130fe0c4a3b452e3fe3 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id deleted file mode 100644 index 1f6d95d7ee..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -67f564c659e3a210e285f362896772324d9c53d2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id deleted file mode 100644 index 382dd8de18..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -704a687baf43f44b0d589607ac669498e8247dba \ No newline at end of file diff --git a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id deleted file mode 100644 index 3c4b2d137e..0000000000 --- a/mcs/class/lib/monolite-unix/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -265131681fd06dbf97777cd54967d7bdb59cb6f1 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.Concurrent.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.Concurrent.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Collections.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Collections.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Debug.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Debug.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.FileVersionInfo.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.FileVersionInfo.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Diagnostics.Tools.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Diagnostics.Tools.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Dynamic.Runtime.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Dynamic.Runtime.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Globalization.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Globalization.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.Primitives.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.Primitives.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.FileSystem.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.FileSystem.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.IO.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.IO.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.Expressions.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.Expressions.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Linq.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Linq.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Extensions.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Extensions.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.Primitives.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.Primitives.dll diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Reflection.dll new file mode 100644 index 0000000000000000000000000000000000000000..e9a41bc1d0128490a04b4cd35bb7c389c47c94ce GIT binary patch literal 5632 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 az2scI-!9S&nBo77?)&6L8vjKe_P+peHAFK2 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Resources.ResourceManager.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Resources.ResourceManager.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Extensions.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Extensions.dll diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.InteropServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..8211a804970bff1d92649fe4397b1550616fb24a GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.Numerics.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.Numerics.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Runtime.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Algorithms.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Algorithms.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Security.Cryptography.Primitives.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Security.Cryptography.Primitives.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.CodePages.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.CodePages.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.Extensions.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.Extensions.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Text.Encoding.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Text.Encoding.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.Parallel.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.Parallel.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.Tasks.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.Tasks.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Threading.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Threading.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.ValueTuple.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.ValueTuple.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.ReaderWriter.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.ReaderWriter.dll diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll similarity index 100% rename from mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Xml.XDocument.dll rename to mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/System.Xml.XDocument.dll diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id new file mode 100644 index 0000000000..9a6146503b --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Facades/netstandard.dll.REMOVED.git-id @@ -0,0 +1 @@ +105fd43c2eec436dcc253a39312c91086c6842f0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id new file mode 100644 index 0000000000..1a36308e3b --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Cecil.dll.REMOVED.git-id @@ -0,0 +1 @@ +b6a2f5107e24d506b104067c993b7c8328f7d616 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..40903bc810 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/Mono.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +d91328b9b5ddb061a57634b615bc01ff35f06645 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id new file mode 100644 index 0000000000..6def05d64f --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Configuration.dll.REMOVED.git-id @@ -0,0 +1 @@ +31170238398c8778fd39a555fb81b456ce7c21dc \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id new file mode 100644 index 0000000000..cc69605eed --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Core.dll.REMOVED.git-id @@ -0,0 +1 @@ +a09d8218c7b050cbc9577da4e56a25e11a2eb94e \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id new file mode 100644 index 0000000000..311492046e --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.IO.Compression.dll.REMOVED.git-id @@ -0,0 +1 @@ +b4ae37670c90eae627a286ea0d87cc6588d789b5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id new file mode 100644 index 0000000000..cca1c16891 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Numerics.dll.REMOVED.git-id @@ -0,0 +1 @@ +60f26fe8c987897301ef74b47ad1fbea4d2f77e0 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..5e80f2baf0 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +708404d19b644f661a3a457ce4b935f08d2ca2b8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id new file mode 100644 index 0000000000..1e634f45c5 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.Linq.dll.REMOVED.git-id @@ -0,0 +1 @@ +5e848061c549e497176bc58eb68c0885091733bb \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id new file mode 100644 index 0000000000..af22d6994a --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.Xml.dll.REMOVED.git-id @@ -0,0 +1 @@ +c90132b9da19ecb45f3233fb2a071ba101f00fb8 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id new file mode 100644 index 0000000000..d3adb39266 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/System.dll.REMOVED.git-id @@ -0,0 +1 @@ +b73c6edff435f9860ae4ea9d298d759229f18cef \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id new file mode 100644 index 0000000000..b9c6865bf0 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mcs.exe.REMOVED.git-id @@ -0,0 +1 @@ +b682dd3328e24315987912c616aa32d9918fd4e5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id new file mode 100644 index 0000000000..17ed8c2511 --- /dev/null +++ b/mcs/class/lib/monolite-win32/62731146-81CF-4D61-826D-9A8DDED14432/mscorlib.dll.REMOVED.git-id @@ -0,0 +1 @@ +7f959fbf37fd1003538a1cd33de1e790b5869b53 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Reflection.dll deleted file mode 100644 index 49d7afe51ab9a9d8cbaae44fae6299285b01af15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/System.Runtime.InteropServices.dll deleted file mode 100644 index 58d1df367600fd3d54c39df636117ae7441c32ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 aeM~BV4UPY=<hj_p=wp)ECu#g2D)4Uwa$-yX diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id deleted file mode 100644 index 73fc375585..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Facades/netstandard.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -e5febbfad83c249583f60b7cecc680248f1e9ad7 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id deleted file mode 100644 index 4ba10110d9..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Cecil.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -168447834ac6a661c73e01146323a94c5fe25b67 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id deleted file mode 100644 index d549967dc1..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/Mono.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -c2958acd9b794fb9864a0467a32a12abd1e4e443 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id deleted file mode 100644 index d679da431e..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Configuration.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -5096249101c7fbf0781b6c1e53d23c7f8f5152f6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id deleted file mode 100644 index bcb0cd66e6..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Core.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -e118d53d7414286fbe9ac45352cdb72d905b86ad \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.IO.Compression.dll deleted file mode 100644 index c54150bd3824e72d6ee3a5da8d26d3796a735771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99328 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 G1OEY63KW?D diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id deleted file mode 100644 index a420086f25..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Numerics.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -41000e60d4f033eab3cff5382413fc5537c29bb2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id deleted file mode 100644 index 626bd33f74..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Security.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4d7da2fdef6c7c1feaf2627e2aad0e16099c087f \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id deleted file mode 100644 index e909420b6f..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.Linq.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -18f995973da2f6cce3e118dc2b303e5a944cf699 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id deleted file mode 100644 index 900d266358..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.Xml.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -95a60d8f09db096c54333130fe0c4a3b452e3fe3 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id deleted file mode 100644 index 1f6d95d7ee..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/System.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -67f564c659e3a210e285f362896772324d9c53d2 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id deleted file mode 100644 index 382dd8de18..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mcs.exe.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -704a687baf43f44b0d589607ac669498e8247dba \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id deleted file mode 100644 index 06311624df..0000000000 --- a/mcs/class/lib/monolite-win32/d0aa6798-834d-11e9-b38a-3b0d70487d01/mscorlib.dll.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -f2b746fa0b9fe2ce34ce37e0574e43666282456e \ No newline at end of file diff --git a/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs b/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs index 36e999cb7d..aa79431600 100644 --- a/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs +++ b/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs @@ -228,5 +228,13 @@ namespace System.Security.Cryptography { { throw new NotSupportedException(SR.GetString(SR.NotSupported_SubclassOverride)); } + +#if MONO + public virtual byte[] ExportECPrivateKey () => throw new PlatformNotSupportedException (); + + public virtual bool TryExportECPrivateKey (System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); + + public virtual void ImportECPrivateKey (System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); +#endif } } diff --git a/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs b/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs index b0c7b521a8..e2039db29d 100644 --- a/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs +++ b/mcs/class/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs @@ -6,6 +6,9 @@ using System; using System.IO; +#if MONO +using System.Buffers; +#endif namespace System.Security.Cryptography { /// <summary> @@ -217,5 +220,101 @@ namespace System.Security.Cryptography { internal static Exception HashAlgorithmNameNullOrEmpty() { return new ArgumentException(SR.GetString(SR.Cryptography_HashAlgorithmNameNullOrEmpty), "hashAlgorithm"); } + +#if MONO // these methods were copied from CoreFX for NS2.1 support + protected virtual bool TryHashData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten) + { + byte[] array = ArrayPool<byte>.Shared.Rent(data.Length); + try + { + data.CopyTo(array); + byte[] hash = HashData(array, 0, data.Length, hashAlgorithm); + if (hash.Length <= destination.Length) + { + new ReadOnlySpan<byte>(hash).CopyTo(destination); + bytesWritten = hash.Length; + return true; + } + else + { + bytesWritten = 0; + return false; + } + } + finally + { + Array.Clear(array, 0, data.Length); + ArrayPool<byte>.Shared.Return(array); + } + } + + public virtual bool TrySignHash(ReadOnlySpan<byte> hash, Span<byte> destination, out int bytesWritten) + { + byte[] result = SignHash(hash.ToArray()); + if (result.Length <= destination.Length) + { + new ReadOnlySpan<byte>(result).CopyTo(destination); + bytesWritten = result.Length; + return true; + } + else + { + bytesWritten = 0; + return false; + } + } + + public virtual bool VerifyHash(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature) => + VerifyHash(hash.ToArray(), signature.ToArray()); + + public virtual bool TrySignData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten) + { + if (string.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw new ArgumentException(SR.Cryptography_HashAlgorithmNameNullOrEmpty, nameof(hashAlgorithm)); + } + + if (TryHashData(data, destination, hashAlgorithm, out int hashLength) && + TrySignHash(destination.Slice(0, hashLength), destination, out bytesWritten)) + { + return true; + } + + bytesWritten = 0; + return false; + } + + public virtual bool VerifyData(ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm) + { + if (string.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw new ArgumentException(SR.Cryptography_HashAlgorithmNameNullOrEmpty, nameof(hashAlgorithm)); + } + + for (int i = 256; ; i = checked(i * 2)) + { + int hashLength = 0; + byte[] hash = ArrayPool<byte>.Shared.Rent(i); + try + { + if (TryHashData(data, hash, hashAlgorithm, out hashLength)) + { + return VerifyHash(new ReadOnlySpan<byte>(hash, 0, hashLength), signature); + } + } + finally + { + Array.Clear(hash, 0, hashLength); + ArrayPool<byte>.Shared.Return(hash); + } + } + } + + public virtual byte[] ExportECPrivateKey () => throw new PlatformNotSupportedException (); + + public virtual bool TryExportECPrivateKey (System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); + + public virtual void ImportECPrivateKey (System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); +#endif } } diff --git a/mcs/class/referencesource/System.Data.Entity/System/Data/Objects/ELinq/MethodCallTranslator.cs.REMOVED.git-id b/mcs/class/referencesource/System.Data.Entity/System/Data/Objects/ELinq/MethodCallTranslator.cs.REMOVED.git-id index 385734a399..6b96fce059 100644 --- a/mcs/class/referencesource/System.Data.Entity/System/Data/Objects/ELinq/MethodCallTranslator.cs.REMOVED.git-id +++ b/mcs/class/referencesource/System.Data.Entity/System/Data/Objects/ELinq/MethodCallTranslator.cs.REMOVED.git-id @@ -1 +1 @@ -b0f2bbade55e116bef408ce649ffa6eb9685faa0 \ No newline at end of file +def972128a60cc12b0f366998a44678553996fcc \ No newline at end of file diff --git a/mcs/class/referencesource/System.Data.Linq/SqlClient/Query/SqlParameterizer.cs b/mcs/class/referencesource/System.Data.Linq/SqlClient/Query/SqlParameterizer.cs index 9dce2be1d3..e353f2927b 100644 --- a/mcs/class/referencesource/System.Data.Linq/SqlClient/Query/SqlParameterizer.cs +++ b/mcs/class/referencesource/System.Data.Linq/SqlClient/Query/SqlParameterizer.cs @@ -233,7 +233,11 @@ namespace System.Data.Linq.SqlClient { this.parameterizer.annotations.Add( node, new SqlServerCompatibilityAnnotation( +#if (MONO) + Strings.MaxSizeNotSupported(node.SourceExpression), SqlProvider.ProviderMode.Sql2000)); +#else SqlClient.Strings.MaxSizeNotSupported(node.SourceExpression), SqlProvider.ProviderMode.Sql2000)); +#endif return false; } diff --git a/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs b/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs index 7a86773c1a..364728f8aa 100644 --- a/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs +++ b/mcs/class/referencesource/System.Data.Linq/misc/SecurityUtils.cs @@ -7,7 +7,9 @@ /* */ - +#if MONO +namespace System.Data.Linq +#else #if Microsoft_NAMESPACE namespace System.Windows.Forms #elif DRAWING_NAMESPACE @@ -23,6 +25,7 @@ #else namespace System.Windows.Forms #endif +#endif { using System; using System.Reflection; diff --git a/mcs/class/referencesource/System.Data/System/Data/Common/DbProviderFactories.cs b/mcs/class/referencesource/System.Data/System/Data/Common/DbProviderFactories.cs index 312ea00360..713afcc10b 100644 --- a/mcs/class/referencesource/System.Data/System/Data/Common/DbProviderFactories.cs +++ b/mcs/class/referencesource/System.Data/System/Data/Common/DbProviderFactories.cs @@ -35,9 +35,11 @@ namespace System.Data.Common { private static DataTable _providerTable; private static object _lockobj = new object(); - static public DbProviderFactory GetFactory(string providerInvariantName) { - ADP.CheckArgumentLength(providerInvariantName, "providerInvariantName"); + static public DbProviderFactory GetFactory(string providerInvariantName) => GetFactory(providerInvariantName, true); + static public DbProviderFactory GetFactory(string providerInvariantName, bool throwOnError) { + if (throwOnError) + ADP.CheckArgumentLength(providerInvariantName, "providerInvariantName"); // NOTES: Include the Framework Providers and any other Providers listed in the config file. DataTable providerTable = GetProviderTable(); if (null != providerTable) { @@ -54,7 +56,10 @@ namespace System.Data.Common { return DbProviderFactories.GetFactory(providerRow); } } - throw ADP.ConfigProviderNotFound(); + + if (throwOnError) + throw ADP.ConfigProviderNotFound(); + return null; } static public DbProviderFactory GetFactory(DataRow providerRow) { @@ -258,6 +263,12 @@ namespace System.Data.Common { } #if MONO + public static bool TryGetFactory(string providerInvariantName, out DbProviderFactory factory) + { + factory = GetFactory(providerInvariantName, throwOnError: false); + return factory != null; + } + public static IEnumerable<string> GetProviderInvariantNames() { return _registeredFactories.Keys.ToList(); diff --git a/mcs/class/referencesource/System.Data/System/Data/DataSysAttribute.cs b/mcs/class/referencesource/System.Data/System/Data/DataSysAttribute.cs index 6022e8f8bf..08ac1ce2ea 100644 --- a/mcs/class/referencesource/System.Data/System/Data/DataSysAttribute.cs +++ b/mcs/class/referencesource/System.Data/System/Data/DataSysAttribute.cs @@ -20,7 +20,7 @@ namespace System.Data { /// </para> /// </devdoc> [AttributeUsage(AttributeTargets.All)] - [ Obsolete("DataSysDescriptionAttribute has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202", false) ] + [Obsolete("DataSysDescriptionAttribute has been deprecated. https://go.microsoft.com/fwlink/?linkid=14202", false) ] public class DataSysDescriptionAttribute : DescriptionAttribute { private bool replaced = false; diff --git a/mcs/class/referencesource/System.Xml/System/Xml/Core/XmlValidatingReader.cs b/mcs/class/referencesource/System.Xml/System/Xml/Core/XmlValidatingReader.cs index 9c997f1447..3b8a84f698 100644 --- a/mcs/class/referencesource/System.Xml/System/Xml/Core/XmlValidatingReader.cs +++ b/mcs/class/referencesource/System.Xml/System/Xml/Core/XmlValidatingReader.cs @@ -16,7 +16,7 @@ using System.Security.Permissions; namespace System.Xml { [PermissionSetAttribute( SecurityAction.InheritanceDemand, Name = "FullTrust" )] - [Obsolete("Use XmlReader created by XmlReader.Create() method using appropriate XmlReaderSettings instead. http://go.microsoft.com/fwlink/?linkid=14202")] + [Obsolete("Use XmlReader created by XmlReader.Create() method using appropriate XmlReaderSettings instead. https://go.microsoft.com/fwlink/?linkid=14202")] public class XmlValidatingReader : XmlReader, IXmlLineInfo, IXmlNamespaceResolver { // // Member fields diff --git a/mcs/class/referencesource/System.Xml/System/Xml/Schema/XmlSchemaCollection.cs b/mcs/class/referencesource/System.Xml/System/Xml/Schema/XmlSchemaCollection.cs index 23f4a3c219..b9df5df91a 100644 --- a/mcs/class/referencesource/System.Xml/System/Xml/Schema/XmlSchemaCollection.cs +++ b/mcs/class/referencesource/System.Xml/System/Xml/Schema/XmlSchemaCollection.cs @@ -24,7 +24,7 @@ namespace System.Xml.Schema { /// The Validate method then uses this internal representation for /// efficient runtime validation of any given subtree.</para> /// </devdoc> - [Obsolete("Use System.Xml.Schema.XmlSchemaSet for schema compilation and validation. http://go.microsoft.com/fwlink/?linkid=14202")] + [Obsolete("Use System.Xml.Schema.XmlSchemaSet for schema compilation and validation. https://go.microsoft.com/fwlink/?linkid=14202")] public sealed class XmlSchemaCollection: ICollection { private Hashtable collection; private XmlNameTable nameTable; diff --git a/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlAnyAttributeAttribute.cs b/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlAnyAttributeAttribute.cs index aee71d513b..3b3d656fdd 100644 --- a/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlAnyAttributeAttribute.cs +++ b/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlAnyAttributeAttribute.cs @@ -13,7 +13,7 @@ namespace System.Xml.Serialization { /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> - [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple=false)] + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue)] public class XmlAnyAttributeAttribute : System.Attribute { /// <include file='doc\XmlAnyAttributeAttribute.uex' path='docs/doc[@for="XmlAnyAttributeAttribute.XmlAnyAttributeAttribute"]/*' /> diff --git a/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlNamespaceDeclarationsAttribute.cs b/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlNamespaceDeclarationsAttribute.cs index ff139a0688..32d4c8b8fe 100644 --- a/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlNamespaceDeclarationsAttribute.cs +++ b/mcs/class/referencesource/System.Xml/System/Xml/Serialization/XmlNamespaceDeclarationsAttribute.cs @@ -13,7 +13,7 @@ namespace System.Xml.Serialization { /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> - [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple=false)] + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue)] public class XmlNamespaceDeclarationsAttribute : System.Attribute { /// <include file='doc\XmlNamespaceDeclarationsAttribute.uex' path='docs/doc[@for="XmlNamespaceDeclarationsAttribute.XmlNamespaceDeclarationsAttribute"]/*' /> diff --git a/mcs/class/referencesource/System/compmod/system/diagnostics/CorrelationManager.cs b/mcs/class/referencesource/System/compmod/system/diagnostics/CorrelationManager.cs index 3a98f5f52b..ebd541242c 100644 --- a/mcs/class/referencesource/System/compmod/system/diagnostics/CorrelationManager.cs +++ b/mcs/class/referencesource/System/compmod/system/diagnostics/CorrelationManager.cs @@ -20,17 +20,22 @@ namespace System.Diagnostics { public Guid ActivityId { get { +#if !DISABLE_REMOTING Object id = CallContext.LogicalGetData(activityIdSlotName); if (id != null) return (Guid) id; else +#endif return Guid.Empty; } set { +#if !DISABLE_REMOTING CallContext.LogicalSetData(activityIdSlotName, value); +#endif } } +#if !DISABLE_REMOTING public Stack LogicalOperationStack { get { return GetLogicalOperationStack(); @@ -63,6 +68,11 @@ namespace System.Diagnostics { return idStack; } - +#else + public Stack LogicalOperationStack => throw new PlatformNotSupportedException (); + public void StartLogicalOperation (object operationId) => throw new PlatformNotSupportedException (); + public void StartLogicalOperation () => throw new PlatformNotSupportedException (); + public void StopLogicalOperation () => throw new PlatformNotSupportedException (); +#endif } } diff --git a/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs b/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs index 6d2d6adac9..d928bc63e1 100644 --- a/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs +++ b/mcs/class/referencesource/System/compmod/system/diagnostics/TraceEventCache.cs @@ -40,7 +40,11 @@ namespace System.Diagnostics { public Stack LogicalOperationStack { get { +#if DISABLE_REMOTING + throw new PlatformNotSupportedException (); +#else return Trace.CorrelationManager.LogicalOperationStack; +#endif } } diff --git a/mcs/class/referencesource/System/net/System/Net/GlobalProxySelection.cs b/mcs/class/referencesource/System/net/System/Net/GlobalProxySelection.cs index 4168a2f87f..6f86aa1579 100644 --- a/mcs/class/referencesource/System/net/System/Net/GlobalProxySelection.cs +++ b/mcs/class/referencesource/System/net/System/Net/GlobalProxySelection.cs @@ -6,7 +6,7 @@ namespace System.Net { - [Obsolete("This class has been deprecated. Please use WebRequest.DefaultWebProxy instead to access and set the global default proxy. Use 'null' instead of GetEmptyWebProxy. http://go.microsoft.com/fwlink/?linkid=14202")] + [Obsolete("This class has been deprecated. Please use WebRequest.DefaultWebProxy instead to access and set the global default proxy. Use 'null' instead of GetEmptyWebProxy. https://go.microsoft.com/fwlink/?linkid=14202")] public class GlobalProxySelection { // This just wraps WebRequest.DefaultWebProxy and modifies it to be compatible with Everett. diff --git a/mcs/class/referencesource/System/net/System/Net/SocketAddress.cs b/mcs/class/referencesource/System/net/System/Net/SocketAddress.cs index 423ce03210..a1f49e0bc4 100644 --- a/mcs/class/referencesource/System/net/System/Net/SocketAddress.cs +++ b/mcs/class/referencesource/System/net/System/Net/SocketAddress.cs @@ -160,10 +160,14 @@ namespace System.Net { } } else { // IPv4 Address serialization +#if MONO + ipAddress.TryWriteBytes(m_Buffer.AsSpan(4), out int bytesWritten); +#else m_Buffer[4] = unchecked((byte)(ipAddress.m_Address)); m_Buffer[5] = unchecked((byte)(ipAddress.m_Address >> 8)); m_Buffer[6] = unchecked((byte)(ipAddress.m_Address >> 16)); m_Buffer[7] = unchecked((byte)(ipAddress.m_Address >> 24)); +#endif } } @@ -177,7 +181,11 @@ namespace System.Net { if (Family == AddressFamily.InterNetworkV6) { Contract.Assert(Size >= IPv6AddressSize); +#if MONO + byte[] address = new byte[IPAddressParserStatics.IPv6AddressBytes]; +#else byte[] address = new byte[IPAddress.IPv6AddressBytes]; +#endif for (int i = 0; i < address.Length; i++) { address[i] = m_Buffer[i + 8]; } diff --git a/mcs/class/referencesource/System/net/System/Net/Sockets/UDPClient.cs b/mcs/class/referencesource/System/net/System/Net/Sockets/UDPClient.cs index f46c793184..148c216ee3 100644 --- a/mcs/class/referencesource/System/net/System/Net/Sockets/UDPClient.cs +++ b/mcs/class/referencesource/System/net/System/Net/Sockets/UDPClient.cs @@ -488,7 +488,7 @@ namespace System.Net.Sockets { // if the user really wants complete control over Broadcast addresses he needs to // inherit from UdpClient and gain control over the Socket and do whatever is appropriate. // - if (Client!=null && !m_IsBroadcast && ipAddress.IsBroadcast) { + if (Client!=null && !m_IsBroadcast && IsBroadcast(ipAddress)) { // // we need to set the Broadcast socket option. // note that, once we set the option on the Socket, we never reset it. @@ -498,6 +498,18 @@ namespace System.Net.Sockets { } } + private static bool IsBroadcast(IPAddress address) + { + if (address.AddressFamily == AddressFamily.InterNetworkV6) + { + // No such thing as a broadcast address for IPv6. + return false; + } + else + { + return address.Equals(IPAddress.Broadcast); + } + } /// <devdoc> diff --git a/mcs/class/referencesource/System/net/System/Net/WebRequest.cs b/mcs/class/referencesource/System/net/System/Net/WebRequest.cs index 079a624576..22d7520552 100644 --- a/mcs/class/referencesource/System/net/System/Net/WebRequest.cs +++ b/mcs/class/referencesource/System/net/System/Net/WebRequest.cs @@ -1047,13 +1047,6 @@ namespace System.Net { } #endif // !FEATURE_PAL - /// <summary> - /// <para>Provides an abstract way of having Async code callback into the request (saves a delegate)</para> - /// </summary> - internal virtual void RequestCallback(object obj) { - throw ExceptionHelper.MethodNotImplementedException; - } - // // Default Web Proxy implementation. // diff --git a/mcs/class/referencesource/System/net/System/Net/cookiecontainer.cs b/mcs/class/referencesource/System/net/System/Net/cookiecontainer.cs index a97f9ae48b..9cc463ec1c 100644 --- a/mcs/class/referencesource/System/net/System/Net/cookiecontainer.cs +++ b/mcs/class/referencesource/System/net/System/Net/cookiecontainer.cs @@ -6,7 +6,7 @@ // Relevant cookie specs: // -// PERSISTENTCLIENTSTATE HTTP COOKIES (1996) +// PERSISTENT CLIENT STATE HTTP COOKIES (1996) // From <http://web.archive.org/web/20020803110822/http://wp.netscape.com/newsref/std/cookie_spec.html> // // RFC2109 HTTP State Management Mechanism (February 1997) @@ -119,11 +119,13 @@ namespace System.Net { /// <para>[To be supplied.]</para> /// </devdoc> public CookieContainer() { +#if !WASM string domain = IPGlobalProperties.InternalGetIPGlobalProperties().DomainName; if (domain != null && domain.Length > 1) { m_fqdnMyDomain = '.' + domain; } +#endif //Otherwise it will remain string.Empty } diff --git a/mcs/class/referencesource/System/services/monitoring/system/diagnosticts/Process.cs.REMOVED.git-id b/mcs/class/referencesource/System/services/monitoring/system/diagnosticts/Process.cs.REMOVED.git-id index 6e8da03d90..0643f14267 100644 --- a/mcs/class/referencesource/System/services/monitoring/system/diagnosticts/Process.cs.REMOVED.git-id +++ b/mcs/class/referencesource/System/services/monitoring/system/diagnosticts/Process.cs.REMOVED.git-id @@ -1 +1 @@ -30f72959631456d53fff3fedde6449799f9c3e7c \ No newline at end of file +e1527546950d4297d8578925461d4b22d6a48737 \ No newline at end of file diff --git a/mcs/class/referencesource/System/sys/system/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs b/mcs/class/referencesource/System/sys/system/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs index 491bfaf9b6..48f3108ab9 100644 --- a/mcs/class/referencesource/System/sys/system/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs +++ b/mcs/class/referencesource/System/sys/system/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs @@ -8,7 +8,7 @@ namespace System.Diagnostics.CodeAnalysis /// enclosed methods and properties from code coverage collection. /// </summary> [AttributeUsage( - AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event, + AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Event | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Struct, Inherited = false, AllowMultiple = false )] diff --git a/mcs/class/referencesource/mscorlib/system/activator.cs b/mcs/class/referencesource/mscorlib/system/activator.cs index 67a42942d3..b64cfd4b47 100644 --- a/mcs/class/referencesource/mscorlib/system/activator.cs +++ b/mcs/class/referencesource/mscorlib/system/activator.cs @@ -74,7 +74,7 @@ namespace System { throw new ArgumentNullException("type"); Contract.EndContractBlock(); #if !FULL_AOT_RUNTIME - if (type is System.Reflection.Emit.TypeBuilder) + if (RuntimeFeature.IsDynamicCodeSupported && type is System.Reflection.Emit.TypeBuilder) throw new NotSupportedException(Environment.GetResourceString("NotSupported_CreateInstanceWithTypeBuilder")); #endif // If they didn't specify a lookup, then we will provide the default lookup. @@ -699,7 +699,7 @@ namespace System { } #endif // FEATURE_COMINTEROP -#if FEATURE_REMOTING || MOBILE_LEGACY +#if !DISABLE_REMOTING && (FEATURE_REMOTING || MOBILE_LEGACY) // This method is a helper method and delegates to the remoting // services to do the actual work. [System.Security.SecurityCritical] // auto-generated_required diff --git a/mcs/class/referencesource/mscorlib/system/exception.cs b/mcs/class/referencesource/mscorlib/system/exception.cs index 0e84bd58e7..89c57758e9 100644 --- a/mcs/class/referencesource/mscorlib/system/exception.cs +++ b/mcs/class/referencesource/mscorlib/system/exception.cs @@ -151,7 +151,6 @@ namespace System { } } - public virtual String Message { get { if (_message == null) { diff --git a/mcs/class/referencesource/mscorlib/system/gc.cs b/mcs/class/referencesource/mscorlib/system/gc.cs index 423db0a806..40b53a8867 100644 --- a/mcs/class/referencesource/mscorlib/system/gc.cs +++ b/mcs/class/referencesource/mscorlib/system/gc.cs @@ -281,7 +281,7 @@ namespace System { if ((mode < GCCollectionMode.Default) || (mode > GCCollectionMode.Optimized)) { - throw new ArgumentOutOfRangeException(Environment.GetResourceString("ArgumentOutOfRange_Enum")); + throw new ArgumentOutOfRangeException("mode", Environment.GetResourceString("ArgumentOutOfRange_Enum")); } Contract.EndContractBlock(); diff --git a/mcs/class/referencesource/mscorlib/system/globalization/calendardata.cs b/mcs/class/referencesource/mscorlib/system/globalization/calendardata.cs index 31fb7d6d25..9506b6f846 100644 --- a/mcs/class/referencesource/mscorlib/system/globalization/calendardata.cs +++ b/mcs/class/referencesource/mscorlib/system/globalization/calendardata.cs @@ -184,7 +184,7 @@ namespace System.Globalization InitializeAbbreviatedEraNames(localeName, calendarId); // Abbreviated English Era Names are only used for the Japanese calendar. - if (calendarId == (int)CalendarId.JAPAN) + if (!GlobalizationMode.Invariant && calendarId == (int)CalendarId.JAPAN) { this.saAbbrevEnglishEraNames = JapaneseCalendar.EnglishEraNames(); } @@ -268,6 +268,10 @@ namespace System.Globalization case CalendarId.JAPAN: case CalendarId.JAPANESELUNISOLAR: + if (GlobalizationMode.Invariant) + { + throw new PlatformNotSupportedException(); + } this.saEraNames = JapaneseCalendar.EraNames(); break; @@ -306,7 +310,11 @@ namespace System.Globalization break; case CalendarId.JAPAN: case CalendarId.JAPANESELUNISOLAR: - this.saAbbrevEraNames = JapaneseCalendar.AbbrevEraNames(); + if (GlobalizationMode.Invariant) + { + throw new PlatformNotSupportedException(); + } + this.saAbbrevEraNames = this.saEraNames; break; case CalendarId.HIJRI: case CalendarId.UMALQURA: diff --git a/mcs/class/referencesource/mscorlib/system/globalization/japanesecalendar.cs b/mcs/class/referencesource/mscorlib/system/globalization/japanesecalendar.cs index de0dc9b78b..d035d55a6e 100644 --- a/mcs/class/referencesource/mscorlib/system/globalization/japanesecalendar.cs +++ b/mcs/class/referencesource/mscorlib/system/globalization/japanesecalendar.cs @@ -22,14 +22,14 @@ namespace System.Globalization { ** year based on the era. ** ** This system is adopted by Emperor Meiji in 1868. The year value is counted based on the reign of an emperor, - ** and the era begins on the day an emperor ascends the throne and continues until his death. + ** and the era begins on the day an emperor ascends the throne and continues until his death or his abdication. ** The era changes at 12:00AM. ** - ** For example, the current era is Heisei. It started on 1989/1/8 A.D. Therefore, Gregorian year 1989 is also Heisei 1st. - ** 1989/1/8 A.D. is also Heisei 1st 1/8. + ** For example, the current era is Reiwa. It started on 2019/5/1 A.D. Therefore, Gregorian year 2019 is also Reiwa 1st. + ** 2019/5/1 A.D. is also Reiwa 1st 5/1. ** ** Any date in the year during which era is changed can be reckoned in either era. For example, - ** 1989/1/1 can be 1/1 Heisei 1st year or 1/1 Showa 64th year. + ** 2019/1/1 can be 1/1 Reiwa 1st year or 1/1 Heisei 31st year. ** ** Note: ** The DateTime can be represented by the JapaneseCalendar are limited to two factors: @@ -40,7 +40,7 @@ namespace System.Globalization { ** Calendar Minimum Maximum ** ========== ========== ========== ** Gregorian 1868/09/08 9999/12/31 - ** Japanese Meiji 01/01 Heisei 8011/12/31 + ** Japanese Meiji 01/01 Reiwa 7981/12/31 ============================================================================*/ @@ -96,7 +96,7 @@ namespace System.Globalization { // should be the first element. // That is, m_EraInfo[0] contains the most recent era. // - // We know about 4 built-in eras, however users may add additional era(s) from the + // We know about 5 built-in eras, however users may add additional era(s) from the // registry, by adding values to HKLM\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras // // Registry values look like: @@ -124,14 +124,16 @@ namespace System.Globalization { if (japaneseEraInfo == null) { // We know about some built-in ranges - EraInfo[] defaultEraRanges = new EraInfo[4]; - defaultEraRanges[0] = new EraInfo( 4, 1989, 1, 8, 1988, 1, GregorianCalendar.MaxYear - 1988, + EraInfo[] defaultEraRanges = new EraInfo[5]; + defaultEraRanges[0] = new EraInfo( 5, 2019, 5, 1, 2018, 1, GregorianCalendar.MaxYear - 2018, + "\x4ee4\x548c", "\x4ee4", "R"); // era #5 start year/month/day, yearOffset, minEraYear + defaultEraRanges[1] = new EraInfo( 4, 1989, 1, 8, 1988, 1, 2019-1988, "\x5e73\x6210", "\x5e73", "H"); // era #4 start year/month/day, yearOffset, minEraYear - defaultEraRanges[1] = new EraInfo( 3, 1926, 12, 25, 1925, 1, 1989-1925, + defaultEraRanges[2] = new EraInfo( 3, 1926, 12, 25, 1925, 1, 1989-1925, "\x662d\x548c", "\x662d", "S"); // era #3,start year/month/day, yearOffset, minEraYear - defaultEraRanges[2] = new EraInfo( 2, 1912, 7, 30, 1911, 1, 1926-1911, + defaultEraRanges[3] = new EraInfo( 2, 1912, 7, 30, 1911, 1, 1926-1911, "\x5927\x6b63", "\x5927", "T"); // era #2,start year/month/day, yearOffset, minEraYear - defaultEraRanges[3] = new EraInfo( 1, 1868, 1, 1, 1867, 1, 1912-1867, + defaultEraRanges[4] = new EraInfo( 1, 1868, 1, 1, 1867, 1, 1912-1867, "\x660e\x6cbb", "\x660e", "M"); // era #1,start year/month/day, yearOffset, minEraYear // Remember the ranges we built @@ -221,9 +223,9 @@ namespace System.Globalization { // // If we didn't have valid eras, then fail - // should have at least 4 eras + // should have at least 5 eras // - if (iFoundEras < 4) return null; + if (iFoundEras < 5) return null; // // Now we have eras, clean them up. diff --git a/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs b/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs index d51ea5373e..e4e1ecfe37 100644 --- a/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs +++ b/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs @@ -511,6 +511,20 @@ namespace System.IO { return chars; } +#if MONO + public virtual int Read(Span<char> buffer) + { + char[] bufferBytes = buffer.ToArray(); + return Read(bufferBytes, 0, bufferBytes.Length); + } + + public virtual int Read(Span<byte> buffer) + { + byte[] bufferBytes = buffer.ToArray(); + return Read(bufferBytes, 0, bufferBytes.Length); + } +#endif + public virtual int Read(byte[] buffer, int index, int count) { if (buffer==null) throw new ArgumentNullException("buffer", Environment.GetResourceString("ArgumentNull_Buffer")); diff --git a/mcs/class/referencesource/mscorlib/system/io/binarywriter.cs b/mcs/class/referencesource/mscorlib/system/io/binarywriter.cs index c6f81955e4..b899202371 100644 --- a/mcs/class/referencesource/mscorlib/system/io/binarywriter.cs +++ b/mcs/class/referencesource/mscorlib/system/io/binarywriter.cs @@ -20,6 +20,7 @@ using System.Runtime; using System.Runtime.Serialization; using System.Text; using System.Diagnostics.Contracts; +using System.Threading.Tasks; namespace System.IO { // This abstract base class represents a writer that can write @@ -28,7 +29,7 @@ namespace System.IO { // [Serializable] [System.Runtime.InteropServices.ComVisible(true)] - public class BinaryWriter : IDisposable + public class BinaryWriter : IDisposable, IAsyncDisposable { public static readonly BinaryWriter Null = new BinaryWriter(); @@ -135,6 +136,45 @@ namespace System.IO { { return OutStream.Seek(offset, origin); } + +#if MONO + public virtual void Write(ReadOnlySpan<byte> buffer) + { + Write(buffer.ToArray()); + } + + public virtual void Write(ReadOnlySpan<char> buffer) + { + Write(buffer.ToArray()); + } + + public virtual ValueTask DisposeAsync() + { + try + { + if (GetType() == typeof(BinaryWriter)) + { + if (_leaveOpen) + { + return new ValueTask(OutStream.FlushAsync()); + } + + OutStream.Close(); + } + else + { + // Since this is a derived BinaryWriter, delegate to whatever logic + // the derived implementation already has in Dispose. + Dispose(); + } + return default; + } + catch (Exception exc) + { + return new ValueTask(Task.FromException(exc)); + } + } +#endif // Writes a boolean to this stream. A single byte is written to the stream // with the value 0 representing false or the value 1 representing true. diff --git a/mcs/class/referencesource/mscorlib/system/reflection/emit/methodbuilder.cs b/mcs/class/referencesource/mscorlib/system/reflection/emit/methodbuilder.cs index 99650b1da0..8590ee1ef6 100644 --- a/mcs/class/referencesource/mscorlib/system/reflection/emit/methodbuilder.cs +++ b/mcs/class/referencesource/mscorlib/system/reflection/emit/methodbuilder.cs @@ -1403,7 +1403,7 @@ namespace System.Reflection.Emit /// </summary> [StructLayout(LayoutKind.Sequential)] [ComVisible(false)] - public struct ExceptionHandler : IEquatable<ExceptionHandler> + public readonly struct ExceptionHandler : IEquatable<ExceptionHandler> { // Keep in sync with unmanged structure. internal readonly int m_exceptionClass; diff --git a/mcs/class/referencesource/mscorlib/system/reflection/mdimport.cs b/mcs/class/referencesource/mscorlib/system/reflection/mdimport.cs index f2f0c70edc..165f1ad99d 100644 --- a/mcs/class/referencesource/mscorlib/system/reflection/mdimport.cs +++ b/mcs/class/referencesource/mscorlib/system/reflection/mdimport.cs @@ -62,6 +62,43 @@ namespace System.Reflection Modifier = 0x40, Sentinel = 0x41, Pinned = 0x45, + + ELEMENT_TYPE_END = 0x00, + ELEMENT_TYPE_VOID = 0x01, + ELEMENT_TYPE_BOOLEAN = 0x02, + ELEMENT_TYPE_CHAR = 0x03, + ELEMENT_TYPE_I1 = 0x04, + ELEMENT_TYPE_U1 = 0x05, + ELEMENT_TYPE_I2 = 0x06, + ELEMENT_TYPE_U2 = 0x07, + ELEMENT_TYPE_I4 = 0x08, + ELEMENT_TYPE_U4 = 0x09, + ELEMENT_TYPE_I8 = 0x0A, + ELEMENT_TYPE_U8 = 0x0B, + ELEMENT_TYPE_R4 = 0x0C, + ELEMENT_TYPE_R8 = 0x0D, + ELEMENT_TYPE_STRING = 0x0E, + ELEMENT_TYPE_PTR = 0x0F, + ELEMENT_TYPE_BYREF = 0x10, + ELEMENT_TYPE_VALUETYPE = 0x11, + ELEMENT_TYPE_CLASS = 0x12, + ELEMENT_TYPE_VAR = 0x13, + ELEMENT_TYPE_ARRAY = 0x14, + ELEMENT_TYPE_GENERICINST = 0x15, + ELEMENT_TYPE_TYPEDBYREF = 0x16, + ELEMENT_TYPE_I = 0x18, + ELEMENT_TYPE_U = 0x19, + ELEMENT_TYPE_FNPTR = 0x1B, + ELEMENT_TYPE_OBJECT = 0x1C, + ELEMENT_TYPE_SZARRAY = 0x1D, + ELEMENT_TYPE_MVAR = 0x1E, + ELEMENT_TYPE_CMOD_REQD = 0x1F, + ELEMENT_TYPE_CMOD_OPT = 0x20, + ELEMENT_TYPE_INTERNAL = 0x21, + ELEMENT_TYPE_MAX = 0x22, + ELEMENT_TYPE_MODIFIER = 0x40, + ELEMENT_TYPE_SENTINEL = 0x41, + ELEMENT_TYPE_PINNED = 0x45, } [Serializable] diff --git a/mcs/class/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id b/mcs/class/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id index a69e358ad6..8cec132dff 100644 --- a/mcs/class/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id +++ b/mcs/class/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id @@ -1 +1 @@ -14e9c98271b7092feb7ff984bdddbdc5a9f1acdd \ No newline at end of file +a7122e56661c75df2dbf71b01e091405baf129e0 \ No newline at end of file diff --git a/mcs/class/referencesource/mscorlib/system/runtime/interopservices/attributes.cs b/mcs/class/referencesource/mscorlib/system/runtime/interopservices/attributes.cs index b24777c00e..e0d4b384a3 100644 --- a/mcs/class/referencesource/mscorlib/system/runtime/interopservices/attributes.cs +++ b/mcs/class/referencesource/mscorlib/system/runtime/interopservices/attributes.cs @@ -1148,7 +1148,7 @@ namespace System.Runtime.InteropServices{ } } - [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)] + [AttributeUsage(AttributeTargets.Method, Inherited=false)] [System.Runtime.InteropServices.ComVisible(false)] public sealed class ManagedToNativeComInteropStubAttribute : Attribute { diff --git a/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs b/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs index b82294c787..f611b6af89 100644 --- a/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs +++ b/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs @@ -34,7 +34,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { [System.Runtime.InteropServices.ComVisible(true)] sealed public class BinaryFormatter : -#if !FEATURE_REMOTING && !MONO +#if DISABLE_REMOTING || (!FEATURE_REMOTING && !MONO) IFormatter #else IRemotingFormatter @@ -149,7 +149,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { return Deserialize(serializationStream, handler, true); } -#if FEATURE_REMOTING || MOBILE_LEGACY +#if FEATURE_REMOTING || (MOBILE_LEGACY && !DISABLE_REMOTING) [System.Security.SecuritySafeCritical] // auto-generated public Object DeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, true, methodCallMessage); @@ -161,7 +161,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { return Deserialize(serializationStream, handler, false); } -#if FEATURE_REMOTING || MOBILE_LEGACY +#if FEATURE_REMOTING || (MOBILE_LEGACY && !DISABLE_REMOTING) [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] public Object UnsafeDeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) { diff --git a/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs b/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs index b7b13667dc..6164c4e2fe 100644 --- a/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs +++ b/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs @@ -66,7 +66,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { //MethodCall and MethodReturn are handled special for perf reasons private bool bFullDeserialization; -#if FEATURE_REMOTING +#if FEATURE_REMOTING private bool bMethodCall; private bool bMethodReturn; private BinaryMethodCall binaryMethodCall; @@ -95,7 +95,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { m_objectManager.TopObject = value; } } -#if FEATURE_REMOTING +#if FEATURE_REMOTING internal void SetMethodCall(BinaryMethodCall binaryMethodCall) { bMethodCall = true; @@ -141,7 +141,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { } -#if FEATURE_REMOTING || MOBILE_LEGACY +#if FEATURE_REMOTING || (MOBILE_LEGACY && !DISABLE_REMOTING) [System.Security.SecurityCritical] // auto-generated internal Object Deserialize(HeaderHandler handler, __BinaryParser serParser, bool fCheck, bool isCrossAppDomain, IMethodCallMessage methodCallMessage) { if (serParser == null) diff --git a/mcs/class/referencesource/mscorlib/system/runtime/serialization/streamingcontext.cs b/mcs/class/referencesource/mscorlib/system/runtime/serialization/streamingcontext.cs index 978d9ce78c..e4b754641a 100644 --- a/mcs/class/referencesource/mscorlib/system/runtime/serialization/streamingcontext.cs +++ b/mcs/class/referencesource/mscorlib/system/runtime/serialization/streamingcontext.cs @@ -18,9 +18,9 @@ namespace System.Runtime.Serialization { using System; [Serializable] [System.Runtime.InteropServices.ComVisible(true)] - public struct StreamingContext { - internal Object m_additionalContext; - internal StreamingContextStates m_state; + public readonly struct StreamingContext { + internal readonly Object m_additionalContext; + internal readonly StreamingContextStates m_state; public StreamingContext(StreamingContextStates state) : this (state, null) { diff --git a/mcs/class/referencesource/mscorlib/system/security/claims/ClaimsPrincipal.cs b/mcs/class/referencesource/mscorlib/system/security/claims/ClaimsPrincipal.cs index 3512df9da9..3eea610476 100644 --- a/mcs/class/referencesource/mscorlib/system/security/claims/ClaimsPrincipal.cs +++ b/mcs/class/referencesource/mscorlib/system/security/claims/ClaimsPrincipal.cs @@ -117,6 +117,7 @@ namespace System.Security.Claims return selectedClaimsIdentity; } +#if !DISABLE_SECURITY /// <summary> /// Used to set a custom claims principal. /// </summary> @@ -131,6 +132,7 @@ namespace System.Security.Claims return new ClaimsPrincipal(Thread.CurrentPrincipal); } +#endif public static Func<IEnumerable<ClaimsIdentity>, ClaimsIdentity> PrimaryIdentitySelector { @@ -519,6 +521,7 @@ namespace System.Security.Claims } } +#if !DISABLE_SECURITY /// <summary> /// Returns the Current Principal by calling a delegate. Users may specify the delegate. /// </summary> @@ -537,6 +540,9 @@ namespace System.Security.Claims } } } +#else + public static ClaimsPrincipal Current => throw new PlatformNotSupportedException (); +#endif /// <summary> /// Retrieves a <see cref="IEnumerable{Claim}"/> where each claim is matched by <param name="match"/>. diff --git a/mcs/class/referencesource/mscorlib/system/security/cryptography/asymmetricalgorithm.cs b/mcs/class/referencesource/mscorlib/system/security/cryptography/asymmetricalgorithm.cs index 45cdaa749e..e3e3552047 100644 --- a/mcs/class/referencesource/mscorlib/system/security/cryptography/asymmetricalgorithm.cs +++ b/mcs/class/referencesource/mscorlib/system/security/cryptography/asymmetricalgorithm.cs @@ -113,5 +113,31 @@ namespace System.Security.Cryptography { public virtual String ToXmlString(bool includePrivateParameters) { throw new NotImplementedException(); } + +#if MONO + public virtual byte[] ExportEncryptedPkcs8PrivateKey (System.ReadOnlySpan<byte> passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) => throw new PlatformNotSupportedException (); + + public virtual byte[] ExportEncryptedPkcs8PrivateKey (System.ReadOnlySpan<char> password, System.Security.Cryptography.PbeParameters pbeParameters) => throw new PlatformNotSupportedException (); + + public virtual byte[] ExportPkcs8PrivateKey () => throw new PlatformNotSupportedException (); + + public virtual byte[] ExportSubjectPublicKeyInfo () => throw new PlatformNotSupportedException (); + + public virtual void ImportEncryptedPkcs8PrivateKey (System.ReadOnlySpan<byte> passwordBytes, System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); + + public virtual void ImportEncryptedPkcs8PrivateKey (System.ReadOnlySpan<char> password, System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); + + public virtual void ImportPkcs8PrivateKey (System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); + + public virtual void ImportSubjectPublicKeyInfo (System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); + + public virtual bool TryExportEncryptedPkcs8PrivateKey (System.ReadOnlySpan<byte> passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters, System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); + + public virtual bool TryExportEncryptedPkcs8PrivateKey (System.ReadOnlySpan<char> password, System.Security.Cryptography.PbeParameters pbeParameters, System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); + + public virtual bool TryExportPkcs8PrivateKey (System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); + + public virtual bool TryExportSubjectPublicKeyInfo (System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); +#endif } } diff --git a/mcs/class/referencesource/mscorlib/system/security/cryptography/dsa.cs b/mcs/class/referencesource/mscorlib/system/security/cryptography/dsa.cs index 53a024a975..6193d1d22e 100644 --- a/mcs/class/referencesource/mscorlib/system/security/cryptography/dsa.cs +++ b/mcs/class/referencesource/mscorlib/system/security/cryptography/dsa.cs @@ -16,6 +16,9 @@ namespace System.Security.Cryptography { using System.Security.Util; using System.Globalization; using System.IO; +#if MONO + using System.Buffers; +#endif using System.Diagnostics.Contracts; // DSAParameters is serializable so that one could pass the public parameters @@ -266,5 +269,128 @@ namespace System.Security.Cryptography { { return new ArgumentException(Environment.GetResourceString("Cryptography_HashAlgorithmNameNullOrEmpty"), "hashAlgorithm"); } + +#if MONO + // these methods were copied from CoreFX for NS2.1 support + public static DSA Create(int keySizeInBits) + { + DSA dsa = Create(); + + try + { + dsa.KeySize = keySizeInBits; + return dsa; + } + catch + { + dsa.Dispose(); + throw; + } + } + + public static DSA Create(DSAParameters parameters) + { + DSA dsa = Create(); + + try + { + dsa.ImportParameters(parameters); + return dsa; + } + catch + { + dsa.Dispose(); + throw; + } + } + + public virtual bool TryCreateSignature(ReadOnlySpan<byte> hash, Span<byte> destination, out int bytesWritten) + { + byte[] sig = CreateSignature(hash.ToArray()); + if (sig.Length <= destination.Length) + { + new ReadOnlySpan<byte>(sig).CopyTo(destination); + bytesWritten = sig.Length; + return true; + } + else + { + bytesWritten = 0; + return false; + } + } + + protected virtual bool TryHashData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten) + { + byte[] array = ArrayPool<byte>.Shared.Rent(data.Length); + try + { + data.CopyTo(array); + byte[] hash = HashData(array, 0, data.Length, hashAlgorithm); + if (destination.Length >= hash.Length) + { + new ReadOnlySpan<byte>(hash).CopyTo(destination); + bytesWritten = hash.Length; + return true; + } + else + { + bytesWritten = 0; + return false; + } + } + finally + { + Array.Clear(array, 0, data.Length); + ArrayPool<byte>.Shared.Return(array); + } + } + + public virtual bool TrySignData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten) + { + if (string.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw HashAlgorithmNameNullOrEmpty(); + } + + if (TryHashData(data, destination, hashAlgorithm, out int hashLength) && + TryCreateSignature(destination.Slice(0, hashLength), destination, out bytesWritten)) + { + return true; + } + + bytesWritten = 0; + return false; + } + + public virtual bool VerifyData(ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm) + { + if (string.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw HashAlgorithmNameNullOrEmpty(); + } + + for (int i = 256; ; i = checked(i * 2)) + { + int hashLength = 0; + byte[] hash = ArrayPool<byte>.Shared.Rent(i); + try + { + if (TryHashData(data, hash, hashAlgorithm, out hashLength)) + { + return VerifySignature(new ReadOnlySpan<byte>(hash, 0, hashLength), signature); + } + } + finally + { + Array.Clear(hash, 0, hashLength); + ArrayPool<byte>.Shared.Return(hash); + } + } + } + + public virtual bool VerifySignature(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature) => + VerifySignature(hash.ToArray(), signature.ToArray()); +#endif } } diff --git a/mcs/class/referencesource/mscorlib/system/security/cryptography/rsa.cs b/mcs/class/referencesource/mscorlib/system/security/cryptography/rsa.cs index f196b12ba7..07d1d49c27 100644 --- a/mcs/class/referencesource/mscorlib/system/security/cryptography/rsa.cs +++ b/mcs/class/referencesource/mscorlib/system/security/cryptography/rsa.cs @@ -17,6 +17,9 @@ namespace System.Security.Cryptography { using System.Security.Util; using System.Globalization; using System.Diagnostics.Contracts; +#if MONO + using System.Buffers; +#endif // We allow only the public components of an RSAParameters object, the Modulus and Exponent // to be serializable. @@ -338,5 +341,176 @@ namespace System.Security.Cryptography { abstract public RSAParameters ExportParameters(bool includePrivateParameters); abstract public void ImportParameters(RSAParameters parameters); + +#if MONO // these methods were copied from CoreFX for NS2.1 support + public static RSA Create(int keySizeInBits) + { + RSA rsa = Create(); + + try + { + rsa.KeySize = keySizeInBits; + return rsa; + } + catch + { + rsa.Dispose(); + throw; + } + } + + public static RSA Create(RSAParameters parameters) + { + RSA rsa = Create(); + + try + { + rsa.ImportParameters(parameters); + return rsa; + } + catch + { + rsa.Dispose(); + throw; + } + } + + public virtual bool TryDecrypt(ReadOnlySpan<byte> data, Span<byte> destination, RSAEncryptionPadding padding, out int bytesWritten) + { + byte[] result = Decrypt(data.ToArray(), padding); + + if (destination.Length >= result.Length) + { + new ReadOnlySpan<byte>(result).CopyTo(destination); + bytesWritten = result.Length; + return true; + } + + bytesWritten = 0; + return false; + } + + public virtual bool TryEncrypt(ReadOnlySpan<byte> data, Span<byte> destination, RSAEncryptionPadding padding, out int bytesWritten) + { + byte[] result = Encrypt(data.ToArray(), padding); + + if (destination.Length >= result.Length) + { + new ReadOnlySpan<byte>(result).CopyTo(destination); + bytesWritten = result.Length; + return true; + } + + bytesWritten = 0; + return false; + } + + protected virtual bool TryHashData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten) + { + byte[] result; + byte[] array = ArrayPool<byte>.Shared.Rent(data.Length); + try + { + data.CopyTo(array); + result = HashData(array, 0, data.Length, hashAlgorithm); + } + finally + { + Array.Clear(array, 0, data.Length); + ArrayPool<byte>.Shared.Return(array); + } + + if (destination.Length >= result.Length) + { + new ReadOnlySpan<byte>(result).CopyTo(destination); + bytesWritten = result.Length; + return true; + } + + bytesWritten = 0; + return false; + } + + public virtual bool TrySignHash(ReadOnlySpan<byte> hash, Span<byte> destination, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding, out int bytesWritten) + { + byte[] result = SignHash(hash.ToArray(), hashAlgorithm, padding); + + if (destination.Length >= result.Length) + { + new ReadOnlySpan<byte>(result).CopyTo(destination); + bytesWritten = result.Length; + return true; + } + + bytesWritten = 0; + return false; + } + + public virtual bool TrySignData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding, out int bytesWritten) + { + if (string.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw HashAlgorithmNameNullOrEmpty(); + } + if (padding == null) + { + throw new ArgumentNullException(nameof(padding)); + } + + if (TryHashData(data, destination, hashAlgorithm, out int hashLength) && + TrySignHash(destination.Slice(0, hashLength), destination, hashAlgorithm, padding, out bytesWritten)) + { + return true; + } + + bytesWritten = 0; + return false; + } + + public virtual bool VerifyData(ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) + { + if (string.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw HashAlgorithmNameNullOrEmpty(); + } + if (padding == null) + { + throw new ArgumentNullException(nameof(padding)); + } + + for (int i = 256; ; i = checked(i * 2)) + { + int hashLength = 0; + byte[] hash = ArrayPool<byte>.Shared.Rent(i); + try + { + if (TryHashData(data, hash, hashAlgorithm, out hashLength)) + { + return VerifyHash(new ReadOnlySpan<byte>(hash, 0, hashLength), signature, hashAlgorithm, padding); + } + } + finally + { + Array.Clear(hash, 0, hashLength); + ArrayPool<byte>.Shared.Return(hash); + } + } + } + + public virtual bool VerifyHash(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) => + VerifyHash(hash.ToArray(), signature.ToArray(), hashAlgorithm, padding); + + public virtual byte[] ExportRSAPrivateKey () => throw new PlatformNotSupportedException (); + + public virtual byte[] ExportRSAPublicKey () => throw new PlatformNotSupportedException (); + + public virtual void ImportRSAPrivateKey (System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); + + public virtual void ImportRSAPublicKey (System.ReadOnlySpan<byte> source, out int bytesRead) => throw new PlatformNotSupportedException (); + + public virtual bool TryExportRSAPrivateKey (System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); + + public virtual bool TryExportRSAPublicKey (System.Span<byte> destination, out int bytesWritten) => throw new PlatformNotSupportedException (); +#endif } } diff --git a/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs b/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs index 44514d43ba..a657d28393 100644 --- a/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs +++ b/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs @@ -1,4 +1,4 @@ -#if MOBILE_LEGACY +#if MOBILE_LEGACY && !DISABLE_REMOTING #define FEATURE_REMOTING #endif // ==++== diff --git a/mcs/class/referencesource/mscorlib/system/threading/threadpool.cs b/mcs/class/referencesource/mscorlib/system/threading/threadpool.cs index 783eb32e3c..9a120e05c4 100644 --- a/mcs/class/referencesource/mscorlib/system/threading/threadpool.cs +++ b/mcs/class/referencesource/mscorlib/system/threading/threadpool.cs @@ -1932,8 +1932,7 @@ namespace System.Threading throw new NotSupportedException(Environment.GetResourceString("Arg_NotSupportedException")); Contract.EndContractBlock(); #endif - - return PostQueuedCompletionStatus(overlapped); + throw new NotImplementedException(""); } [SecurityCritical] @@ -1986,8 +1985,7 @@ namespace System.Threading [System.Security.SecuritySafeCritical] internal static void NotifyWorkItemProgress() { - if (!ThreadPoolGlobals.vmTpInitialized) - ThreadPool.InitializeVMTp(ref ThreadPoolGlobals.enableWorkerTracking); + EnsureVMInitialized(); NotifyWorkItemProgressNative(); } @@ -2005,8 +2003,10 @@ namespace System.Threading [System.Security.SecurityCritical] // auto-generated // [ResourceExposure(ResourceScope.None)] - [MethodImplAttribute(MethodImplOptions.InternalCall)] - internal static extern bool IsThreadPoolHosted(); + internal static bool IsThreadPoolHosted() + { + return false; + } [System.Security.SecurityCritical] // auto-generated // [ResourceExposure(ResourceScope.None)] @@ -2075,8 +2075,10 @@ namespace System.Threading [System.Security.SecurityCritical] // auto-generated // [ResourceExposure(ResourceScope.None)] - [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] - private static extern bool BindIOCompletionCallbackNative(IntPtr fileHandle); + private static bool BindIOCompletionCallbackNative(IntPtr fileHandle) + { + return true; + } } } diff --git a/mcs/class/referencesource/mscorlib/system/threading/waithandle.cs b/mcs/class/referencesource/mscorlib/system/threading/waithandle.cs index 47a59fb51b..146dd0c5e6 100644 --- a/mcs/class/referencesource/mscorlib/system/threading/waithandle.cs +++ b/mcs/class/referencesource/mscorlib/system/threading/waithandle.cs @@ -38,11 +38,7 @@ namespace System.Threading using System.Diagnostics.CodeAnalysis; [System.Runtime.InteropServices.ComVisible(true)] -#if FEATURE_REMOTING || NETCORE public abstract partial class WaitHandle : MarshalByRefObject, IDisposable { -#else // FEATURE_REMOTING - public abstract partial class WaitHandle : IDisposable { -#endif // FEATURE_REMOTING public const int WaitTimeout = 0x102; private const int MAX_WAITHANDLES = 64; @@ -68,6 +64,7 @@ namespace System.Threading private const int WAIT_ABANDONED = 0x80; private const int WAIT_FAILED = 0x7FFFFFFF; private const int ERROR_TOO_MANY_POSTS = 0x12A; + private const int ERROR_NOT_OWNED_BY_CALLER = 0x12B; internal enum OpenExistingResult { @@ -626,6 +623,11 @@ namespace System.Threading throw new InvalidOperationException(Environment.GetResourceString("Threading.WaitHandleTooManyPosts")); } + if(ERROR_NOT_OWNED_BY_CALLER == ret) + { + throw new ApplicationException("Attempt to release mutex not owned by caller"); + } + //Object was signaled if(WAIT_OBJECT_0 == ret) { diff --git a/mcs/class/referencesource/mscorlib/system/timezoneinfo.cs.REMOVED.git-id b/mcs/class/referencesource/mscorlib/system/timezoneinfo.cs.REMOVED.git-id index 9c95c4c526..7389f9bc12 100644 --- a/mcs/class/referencesource/mscorlib/system/timezoneinfo.cs.REMOVED.git-id +++ b/mcs/class/referencesource/mscorlib/system/timezoneinfo.cs.REMOVED.git-id @@ -1 +1 @@ -ffde5f269cd99c7ba132c60c1df9308548b28b80 \ No newline at end of file +f0a1fe6c4e333f685d75d10ccda6820a02f9839c \ No newline at end of file diff --git a/mcs/class/referencesource/mscorlib/system/typedreference.cs b/mcs/class/referencesource/mscorlib/system/typedreference.cs index 3dc06b4d31..00e8b67598 100644 --- a/mcs/class/referencesource/mscorlib/system/typedreference.cs +++ b/mcs/class/referencesource/mscorlib/system/typedreference.cs @@ -44,7 +44,7 @@ namespace System { throw new ArgumentNullException("flds"); Contract.EndContractBlock(); if (flds.Length == 0) - throw new ArgumentException(Environment.GetResourceString("Arg_ArrayZeroError")); + throw new ArgumentException(Environment.GetResourceString("Arg_ArrayZeroError"), nameof (flds)); IntPtr[] fields = new IntPtr[flds.Length]; // For proper handling of Nullable<T> don't change GetType() to something like 'IsAssignableFrom' diff --git a/mcs/class/test-helpers/Configuration.Http.cs b/mcs/class/test-helpers/Configuration.Http.cs index dee6c15474..b8e2f97cbb 100644 --- a/mcs/class/test-helpers/Configuration.Http.cs +++ b/mcs/class/test-helpers/Configuration.Http.cs @@ -17,10 +17,10 @@ namespace System.Net.Test.Common } public static readonly object[][] EchoServers; - // public static readonly object[][] VerifyUploadServers = { new object[] { RemoteVerifyUploadServer }, new object[] { SecureRemoteVerifyUploadServer } }; - // public static readonly object[][] CompressedServers = { new object[] { RemoteDeflateServer }, new object[] { RemoteGZipServer } }; - // public static readonly object[][] Http2Servers = { new object[] { new Uri ("https://" + Http2Host) } }; - // public static readonly object[][] Http2NoPushServers = { new object[] { new Uri ("https://" + Http2NoPushHost) } }; + public static readonly object[][] VerifyUploadServers = { new object[] { RemoteVerifyUploadServer }, new object[] { SecureRemoteVerifyUploadServer } }; + public static readonly object[][] CompressedServers = { new object[] { RemoteDeflateServer }, new object[] { RemoteGZipServer } }; + public static readonly object[][] Http2Servers = { new object[] { new Uri ("https://" + Http2Host) } }; + public static readonly object[][] Http2NoPushServers = { new object[] { new Uri ("https://" + Http2NoPushHost) } }; } } } diff --git a/mcs/class/test-helpers/PlatformDetection.cs b/mcs/class/test-helpers/PlatformDetection.cs index 5938d4192a..eb550c0b5b 100644 --- a/mcs/class/test-helpers/PlatformDetection.cs +++ b/mcs/class/test-helpers/PlatformDetection.cs @@ -8,6 +8,7 @@ namespace System public static readonly bool IsWindowsNanoServer = false; public static bool IsNotWindowsNanoServer => true; public static bool IsNotWindowsServerCore => true; + public static bool IsMono => true; public static bool IsWindows7 => false; public static bool IsWindows10Version1607OrGreater => false; @@ -33,7 +34,8 @@ namespace System public static bool IsNetfx462OrNewer => false; - public static bool IsSsl2AndSsl3Supported => false; + public static bool SupportsAlpn => false; + public static bool SupportsClientAlpn => false; public static bool IsWindows { get { @@ -44,5 +46,7 @@ namespace System public static bool IsInAppContainer => false; public static bool IsAlpine => false; public static bool IsNetCore => false; - } + + public static int WindowsVersion => -1; + } } diff --git a/mcs/errors/cs1503-18.cs b/mcs/errors/cs1503-18.cs deleted file mode 100644 index a9e9337567..0000000000 --- a/mcs/errors/cs1503-18.cs +++ /dev/null @@ -1,13 +0,0 @@ -// CS1503: Argument `#1' cannot convert `int?' expression to type `int' -// Line: 11 - -class X -{ - public static void Main () - { - string x = null; - string y = null; - - var res = x?[y?.Length]; - } -} diff --git a/mcs/ilasm/Driver.cs b/mcs/ilasm/Driver.cs index dc4929d79d..3c18eaaa2a 100644 --- a/mcs/ilasm/Driver.cs +++ b/mcs/ilasm/Driver.cs @@ -371,7 +371,7 @@ namespace Mono.ILASM { { Console.WriteLine ( "For more information on Mono, visit the project Web site\n" + - " http://www.go-mono.com\n\n"); + " http://www.mono-project.com\n\n"); Environment.Exit (0); } diff --git a/mcs/ilasm/codegen/GenericArguments.cs b/mcs/ilasm/codegen/GenericArguments.cs index afefa39584..db098d4442 100644 --- a/mcs/ilasm/codegen/GenericArguments.cs +++ b/mcs/ilasm/codegen/GenericArguments.cs @@ -40,7 +40,11 @@ namespace Mono.ILASM { if (type_list == null) type_list = new ArrayList (); - type_list.Add (type); + var prim = PrimitiveTypeRef.GetPrimitiveType (type.FullName); + if (prim != null) + type_list.Add (prim); + else + type_list.Add (type); type_str = null; type_arr = null; } diff --git a/mcs/ilasm/codegen/PrimitiveTypeRef.cs b/mcs/ilasm/codegen/PrimitiveTypeRef.cs index 40a5229035..48236f0693 100644 --- a/mcs/ilasm/codegen/PrimitiveTypeRef.cs +++ b/mcs/ilasm/codegen/PrimitiveTypeRef.cs @@ -64,7 +64,9 @@ namespace Mono.ILASM { { switch (full_name) { case "System.String": + case "[System.Runtime]System.String": return new PrimitiveTypeRef (PEAPI.PrimitiveType.String, full_name); + case "[System.Runtime]System.Object": case "System.Object": return new PrimitiveTypeRef (PEAPI.PrimitiveType.Object, full_name); default: diff --git a/mcs/ilasm/codegen/TypeDef.cs b/mcs/ilasm/codegen/TypeDef.cs index e6d9dc2cdb..d10bcc311f 100644 --- a/mcs/ilasm/codegen/TypeDef.cs +++ b/mcs/ilasm/codegen/TypeDef.cs @@ -207,11 +207,6 @@ namespace Mono.ILASM { public void AddMethodDef (MethodDef methoddef) { - if (IsInterface && !methoddef.IsStatic && !methoddef.IsVirtual) { - Report.Warning (methoddef.StartLocation, "Non-virtual instance method in interface, set to such"); - methoddef.Attributes |= PEAPI.MethAttr.Virtual; - } - if (method_table [methoddef.Signature] != null) Report.Error (methoddef.StartLocation, "Duplicate method declaration: " + methoddef.Signature); diff --git a/mcs/ilasm/codegen/TypeManager.cs b/mcs/ilasm/codegen/TypeManager.cs index 029b314463..54d4bdd9ab 100644 --- a/mcs/ilasm/codegen/TypeManager.cs +++ b/mcs/ilasm/codegen/TypeManager.cs @@ -13,7 +13,7 @@ using System.Collections; namespace Mono.ILASM { public class TypeManager { - + private ArrayList type_list; private Hashtable type_table; private CodeGen code_gen; @@ -21,6 +21,7 @@ namespace Mono.ILASM { { this.code_gen = code_gen; type_table = new Hashtable (); + type_list = new ArrayList (); } public TypeDef this[string full_name] { @@ -29,6 +30,7 @@ namespace Mono.ILASM { } set { type_table[full_name] = value; + type_list.Add(value); } } @@ -47,8 +49,6 @@ namespace Mono.ILASM { public void DefineAll () { - ArrayList type_list = new ArrayList (type_table.Values); - type_list.Sort (); foreach (TypeDef typedef in type_list) { typedef.Define (code_gen); } diff --git a/mcs/ilasm/parser/ILParser.jay.REMOVED.git-id b/mcs/ilasm/parser/ILParser.jay.REMOVED.git-id index 29b652c561..650f97b89e 100644 --- a/mcs/ilasm/parser/ILParser.jay.REMOVED.git-id +++ b/mcs/ilasm/parser/ILParser.jay.REMOVED.git-id @@ -1 +1 @@ -bfaa1aa39a616e9d1581e5bd168d39852a176b9e \ No newline at end of file +9f4c8819887943101e36e2c68750d9bc2cc20eac \ No newline at end of file diff --git a/mcs/jay/Makefile b/mcs/jay/Makefile index f14055f827..70f6602e45 100644 --- a/mcs/jay/Makefile +++ b/mcs/jay/Makefile @@ -3,6 +3,7 @@ SUBDIRS := include ../build/rules.make LOCAL_CFLAGS = -DSKEL_DIRECTORY=\""$(prefix)/share/jay"\" +NO_INSTALL = yes sources = closure.c error.c lalr.c lr0.c main.c mkpar.c output.c reader.c \ symtab.c verbose.c warshall.c @@ -14,11 +15,11 @@ DISTFILES = $(datafiles) $(sources) jay.1 $(wildcard *.h) jay.vcxproj all-local: jay -install-local: jay +install-local: uninstall-local: ifndef NO_INSTALL -install-local: +install-local: jay $(MKINSTALLDIRS) $(DESTDIR)$(prefix)/bin $(MKINSTALLDIRS) $(DESTDIR)$(prefix)/share/jay $(MKINSTALLDIRS) $(DESTDIR)$(prefix)/share/man/man1 diff --git a/mcs/jay/jay.vcxproj b/mcs/jay/jay.vcxproj index 3f8fc4aade..3124291fb5 100644 --- a/mcs/jay/jay.vcxproj +++ b/mcs/jay/jay.vcxproj @@ -1,108 +1,108 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <Platform>Win32</Platform> - <ProjectGuid>{5D485D32-3B9F-4287-AB24-C8DA5B89F537}</ProjectGuid> - <RootNamespace>jay</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>MultiByte</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>MultiByte</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup> - <SkipInvalidConfigurations>true</SkipInvalidConfigurations> - <Platform>Win32</Platform> - <ActualPlatform>Win32</ActualPlatform> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.Win32.user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.Win32.user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)'=='Debug'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)'=='Debug'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)'=='Release'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)'=='Release'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>SKEL_DIRECTORY=".";%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent> - <Command>copy $(OutDir)jay.exe $(ProjectDir)jay.exe</Command> - </PostBuildEvent> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> - <ClCompile> - <PreprocessorDefinitions>SKEL_DIRECTORY=".";%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent> - <Command>copy $(OutDir)jay.exe $(ProjectDir)jay.exe</Command> - </PostBuildEvent> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="closure.c" /> - <ClCompile Include="error.c" /> - <ClCompile Include="lalr.c" /> - <ClCompile Include="lr0.c" /> - <ClCompile Include="main.c" /> - <ClCompile Include="mkpar.c" /> - <ClCompile Include="output.c" /> - <ClCompile Include="reader.c" /> - <ClCompile Include="symtab.c" /> - <ClCompile Include="verbose.c" /> - <ClCompile Include="warshall.c" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="defs.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <Platform>Win32</Platform> + <ProjectGuid>{5D485D32-3B9F-4287-AB24-C8DA5B89F537}</ProjectGuid> + <RootNamespace>jay</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup> + <SkipInvalidConfigurations>true</SkipInvalidConfigurations> + <Platform>Win32</Platform> + <ActualPlatform>Win32</ActualPlatform> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.Win32.user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.Win32.user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)'=='Debug'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)'=='Debug'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)'=='Release'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)'=='Release'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>SKEL_DIRECTORY=".";%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent> + <Command>copy $(OutDir)jay.exe $(ProjectDir)jay.exe</Command> + </PostBuildEvent> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> + <ClCompile> + <PreprocessorDefinitions>SKEL_DIRECTORY=".";%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent> + <Command>copy $(OutDir)jay.exe $(ProjectDir)jay.exe</Command> + </PostBuildEvent> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="closure.c" /> + <ClCompile Include="error.c" /> + <ClCompile Include="lalr.c" /> + <ClCompile Include="lr0.c" /> + <ClCompile Include="main.c" /> + <ClCompile Include="mkpar.c" /> + <ClCompile Include="output.c" /> + <ClCompile Include="reader.c" /> + <ClCompile Include="symtab.c" /> + <ClCompile Include="verbose.c" /> + <ClCompile Include="warshall.c" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="defs.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/mcs/mcs/mcs.csproj b/mcs/mcs/mcs.csproj index a2369866e5..80cca7ce1a 100644 --- a/mcs/mcs/mcs.csproj +++ b/mcs/mcs/mcs.csproj @@ -1,232 +1,232 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- WARNING: this file is autogenerated, don't modify it. Edit the .sources file of the corresponding assembly instead if you want to add/remove C# source files. --> -<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">net_4_x</Platform> - <ProjectGuid>{D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}</ProjectGuid> - <OutputType>Exe</OutputType> - <NoWarn>1699</NoWarn> - <LangVersion>latest</LangVersion> - <HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Windows_NT'">win32</HostPlatform> - <HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Unix' and $([System.IO.File]::Exists('/usr/lib/libc.dylib'))">macos</HostPlatform> - <HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Unix'">linux</HostPlatform> - <GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute> - <NoStdLib>False</NoStdLib> - <NoConfig>True</NoConfig> - <AssemblyName>mcs</AssemblyName> - <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> - </PropertyGroup> - <PropertyGroup> - <!-- Set AddAdditionalExplicitAssemblyReferences to false, otherwise if targetting .NET4.0, - Microsoft.NETFramework.props will force a dependency on the assembly System.Core. This - is a problem to compile the Mono mscorlib.dll --> - <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences> - </PropertyGroup> - <PropertyGroup Condition=" '$(Platform)' == 'net_4_x' "> - <OutputPath>./../class/lib/net_4_x-$(HostPlatform)</OutputPath> - <IntermediateOutputPath>./../class/obj/$(AssemblyName)-net_4_x-$(HostPlatform)</IntermediateOutputPath> - <DefineConstants>STATIC;NO_SYMBOL_WRITER;NO_AUTHENTICODE;MONO_FEATURE_THREAD_ABORT;MONO_FEATURE_PROCESS_START;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM</DefineConstants> - </PropertyGroup> - <!-- @ALL_PROFILE_PROPERTIES@ --> - <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <!-- TRACE is set only for Debug configuration, so inherit from platform-specific value --> - <DefineConstants>TRACE;$(DefineConstants)</DefineConstants> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - </PropertyGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <ItemGroup Condition=" '$(Platform)' == 'net_4_x' "> - <Compile Include="cs-parser.cs" /> - </ItemGroup> - <!-- @BUILT_SOURCES@ --> - <!--Common files--> - <ItemGroup> - <Compile Include="..\..\external\ikvm\reflect\AmbiguousMatchException.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Assembly.cs" /> - <Compile Include="..\..\external\ikvm\reflect\AssemblyName.cs" /> - <Compile Include="..\..\external\ikvm\reflect\BadImageFormatException.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Binder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\ConstructorInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\CustomAttributeData.cs" /> - <Compile Include="..\..\external\ikvm\reflect\CustomAttributeNamedArgument.cs" /> - <Compile Include="..\..\external\ikvm\reflect\CustomAttributeTypedArgument.cs" /> - <Compile Include="..\..\external\ikvm\reflect\CustomModifiers.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\AssemblyBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\ConstructorBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\CustomAttributeBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\CustomModifiersBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\EnumBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\Enums.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\EventBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\ExceptionHandler.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\FieldBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\ILGenerator.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\MethodBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\ModuleBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\OpCode.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\OpCodes.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\ParameterBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\PropertyBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\SignatureHelper.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\Tokens.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Emit\TypeBuilder.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Enums.cs" /> - <Compile Include="..\..\external\ikvm\reflect\EventInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\ExceptionHandlingClause.cs" /> - <Compile Include="..\..\external\ikvm\reflect\FieldInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\FieldSignature.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Fusion.cs" /> - <Compile Include="..\..\external\ikvm\reflect\GenericWrappers.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Impl\ITypeOwner.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Impl\SymbolSupport.cs" /> - <Compile Include="..\..\external\ikvm\reflect\InterfaceMapping.cs" /> - <Compile Include="..\..\external\ikvm\reflect\LocalVariableInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\ManifestResourceInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MarshalSpec.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MemberInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Metadata\CliHeader.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Metadata\MetadataRW.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Metadata\Tables.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MethodBase.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MethodBody.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MethodImplMap.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MethodInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\MethodSignature.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Missing.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Module.cs" /> - <Compile Include="..\..\external\ikvm\reflect\ParameterInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\ParameterModifier.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Projection.cs" /> - <Compile Include="..\..\external\ikvm\reflect\PropertyInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\PropertySignature.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\AssemblyReader.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\Authenticode.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\ByteReader.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\EventInfoImpl.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\Field.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\GenericTypeParameter.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\MetadataReader.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\Method.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\ModuleReader.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\PEReader.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\PropertyInfoImpl.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\ResourceModule.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Reader\TypeDefImpl.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Signature.cs" /> - <Compile Include="..\..\external\ikvm\reflect\StandAloneMethodSig.cs" /> - <Compile Include="..\..\external\ikvm\reflect\StrongNameKeyPair.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Type.cs" /> - <Compile Include="..\..\external\ikvm\reflect\TypeInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\TypeNameParser.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Universe.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Util.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\ByteBuffer.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\Heaps.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\MetadataWriter.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\ModuleWriter.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\PEWriter.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\ResourceSection.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\TextSection.cs" /> - <Compile Include="..\..\external\ikvm\reflect\Writer\VersionInfo.cs" /> - <Compile Include="..\..\external\ikvm\reflect\coreclr.cs" /> - <Compile Include="..\build\common\Consts.cs" /> - <Compile Include="..\class\Mono.CompilerServices.SymbolWriter\MonoSymbolFile.cs" /> - <Compile Include="..\class\Mono.CompilerServices.SymbolWriter\MonoSymbolTable.cs" /> - <Compile Include="..\class\Mono.CompilerServices.SymbolWriter\SourceMethodBuilder.cs" /> - <Compile Include="..\class\Mono.Security\Mono.Security.Cryptography\CryptoConvert.cs" /> - <Compile Include="..\tools\monop\outline.cs" /> - <Compile Include="AssemblyInfo.cs" /> - <Compile Include="anonymous.cs" /> - <Compile Include="argument.cs" /> - <Compile Include="assembly.cs" /> - <Compile Include="assign.cs" /> - <Compile Include="async.cs" /> - <Compile Include="attribute.cs" /> - <Compile Include="cfold.cs" /> - <Compile Include="class.cs" /> - <Compile Include="codegen.cs" /> - <Compile Include="complete.cs" /> - <Compile Include="const.cs" /> - <Compile Include="constant.cs" /> - <Compile Include="context.cs" /> - <Compile Include="convert.cs" /> - <Compile Include="cs-tokenizer.cs" /> - <Compile Include="decl.cs" /> - <Compile Include="delegate.cs" /> - <Compile Include="doc.cs" /> - <Compile Include="driver.cs" /> - <Compile Include="dynamic.cs" /> - <Compile Include="ecore.cs" /> - <Compile Include="enum.cs" /> - <Compile Include="eval.cs" /> - <Compile Include="expression.cs" /> - <Compile Include="field.cs" /> - <Compile Include="flowanalysis.cs" /> - <Compile Include="generic.cs" /> - <Compile Include="ikvm.cs" /> - <Compile Include="import.cs" /> - <Compile Include="iterators.cs" /> - <Compile Include="lambda.cs" /> - <Compile Include="linq.cs" /> - <Compile Include="literal.cs" /> - <Compile Include="location.cs" /> - <Compile Include="membercache.cs" /> - <Compile Include="method.cs" /> - <Compile Include="modifiers.cs" /> - <Compile Include="module.cs" /> - <Compile Include="namespace.cs" /> - <Compile Include="nullable.cs" /> - <Compile Include="parameter.cs" /> - <Compile Include="pending.cs" /> - <Compile Include="property.cs" /> - <Compile Include="reflection.cs" /> - <Compile Include="report.cs" /> - <Compile Include="settings.cs" /> - <Compile Include="statement.cs" /> - <Compile Include="support.cs" /> - <Compile Include="tuples.cs" /> - <Compile Include="typemanager.cs" /> - <Compile Include="typespec.cs" /> - <Compile Include="visit.cs" /> - <ProjectReference Include="$(SolutionDir)\msvc\scripts\genconsts.csproj"> - <Name>genconsts</Name> - <Project>{702AE2C0-71DD-4112-9A06-E4FABCA59986}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - <CopyToOutputDirectory>Never</CopyToOutputDirectory> - <Private>false</Private> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\mcs\jay\jay.vcxproj"> - <Name>jay</Name> - <Project>{5d485d32-3b9f-4287-ab24-c8da5b89f537}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - <CopyToOutputDirectory>Never</CopyToOutputDirectory> - <Private>false</Private> - </ProjectReference> - </ItemGroup> - <!--End of common files--> - <!-- @ALL_SOURCES@ --> - <!-- @COMMON_PROJECT_REFERENCES@ --> - <ItemGroup Condition=" '$(Platform)' == 'net_4_x' "> - <ProjectReference Include="../class/System.Core/System.Core.csproj" /> - <ProjectReference Include="../class/System.XML/System.Xml.csproj" /> - <ProjectReference Include="../class/System/System.csproj" /> - </ItemGroup> - <!-- @ALL_REFERENCES@ --> - <!-- @ALL_RESOURCES@ --> - <PropertyGroup> - <!-- Force the pre-build event to run after references have been resolved. The default - behavior is to run them before resolving references, which can cause things like - culevel.exe to be used before they have been built. --> - <PreBuildEventDependsOn>ResolveReferences</PreBuildEventDependsOn> - </PropertyGroup> - <PropertyGroup> - <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">$(ProjectDir)\..\jay\jay -ct < $(ProjectDir)\..\jay\skeleton.cs $(ProjectDir)\cs-parser.jay > $(ProjectDir)\cs-parser.cs</PreBuildEvent> - <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">$(ProjectDir)\..\jay\jay.exe -ct < $(ProjectDir)\..\jay\skeleton.cs $(ProjectDir)\cs-parser.jay > $(ProjectDir)\cs-parser.cs</PreBuildEvent> - </PropertyGroup> +<?xml version="1.0" encoding="utf-8"?> +<!-- WARNING: this file is autogenerated, don't modify it. Edit the .sources file of the corresponding assembly instead if you want to add/remove C# source files. --> +<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">net_4_x</Platform> + <ProjectGuid>{D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}</ProjectGuid> + <OutputType>Exe</OutputType> + <NoWarn>1699</NoWarn> + <LangVersion>latest</LangVersion> + <HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Windows_NT'">win32</HostPlatform> + <HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Unix' and $([System.IO.File]::Exists('/usr/lib/libc.dylib'))">macos</HostPlatform> + <HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Unix'">linux</HostPlatform> + <GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute> + <NoStdLib>False</NoStdLib> + <NoConfig>True</NoConfig> + <AssemblyName>mcs</AssemblyName> + <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> + </PropertyGroup> + <PropertyGroup> + <!-- Set AddAdditionalExplicitAssemblyReferences to false, otherwise if targetting .NET4.0, + Microsoft.NETFramework.props will force a dependency on the assembly System.Core. This + is a problem to compile the Mono mscorlib.dll --> + <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences> + </PropertyGroup> + <PropertyGroup Condition=" '$(Platform)' == 'net_4_x' "> + <OutputPath>./../class/lib/net_4_x-$(HostPlatform)</OutputPath> + <IntermediateOutputPath>./../class/obj/$(AssemblyName)-net_4_x-$(HostPlatform)</IntermediateOutputPath> + <DefineConstants>STATIC;NO_SYMBOL_WRITER;NO_AUTHENTICODE;MONO_FEATURE_THREAD_ABORT;MONO_FEATURE_PROCESS_START;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM</DefineConstants> + </PropertyGroup> + <!-- @ALL_PROFILE_PROPERTIES@ --> + <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <!-- TRACE is set only for Debug configuration, so inherit from platform-specific value --> + <DefineConstants>TRACE;$(DefineConstants)</DefineConstants> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + </PropertyGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <ItemGroup Condition=" '$(Platform)' == 'net_4_x' "> + <Compile Include="cs-parser.cs" /> + </ItemGroup> + <!-- @BUILT_SOURCES@ --> + <!--Common files--> + <ItemGroup> + <Compile Include="..\..\external\ikvm\reflect\AmbiguousMatchException.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Assembly.cs" /> + <Compile Include="..\..\external\ikvm\reflect\AssemblyName.cs" /> + <Compile Include="..\..\external\ikvm\reflect\BadImageFormatException.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Binder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\ConstructorInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\CustomAttributeData.cs" /> + <Compile Include="..\..\external\ikvm\reflect\CustomAttributeNamedArgument.cs" /> + <Compile Include="..\..\external\ikvm\reflect\CustomAttributeTypedArgument.cs" /> + <Compile Include="..\..\external\ikvm\reflect\CustomModifiers.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\AssemblyBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\ConstructorBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\CustomAttributeBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\CustomModifiersBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\EnumBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\Enums.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\EventBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\ExceptionHandler.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\FieldBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\ILGenerator.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\MethodBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\ModuleBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\OpCode.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\OpCodes.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\ParameterBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\PropertyBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\SignatureHelper.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\Tokens.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Emit\TypeBuilder.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Enums.cs" /> + <Compile Include="..\..\external\ikvm\reflect\EventInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\ExceptionHandlingClause.cs" /> + <Compile Include="..\..\external\ikvm\reflect\FieldInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\FieldSignature.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Fusion.cs" /> + <Compile Include="..\..\external\ikvm\reflect\GenericWrappers.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Impl\ITypeOwner.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Impl\SymbolSupport.cs" /> + <Compile Include="..\..\external\ikvm\reflect\InterfaceMapping.cs" /> + <Compile Include="..\..\external\ikvm\reflect\LocalVariableInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\ManifestResourceInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MarshalSpec.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MemberInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Metadata\CliHeader.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Metadata\MetadataRW.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Metadata\Tables.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MethodBase.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MethodBody.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MethodImplMap.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MethodInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\MethodSignature.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Missing.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Module.cs" /> + <Compile Include="..\..\external\ikvm\reflect\ParameterInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\ParameterModifier.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Projection.cs" /> + <Compile Include="..\..\external\ikvm\reflect\PropertyInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\PropertySignature.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\AssemblyReader.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\Authenticode.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\ByteReader.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\EventInfoImpl.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\Field.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\GenericTypeParameter.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\MetadataReader.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\Method.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\ModuleReader.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\PEReader.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\PropertyInfoImpl.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\ResourceModule.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Reader\TypeDefImpl.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Signature.cs" /> + <Compile Include="..\..\external\ikvm\reflect\StandAloneMethodSig.cs" /> + <Compile Include="..\..\external\ikvm\reflect\StrongNameKeyPair.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Type.cs" /> + <Compile Include="..\..\external\ikvm\reflect\TypeInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\TypeNameParser.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Universe.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Util.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\ByteBuffer.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\Heaps.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\MetadataWriter.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\ModuleWriter.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\PEWriter.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\ResourceSection.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\TextSection.cs" /> + <Compile Include="..\..\external\ikvm\reflect\Writer\VersionInfo.cs" /> + <Compile Include="..\..\external\ikvm\reflect\coreclr.cs" /> + <Compile Include="..\build\common\Consts.cs" /> + <Compile Include="..\class\Mono.CompilerServices.SymbolWriter\MonoSymbolFile.cs" /> + <Compile Include="..\class\Mono.CompilerServices.SymbolWriter\MonoSymbolTable.cs" /> + <Compile Include="..\class\Mono.CompilerServices.SymbolWriter\SourceMethodBuilder.cs" /> + <Compile Include="..\class\Mono.Security\Mono.Security.Cryptography\CryptoConvert.cs" /> + <Compile Include="..\tools\monop\outline.cs" /> + <Compile Include="AssemblyInfo.cs" /> + <Compile Include="anonymous.cs" /> + <Compile Include="argument.cs" /> + <Compile Include="assembly.cs" /> + <Compile Include="assign.cs" /> + <Compile Include="async.cs" /> + <Compile Include="attribute.cs" /> + <Compile Include="cfold.cs" /> + <Compile Include="class.cs" /> + <Compile Include="codegen.cs" /> + <Compile Include="complete.cs" /> + <Compile Include="const.cs" /> + <Compile Include="constant.cs" /> + <Compile Include="context.cs" /> + <Compile Include="convert.cs" /> + <Compile Include="cs-tokenizer.cs" /> + <Compile Include="decl.cs" /> + <Compile Include="delegate.cs" /> + <Compile Include="doc.cs" /> + <Compile Include="driver.cs" /> + <Compile Include="dynamic.cs" /> + <Compile Include="ecore.cs" /> + <Compile Include="enum.cs" /> + <Compile Include="eval.cs" /> + <Compile Include="expression.cs" /> + <Compile Include="field.cs" /> + <Compile Include="flowanalysis.cs" /> + <Compile Include="generic.cs" /> + <Compile Include="ikvm.cs" /> + <Compile Include="import.cs" /> + <Compile Include="iterators.cs" /> + <Compile Include="lambda.cs" /> + <Compile Include="linq.cs" /> + <Compile Include="literal.cs" /> + <Compile Include="location.cs" /> + <Compile Include="membercache.cs" /> + <Compile Include="method.cs" /> + <Compile Include="modifiers.cs" /> + <Compile Include="module.cs" /> + <Compile Include="namespace.cs" /> + <Compile Include="nullable.cs" /> + <Compile Include="parameter.cs" /> + <Compile Include="pending.cs" /> + <Compile Include="property.cs" /> + <Compile Include="reflection.cs" /> + <Compile Include="report.cs" /> + <Compile Include="settings.cs" /> + <Compile Include="statement.cs" /> + <Compile Include="support.cs" /> + <Compile Include="tuples.cs" /> + <Compile Include="typemanager.cs" /> + <Compile Include="typespec.cs" /> + <Compile Include="visit.cs" /> + <ProjectReference Include="$(SolutionDir)\msvc\scripts\genconsts.csproj"> + <Name>genconsts</Name> + <Project>{702AE2C0-71DD-4112-9A06-E4FABCA59986}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + <CopyToOutputDirectory>Never</CopyToOutputDirectory> + <Private>false</Private> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\mcs\jay\jay.vcxproj"> + <Name>jay</Name> + <Project>{5d485d32-3b9f-4287-ab24-c8da5b89f537}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + <CopyToOutputDirectory>Never</CopyToOutputDirectory> + <Private>false</Private> + </ProjectReference> + </ItemGroup> + <!--End of common files--> + <!-- @ALL_SOURCES@ --> + <!-- @COMMON_PROJECT_REFERENCES@ --> + <ItemGroup Condition=" '$(Platform)' == 'net_4_x' "> + <ProjectReference Include="../class/System.Core/System.Core.csproj" /> + <ProjectReference Include="../class/System.XML/System.Xml.csproj" /> + <ProjectReference Include="../class/System/System.csproj" /> + </ItemGroup> + <!-- @ALL_REFERENCES@ --> + <!-- @ALL_RESOURCES@ --> + <PropertyGroup> + <!-- Force the pre-build event to run after references have been resolved. The default + behavior is to run them before resolving references, which can cause things like + culevel.exe to be used before they have been built. --> + <PreBuildEventDependsOn>ResolveReferences</PreBuildEventDependsOn> + </PropertyGroup> + <PropertyGroup> + <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">$(ProjectDir)\..\jay\jay -ct < $(ProjectDir)\..\jay\skeleton.cs $(ProjectDir)\cs-parser.jay > $(ProjectDir)\cs-parser.cs</PreBuildEvent> + <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">$(ProjectDir)\..\jay\jay.exe -ct < $(ProjectDir)\..\jay\skeleton.cs $(ProjectDir)\cs-parser.jay > $(ProjectDir)\cs-parser.cs</PreBuildEvent> + </PropertyGroup> </Project> \ No newline at end of file diff --git a/mcs/mcs/mcs.sln b/mcs/mcs/mcs.sln index 45c4a3b107..daff83d709 100644 --- a/mcs/mcs/mcs.sln +++ b/mcs/mcs/mcs.sln @@ -1,23 +1,23 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mcs", "mcs.csproj", "{D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - AST|Any CPU = Debug - AST|Any CPU - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug - AST|Any CPU.ActiveCfg = Debug - AST|Any CPU - {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug - AST|Any CPU.Build.0 = Debug - AST|Any CPU - {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mcs", "mcs.csproj", "{D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - AST|Any CPU = Debug - AST|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug - AST|Any CPU.ActiveCfg = Debug - AST|Any CPU + {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug - AST|Any CPU.Build.0 = Debug - AST|Any CPU + {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4A01C5B-A1B5-48F5-BB5B-D2E1BD236E56}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/mcs/mcs/tuples.cs b/mcs/mcs/tuples.cs index 5226b9843e..0b56859615 100644 --- a/mcs/mcs/tuples.cs +++ b/mcs/mcs/tuples.cs @@ -447,6 +447,7 @@ namespace Mono.CSharp { Expression source; List<Expression> targetExprs; + List<Expression> tempExprs; List<BlockVariable> variables; Expression instance; @@ -455,6 +456,8 @@ namespace Mono.CSharp this.source = source; this.targetExprs = targetExprs; this.loc = loc; + + tempExprs = new List<Expression> (); } public TupleDeconstruct (List<BlockVariable> variables, Expression source, Location loc) @@ -462,6 +465,8 @@ namespace Mono.CSharp this.source = source; this.variables = variables; this.loc = loc; + + tempExprs = new List<Expression> (); } public override Expression CreateExpressionTree (ResolveContext ec) @@ -507,6 +512,15 @@ namespace Mono.CSharp instance = expr_variable.CreateReferenceExpression (rc, loc); } + var element_srcs = new List<Expression> (); + var src_names = new List<string> (); + for (int i = 0; i < target_count; ++i) { + var element_src = tupleLiteral == null ? new MemberAccess (instance, NamedTupleSpec.GetElementPropertyName (i)) : tupleLiteral.Elements [i].Expr; + element_srcs.Add (element_src); + if (element_src is VariableReference) + src_names.Add ((element_src as VariableReference)?.Name); + } + for (int i = 0; i < target_count; ++i) { var tle = src_type.TypeArguments [i]; @@ -537,8 +551,17 @@ namespace Mono.CSharp variable.PrepareAssignmentAnalysis ((BlockContext)rc); } - var element_src = tupleLiteral == null ? new MemberAccess (instance, NamedTupleSpec.GetElementPropertyName (i)) : tupleLiteral.Elements [i].Expr; - targetExprs [i] = new SimpleAssign (targetExprs [i], element_src).Resolve (rc); + var element_target = (targetExprs [i] as SimpleName)?.LookupNameExpression (rc, MemberLookupRestrictions.None); + + if (element_target != null && src_names.Contains ((element_target as VariableReference)?.Name)) { + var tempType = element_target.Resolve (rc).Type; + + var temp = new LocalTemporary (tempType); + tempExprs.Add (new SimpleAssign (temp, element_srcs [i]).Resolve (rc)); + targetExprs [i] = new SimpleAssign (targetExprs [i], temp).Resolve (rc); + } else { + targetExprs [i] = new SimpleAssign (targetExprs [i], element_srcs [i]).Resolve (rc); + } } eclass = ExprClass.Value; @@ -572,8 +595,23 @@ namespace Mono.CSharp if (instance != null) ((ExpressionStatement)source).EmitStatement (ec); - foreach (ExpressionStatement expr in targetExprs) + foreach (ExpressionStatement expr in tempExprs) { + var temp = (expr as Assign)?.Target as LocalTemporary; + if (temp == null) + continue; + + temp.AddressOf (ec, AddressOp.LoadStore); + ec.Emit (OpCodes.Initobj, temp.Type); expr.Emit (ec); + } + + foreach (ExpressionStatement expr in targetExprs) { + expr.Emit (ec); + + var temp = (expr as Assign)?.Source as LocalTemporary; + if (temp != null) + temp.Release (ec); + } var ctor = MemberCache.FindMember (type, MemberFilter.Constructor (null), BindingRestriction.DeclaredOnly | BindingRestriction.InstanceOnly) as MethodSpec; ec.Emit (OpCodes.Newobj, ctor); @@ -589,9 +627,24 @@ namespace Mono.CSharp if (instance != null) ((ExpressionStatement) source).EmitStatement (ec); - - foreach (ExpressionStatement expr in targetExprs) + + foreach (ExpressionStatement expr in tempExprs) { + var temp = (expr as Assign)?.Target as LocalTemporary; + if (temp == null) + continue; + + temp.AddressOf (ec, AddressOp.LoadStore); + ec.Emit (OpCodes.Initobj, temp.Type); expr.EmitStatement (ec); + } + + foreach (ExpressionStatement expr in targetExprs) { + expr.EmitStatement (ec); + + var temp = (expr as Assign)?.Source as LocalTemporary; + if (temp != null) + temp.Release (ec); + } } public void Emit (EmitContext ec, bool leave_copy) diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id new file mode 100644 index 0000000000..fa9490d13c --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id @@ -0,0 +1 @@ +b22c1001f96026227bfeb8765492c71397b2a250 \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CSharp.Core.targets b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CSharp.Core.targets new file mode 100755 index 0000000000..87dae04cf5 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CSharp.Core.targets @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="Microsoft.Managed.Core.targets"/> + + <Target Name="CoreCompile" + Inputs="$(MSBuildAllProjects); + @(Compile); + @(_CoreCompileResourceInputs); + $(ApplicationIcon); + $(AssemblyOriginatorKeyFile); + @(ReferencePathWithRefAssemblies); + @(CompiledLicenseFile); + @(LinkResource); + @(EmbeddedDocumentation); + $(Win32Resource); + $(Win32Manifest); + @(CustomAdditionalCompileInputs); + $(ResolvedCodeAnalysisRuleSet); + @(AdditionalFiles); + @(EmbeddedFiles)" + Outputs="@(DocFileItem); + @(IntermediateAssembly); + @(IntermediateRefAssembly); + @(_DebugSymbolsIntermediatePath); + $(NonExistentFile); + @(CustomAdditionalCompileOutputs)" + Returns="@(CscCommandLineArgs)" + DependsOnTargets="$(CoreCompileDependsOn);_BeforeVBCSCoreCompile"> + <!-- These two compiler warnings are raised when a reference is bound to a different version + than specified in the assembly reference version number. MSBuild raises the same warning in this case, + so the compiler warning would be redundant. --> + <PropertyGroup Condition="('$(TargetFrameworkVersion)' != 'v1.0') and ('$(TargetFrameworkVersion)' != 'v1.1')"> + <NoWarn>$(NoWarn);1701;1702</NoWarn> + </PropertyGroup> + + <PropertyGroup> + <!-- To match historical behavior, when inside VS11+ disable the warning from csc.exe indicating that no sources were passed in--> + <NoWarn Condition="'$(BuildingInsideVisualStudio)' == 'true' AND '$(VisualStudioVersion)' != '' AND '$(VisualStudioVersion)' > '10.0'">$(NoWarn);2008</NoWarn> + </PropertyGroup> + + <PropertyGroup> + <!-- If the user has specified AppConfigForCompiler, we'll use it. If they have not, but they set UseAppConfigForCompiler, + then we'll use AppConfig --> + <AppConfigForCompiler Condition="'$(AppConfigForCompiler)' == '' AND '$(UseAppConfigForCompiler)' == 'true'">$(AppConfig)</AppConfigForCompiler> + + <!-- If we are targeting winmdobj we want to specifically the pdbFile property since we do not want it to collide with the output of winmdexp--> + <PdbFile Condition="'$(PdbFile)' == '' AND '$(OutputType)' == 'winmdobj' AND '$(_DebugSymbolsProduced)' == 'true'">$(IntermediateOutputPath)$(TargetName).compile.pdb</PdbFile> + </PropertyGroup> + + <PropertyGroup> + <LangVersion Condition="'$(LangVersion)' == '' AND + (('$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(TargetFrameworkVersion)' == 'v3.0') OR + ('$(TargetFrameworkIdentifier)' == '.NETStandard' AND '$(TargetFrameworkVersion)' == 'v2.1'))">preview</LangVersion> + </PropertyGroup> + + <!-- Condition is to filter out the _CoreCompileResourceInputs so that it doesn't pass in culture resources to the compiler --> + <Csc Condition="'%(_CoreCompileResourceInputs.WithCulture)' != 'true'" + AdditionalLibPaths="$(AdditionalLibPaths)" + AddModules="@(AddModules)" + AdditionalFiles="@(AdditionalFiles)" + AllowUnsafeBlocks="$(AllowUnsafeBlocks)" + Analyzers="@(Analyzer)" + ApplicationConfiguration="$(AppConfigForCompiler)" + BaseAddress="$(BaseAddress)" + CheckForOverflowUnderflow="$(CheckForOverflowUnderflow)" + ChecksumAlgorithm="$(ChecksumAlgorithm)" + CodeAnalysisRuleSet="$(ResolvedCodeAnalysisRuleSet)" + CodePage="$(CodePage)" + DebugType="$(DebugType)" + DefineConstants="$(DefineConstants)" + DelaySign="$(DelaySign)" + DisabledWarnings="$(NoWarn)" + DisableSdkPath="$(DisableSdkPath)" + DocumentationFile="@(DocFileItem)" + EmbedAllSources="$(EmbedAllSources)" + EmbeddedFiles="@(EmbeddedFiles)" + EmitDebugInformation="$(DebugSymbols)" + EnvironmentVariables="$(CscEnvironment)" + ErrorEndLocation="$(ErrorEndLocation)" + ErrorLog="$(ErrorLog)" + ErrorReport="$(ErrorReport)" + Features="$(Features)" + FileAlignment="$(FileAlignment)" + GenerateFullPaths="$(GenerateFullPaths)" + HighEntropyVA="$(HighEntropyVA)" + Instrument="$(Instrument)" + KeyContainer="$(KeyContainerName)" + KeyFile="$(KeyOriginatorFile)" + LangVersion="$(LangVersion)" + LinkResources="@(LinkResource)" + MainEntryPoint="$(StartupObject)" + ModuleAssemblyName="$(ModuleAssemblyName)" + NoConfig="true" + NoLogo="$(NoLogo)" + NoStandardLib="$(NoCompilerStandardLib)" + NoWin32Manifest="$(NoWin32Manifest)" + NullableContextOptions="$(NullableContextOptions)" + Optimize="$(Optimize)" + Deterministic="$(Deterministic)" + PublicSign="$(PublicSign)" + OutputAssembly="@(IntermediateAssembly)" + OutputRefAssembly="@(IntermediateRefAssembly)" + PdbFile="$(PdbFile)" + Platform="$(PlatformTarget)" + Prefer32Bit="$(Prefer32Bit)" + PreferredUILang="$(PreferredUILang)" + ProvideCommandLineArgs="$(ProvideCommandLineArgs)" + References="@(ReferencePathWithRefAssemblies)" + RefOnly="$(ProduceOnlyReferenceAssembly)" + ReportAnalyzer="$(ReportAnalyzer)" + Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile)" + ResponseFiles="$(CompilerResponseFile)" + RuntimeMetadataVersion="$(RuntimeMetadataVersion)" + SharedCompilationId="$(SharedCompilationId)" + SkipCompilerExecution="$(SkipCompilerExecution)" + Sources="@(Compile)" + SubsystemVersion="$(SubsystemVersion)" + TargetType="$(OutputType)" + ToolExe="$(CscToolExe)" + ToolPath="$(CscToolPath)" + TreatWarningsAsErrors="$(TreatWarningsAsErrors)" + UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)" + UseSharedCompilation="$(UseSharedCompilation)" + Utf8Output="$(Utf8Output)" + VsSessionGuid="$(VsSessionGuid)" + WarningLevel="$(WarningLevel)" + WarningsAsErrors="$(WarningsAsErrors)" + WarningsNotAsErrors="$(WarningsNotAsErrors)" + Win32Icon="$(ApplicationIcon)" + Win32Manifest="$(Win32Manifest)" + Win32Resource="$(Win32Resource)" + PathMap="$(PathMap)" + SourceLink="$(SourceLink)"> + <Output TaskParameter="CommandLineArgs" ItemName="CscCommandLineArgs" /> + </Csc> + + <ItemGroup> + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + </ItemGroup> + + <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" /> + </Target> +</Project> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.Scripting.dll b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.Scripting.dll new file mode 100755 index 0000000000000000000000000000000000000000..434b4afa55e968e447b24b2c0a06a8cf56248198 GIT binary patch literal 31096 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 ZQ1$+=l}<Abt;$-_^`{RWG=W9L{{fn+K~4Yw literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id new file mode 100644 index 0000000000..a9d8a6ae52 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id @@ -0,0 +1 @@ +38948683e151f6009580f20359e51270510c49d5 \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id new file mode 100644 index 0000000000..b44cf9dbbc --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id @@ -0,0 +1 @@ +5cb9029bf1147f755252018acf04c7ea947b214a \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id new file mode 100644 index 0000000000..be85a8c859 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id @@ -0,0 +1 @@ +b06cf34859cb7c700dfd8f87f8038fd2efbfa21c \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.dll.REMOVED.git-id new file mode 100644 index 0000000000..9986f18900 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.CodeAnalysis.dll.REMOVED.git-id @@ -0,0 +1 @@ +7696c03b218eb7d3c30c858963d98687f17f8d9e \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Managed.Core.targets b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Managed.Core.targets new file mode 100755 index 0000000000..ec8412cd71 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.Managed.Core.targets @@ -0,0 +1,155 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <!-- + Common targets for managed compilers. + --> + <UsingTask TaskName="Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots" AssemblyFile="$(MSBuildThisFileDirectory)Microsoft.Build.Tasks.CodeAnalysis.dll" /> + + <Target Name="ShimReferencePathsWhenCommonTargetsDoesNotUnderstandReferenceAssemblies" + BeforeTargets="CoreCompile" + Condition="'@(ReferencePathWithRefAssemblies)' == ''"> + <!-- + FindReferenceAssembliesForReferences target in Common targets populate this item + since dev15.3. The compiler targets may be used (via NuGet package) on earlier MSBuilds. + If the ReferencePathWithRefAssemblies item is not populated, just use ReferencePaths + (implementation assemblies) as they are. + + Since XAML inner build runs CoreCompile directly (instead of Compile target), + it also doesn't invoke FindReferenceAssembliesForReferences listed in CompileDependsOn. + In that case we also populate ReferencePathWithRefAssemblies with implementation assemblies. + --> + <ItemGroup> + <ReferencePathWithRefAssemblies Include="@(ReferencePath)" /> + </ItemGroup> + </Target> + + <Target Name="_BeforeVBCSCoreCompile" + DependsOnTargets="ShimReferencePathsWhenCommonTargetsDoesNotUnderstandReferenceAssemblies"> + + <ItemGroup Condition="'$(TargetingClr2Framework)' == 'true'"> + <ReferencePathWithRefAssemblies> + <EmbedInteropTypes /> + </ReferencePathWithRefAssemblies> + </ItemGroup> + + <!-- Prefer32Bit was introduced in .NET 4.5. Set it to false if we are targeting 4.0 --> + <PropertyGroup Condition="('$(TargetFrameworkVersion)' == 'v4.0')"> + <Prefer32Bit>false</Prefer32Bit> + </PropertyGroup> + + <!-- TODO: Remove this ItemGroup once it has been moved to "_GenerateCompileInputs" target in Microsoft.Common.CurrentVersion.targets. + https://github.com/dotnet/roslyn/issues/12223 --> + <ItemGroup Condition="('$(AdditionalFileItemNames)' != '')"> + <AdditionalFileItems Include="$(AdditionalFileItemNames)" /> + <AdditionalFiles Include="@(%(AdditionalFileItems.Identity))" /> + </ItemGroup> + + <PropertyGroup Condition="'$(UseSharedCompilation)' == ''"> + <UseSharedCompilation>true</UseSharedCompilation> + </PropertyGroup> + </Target> + + <!-- + ======================== + DeterministicSourcePaths + ======================== + + Unless specified otherwise enable deterministic source root (PathMap) when building deterministically on CI server, but not for local builds. + In order for the debugger to find source files when debugging a locally built binary the PDB must contain original, unmapped local paths. + --> + <PropertyGroup> + <DeterministicSourcePaths Condition="'$(DeterministicSourcePaths)' == '' and '$(Deterministic)' == 'true' and '$(ContinuousIntegrationBuild)' == 'true'">true</DeterministicSourcePaths> + </PropertyGroup> + + <!-- + ========== + SourceRoot + ========== + + All source files of the project are expected to be located under one of the directories specified by SourceRoot item group. + This target collects all SourceRoots from various sources. + + This target calculates final local path for each SourceRoot and sets SourceRoot.MappedPath metadata accordingly. + The final path is a path with deterministic prefix when DeterministicSourcePaths is true, and the original path otherwise. + In addition, the target validates and deduplicates the SourceRoot items. + + InitializeSourceControlInformation is an msbuild target that ensures the SourceRoot items are populated from source control. + The target is available only if SourceControlInformationFeatureSupported is true. + + A consumer of SourceRoot.MappedPath metadata, such as Source Link generator, shall depend on this target. + --> + + <Target Name="InitializeSourceRootMappedPaths" + DependsOnTargets="_InitializeSourceRootMappedPathsFromSourceControl"> + + <ItemGroup Condition="'@(_MappedSourceRoot)' != ''"> + <_MappedSourceRoot Remove="@(_MappedSourceRoot)" /> + </ItemGroup> + + <Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots SourceRoots="@(SourceRoot)" Deterministic="$(DeterministicSourcePaths)"> + <Output TaskParameter="MappedSourceRoots" ItemName="_MappedSourceRoot" /> + </Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots> + + <ItemGroup> + <SourceRoot Remove="@(SourceRoot)" /> + <SourceRoot Include="@(_MappedSourceRoot)" /> + </ItemGroup> + </Target> + + <!-- + Declare that target InitializeSourceRootMappedPaths that populates MappedPaths metadata on SourceRoot items is available. + --> + <PropertyGroup> + <SourceRootMappedPathsFeatureSupported>true</SourceRootMappedPathsFeatureSupported> + </PropertyGroup> + + <!-- + If InitializeSourceControlInformation target isn't supported, we just continue without invoking that synchronization target. + We'll proceed with SourceRoot (and other source control properties) provided by the user (or blank). + --> + <Target Name="_InitializeSourceRootMappedPathsFromSourceControl" + DependsOnTargets="InitializeSourceControlInformation" + Condition="'$(SourceControlInformationFeatureSupported)' == 'true'" /> + + <!-- + ======= + PathMap + ======= + + If DeterministicSourcePaths is true sets PathMap based on SourceRoot.MappedPaths. + + This target requires SourceRoot to be initialized in order to calculate the PathMap. + If SourceRoot doesn't contain any top-level roots an error is reported. + --> + + <Target Name="_SetPathMapFromSourceRoots" + DependsOnTargets="InitializeSourceRootMappedPaths" + BeforeTargets="CoreCompile" + Condition="'$(DeterministicSourcePaths)' == 'true'"> + + <ItemGroup> + <_TopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> + </ItemGroup> + + <PropertyGroup Condition="'@(_TopLevelSourceRoot)' != ''"> + <!-- TODO: Report error/warning if /pathmap doesn't cover all emitted source paths: https://github.com/dotnet/roslyn/issues/23969 --> + + <!-- TODO: PathMap should accept and ignore empty mapping: https://github.com/dotnet/roslyn/issues/23523 --> + <PathMap Condition="'$(PathMap)' != ''">,$(PathMap)</PathMap> + + <!-- + Prepend the SourceRoot.MappedPath values to PathMap, if it already has a value. + For each emitted source path the compiler applies the first mapping that matches the path. + PathMap values set previously will thus only be applied if the mapping provided by + SourceRoot.MappedPath doesn't match. Since SourceRoot.MappedPath is also used by SourceLink + preferring it over manually set PathMap ensures that PathMap is consistent with SourceLink. + + TODO: quote the paths to avoid misinterpreting ',' and '=' in them as separators, + but quoting doesn't currently work (see https://github.com/dotnet/roslyn/issues/22835). + --> + <PathMap>@(_TopLevelSourceRoot->'%(Identity)=%(MappedPath)', ',')$(PathMap)</PathMap> + </PropertyGroup> + </Target> + +</Project> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.VisualBasic.Core.targets b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.VisualBasic.Core.targets new file mode 100755 index 0000000000..0d7fb98e40 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/Microsoft.VisualBasic.Core.targets @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="Microsoft.Managed.Core.targets"/> + + <Target Name="CoreCompile" + Inputs="$(MSBuildAllProjects); + @(Compile); + @(_CoreCompileResourceInputs); + $(ApplicationIcon); + $(AssemblyOriginatorKeyFile); + @(ReferencePathWithRefAssemblies); + @(CompiledLicenseFile); + @(LinkResource); + @(EmbeddedDocumentation); + $(Win32Resource); + $(Win32Manifest); + @(CustomAdditionalCompileInputs); + $(ResolvedCodeAnalysisRuleSet); + @(AdditionalFiles); + @(EmbeddedFiles)" + Outputs="@(DocFileItem); + @(IntermediateAssembly); + @(IntermediateRefAssembly); + @(_DebugSymbolsIntermediatePath); + $(NonExistentFile); + @(CustomAdditionalCompileOutputs)" + Returns="@(VbcCommandLineArgs)" + DependsOnTargets="$(CoreCompileDependsOn);_BeforeVBCSCoreCompile"> + <PropertyGroup> + <_NoWarnings Condition="'$(WarningLevel)' == '0'">true</_NoWarnings> + <_NoWarnings Condition="'$(WarningLevel)' == '1'">false</_NoWarnings> + </PropertyGroup> + + <PropertyGroup> + <!-- If we are targeting winmdobj we want to specifically the pdbFile property since we do not want it to collide with the output of winmdexp--> + <PdbFile Condition="'$(PdbFile)' == '' AND '$(OutputType)' == 'winmdobj' AND '$(DebugSymbols)' == 'true'">$(IntermediateOutputPath)$(TargetName).compile.pdb</PdbFile> + </PropertyGroup> + + <!-- Condition is to filter out the _CoreCompileResourceInputs so that it doesn't pass in culture resources to the compiler --> + <Vbc Condition="'%(_CoreCompileResourceInputs.WithCulture)' != 'true'" + AdditionalLibPaths="$(AdditionalLibPaths)" + AddModules="@(AddModules)" + AdditionalFiles="@(AdditionalFiles)" + Analyzers="@(Analyzer)" + BaseAddress="$(BaseAddress)" + ChecksumAlgorithm="$(ChecksumAlgorithm)" + CodeAnalysisRuleSet="$(ResolvedCodeAnalysisRuleSet)" + CodePage="$(CodePage)" + DebugType="$(DebugType)" + DefineConstants="$(FinalDefineConstants)" + DelaySign="$(DelaySign)" + DisableSdkPath="$(DisableSdkPath)" + DisabledWarnings="$(NoWarn)" + DocumentationFile="@(DocFileItem)" + EmbedAllSources="$(EmbedAllSources)" + EmbeddedFiles="@(EmbeddedFiles)" + EmitDebugInformation="$(DebugSymbols)" + EnvironmentVariables="$(VbcEnvironment)" + ErrorLog="$(ErrorLog)" + ErrorReport="$(ErrorReport)" + Features="$(Features)" + FileAlignment="$(FileAlignment)" + GenerateDocumentation="$(GenerateDocumentation)" + HighEntropyVA="$(HighEntropyVA)" + Imports="@(Import)" + Instrument="$(Instrument)" + KeyContainer="$(KeyContainerName)" + KeyFile="$(KeyOriginatorFile)" + LangVersion="$(LangVersion)" + LinkResources="@(LinkResource)" + MainEntryPoint="$(StartupObject)" + ModuleAssemblyName="$(ModuleAssemblyName)" + NoConfig="true" + NoStandardLib="$(NoCompilerStandardLib)" + NoVBRuntimeReference="$(NoVBRuntimeReference)" + NoWarnings="$(_NoWarnings)" + NoWin32Manifest="$(NoWin32Manifest)" + Optimize="$(Optimize)" + Deterministic="$(Deterministic)" + PublicSign="$(PublicSign)" + OptionCompare="$(OptionCompare)" + OptionExplicit="$(OptionExplicit)" + OptionInfer="$(OptionInfer)" + OptionStrict="$(OptionStrict)" + OptionStrictType="$(OptionStrictType)" + OutputAssembly="@(IntermediateAssembly)" + OutputRefAssembly="@(IntermediateRefAssembly)" + PdbFile="$(PdbFile)" + Platform="$(PlatformTarget)" + Prefer32Bit="$(Prefer32Bit)" + PreferredUILang="$(PreferredUILang)" + ProvideCommandLineArgs="$(ProvideCommandLineArgs)" + References="@(ReferencePathWithRefAssemblies)" + RefOnly="$(ProduceOnlyReferenceAssembly)" + RemoveIntegerChecks="$(RemoveIntegerChecks)" + ReportAnalyzer="$(ReportAnalyzer)" + Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile)" + ResponseFiles="$(CompilerResponseFile)" + RootNamespace="$(RootNamespace)" + RuntimeMetadataVersion="$(RuntimeMetadataVersion)" + SdkPath="$(FrameworkPathOverride)" + SharedCompilationId="$(SharedCompilationId)" + SkipCompilerExecution="$(SkipCompilerExecution)" + Sources="@(Compile)" + SubsystemVersion="$(SubsystemVersion)" + TargetCompactFramework="$(TargetCompactFramework)" + TargetType="$(OutputType)" + ToolExe="$(VbcToolExe)" + ToolPath="$(VbcToolPath)" + TreatWarningsAsErrors="$(TreatWarningsAsErrors)" + UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)" + UseSharedCompilation="$(UseSharedCompilation)" + Utf8Output="$(Utf8Output)" + VBRuntimePath="$(VBRuntimePath)" + Verbosity="$(VbcVerbosity)" + VsSessionGuid="$(VsSessionGuid)" + WarningsAsErrors="$(WarningsAsErrors)" + WarningsNotAsErrors="$(WarningsNotAsErrors)" + Win32Icon="$(ApplicationIcon)" + Win32Manifest="$(Win32Manifest)" + Win32Resource="$(Win32Resource)" + VBRuntime="$(VBRuntime)" + PathMap="$(PathMap)" + SourceLink="$(SourceLink)"> + <Output TaskParameter="CommandLineArgs" ItemName="VbcCommandLineArgs" /> + </Vbc> + <ItemGroup> + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + </ItemGroup> + + <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" /> + </Target> +</Project> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Collections.Immutable.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Collections.Immutable.dll.REMOVED.git-id new file mode 100644 index 0000000000..8b2bc9cb91 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Collections.Immutable.dll.REMOVED.git-id @@ -0,0 +1 @@ +049149f17929322dd246d994780d0399a24cf90f \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Memory.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Memory.dll.REMOVED.git-id new file mode 100644 index 0000000000..dc5dae02ca --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Memory.dll.REMOVED.git-id @@ -0,0 +1 @@ +2d54316954f4200997856156289df2e6115d51e0 \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Reflection.Metadata.dll.REMOVED.git-id b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Reflection.Metadata.dll.REMOVED.git-id new file mode 100644 index 0000000000..4ef79f39fb --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Reflection.Metadata.dll.REMOVED.git-id @@ -0,0 +1 @@ +52082366b0a69847cb0e6351ad4ac3690746f6b5 \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Runtime.CompilerServices.Unsafe.dll b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Runtime.CompilerServices.Unsafe.dll new file mode 100755 index 0000000000000000000000000000000000000000..3156239266db9cceede249731f00c3822e479a1f GIT binary patch literal 23600 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 OyIXQg_#$)@0sTLk9O=pc literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Threading.Tasks.Extensions.dll b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/System.Threading.Tasks.Extensions.dll new file mode 100755 index 0000000000000000000000000000000000000000..a99c9077b12a1e25e93165fb38e5e2bad5f8461e GIT binary patch literal 33008 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 aeU{Qj_Ga<9gS}oKh!eN!P^b7sng0WqAbHLJ literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe new file mode 100755 index 0000000000000000000000000000000000000000..46a80f814e05c3e9afdaa8e3f30c8778a22a792f GIT binary patch literal 89472 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ℑbF*bt247FK@|WG7dELQi1qo~ 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 literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe.config b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe.config new file mode 100755 index 0000000000..3a9d87c838 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/VBCSCompiler.exe.config @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<configuration> + <startup> + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> + </startup> + <runtime> + <gcServer enabled="true" /> + <gcConcurrent enabled="false" /> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.CSharp" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.VisualBasic" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.4.3.0" newVersion="1.4.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> + </dependentAssembly> + </assemblyBinding> + </runtime> + <appSettings> + <!-- Number of seconds with no activity before the server times out and closes. + Set to -1 to never shut down the server. --> + <add key="keepalive" value="600" /> + </appSettings> +</configuration> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe new file mode 100755 index 0000000000000000000000000000000000000000..756edebeb052564ebd9e63864fd7bffed2846f34 GIT binary patch literal 56176 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 ajrJeTTW$S#WJ_7+SG!jqvtbJfe*71z{uCkr literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe.config b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe.config new file mode 100755 index 0000000000..76bdc1e573 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.exe.config @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<configuration> + <startup> + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> + </startup> + <runtime> + <gcServer enabled="true" /> + <gcConcurrent enabled="false" /> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.CSharp" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.4.3.0" newVersion="1.4.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> + </dependentAssembly> + </assemblyBinding> + </runtime> +</configuration> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.rsp b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.rsp new file mode 100755 index 0000000000..be7661d074 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csc.rsp @@ -0,0 +1,46 @@ +# Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +# This file contains command-line options that the C# +# command line compiler (CSC) will process as part +# of every compilation, unless the "/noconfig" option +# is specified. + +# Reference the common Framework libraries +/r:Accessibility.dll +/r:Microsoft.CSharp.dll +/r:System.Configuration.dll +/r:System.Configuration.Install.dll +/r:System.Core.dll +/r:System.Data.dll +/r:System.Data.DataSetExtensions.dll +/r:System.Data.Linq.dll +/r:System.Data.OracleClient.dll +/r:System.Deployment.dll +/r:System.Design.dll +/r:System.DirectoryServices.dll +/r:System.dll +/r:System.Drawing.Design.dll +/r:System.Drawing.dll +/r:System.EnterpriseServices.dll +/r:System.Management.dll +/r:System.Messaging.dll +/r:System.Runtime.Remoting.dll +/r:System.Runtime.Serialization.dll +/r:System.Runtime.Serialization.Formatters.Soap.dll +/r:System.Security.dll +/r:System.ServiceModel.dll +/r:System.ServiceModel.Web.dll +/r:System.ServiceProcess.dll +/r:System.Transactions.dll +/r:System.Web.dll +/r:System.Web.Extensions.Design.dll +/r:System.Web.Extensions.dll +/r:System.Web.Mobile.dll +/r:System.Web.RegularExpressions.dll +/r:System.Web.Services.dll +/r:System.Windows.Forms.dll +/r:System.Workflow.Activities.dll +/r:System.Workflow.ComponentModel.dll +/r:System.Workflow.Runtime.dll +/r:System.Xml.dll +/r:System.Xml.Linq.dll diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe new file mode 100755 index 0000000000000000000000000000000000000000..dc8e396b545d103f9232fca058ea58bf9ae84858 GIT binary patch literal 16240 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 Lm3wI?0-^r^)4PaH literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe.config b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe.config new file mode 100755 index 0000000000..62b23a3493 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.exe.config @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<configuration> + <startup> + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> + </startup> + <runtime> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.CSharp" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.CSharp.Scripting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.Scripting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.4.3.0" newVersion="1.4.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> + </dependentAssembly> + </assemblyBinding> + </runtime> +</configuration> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.rsp b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.rsp new file mode 100755 index 0000000000..767dcdb0a7 --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/csi.rsp @@ -0,0 +1,15 @@ +/r:System.dll +/r:System.Core.dll +/r:Microsoft.CSharp.dll +/r:Facades/System.Runtime.dll +/r:Facades/netstandard.dll +/u:System +/u:System.IO +/u:System.Collections.Generic +/u:System.Console +/u:System.Diagnostics +/u:System.Dynamic +/u:System.Linq +/u:System.Linq.Expressions +/u:System.Text +/u:System.Threading.Tasks diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe new file mode 100755 index 0000000000000000000000000000000000000000..bd89d41669379ea35839efdb5c29b780f53a6370 GIT binary patch literal 56176 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 K5t9fK>AwKW=r=V0 literal 0 HcmV?d00001 diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe.config b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe.config new file mode 100755 index 0000000000..6226f3587e --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.exe.config @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. --> +<configuration> + <startup> + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> + </startup> + <runtime> + <gcServer enabled="true" /> + <gcConcurrent enabled="false" /> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Microsoft.CodeAnalysis.VisualBasic" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.4.3.0" newVersion="1.4.3.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" /> + </dependentAssembly> + </assemblyBinding> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> + </dependentAssembly> + </assemblyBinding> + </runtime> +</configuration> \ No newline at end of file diff --git a/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.rsp b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.rsp new file mode 100755 index 0000000000..c56b36c89b --- /dev/null +++ b/mcs/packages/mnt/jenkins/workspace/release-tarball-mono/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0-release/vbc.rsp @@ -0,0 +1,55 @@ +# Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +# This file contains command-line options that the VB +# command line compiler (VBC) will process as part +# of every compilation, unless the "/noconfig" option +# is specified. + +# Reference the common Framework libraries +/r:Accessibility.dll +/r:System.Configuration.dll +/r:System.Configuration.Install.dll +/r:System.Data.dll +/r:System.Data.OracleClient.dll +/r:System.Deployment.dll +/r:System.Design.dll +/r:System.DirectoryServices.dll +/r:System.dll +/r:System.Drawing.Design.dll +/r:System.Drawing.dll +/r:System.EnterpriseServices.dll +/r:System.Management.dll +/r:System.Messaging.dll +/r:System.Runtime.Remoting.dll +/r:System.Runtime.Serialization.Formatters.Soap.dll +/r:System.Security.dll +/r:System.ServiceProcess.dll +/r:System.Transactions.dll +/r:System.Web.dll +/r:System.Web.Mobile.dll +/r:System.Web.RegularExpressions.dll +/r:System.Web.Services.dll +/r:System.Windows.Forms.dll +/r:System.Xml.dll + +/r:System.Workflow.Activities.dll +/r:System.Workflow.ComponentModel.dll +/r:System.Workflow.Runtime.dll +/r:System.Runtime.Serialization.dll +/r:System.ServiceModel.dll + +/r:System.Core.dll +/r:System.Xml.Linq.dll +/r:System.Data.Linq.dll +/r:System.Data.DataSetExtensions.dll +/r:System.Web.Extensions.dll +/r:System.Web.Extensions.Design.dll +/r:System.ServiceModel.Web.dll + +# Import System and Microsoft.VisualBasic +/imports:System +/imports:Microsoft.VisualBasic +/imports:System.Linq +/imports:System.Xml.Linq + +/optioninfer+ diff --git a/mcs/tests/test-tuple-11.cs b/mcs/tests/test-tuple-11.cs new file mode 100644 index 0000000000..b2aeb24026 --- /dev/null +++ b/mcs/tests/test-tuple-11.cs @@ -0,0 +1,20 @@ +using System; + +class Program +{ + public static int Main () + { + int x = 1; + int y = 2; + + (x, y) = (y, x); + + if (x != 2) + return 1; + + if (y != 1) + return 2; + + return 0; + } +} diff --git a/mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id b/mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id index 41d36aa377..d59a34976d 100644 --- a/mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id +++ b/mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id @@ -1 +1 @@ -fa750278297dbee3268ad9b87d035e4cb8346405 \ No newline at end of file +4ad26da95f76ceee7a97f07ea5c3099fe2ae45fb \ No newline at end of file diff --git a/mcs/tools/Makefile b/mcs/tools/Makefile index 0582dc552b..c632a8bf38 100644 --- a/mcs/tools/Makefile +++ b/mcs/tools/Makefile @@ -53,7 +53,7 @@ net_4_5_dirs := \ build_SUBDIRS = build_PARALLEL_SUBDIRS := resgen gacutil security culevel upload-to-sentry mono-helix-client commoncryptogenerator resx2sr linker cil-strip corcompare mono-api-diff mono-api-html monodroid_tools_SUBDIRS = -monodroid_tools_PARALLEL_SUBDIRS = cil-strip linker-analyzer mkbundle mdoc mono-symbolicate corcompare mono-api-diff mono-api-html pdb2mdb +monodroid_tools_PARALLEL_SUBDIRS = cil-strip linker-analyzer mkbundle mdoc mono-symbolicate corcompare mono-api-diff mono-api-html pdb2mdb nunit-lite monodroid_SUBDIRS = nunit-lite monotouch_SUBDIRS = nunit-lite monotouch_tv_SUBDIRS = nunit-lite @@ -63,7 +63,7 @@ monotouch_tools_PARALLEL_SUBDIRS = corcompare mono-api-html net_4_x_SUBDIRS = net_4_x_PARALLEL_SUBDIRS = $(net_4_5_dirs) wasm_tools_SUBDIRS = -wasm_tools_PARALLEL_SUBDIRS = linker wasm-tuner +wasm_tools_PARALLEL_SUBDIRS = linker wasm-tuner cil-strip DIST_SUBDIRS = $(net_4_5_dirs) cil-stringreplacer commoncryptogenerator resx2sr gensources upload-to-sentry mono-helix-client diff --git a/mcs/tools/gensources/Makefile b/mcs/tools/gensources/Makefile index 21213ba678..452282c7c2 100644 --- a/mcs/tools/gensources/Makefile +++ b/mcs/tools/gensources/Makefile @@ -10,3 +10,7 @@ PROGRAM_USE_INTERMEDIATE_FILE = 1 LIB_REFS = System System.Core include ../../build/executable.make + +ifneq ("$(PROFILE)","build") +$(warning gensources is only intended to be compiled in the build profile) +endif diff --git a/mcs/tools/linker/Makefile b/mcs/tools/linker/Makefile index 4a8814fe42..e84278dcdb 100644 --- a/mcs/tools/linker/Makefile +++ b/mcs/tools/linker/Makefile @@ -5,6 +5,7 @@ include ../../build/rules.make PROGRAM = monolinker.exe LIB_REFS = System System.Core System.Xml Mono.Cecil +LOCAL_MCS_FLAGS = -unsafe TEST_CASES := \ mscorlib/test-array.cs \ @@ -24,8 +25,12 @@ TEST_CASES := \ System/test-security.cs \ System.Core/test-plinq-01.cs -# Disabled tests -# mscorlib/test-marshaling.cs +ifdef INCLUDE_DISABLED +TEST_CASES += \ + System.Core/test-queryable-01.cs \ + System.Runtime.Serialization/test-dcs-01.cs \ + mscorlib/test-marshaling.cs +endif ifdef MOBILE_PROFILE TEST_CASES += \ @@ -39,7 +44,7 @@ TEST_CASES += \ mscorlib/test-reflection.cs endif -TESTS_COMPILER = $(MCS) -nologo -noconfig -unsafe -debug:portable -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/mscorlib.dll +TESTS_COMPILER = $(MCS) -nologo -noconfig -unsafe -nostdlib -debug:portable -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/mscorlib.dll MARSHALING_TEST_NATIVE = mscorlib/test-marshaling-native.so @@ -63,6 +68,9 @@ System/test-%.cs: System.Core/test-%.cs: $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Core.dll Tests/$@ /out:Tests/$(@:.cs=.exe) +System.Runtime.Serialization/test-%.cs: + $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Runtime.Serialization.dll -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Xml.dll Tests/$@ /out:Tests/$(@:.cs=.exe) + System.Net.Http/test-%.cs: $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.dll -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Net.Http.dll Tests/$@ /out:Tests/$(@:.cs=.exe) @@ -95,6 +103,13 @@ endif ifeq ($(PROFILE),wasm) LINKER_PROFILE_OPTIONS += --exclude-feature remoting --exclude-feature com --exclude-feature etw + +BINARY_TEST_CASES_ROOT:=../../../external/illinker-test-assets/wasm/ + +BINARY_TEST_CASES = \ + $(BINARY_TEST_CASES_ROOT)Newtonsoft/bin/Release/netstandard2.0/dist/_framework/_bin/Newtonsoft.dll \ + $(BINARY_TEST_CASES_ROOT)HelloWorld/bin/Release/netstandard2.0/dist/_framework/_bin/HelloWorld.dll \ + $(BINARY_TEST_CASES_ROOT)Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.dll endif LINKER_OUTPUT := illink-output-$(PROFILE_DIRECTORY) @@ -105,7 +120,7 @@ TEST_EXEC = MONO_PATH=$(LINKER_OUTPUT) $(RUNTIME) $(RUNTIME_FLAGS) --debug -O=-a .NOTPARALLEL: -System.Net.Http/test-%.exe System.Core/test-%.exe System/test-%.exe mscorlib/test-%.exe: +System.Net.Http/test-%.exe System.Runtime.Serialization/test-%.exe System.Core/test-%.exe System/test-%.exe mscorlib/test-%.exe: @rm -rf $(LINKER_OUTPUT) @mkdir $(LINKER_OUTPUT) @echo Testing $@ diff --git a/mcs/tools/linker/monolinker.exe.sources b/mcs/tools/linker/monolinker.exe.sources index 9cbc9c320f..8581d0e2e5 100644 --- a/mcs/tools/linker/monolinker.exe.sources +++ b/mcs/tools/linker/monolinker.exe.sources @@ -49,3 +49,5 @@ ../../../external/linker/src/linker/Linker.Steps/PreserveCalendarsStep.cs ../../../external/linker/src/linker/Linker.Steps/CodeRewriterStep.cs ../../../external/linker/src/linker/Linker.Steps/RemoveFeaturesStep.cs +../../../external/linker/src/linker/Linker.Steps/ReflectionBlockedStep.cs + diff --git a/mcs/tools/mono-symbolicate/Makefile b/mcs/tools/mono-symbolicate/Makefile index 9be64f4bec..d4164712e5 100644 --- a/mcs/tools/mono-symbolicate/Makefile +++ b/mcs/tools/mono-symbolicate/Makefile @@ -4,7 +4,7 @@ include ../../build/rules.make PROGRAM = mono-symbolicate.exe -LOCAL_MCS_FLAGS = /D:NO_AUTHENTICODE /D:CECIL -nowarn:649 +LOCAL_MCS_FLAGS = /D:NO_AUTHENTICODE /D:CECIL -nowarn:649 -unsafe LIB_REFS = System.Xml System.Core System @@ -12,6 +12,12 @@ include ../../build/executable.make LIB_PATH = $(topdir)/class/lib/$(PROFILE) +ifdef TARGET_NET_REFERENCE +LIB_REF_PATH = $(topdir)/../external/binary-reference-assemblies/$(TARGET_NET_REFERENCE) +else +LIB_REF_PATH = $(LIB_PATH) +endif + MONO = MONO_PATH="$(LIB_PATH)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) -O=-inline MSYM_DIR = $(OUT_DIR)/msymdir @@ -63,7 +69,7 @@ test-bundle: cp -L $(TEST_EXE) $(TEST_EXE:.exe=.pdb) $(SYMBOLICATE_EXPECTED_FILE) $(TEST_BUNDLE_PATH)/tests/symbolicate/ $(TEST_EXE): $(TEST_CS) - $(CSCOMPILE) $(TEST_CS) -r:$(LIB_PATH)/mscorlib.dll -r:$(LIB_PATH)/System.Core.dll -warn:0 -out:$(TEST_EXE) + $(CSCOMPILE) $(TEST_CS) -r:$(LIB_REF_PATH)/mscorlib.dll -r:$(LIB_REF_PATH)/System.Core.dll -warn:0 -out:$(TEST_EXE) run-test-local: run-test-without-aot run-test-with-aot run-test-with-aot-msym diff --git a/mcs/tools/security/certview/CertificateViewer.cs b/mcs/tools/security/certview/CertificateViewer.cs index 1497f5f31a..cfaefa4505 100644 --- a/mcs/tools/security/certview/CertificateViewer.cs +++ b/mcs/tools/security/certview/CertificateViewer.cs @@ -299,7 +299,7 @@ namespace Mono.Tools.CertView { this.issuedByLinkLabel.Size = new System.Drawing.Size(272, 16); this.issuedByLinkLabel.TabIndex = 15; this.issuedByLinkLabel.TabStop = true; - this.issuedByLinkLabel.Text = "http://www.go-mono.com/"; + this.issuedByLinkLabel.Text = "http://www.mono-project.com/"; this.issuedByLinkLabel.Visible = false; // // panel4 diff --git a/mcs/tools/sqlmetal/Makefile b/mcs/tools/sqlmetal/Makefile index 6be257edd2..abba90dd1e 100644 --- a/mcs/tools/sqlmetal/Makefile +++ b/mcs/tools/sqlmetal/Makefile @@ -2,7 +2,7 @@ thisdir = tools/sqlmetal SUBDIRS = include ../../build/rules.make -dbmetal_src = ../../class/System.Data.Linq/src/DbMetal +dbmetal_src = src/DbMetal ns = DbMetal.Language LOCAL_MCS_FLAGS = \ @@ -13,12 +13,13 @@ LOCAL_MCS_FLAGS = \ -resource:$(dbmetal_src)/Language/GermanWords.txt,$(ns).GermanWords.txt \ -publicsign -LIB_REFS = System.Configuration System.Core System.Data System.Data.Linq System.Xml System +LIB_REFS = System.Configuration System.Core System.Data System.Xml System System.Runtime.Serialization SQLMETAL_RESOURCES = \ $(dbmetal_src)/Language/EnglishWords.txt \ $(dbmetal_src)/Language/FrenchWords.txt \ - $(dbmetal_src)/Language/GermanWords.txt + $(dbmetal_src)/Language/GermanWords.txt \ + $(dbmetal_src)/../DbLinq.snk EXTRA_DISTFILES = \ $(SQLMETAL_RESOURCES) @@ -28,4 +29,3 @@ PROGRAM = sqlmetal.exe $(PROGRAM) : Makefile $(SQLMETAL_RESOURCES) include ../../build/executable.make - diff --git a/mcs/tools/sqlmetal/sqlmetal.exe.sources b/mcs/tools/sqlmetal/sqlmetal.exe.sources index 350fc4fe92..9f49972e63 100644 --- a/mcs/tools/sqlmetal/sqlmetal.exe.sources +++ b/mcs/tools/sqlmetal/sqlmetal.exe.sources @@ -1,40 +1,363 @@ AssemblyInfo.cs -../../class/System.Data.Linq/src/DbLinq.ProductInfo.cs -../../class/System.Data.Linq/src/DbMetal/AbstractParameters.cs -../../class/System.Data.Linq/src/DbMetal/Configuration/ProvidersSection.cs -../../class/System.Data.Linq/src/DbMetal/Generator/AttributeDefinition.cs -../../class/System.Data.Linq/src/DbMetal/Generator/CodeDomGenerator.cs -../../class/System.Data.Linq/src/DbMetal/Generator/CodeWriter.cs -../../class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/IImplementation.cs -../../class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs -../../class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs -../../class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs -../../class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs -../../class/System.Data.Linq/src/DbMetal/Generator/GenerationContext.cs -../../class/System.Data.Linq/src/DbMetal/Generator/ICodeGenerator.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/Processor.cs -../../class/System.Data.Linq/src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs -../../class/System.Data.Linq/src/DbMetal/Generator/IProcessor.cs -../../class/System.Data.Linq/src/DbMetal/Generator/ISchemaLoaderFactory.cs -../../class/System.Data.Linq/src/DbMetal/Generator/ParameterDefinition.cs -../../class/System.Data.Linq/src/DbMetal/Generator/SpecificationDefinition.cs -../../class/System.Data.Linq/src/DbMetal/Language/EnglishWords.cs -../../class/System.Data.Linq/src/DbMetal/Language/FrenchWords.cs -../../class/System.Data.Linq/src/DbMetal/Language/GermanWords.cs -../../class/System.Data.Linq/src/DbMetal/Mono/Options.cs -../../class/System.Data.Linq/src/DbMetal/Parameters.cs -../../class/System.Data.Linq/src/DbMetal/Program.cs -../../class/System.Data.Linq/src/DbMetal/Properties/Settings.Designer.cs -../../class/System.Data.Linq/src/DbMetal/Reference.cs -../../class/System.Data.Linq/src/DbMetal/Schema/DbmlRename.cs -../../class/System.Data.Linq/src/DbMetal/Schema/DbmlRenameLoader.cs -../../class/System.Data.Linq/src/DbMetal/Schema/NameAliasesLoader.cs -../../class/System.Data.Linq/src/DbMetal/Schema/TableAlias.cs -../../class/System.Data.Linq/src/DbMetal/Utility/EnvironmentExtension.cs -../../class/System.Data.Linq/src/DbMetal/Utility/VariablesExtension.cs +../../build/common/Consts.cs +../../build/common/Locale.cs +../../build/common/MonoTODOAttribute.cs +src/DbLinq.Firebird/FirebirdDataContext.cs +src/DbLinq.Firebird/FirebirdExpressionTranslator.cs +src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs +src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs +src/DbLinq.Firebird/FirebirdSchemaLoader.cs +src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs +src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs +src/DbLinq.Firebird/FirebirdSqlProvider.cs +src/DbLinq.Firebird/FirebirdVendor.cs +src/DbLinq.Ingres/IngresDataContext.cs +src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs +src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs +src/DbLinq.Ingres/IngresSchemaLoader.cs +src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs +src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs +src/DbLinq.Ingres/IngresSqlProvider.cs +src/DbLinq.Ingres/IngresVendor.cs +src/DbLinq.MySql/MySqlDataContext.cs +src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs +src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs +src/DbLinq.MySql/MySqlSchemaLoader.cs +src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs +src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs +src/DbLinq.MySql/MySqlSqlProvider.cs +src/DbLinq.MySql/MySqlVendor.cs +src/DbLinq.Oracle/OracleDataContext.cs +src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs +src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs +src/DbLinq.Oracle/OracleSchemaLoader.cs +src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs +src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs +src/DbLinq.Oracle/OracleSqlProvider.cs +src/DbLinq.Oracle/OracleVendor.cs +src/DbLinq.PostgreSql/PgsqlDataContext.cs +src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs +src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs +src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs +src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs +src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs +src/DbLinq.PostgreSql/PgsqlSqlProvider.cs +src/DbLinq.PostgreSql/PgsqlVendor.cs +src/DbLinq.Sqlite/Schema/DataCommand.cs +src/DbLinq.Sqlite/SqliteDataContext.cs +src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs +src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs +src/DbLinq.Sqlite/SqliteSchemaLoader.cs +src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs +src/DbLinq.Sqlite/SqliteSqlProvider.cs +src/DbLinq.Sqlite/SqliteVendor.cs +src/DbLinq.SqlServer/SqlServerDataContext.cs +src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs +src/DbLinq.SqlServer/SqlServerSchemaLoader.cs +src/DbLinq.SqlServer/SqlServerSqlProvider.cs +src/DbLinq.SqlServer/SqlServerTypeConversions.cs +src/DbLinq.SqlServer/SqlServerVendor.cs +src/DbLinq/Data/Linq/ChangeAction.cs +src/DbLinq/Data/Linq/ChangeSet.cs +src/DbLinq/Data/Linq/Database/IDatabaseContext.cs +src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs +src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs +src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs +src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs +src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs +src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs +src/DbLinq/Data/Linq/DataContext.cs +src/DbLinq/Data/Linq/DataLoadOptions.cs +src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs +src/DbLinq/Data/Linq/EntityRef.cs +src/DbLinq/Data/Linq/EntitySet.cs +src/DbLinq/Data/Linq/Identity/IdentityKey.cs +src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs +src/DbLinq/Data/Linq/Identity/IIdentityReader.cs +src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs +src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs +src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs +src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs +src/DbLinq/Data/Linq/IExecuteResult.cs +src/DbLinq/Data/Linq/IMemberModificationHandler.cs +src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs +src/DbLinq/Data/Linq/Implementation/EntityState.cs +src/DbLinq/Data/Linq/Implementation/EntityTrack.cs +src/DbLinq/Data/Linq/Implementation/EntityTracker.cs +src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs +src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs +src/DbLinq/Data/Linq/Implementation/QueryProvider.cs +src/DbLinq/Data/Linq/Implementation/VendorProvider.cs +src/DbLinq/Data/Linq/ITable.cs +src/DbLinq/Data/Linq/IVendorProvider.cs +src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs +src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs +src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs +src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs +src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs +src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs +src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs +src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs +src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs +src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs +src/DbLinq/Data/Linq/Mapping/MappingContext.cs +src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs +src/DbLinq/Data/Linq/RefreshMode.cs +src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs +src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs +src/DbLinq/Data/Linq/Sql/SqlPart.cs +src/DbLinq/Data/Linq/Sql/SqlStatement.cs +src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs +src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs +src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs +src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs +src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs +src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs +src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs +src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs +src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs +src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs +src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs +src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs +src/DbLinq/Data/Linq/Sugar/BuilderContext.cs +src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs +src/DbLinq/Data/Linq/Sugar/DirectQuery.cs +src/DbLinq/Data/Linq/Sugar/Error.cs +src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs +src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs +src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs +src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs +src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs +src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs +src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs +src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs +src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs +src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs +src/DbLinq/Data/Linq/Sugar/IDataMapper.cs +src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs +src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs +src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs +src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs +src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs +src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs +src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs +src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs +src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs +src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs +src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs +src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs +src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs +src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs +src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs +src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs +src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs +src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs +src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs +src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs +src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs +src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs +src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs +src/DbLinq/Data/Linq/Sugar/IQueryCache.cs +src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs +src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs +src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs +src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs +src/DbLinq/Data/Linq/Sugar/QueryContext.cs +src/DbLinq/Data/Linq/Sugar/SelectQuery.cs +src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs +src/DbLinq/Data/Linq/Table.cs +src/DbLinq/DbLinqToDoAttribute.cs +src/DbLinq/Factory/DbLinqAttribute.cs +src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs +src/DbLinq/Factory/IObjectFactory.cs +src/DbLinq/Factory/ObjectFactory.cs +src/DbLinq/Language/ILanguages.cs +src/DbLinq/Language/ILanguageWords.cs +src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs +src/DbLinq/Language/Implementation/AbstractWords.cs +src/DbLinq/Language/Implementation/Languages.cs +src/DbLinq/Language/Implementation/NoLanguageWords.cs +src/DbLinq/Schema/AssociationName.cs +src/DbLinq/Schema/Case.cs +src/DbLinq/Schema/ColumnName.cs +src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs +src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs +src/DbLinq/Schema/Dbml/Adapter/EnumType.cs +src/DbLinq/Schema/Dbml/Adapter/INamedType.cs +src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs +src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs +src/DbLinq/Schema/Dbml/DatabaseSerializer.cs +src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs +src/DbLinq/Schema/Dbml/DbmlSchema.cs +src/DbLinq/Schema/Dbml/DbmlSerializer.cs +src/DbLinq/Schema/Implementation/NameFormatter.cs +src/DbLinq/Schema/INameFormatter.cs +src/DbLinq/Schema/Name.cs +src/DbLinq/Schema/NameFormat.cs +src/DbLinq/Schema/ParameterName.cs +src/DbLinq/Schema/ProcedureName.cs +src/DbLinq/Schema/SchemaName.cs +src/DbLinq/Schema/TableName.cs +src/DbLinq/Schema/WordsExtraction.cs +src/DbLinq/System.Data.Linq/Binary.cs +src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs +src/DbLinq/System.Data.Linq/ChangeConflictException.cs +src/DbLinq/System.Data.Linq/CompiledQuery.cs +src/DbLinq/System.Data.Linq/ConflictMode.cs +src/DbLinq/System.Data.Linq/DBConvert.cs +src/DbLinq/System.Data.Linq/DuplicateKeyException.cs +src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs +src/DbLinq/System.Data.Linq/IFunctionResult.cs +src/DbLinq/System.Data.Linq/IMultipleResults.cs +src/DbLinq/System.Data.Linq/ISingleResult.cs +src/DbLinq/System.Data.Linq/Link.cs +src/DbLinq/System.Data.Linq/MemberChangeConflict.cs +src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs +src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs +src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs +src/DbLinq/Util/DataCommand.cs +src/DbLinq/Util/DbmlExtensions.cs +src/DbLinq/Util/ExpressionChainEqualityComparer.cs +src/DbLinq/Util/ExpressionEqualityComparer.cs +src/DbLinq/Util/IDataRecordExtensions.cs +src/DbLinq/Util/IDataTypeExtensions.cs +src/DbLinq/Util/IDbDataParameterExtensions.cs +src/DbLinq/Util/IThreadSafeDictionary.cs +src/DbLinq/Util/LambdaComparer.cs +src/DbLinq/Util/MemberInfoExtensions.cs +src/DbLinq/Util/Output.cs +src/DbLinq/Util/OutputLevel.cs +src/DbLinq/Util/Page.cs +src/DbLinq/Util/Profiler.cs +src/DbLinq/Util/QuotesHelper.cs +src/DbLinq/Util/ReferenceEqualityComparer.cs +src/DbLinq/Util/ReflectionExtensions.cs +src/DbLinq/Util/ReflectionUtility.cs +src/DbLinq/Util/StringExtensions.cs +src/DbLinq/Util/TextWriterExtension.cs +src/DbLinq/Util/ThreadSafeDictionary.cs +src/DbLinq/Util/TypeConvert.cs +src/DbLinq/Util/TypeExtensions.cs +src/DbLinq/Util/TypeLoader.cs +src/DbLinq/Vendor/DbSchemaLoader.cs +src/DbLinq/Vendor/IDataName.cs +src/DbLinq/Vendor/IDataTableColumn.cs +src/DbLinq/Vendor/IDataType.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs +src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs +src/DbLinq/Vendor/Implementation/SqlProvider.cs +src/DbLinq/Vendor/Implementation/Vendor.cs +src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs +src/DbLinq/Vendor/INameAliases.cs +src/DbLinq/Vendor/ISchemaLoader.cs +src/DbLinq/Vendor/ISqlProvider.cs +src/DbLinq/Vendor/IVendor.cs +src/DbLinq/Vendor/VendorAttribute.cs +src/DbLinq.ProductInfo.cs +src/DbMetal/AbstractParameters.cs +src/DbMetal/Configuration/ProvidersSection.cs +src/DbMetal/Generator/AttributeDefinition.cs +src/DbMetal/Generator/CodeDomGenerator.cs +src/DbMetal/Generator/CodeWriter.cs +src/DbMetal/Generator/EntityInterface/IImplementation.cs +src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs +src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs +src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs +src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs +src/DbMetal/Generator/GenerationContext.cs +src/DbMetal/Generator/ICodeGenerator.cs +src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs +src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs +src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs +src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs +src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs +src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs +src/DbMetal/Generator/Implementation/Processor.cs +src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs +src/DbMetal/Generator/IProcessor.cs +src/DbMetal/Generator/ISchemaLoaderFactory.cs +src/DbMetal/Generator/ParameterDefinition.cs +src/DbMetal/Generator/SpecificationDefinition.cs +src/DbMetal/Language/EnglishWords.cs +src/DbMetal/Language/FrenchWords.cs +src/DbMetal/Language/GermanWords.cs +src/DbMetal/Mono/Options.cs +src/DbMetal/Parameters.cs +src/DbMetal/Program.cs +src/DbMetal/Properties/Settings.Designer.cs +src/DbMetal/Reference.cs +src/DbMetal/Schema/DbmlRename.cs +src/DbMetal/Schema/DbmlRenameLoader.cs +src/DbMetal/Schema/NameAliasesLoader.cs +src/DbMetal/Schema/TableAlias.cs +src/DbMetal/Utility/EnvironmentExtension.cs +src/DbMetal/Utility/VariablesExtension.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdExpressionTranslator.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdExpressionTranslator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdExpressionTranslator.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdExpressionTranslator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.Constraints.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.StoredProcedures.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Firebird/FirebirdVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.Firebird/FirebirdVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.Constraints.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.StoredProcedures.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Ingres/IngresVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.Ingres/IngresVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.Constraints.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.StoredProcedures.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.MySql/MySqlVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.MySql/MySqlVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.Constraints.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.StoredProcedures.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Oracle/OracleVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.Oracle/OracleVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Constraints.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.StoredProcedures.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.PostgreSql/PgsqlVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.PostgreSql/PgsqlVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.ProductInfo.cs b/mcs/tools/sqlmetal/src/DbLinq.ProductInfo.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.ProductInfo.cs rename to mcs/tools/sqlmetal/src/DbLinq.ProductInfo.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs b/mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs rename to mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerExpressionTranslator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerTypeConversions.cs b/mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerTypeConversions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerTypeConversions.cs rename to mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerTypeConversions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.SqlServer/SqlServerVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.SqlServer/SqlServerVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Schema/DataCommand.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/Schema/DataCommand.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/Schema/DataCommand.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/Schema/DataCommand.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteDataContext.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteDataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteDataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteDataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.Constraints.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteVendor.cs b/mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.Sqlite/SqliteVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq.Sqlite/SqliteVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq.snk b/mcs/tools/sqlmetal/src/DbLinq.snk similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq.snk rename to mcs/tools/sqlmetal/src/DbLinq.snk diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ChangeAction.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/ChangeAction.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ChangeAction.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/ChangeAction.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ChangeSet.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/ChangeSet.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ChangeSet.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/ChangeSet.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/DBLinqExtendedAttributte.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataContext.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/DataContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataContext.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/DataContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataLoadOptions.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/DataLoadOptions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/DataLoadOptions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/DataLoadOptions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/IDatabaseContext.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/IDatabaseContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/IDatabaseContext.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/IDatabaseContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/IDatabaseTransaction.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/ITransactionalCommand.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/DatabaseConnection.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/DatabaseContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/DatabaseTransaction.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Database/Implementation/TransactionalCommand.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/EntityRef.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/EntityRef.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/EntityRef.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/EntityRef.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/EntitySet.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/EntitySet.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/EntitySet.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/EntitySet.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/IExecuteResult.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/IExecuteResult.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/IExecuteResult.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/IExecuteResult.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/IMemberModificationHandler.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/IMemberModificationHandler.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/IMemberModificationHandler.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/IMemberModificationHandler.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ITable.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/ITable.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/ITable.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/ITable.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/IVendorProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/IVendorProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/IVendorProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/IVendorProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IIdentityProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IIdentityReader.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IIdentityReader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IIdentityReader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IIdentityReader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IIdentityReaderFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IdentityKey.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IdentityKey.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/IdentityKey.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/IdentityKey.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/Implementation/IdentityProviderReader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Identity/Implementation/IdentityReaderFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/DisabledEntityTracker.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/EntityState.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/EntityState.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/EntityState.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/EntityState.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/EntityTrack.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/EntityTrack.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/EntityTrack.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/EntityTrack.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/EntityTracker.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/EntityTracker.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/EntityTracker.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/EntityTracker.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/IEntityTracker.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/MemberModificationHandler.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/QueryProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/QueryProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/QueryProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/QueryProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/VendorProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/VendorProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Implementation/VendorProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Implementation/VendorProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributeMappingSource.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedAbstractMetaDataMember.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedAssociationMetaDataMember.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedColumnMetaDataMember.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaAssociation.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaFunction.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaModel.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaTable.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/AttributedMetaType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/LambdaMetaAccessor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/MappingContext.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/MappingContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/MappingContext.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/MappingContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/RefreshMode.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/RefreshMode.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/RefreshMode.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/RefreshMode.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlLiteralPart.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlParameterPart.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlPart.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlPart.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlPart.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlPart.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlStatement.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlStatement.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlStatement.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlStatement.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sql/SqlStatementBuilder.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/FirebirdProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/IngresProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/MySqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/OracleProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/PostgreSqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/Sql2000Provider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/Sql2005Provider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/Sql2008Provider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/SqlServerProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/SqlClient/SqliteProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/AbstractQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/BuilderContext.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/BuilderContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/BuilderContext.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/BuilderContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/DeleteQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/DirectQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/DirectQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/DirectQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/DirectQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Error.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Error.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Error.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Error.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionChain.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/ExpressionMutatorFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/BinaryExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConditionalExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ConstantExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/IMemberBindingMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/InvocationExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/LambdaExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ListInitExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberAssignmentMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberBindingMutatorFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberInitExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberListBindingMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MemberMemberBindingMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/MethodCallExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewArrayExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/NewExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/ParameterExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/TypeBinaryExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionMutator/Implementation/UnaryExpressionMutator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionPrecedence.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ExpressionTier.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ColumnExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/CustomExpressionType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/EntitySetExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ExpressionTranslator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/GroupExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/IExecutableExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/IMutableExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/InputParameterExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/MutableExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectInputParameterExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/ObjectOutputParameterExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/OperandsMutableExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/OrderByExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SelectExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SelectOperatorType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SpecialExpressionType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/StartIndexOffsetExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/SubSelectExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/TableExpression.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Expressions/TableJoinType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IDataMapper.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IDataMapper.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IDataMapper.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IDataMapper.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IDataRecordReader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionDispatcher.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionLanguageParser.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionOptimizer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IExpressionQualifier.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IPrequelAnalyzer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IQueryBuilder.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IQueryCache.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IQueryCache.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IQueryCache.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IQueryCache.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/IQueryRunner.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ISpecialExpressionTranslator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ISqlBuilder.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/DataMapper.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/DataRecordReader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Analyzer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.Registrar.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionDispatcher.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionLanguageParser.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionOptimizer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/ExpressionQualifier.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/LineGrouping.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/PrequelAnalyzer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.Upsert.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryBuilder.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryCache.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/QueryRunner.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/SpecialExpressionTranslator.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/Implementation/SqlBuilder.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/ParameterizedQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/QueryContext.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/QueryContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/QueryContext.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/QueryContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/SelectQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/SelectQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/SelectQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/SelectQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Sugar/UpsertQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Table.cs b/mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Table.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Data/Linq/Table.cs rename to mcs/tools/sqlmetal/src/DbLinq/Data/Linq/Table.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/DbLinqToDoAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/DbLinqToDoAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/DbLinqToDoAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/DbLinqToDoAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Factory/DbLinqAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/Factory/DbLinqAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Factory/DbLinqAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/Factory/DbLinqAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Factory/IObjectFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Factory/IObjectFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Factory/IObjectFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Factory/IObjectFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Factory/Implementation/ReflectionObjectFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Factory/ObjectFactory.cs b/mcs/tools/sqlmetal/src/DbLinq/Factory/ObjectFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Factory/ObjectFactory.cs rename to mcs/tools/sqlmetal/src/DbLinq/Factory/ObjectFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Language/ILanguageWords.cs b/mcs/tools/sqlmetal/src/DbLinq/Language/ILanguageWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Language/ILanguageWords.cs rename to mcs/tools/sqlmetal/src/DbLinq/Language/ILanguageWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Language/ILanguages.cs b/mcs/tools/sqlmetal/src/DbLinq/Language/ILanguages.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Language/ILanguages.cs rename to mcs/tools/sqlmetal/src/DbLinq/Language/ILanguages.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs b/mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs rename to mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/AbstractEndPluralWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/AbstractWords.cs b/mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/AbstractWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/AbstractWords.cs rename to mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/AbstractWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/Languages.cs b/mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/Languages.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/Languages.cs rename to mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/Languages.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/NoLanguageWords.cs b/mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/NoLanguageWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Language/Implementation/NoLanguageWords.cs rename to mcs/tools/sqlmetal/src/DbLinq/Language/Implementation/NoLanguageWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/AssociationName.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/AssociationName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/AssociationName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/AssociationName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Case.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Case.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Case.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Case.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/ColumnName.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/ColumnName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/ColumnName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/ColumnName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/ArrayAdapter.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/CsvArrayAdapter.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/EnumType.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/EnumType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/EnumType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/EnumType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/INamedType.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/INamedType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/INamedType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/INamedType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/ISimpleList.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/Adapter/SpecifiedPropertyUpdater.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DatabaseSerializer.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DatabaseSerializer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DatabaseSerializer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DatabaseSerializer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DbmlSchema.Adapter.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DbmlSchema.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSchema.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DbmlSchema.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSerializer.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DbmlSerializer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Dbml/DbmlSerializer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Dbml/DbmlSerializer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/INameFormatter.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/INameFormatter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/INameFormatter.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/INameFormatter.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Implementation/NameFormatter.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Implementation/NameFormatter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Implementation/NameFormatter.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Implementation/NameFormatter.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/Name.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/Name.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/Name.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/Name.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/NameFormat.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/NameFormat.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/NameFormat.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/NameFormat.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/ParameterName.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/ParameterName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/ParameterName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/ParameterName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/ProcedureName.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/ProcedureName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/ProcedureName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/ProcedureName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/SchemaName.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/SchemaName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/SchemaName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/SchemaName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/TableName.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/TableName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/TableName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/TableName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Schema/WordsExtraction.cs b/mcs/tools/sqlmetal/src/DbLinq/Schema/WordsExtraction.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Schema/WordsExtraction.cs rename to mcs/tools/sqlmetal/src/DbLinq/Schema/WordsExtraction.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Binary.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/Binary.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Binary.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/Binary.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ChangeConflictCollection.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ChangeConflictException.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ChangeConflictException.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ChangeConflictException.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ChangeConflictException.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/CompiledQuery.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/CompiledQuery.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/CompiledQuery.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/CompiledQuery.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ConflictMode.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ConflictMode.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ConflictMode.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ConflictMode.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/DBConvert.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/DBConvert.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/DBConvert.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/DBConvert.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/DuplicateKeyException.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/DuplicateKeyException.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/DuplicateKeyException.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/DuplicateKeyException.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ForeignKeyReferenceAlreadyHasValueException.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/IFunctionResult.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/IFunctionResult.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/IFunctionResult.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/IFunctionResult.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/IMultipleResults.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/IMultipleResults.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/IMultipleResults.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/IMultipleResults.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ISingleResult.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ISingleResult.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ISingleResult.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ISingleResult.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Link.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/Link.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/Link.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/Link.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/MemberChangeConflict.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/MemberChangeConflict.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/MemberChangeConflict.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/MemberChangeConflict.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ModifiedMemberInfo.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/ObjectChangeConflict.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AssociationAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/AutoSync.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ColumnAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DataAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/DatabaseAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/FunctionAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/InheritanceMappingAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MappingSource.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAccessor_2.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaAssociation.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaDataMember.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaFunction.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaModel.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaParameter.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaTable.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/MetaType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ParameterAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ProviderAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/ResultTypeAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/TableAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.Mapping/UpdateCheck.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient.Implementation/ObjectMaterializer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlHelpers.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlMethods.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/System.Data.Linq/System.Data.Linq.SqlClient/SqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/DataCommand.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/DataCommand.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/DataCommand.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/DataCommand.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/DbmlExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/DbmlExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/DbmlExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/DbmlExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/ExpressionChainEqualityComparer.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/ExpressionChainEqualityComparer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/ExpressionChainEqualityComparer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/ExpressionChainEqualityComparer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/ExpressionEqualityComparer.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/ExpressionEqualityComparer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/ExpressionEqualityComparer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/ExpressionEqualityComparer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/IDataRecordExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/IDataRecordExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/IDataRecordExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/IDataRecordExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/IDataTypeExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/IDataTypeExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/IDataTypeExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/IDataTypeExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/IDbDataParameterExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/IDbDataParameterExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/IDbDataParameterExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/IDbDataParameterExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/IThreadSafeDictionary.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/IThreadSafeDictionary.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/IThreadSafeDictionary.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/IThreadSafeDictionary.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/LambdaComparer.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/LambdaComparer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/LambdaComparer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/LambdaComparer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/MemberInfoExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/MemberInfoExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/MemberInfoExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/MemberInfoExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/Output.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/Output.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/Output.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/Output.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/OutputLevel.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/OutputLevel.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/OutputLevel.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/OutputLevel.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/Page.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/Page.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/Page.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/Page.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/Profiler.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/Profiler.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/Profiler.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/Profiler.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/QuotesHelper.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/QuotesHelper.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/QuotesHelper.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/QuotesHelper.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/ReferenceEqualityComparer.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/ReferenceEqualityComparer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/ReferenceEqualityComparer.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/ReferenceEqualityComparer.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/ReflectionExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/ReflectionExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/ReflectionExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/ReflectionExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/ReflectionUtility.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/ReflectionUtility.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/ReflectionUtility.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/ReflectionUtility.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/StringExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/StringExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/StringExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/StringExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/TextWriterExtension.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/TextWriterExtension.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/TextWriterExtension.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/TextWriterExtension.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/ThreadSafeDictionary.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/ThreadSafeDictionary.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/ThreadSafeDictionary.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/ThreadSafeDictionary.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/TypeConvert.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/TypeConvert.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/TypeConvert.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/TypeConvert.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/TypeExtensions.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/TypeExtensions.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/TypeExtensions.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/TypeExtensions.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Util/TypeLoader.cs b/mcs/tools/sqlmetal/src/DbLinq/Util/TypeLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Util/TypeLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Util/TypeLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/DbSchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/DbSchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/DbSchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/DbSchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/IDataName.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/IDataName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/IDataName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/IDataName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/IDataTableColumn.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/IDataTableColumn.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/IDataTableColumn.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/IDataTableColumn.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/IDataType.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/IDataType.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/IDataType.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/IDataType.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/INameAliases.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/INameAliases.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/INameAliases.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/INameAliases.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/ISchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/ISchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/ISchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/ISchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/ISqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/ISqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/ISqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/ISqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/IVendor.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/IVendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/IVendor.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/IVendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.Columns.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.DataName.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.DataTableColumn.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.ForeignKey.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.Name.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.StoredProcedures.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.Tables.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.TypeMapping.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SchemaLoader.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SchemaLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SqlProvider.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SqlProvider.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/SqlProvider.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/SqlProvider.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/Vendor.ProcedureResult.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/Vendor.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/Vendor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/Implementation/Vendor.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/Implementation/Vendor.cs diff --git a/mcs/class/System.Data.Linq/src/DbLinq/Vendor/VendorAttribute.cs b/mcs/tools/sqlmetal/src/DbLinq/Vendor/VendorAttribute.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbLinq/Vendor/VendorAttribute.cs rename to mcs/tools/sqlmetal/src/DbLinq/Vendor/VendorAttribute.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/AbstractParameters.cs b/mcs/tools/sqlmetal/src/DbMetal/AbstractParameters.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/AbstractParameters.cs rename to mcs/tools/sqlmetal/src/DbMetal/AbstractParameters.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Configuration/ProvidersSection.cs b/mcs/tools/sqlmetal/src/DbMetal/Configuration/ProvidersSection.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Configuration/ProvidersSection.cs rename to mcs/tools/sqlmetal/src/DbMetal/Configuration/ProvidersSection.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/AttributeDefinition.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/AttributeDefinition.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/AttributeDefinition.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/AttributeDefinition.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/CodeDomGenerator.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/CodeDomGenerator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/CodeDomGenerator.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/CodeDomGenerator.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/CodeWriter.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/CodeWriter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/CodeWriter.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/CodeWriter.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/IImplementation.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/IImplementation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/IImplementation.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/IImplementation.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/IModifiedImplementation.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangedImplementation.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/INotifyPropertyChangingImplementation.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/EntityInterface/Implementation/InterfaceImplementation.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/GenerationContext.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/GenerationContext.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/GenerationContext.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/GenerationContext.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/ICodeGenerator.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/ICodeGenerator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/ICodeGenerator.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/ICodeGenerator.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/IProcessor.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/IProcessor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/IProcessor.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/IProcessor.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/ISchemaLoaderFactory.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/ISchemaLoaderFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/ISchemaLoaderFactory.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/ISchemaLoaderFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeGenerator.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CSCodeWriter.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Class.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Context.Ctor.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.Procedure.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/CodeTextGenerator/CodeGenerator.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/Processor.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/Processor.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/Processor.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/Processor.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/Implementation/SchemaLoaderFactory.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/ParameterDefinition.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/ParameterDefinition.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/ParameterDefinition.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/ParameterDefinition.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Generator/SpecificationDefinition.cs b/mcs/tools/sqlmetal/src/DbMetal/Generator/SpecificationDefinition.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Generator/SpecificationDefinition.cs rename to mcs/tools/sqlmetal/src/DbMetal/Generator/SpecificationDefinition.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Language/EnglishWords.cs b/mcs/tools/sqlmetal/src/DbMetal/Language/EnglishWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Language/EnglishWords.cs rename to mcs/tools/sqlmetal/src/DbMetal/Language/EnglishWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Language/EnglishWords.txt.REMOVED.git-id b/mcs/tools/sqlmetal/src/DbMetal/Language/EnglishWords.txt.REMOVED.git-id similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Language/EnglishWords.txt.REMOVED.git-id rename to mcs/tools/sqlmetal/src/DbMetal/Language/EnglishWords.txt.REMOVED.git-id diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Language/FrenchWords.cs b/mcs/tools/sqlmetal/src/DbMetal/Language/FrenchWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Language/FrenchWords.cs rename to mcs/tools/sqlmetal/src/DbMetal/Language/FrenchWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Language/FrenchWords.txt.REMOVED.git-id b/mcs/tools/sqlmetal/src/DbMetal/Language/FrenchWords.txt.REMOVED.git-id similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Language/FrenchWords.txt.REMOVED.git-id rename to mcs/tools/sqlmetal/src/DbMetal/Language/FrenchWords.txt.REMOVED.git-id diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Language/GermanWords.cs b/mcs/tools/sqlmetal/src/DbMetal/Language/GermanWords.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Language/GermanWords.cs rename to mcs/tools/sqlmetal/src/DbMetal/Language/GermanWords.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Language/GermanWords.txt b/mcs/tools/sqlmetal/src/DbMetal/Language/GermanWords.txt similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Language/GermanWords.txt rename to mcs/tools/sqlmetal/src/DbMetal/Language/GermanWords.txt diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Mono/Options.cs b/mcs/tools/sqlmetal/src/DbMetal/Mono/Options.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Mono/Options.cs rename to mcs/tools/sqlmetal/src/DbMetal/Mono/Options.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Parameters.cs b/mcs/tools/sqlmetal/src/DbMetal/Parameters.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Parameters.cs rename to mcs/tools/sqlmetal/src/DbMetal/Parameters.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Program.cs b/mcs/tools/sqlmetal/src/DbMetal/Program.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Program.cs rename to mcs/tools/sqlmetal/src/DbMetal/Program.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Properties/Settings.Designer.cs b/mcs/tools/sqlmetal/src/DbMetal/Properties/Settings.Designer.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Properties/Settings.Designer.cs rename to mcs/tools/sqlmetal/src/DbMetal/Properties/Settings.Designer.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Reference.cs b/mcs/tools/sqlmetal/src/DbMetal/Reference.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Reference.cs rename to mcs/tools/sqlmetal/src/DbMetal/Reference.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Schema/DbmlRename.cs b/mcs/tools/sqlmetal/src/DbMetal/Schema/DbmlRename.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Schema/DbmlRename.cs rename to mcs/tools/sqlmetal/src/DbMetal/Schema/DbmlRename.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Schema/DbmlRenameLoader.cs b/mcs/tools/sqlmetal/src/DbMetal/Schema/DbmlRenameLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Schema/DbmlRenameLoader.cs rename to mcs/tools/sqlmetal/src/DbMetal/Schema/DbmlRenameLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Schema/NameAliasesLoader.cs b/mcs/tools/sqlmetal/src/DbMetal/Schema/NameAliasesLoader.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Schema/NameAliasesLoader.cs rename to mcs/tools/sqlmetal/src/DbMetal/Schema/NameAliasesLoader.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Schema/TableAlias.cs b/mcs/tools/sqlmetal/src/DbMetal/Schema/TableAlias.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Schema/TableAlias.cs rename to mcs/tools/sqlmetal/src/DbMetal/Schema/TableAlias.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Utility/EnvironmentExtension.cs b/mcs/tools/sqlmetal/src/DbMetal/Utility/EnvironmentExtension.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Utility/EnvironmentExtension.cs rename to mcs/tools/sqlmetal/src/DbMetal/Utility/EnvironmentExtension.cs diff --git a/mcs/class/System.Data.Linq/src/DbMetal/Utility/VariablesExtension.cs b/mcs/tools/sqlmetal/src/DbMetal/Utility/VariablesExtension.cs similarity index 100% rename from mcs/class/System.Data.Linq/src/DbMetal/Utility/VariablesExtension.cs rename to mcs/tools/sqlmetal/src/DbMetal/Utility/VariablesExtension.cs diff --git a/mcs/tools/xbuild/data/deniedAssembliesList.txt b/mcs/tools/xbuild/data/deniedAssembliesList.txt index 1035b384d2..450be61195 100644 --- a/mcs/tools/xbuild/data/deniedAssembliesList.txt +++ b/mcs/tools/xbuild/data/deniedAssembliesList.txt @@ -1,58 +1,58 @@ System.Globalization.Extensions.dll,475DBF02-9F68-44F1-8FB5-C9F69F1BD2B1,4,0,0,0 System.Globalization.Extensions.dll,5FCD54F0-4B97-4259-875D-30E481F02EA2,4,0,1,0 System.Globalization.Extensions.dll,E9FCFF5B-4DE1-4BDC-9CE8-08C640FC78CC,4,0,2,0 -System.Globalization.Extensions.dll,50F4163A-D692-452F-90ED-2F8024BB5319,4,1,0,0 -System.Globalization.Extensions.dll,28006E9A-74DB-45AC-8A8D-030CEBAA272A,4,1,0,0 -System.Globalization.Extensions.dll,FC1439FC-C1B8-4DB1-914D-165CCFA77002,4,1,0,0 -System.Globalization.Extensions.dll,3B30D67C-B16B-47BC-B949-9500B5AAAAFB,4,1,0,0 -System.Globalization.Extensions.dll,B9BA8638-25D2-4A3B-B91F-16B3D3799861,4,1,0,0 System.Globalization.Extensions.dll,1A2B9B2A-02F5-4C78-AB0C-7C6D2795CE2B,4,1,0,0 +System.Globalization.Extensions.dll,28006E9A-74DB-45AC-8A8D-030CEBAA272A,4,1,0,0 +System.Globalization.Extensions.dll,3B30D67C-B16B-47BC-B949-9500B5AAAAFB,4,1,0,0 +System.Globalization.Extensions.dll,50F4163A-D692-452F-90ED-2F8024BB5319,4,1,0,0 +System.Globalization.Extensions.dll,B9BA8638-25D2-4A3B-B91F-16B3D3799861,4,1,0,0 +System.Globalization.Extensions.dll,FC1439FC-C1B8-4DB1-914D-165CCFA77002,4,1,0,0 System.IO.Compression.dll,44FCA06C-A510-4B3E-BDBF-D08D697EF65A,4,1,0,0 System.IO.Compression.dll,3A58A219-266B-47C3-8BE8-4E4F394147AB,4,1,2,0 -System.IO.Compression.dll,33AD8174-7781-46FA-A110-33821CCBE810,4,2,0,0 -System.IO.Compression.dll,1332CE2F-1517-4BD7-93FD-7D4BCFBAED66,4,2,0,0 System.IO.Compression.dll,05C07BD4-AFF1-4B12-900B-F0A5EB88DDB4,4,2,0,0 -System.IO.Compression.dll,C786B28D-0850-4D4C-AED9-FE6B86EE7C31,4,2,0,0 +System.IO.Compression.dll,1332CE2F-1517-4BD7-93FD-7D4BCFBAED66,4,2,0,0 +System.IO.Compression.dll,33AD8174-7781-46FA-A110-33821CCBE810,4,2,0,0 System.IO.Compression.dll,35DD20B5-8766-476B-B5D2-0EA16EF0A946,4,2,0,0 System.IO.Compression.dll,8DBD1669-97BC-4190-9BD8-738561193741,4,2,0,0 +System.IO.Compression.dll,C786B28D-0850-4D4C-AED9-FE6B86EE7C31,4,2,0,0 System.Net.Http.dll,269B562C-CC15-4736-B1B1-68D4A43CAA98,4,1,0,0 System.Net.Http.dll,EA2EC6DC-51DD-479C-BFC2-E713FB9E7E47,4,1,0,1 -System.Net.Http.dll,C0E04D9C-70CF-48A6-A179-FBFD8CE69FD0,4,1,1,0 System.Net.Http.dll,817F01C3-4011-477D-890A-98232B85553D,4,1,1,0 +System.Net.Http.dll,C0E04D9C-70CF-48A6-A179-FBFD8CE69FD0,4,1,1,0 System.Net.Http.dll,09D4A140-061C-4884-9B63-22067E841931,4,1,1,1 System.Net.Http.dll,56203551-6937-47C1-9246-346A733913EE,4,1,1,2 System.Net.Http.dll,084B071E-1637-4B3F-B7CD-6CEF28A6E4AE,4,1,1,3 -System.Net.Http.dll,82C79759-CB3C-4EB6-A17C-BDE85AF00A9B,4,2,0,0 -System.Net.Http.dll,8E2F55F3-D010-417B-A742-21386EDDD388,4,2,0,0 -System.Net.Http.dll,DB06A592-E332-44A1-8B85-20CAB3C3C147,4,2,0,0 -System.Net.Http.dll,903A137B-BB3F-464A-94D4-780B89EE5580,4,2,0,0 System.Net.Http.dll,27BBDD4C-EAF0-4A95-B172-EE502D76A725,4,2,0,0 System.Net.Http.dll,41ACE450-8F44-455A-97AC-0679E5462071,4,2,0,0 +System.Net.Http.dll,82C79759-CB3C-4EB6-A17C-BDE85AF00A9B,4,2,0,0 +System.Net.Http.dll,8E2F55F3-D010-417B-A742-21386EDDD388,4,2,0,0 +System.Net.Http.dll,903A137B-BB3F-464A-94D4-780B89EE5580,4,2,0,0 +System.Net.Http.dll,DB06A592-E332-44A1-8B85-20CAB3C3C147,4,2,0,0 System.Runtime.InteropServices.RuntimeInformation.dll,F13660F8-9D0D-419F-BA4E-315693DD26EA,4,0,0,0 System.Runtime.InteropServices.RuntimeInformation.dll,DD91439F-3167-478E-BD2C-BF9C036A1395,4,0,1,0 -System.Runtime.InteropServices.RuntimeInformation.dll,F580BAAC-12BD-4716-B486-C0A5E3EE6EEA,4,0,2,0 -System.Runtime.InteropServices.RuntimeInformation.dll,33D296D9-EE6D-404E-BF9F-432A429FF5DA,4,0,2,0 -System.Runtime.InteropServices.RuntimeInformation.dll,E5AE3324-2100-4F77-9E41-AEEF226C9649,4,0,2,0 -System.Runtime.InteropServices.RuntimeInformation.dll,6D334D4D-0149-4D07-9DEF-CC52213145CE,4,0,2,0 -System.Runtime.InteropServices.RuntimeInformation.dll,CA2D23DE-55E1-45D8-9720-0EBE3EEC1DF2,4,0,2,0 System.Runtime.InteropServices.RuntimeInformation.dll,0C4BCFB3-F609-4631-93A6-17B19C69D9B6,4,0,2,0 System.Runtime.InteropServices.RuntimeInformation.dll,1F37581E-4589-4C71-A465-05C6B9AE966E,4,0,2,0 +System.Runtime.InteropServices.RuntimeInformation.dll,33D296D9-EE6D-404E-BF9F-432A429FF5DA,4,0,2,0 +System.Runtime.InteropServices.RuntimeInformation.dll,488CE209-4E5D-40E7-BE8C-F81F2B99F13A,4,0,2,0 +System.Runtime.InteropServices.RuntimeInformation.dll,6D334D4D-0149-4D07-9DEF-CC52213145CE,4,0,2,0 System.Runtime.InteropServices.RuntimeInformation.dll,9A3724BF-DF8F-4955-8CFA-41D45F11B586,4,0,2,0 +System.Runtime.InteropServices.RuntimeInformation.dll,CA2D23DE-55E1-45D8-9720-0EBE3EEC1DF2,4,0,2,0 System.Runtime.InteropServices.RuntimeInformation.dll,D87389D8-6E9C-48CF-B128-3637018577AF,4,0,2,0 System.Runtime.InteropServices.RuntimeInformation.dll,E46BA45E-6A63-47CD-AF70-2C3016AFF75A,4,0,2,0 -System.Runtime.InteropServices.RuntimeInformation.dll,488CE209-4E5D-40E7-BE8C-F81F2B99F13A,4,0,2,0 +System.Runtime.InteropServices.RuntimeInformation.dll,E5AE3324-2100-4F77-9E41-AEEF226C9649,4,0,2,0 +System.Runtime.InteropServices.RuntimeInformation.dll,F580BAAC-12BD-4716-B486-C0A5E3EE6EEA,4,0,2,0 System.Runtime.InteropServices.RuntimeInformation.dll,FD6C8616-C1D8-43F9-AC17-A1C48A45FDA2,4,0,2,0 -System.Threading.Overlapped.dll,9F5D4F09-787A-458A-BA08-553AA71470F1,4,0,0,0 -System.Threading.Overlapped.dll,FCBD003B-2BB4-4940-BAEF-63AF520C2336,4,0,1,0 -System.Threading.Overlapped.dll,87697E71-D192-4F0B-BAD4-02BBC7793005,4,0,2,0 -System.Threading.Overlapped.dll,212BEDF2-E3F5-4D59-8C1A-F4D1C58B46CD,4,1,0,0 -System.Threading.Overlapped.dll,F4FFC4A6-E694-49D9-81B2-12F2C9A29652,4,1,0,0 -System.Threading.Overlapped.dll,E933407E-C846-4413-82C5-09F4BCFA67F1,4,1,0,0 -System.Threading.Overlapped.dll,3336A2A3-1772-4EF9-A74B-AFDC80A8B21E,4,1,0,0 -System.Threading.Overlapped.dll,A0439CB6-A5E6-4813-A76C-13F92ADDDED5,4,1,0,0 -System.Threading.Overlapped.dll,82D565AC-E41C-4E29-9939-C031C88EDBDD,4,1,0,0 System.Text.Encoding.CodePages.dll,C142254F-DEB5-46A7-AE43-6F10320D1D1F,4,0,1,0 System.Text.Encoding.CodePages.dll,FD178CD4-EF4F-44D5-9C3F-812B1E25126B,4,0,2,0 System.Text.Encoding.CodePages.dll,F5CCCBEC-E1AD-4DBB-9B44-9B42C86B94B8,4,1,0,0 System.Text.Encoding.CodePages.dll,67D3A14A-8F55-4C9F-9699-EDD0876369DA,4,1,1,0 System.Text.Encoding.CodePages.dll,D2B4F262-31A4-4E80-9CFB-26A2249A735E,4,1,1,0 +System.Threading.Overlapped.dll,9F5D4F09-787A-458A-BA08-553AA71470F1,4,0,0,0 +System.Threading.Overlapped.dll,FCBD003B-2BB4-4940-BAEF-63AF520C2336,4,0,1,0 +System.Threading.Overlapped.dll,87697E71-D192-4F0B-BAD4-02BBC7793005,4,0,2,0 +System.Threading.Overlapped.dll,212BEDF2-E3F5-4D59-8C1A-F4D1C58B46CD,4,1,0,0 +System.Threading.Overlapped.dll,3336A2A3-1772-4EF9-A74B-AFDC80A8B21E,4,1,0,0 +System.Threading.Overlapped.dll,82D565AC-E41C-4E29-9939-C031C88EDBDD,4,1,0,0 +System.Threading.Overlapped.dll,A0439CB6-A5E6-4813-A76C-13F92ADDDED5,4,1,0,0 +System.Threading.Overlapped.dll,E933407E-C846-4413-82C5-09F4BCFA67F1,4,1,0,0 +System.Threading.Overlapped.dll,F4FFC4A6-E694-49D9-81B2-12F2C9A29652,4,1,0,0 diff --git a/mk/Makefile.in b/mk/Makefile.in index 27868fcbe5..e81b34eb5f 100644 --- a/mk/Makefile.in +++ b/mk/Makefile.in @@ -156,6 +156,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -286,8 +288,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/Makefile.am b/mono/Makefile.am index b21df745e0..de9d9acad8 100644 --- a/mono/Makefile.am +++ b/mono/Makefile.am @@ -12,6 +12,10 @@ if MONO_NATIVE native_dirs = native endif +if ENABLE_NETCORE +btls_dirs = +endif + if CROSS_COMPILING SUBDIRS = $(btls_dirs) eglib arch utils cil $(sgen_dirs) metadata mini dis profiler $(native_dirs) else diff --git a/mono/Makefile.in b/mono/Makefile.in index 9337fc43c8..a3b29b0210 100644 --- a/mono/Makefile.in +++ b/mono/Makefile.in @@ -216,6 +216,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -346,8 +348,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -456,6 +460,7 @@ top_srcdir = @top_srcdir@ MAKEFLAGS := $(MAKEFLAGS) --no-builtin-rules @SUPPORT_SGEN_TRUE@sgen_dirs = sgen @BTLS_TRUE@btls_dirs = btls +@ENABLE_NETCORE_TRUE@btls_dirs = @MONO_NATIVE_TRUE@native_dirs = native @CROSS_COMPILING_FALSE@@INSTALL_MONOTOUCH_FALSE@SUBDIRS = $(btls_dirs) eglib arch utils cil $(sgen_dirs) metadata mini dis tests unit-tests benchmark profiler $(native_dirs) @CROSS_COMPILING_FALSE@@INSTALL_MONOTOUCH_TRUE@SUBDIRS = $(btls_dirs) eglib arch utils $(sgen_dirs) metadata mini profiler $(native_dirs) diff --git a/mono/arch/Makefile.in b/mono/arch/Makefile.in index 399859d1bf..fdf7411d8c 100644 --- a/mono/arch/Makefile.in +++ b/mono/arch/Makefile.in @@ -216,6 +216,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -346,8 +348,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/amd64/Makefile.in b/mono/arch/amd64/Makefile.in index 9b6a79ee81..2f592fb0ec 100644 --- a/mono/arch/amd64/Makefile.in +++ b/mono/arch/amd64/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/arm/Makefile.in b/mono/arch/arm/Makefile.in index 27373cd696..a46c3fc268 100644 --- a/mono/arch/arm/Makefile.in +++ b/mono/arch/arm/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/arm64/Makefile.in b/mono/arch/arm64/Makefile.in index 3a3e621440..82d5f4f2f4 100644 --- a/mono/arch/arm64/Makefile.in +++ b/mono/arch/arm64/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/mips/Makefile.in b/mono/arch/mips/Makefile.in index c964a3137c..925ad06d58 100644 --- a/mono/arch/mips/Makefile.in +++ b/mono/arch/mips/Makefile.in @@ -208,6 +208,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -338,8 +340,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/ppc/Makefile.in b/mono/arch/ppc/Makefile.in index 69075779bc..0fdf1e05d4 100644 --- a/mono/arch/ppc/Makefile.in +++ b/mono/arch/ppc/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/ppc/ppc-codegen.h b/mono/arch/ppc/ppc-codegen.h index 25b805a4a0..44f0ce0cb3 100644 --- a/mono/arch/ppc/ppc-codegen.h +++ b/mono/arch/ppc/ppc-codegen.h @@ -754,6 +754,33 @@ my and Ximian's copyright to this code. ;) /* this marks the end of my work, ct */ +/* Introduced in Power ISA 2.02 (P4?) */ +#define ppc_frinx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (392 << 1) | Rc) +#define ppc_frin(c,D,B) ppc_frinx(c,D,B,0) +#define ppc_frind(c,D,B) ppc_frinx(c,D,B,1) + +#define ppc_fripx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (456 << 1) | Rc) +#define ppc_frip(c,D,B) ppc_fripx(c,D,B,0) +#define ppc_fripd(c,D,B) ppc_fripx(c,D,B,1) + +#define ppc_frizx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (424 << 1) | Rc) +#define ppc_friz(c,D,B) ppc_frizx(c,D,B,0) +#define ppc_frizd(c,D,B) ppc_frizx(c,D,B,1) + +#define ppc_frimx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (488 << 1) | Rc) +#define ppc_frim(c,D,B) ppc_frimx(c,D,B,0) +#define ppc_frimd(c,D,B) ppc_frimx(c,D,B,1) + +/* + * Introduced in Power ISA 2.03 (P5) + * This is an A-form instruction like many of the FP arith ops, + * but arranged slightly differently (swap record and reserved area) + */ +#define ppc_isel(c,D,A,B,C) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (15 << 1) | 0) +#define ppc_isellt(c,D,A,B) ppc_isel(c,D,A,B,0) +#define ppc_iselgt(c,D,A,B) ppc_isel(c,D,A,B,1) +#define ppc_iseleq(c,D,A,B) ppc_isel(c,D,A,B,2) + /* PPC64 */ /* The following FP instructions are not are available to 32-bit diff --git a/mono/arch/riscv/Makefile.in b/mono/arch/riscv/Makefile.in index b9ce23d877..cb30fc6788 100644 --- a/mono/arch/riscv/Makefile.in +++ b/mono/arch/riscv/Makefile.in @@ -204,6 +204,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -334,8 +336,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/s390x/Makefile.in b/mono/arch/s390x/Makefile.in index 5a44195813..e331500258 100644 --- a/mono/arch/s390x/Makefile.in +++ b/mono/arch/s390x/Makefile.in @@ -202,6 +202,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -332,8 +334,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/sparc/Makefile.in b/mono/arch/sparc/Makefile.in index 4c9425fda6..850697d042 100644 --- a/mono/arch/sparc/Makefile.in +++ b/mono/arch/sparc/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/arch/x86/Makefile.in b/mono/arch/x86/Makefile.in index 693d096d56..ebe6efccba 100644 --- a/mono/arch/x86/Makefile.in +++ b/mono/arch/x86/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/benchmark/Makefile.in b/mono/benchmark/Makefile.in index 2d0af674c0..cff1ce2ff9 100644 --- a/mono/benchmark/Makefile.in +++ b/mono/benchmark/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/btls/Makefile.in b/mono/btls/Makefile.in index b4ed5271bc..7fc0714ab2 100644 --- a/mono/btls/Makefile.in +++ b/mono/btls/Makefile.in @@ -156,6 +156,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -286,8 +288,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/btls/btls-ssl-ctx.c b/mono/btls/btls-ssl-ctx.c index 8cb4baaa21..a768ee4c6c 100644 --- a/mono/btls/btls-ssl-ctx.c +++ b/mono/btls/btls-ssl-ctx.c @@ -19,6 +19,7 @@ struct MonoBtlsSslCtx { void *instance; MonoBtlsVerifyFunc verify_func; MonoBtlsSelectFunc select_func; + MonoBtlsServerNameFunc server_name_func; }; #define debug_print(ptr,message) \ @@ -295,3 +296,24 @@ mono_btls_ssl_ctx_set_client_ca_list (MonoBtlsSslCtx *ctx, int count, int *sizes SSL_CTX_set_client_CA_list (ctx->ctx, name_list); return 1; } + +static int +server_name_callback (SSL *ssl, int *out_alert, void *arg) +{ + MonoBtlsSslCtx *ctx = (MonoBtlsSslCtx *)arg; + + if (ctx->server_name_func (ctx->instance) == 1) + return SSL_TLSEXT_ERR_OK; + + *out_alert = SSL_AD_USER_CANCELLED; + return SSL_TLSEXT_ERR_ALERT_FATAL; +} + +void +mono_btls_ssl_ctx_set_server_name_callback (MonoBtlsSslCtx *ptr, MonoBtlsServerNameFunc func) +{ + ptr->server_name_func = func; + + SSL_CTX_set_tlsext_servername_callback (ptr->ctx, server_name_callback); + SSL_CTX_set_tlsext_servername_arg (ptr->ctx, ptr); +} diff --git a/mono/btls/btls-ssl-ctx.h b/mono/btls/btls-ssl-ctx.h index 3e903d749d..8874dd9ed0 100644 --- a/mono/btls/btls-ssl-ctx.h +++ b/mono/btls/btls-ssl-ctx.h @@ -31,6 +31,7 @@ typedef struct MonoBtlsSslCtx MonoBtlsSslCtx; typedef int (* MonoBtlsVerifyFunc) (void *instance, int preverify_ok, X509_STORE_CTX *ctx); typedef int (* MonoBtlsSelectFunc) (void *instance, int countIssuers, const int *sizes, void **issuerData); +typedef int (* MonoBtlsServerNameFunc) (void *instance); MONO_API MonoBtlsSslCtx * mono_btls_ssl_ctx_new (void); @@ -84,4 +85,7 @@ mono_btls_ssl_ctx_set_verify_param (MonoBtlsSslCtx *ctx, const MonoBtlsX509Verif MONO_API int mono_btls_ssl_ctx_set_client_ca_list (MonoBtlsSslCtx *ctx, int count, int *sizes, const void **data); +MONO_API void +mono_btls_ssl_ctx_set_server_name_callback (MonoBtlsSslCtx *ctx, MonoBtlsServerNameFunc func); + #endif /* __btls_ssl_ctx__btls_ssl_ctx__ */ diff --git a/mono/cil/Makefile.in b/mono/cil/Makefile.in index 00fdb5d120..df78db7431 100644 --- a/mono/cil/Makefile.in +++ b/mono/cil/Makefile.in @@ -187,6 +187,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -317,8 +319,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/dis/Makefile.in b/mono/dis/Makefile.in index 19969c7555..e9ab3a0492 100644 --- a/mono/dis/Makefile.in +++ b/mono/dis/Makefile.in @@ -267,6 +267,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS := $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -397,8 +399,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/dis/get.c.REMOVED.git-id b/mono/dis/get.c.REMOVED.git-id index 6d786d8d70..44949df0e5 100644 --- a/mono/dis/get.c.REMOVED.git-id +++ b/mono/dis/get.c.REMOVED.git-id @@ -1 +1 @@ -699f303afe3600e4de74df320df376b6c8268859 \ No newline at end of file +3be34fe7fdc6f20494122f604213f0d64473e0ae \ No newline at end of file diff --git a/mono/eglib/Makefile.in b/mono/eglib/Makefile.in index 20892e84f3..5f8c3f4325 100644 --- a/mono/eglib/Makefile.in +++ b/mono/eglib/Makefile.in @@ -308,6 +308,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS := $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) @CXX_ADD_CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -438,8 +440,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/eglib/ghashtable.c b/mono/eglib/ghashtable.c index 93aa37acc3..03ae92ecbc 100644 --- a/mono/eglib/ghashtable.c +++ b/mono/eglib/ghashtable.c @@ -658,7 +658,7 @@ g_int_hash (gconstpointer v1) gboolean g_str_equal (gconstpointer v1, gconstpointer v2) { - return strcmp ((const char*)v1, (const char*)v2) == 0; + return v1 == v2 || strcmp ((const char*)v1, (const char*)v2) == 0; } guint diff --git a/mono/eglib/glib.h b/mono/eglib/glib.h index f0e14ae772..d7911b708e 100644 --- a/mono/eglib/glib.h +++ b/mono/eglib/glib.h @@ -108,8 +108,6 @@ public: #endif -#ifdef __cplusplus - // G++4.4 breaks opeq below without this. #if defined (__GNUC__) || defined (__clang__) #define G_MAY_ALIAS __attribute__((__may_alias__)) @@ -117,6 +115,8 @@ public: #define G_MAY_ALIAS /* nothing */ #endif +#ifdef __cplusplus + // Provide for bit operations on enums, but not all integer operations. // This alleviates a fair number of casts in porting C to C++. @@ -904,6 +904,12 @@ GUnicodeBreakType g_unichar_break_type (gunichar c); #define g_assert(x) (G_LIKELY((x)) ? 1 : (g_assertion_message ("* Assertion at %s:%d, condition `%s' not met\n", __FILE__, __LINE__, #x), 0)) #endif +#ifdef __cplusplus +#define g_static_assert(x) static_assert (x, "") +#else +#define g_static_assert(x) g_assert (x) +#endif + #define g_assert_not_reached() G_STMT_START { g_assertion_message ("* Assertion: should not be reached at %s:%d\n", __FILE__, __LINE__); eg_unreachable(); } G_STMT_END /* f is format -- like printf and scanf diff --git a/mono/eglib/test/Makefile.am b/mono/eglib/test/Makefile.am index 2e5b90d142..d9cc587e93 100644 --- a/mono/eglib/test/Makefile.am +++ b/mono/eglib/test/Makefile.am @@ -43,7 +43,7 @@ assertf_LDADD = ../libeglib.la $(LTLIBICONV) # Something amiss with subdirs ordering? ../libeglib.la: ../goutput.c # etc - make -C .. $(@F) + $(MAKE) -C .. $(@F) run-eglib: all srcdir=`readlink -f $(srcdir)` ./test-eglib diff --git a/mono/eglib/test/Makefile.in b/mono/eglib/test/Makefile.in index cc1233c718..f7451e49ba 100644 --- a/mono/eglib/test/Makefile.in +++ b/mono/eglib/test/Makefile.in @@ -227,6 +227,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ $(GLIB_TEST_FLAGS_COMMON) CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -357,8 +359,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -861,7 +865,7 @@ uninstall-am: # Something amiss with subdirs ordering? ../libeglib.la: ../goutput.c # etc - make -C .. $(@F) + $(MAKE) -C .. $(@F) run-eglib: all srcdir=`readlink -f $(srcdir)` ./test-eglib diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am index 360168fdcf..ae896fae4f 100644 --- a/mono/metadata/Makefile.am +++ b/mono/metadata/Makefile.am @@ -176,9 +176,13 @@ libmono_icall_table_la_SOURCES = \ libmono_icall_table_la_CFLAGS = $(SGEN_DEFINES) @CXX_ADD_CFLAGS@ libmono_icall_table_la_LDFLAGS = $(libmonoldflags) if BITCODE +if WASM +libmono_icall_table_la_LIBADD = # empty to avoid duplicate symbols when enabling dynamic linking +else libmono_icall_table_la_LIBADD = $(glib_libs) ../utils/libmonoutils.la ../sgen/libmonosgen.la libmonoruntimesgen.la endif endif +endif # # This library contains code to generate IL at runtime @@ -196,9 +200,13 @@ libmono_ilgen_la_SOURCES = \ libmono_ilgen_la_CFLAGS = $(SGEN_DEFINES) @CXX_ADD_CFLAGS@ libmono_ilgen_la_LDFLAGS = $(libmonoldflags) if BITCODE +if WASM +libmono_ilgen_la_LIBADD = # empty to avoid duplicate symbols when enabling dynamic linking +else libmono_ilgen_la_LIBADD = $(glib_libs) ../utils/libmonoutils.la ../sgen/libmonosgen.la libmonoruntimesgen.la endif endif +endif CLEANFILES = mono-bundle.stamp @@ -276,9 +284,11 @@ common_sources = \ icall-decl.h \ icall-def.h \ icall-internals.h \ + icall-signatures.h \ icall-table.h \ image.c \ image-internals.h \ + jit-icall-reg.h \ jit-info.c \ loader.c \ loader-internals.h \ @@ -300,12 +310,14 @@ common_sources = \ method-builder.c \ mono-basic-block.c \ mono-basic-block.h \ + mono-config-internals.h \ mono-config.c \ mono-debug.h \ mono-debug.c \ debug-internals.h \ mono-endian.c \ mono-endian.h \ + mono-hash-internals.h \ mono-hash.c \ mono-hash.h \ mono-conc-hash.c \ diff --git a/mono/metadata/Makefile.in.REMOVED.git-id b/mono/metadata/Makefile.in.REMOVED.git-id index 938b6294c1..acab15c8ef 100644 --- a/mono/metadata/Makefile.in.REMOVED.git-id +++ b/mono/metadata/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -27d4f2974394eb3066b91a1228e299995578d9f7 \ No newline at end of file +52322a3f1fdd8058c650e3669bed3b81fa4e96b7 \ No newline at end of file diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 305defc20b..195c4ca517 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -47,6 +47,7 @@ #include <mono/metadata/threadpool.h> #include <mono/metadata/tabledefs.h> #include <mono/metadata/mono-gc.h> +#include <mono/metadata/mono-hash-internals.h> #include <mono/metadata/marshal.h> #include <mono/metadata/marshal-internals.h> #include <mono/metadata/monitor.h> @@ -92,6 +93,12 @@ static gboolean process_guid_set = FALSE; static gboolean no_exec = FALSE; +#ifdef ENABLE_NETCORE +static int n_appctx_props; +static char **appctx_keys; +static char **appctx_values; +#endif + static const char * mono_check_corlib_version_internal (void); @@ -324,9 +331,15 @@ mono_runtime_init_checked (MonoDomain *domain, MonoThreadStartCB start_cb, MonoT mono_gc_init (); /* contexts use GC handles, so they must be initialized after the GC */ +#ifndef ENABLE_NETCORE mono_context_init_checked (domain, error); goto_if_nok (error, exit); mono_context_set_default_context (domain); +#endif + +#ifdef ENABLE_NETCORE + mono_runtime_install_appctx_properties (); +#endif #ifndef DISABLE_SOCKETS mono_network_init (); @@ -635,7 +648,7 @@ copy_app_domain_setup (MonoDomain *domain, MonoAppDomainSetupHandle setup, MonoE MonoAppDomainSetupHandle copy = MONO_HANDLE_CAST (MonoAppDomainSetup, mono_object_new_handle(domain, ads_class, error)); goto_if_nok (error, leave); - mono_domain_set_internal (domain); + mono_domain_set_internal_with_options (domain, TRUE); #define XCOPY_FIELD(type, dst, field, src, error) \ do { \ @@ -674,7 +687,7 @@ copy_app_domain_setup (MonoDomain *domain, MonoAppDomainSetupHandle setup, MonoE #undef XCOPY_FIELD #undef COPY_VAL - mono_domain_set_internal (caller_domain); + mono_domain_set_internal_with_options (caller_domain, TRUE); MONO_HANDLE_ASSIGN (result, copy); leave: @@ -764,6 +777,9 @@ leave: gboolean mono_domain_has_type_resolve (MonoDomain *domain) { +#ifdef ENABLE_NETCORE + return FALSE; +#else static MonoClassField *field = NULL; MonoObject *o; @@ -778,6 +794,7 @@ mono_domain_has_type_resolve (MonoDomain *domain) mono_field_get_value_internal ((MonoObject*)(domain->domain), field, &o); return o != NULL; +#endif } /** @@ -840,6 +857,29 @@ mono_class_get_appdomain_do_type_resolve_method (MonoError *error) return method; } +/** + * mono_class_get_appdomain_do_type_builder_resolve_method: + * + * This routine returns System.AppDomain.DoTypeBuilderResolve. + */ +static MonoMethod * +mono_class_get_appdomain_do_type_builder_resolve_method (MonoError *error) +{ + static MonoMethod *method; // cache + + if (method) + return method; + + // not cached yet, fill cache under caller's lock + + method = mono_class_get_method_from_name_checked (mono_class_get_appdomain_class (), "DoTypeBuilderResolve", -1, 0, error); + + if (method == NULL) + g_warning ("%s method AppDomain.DoTypeBuilderResolve not found. %s\n", __func__, mono_error_get_message (error)); + + return method; +} + /** * mono_domain_try_type_resolve_name: * \param domain application domain in which to resolve the type @@ -886,7 +926,7 @@ exit: * \param domain application domain in which to resolve the type * \param typebuilder A \c System.Reflection.Emit.TypeBuilder; typebuilder.FullName is the name of the type to resolve. * - * This routine invokes the internal \c System.AppDomain.DoTypeResolve and returns + * This routine invokes the internal \c System.AppDomain.DoTypeBuilderResolve and returns * the assembly that matches typebuilder.FullName. * * \returns A \c MonoReflectionAssembly or NULL_HANDLE if not found @@ -902,7 +942,7 @@ mono_domain_try_type_resolve_typebuilder (MonoDomain *domain, MonoReflectionType error_init (error); - MonoMethod * const method = mono_class_get_appdomain_do_type_resolve_method (error); + MonoMethod * const method = mono_class_get_appdomain_do_type_builder_resolve_method (error); goto_if_nok (error, return_null); MonoAppDomainHandle appdomain; @@ -935,25 +975,14 @@ mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot) return res; } -/** - * mono_domain_set: - * \param domain domain - * \param force force setting. - * - * Set the current appdomain to \p domain. If \p force is set, set it even - * if it is being unloaded. - * - * \returns TRUE on success; FALSE if the domain is unloaded - */ gboolean -mono_domain_set (MonoDomain *domain, gboolean force) +mono_domain_set_fast (MonoDomain *domain, gboolean force) { + MONO_REQ_GC_UNSAFE_MODE; if (!force && domain->state == MONO_APPDOMAIN_UNLOADED) return FALSE; - MONO_ENTER_GC_UNSAFE; - mono_domain_set_internal (domain); - MONO_EXIT_GC_UNSAFE; + mono_domain_set_internal_with_options (domain, TRUE); return TRUE; } @@ -1021,7 +1050,7 @@ ves_icall_System_AppDomain_SetData (MonoAppDomainHandle ad, MonoStringHandle nam mono_domain_lock (add); - mono_g_hash_table_insert (add->env, MONO_HANDLE_RAW (name), MONO_HANDLE_RAW (data)); + mono_g_hash_table_insert_internal (add->env, MONO_HANDLE_RAW (name), MONO_HANDLE_RAW (data)); mono_domain_unlock (add); } @@ -2313,6 +2342,47 @@ mono_domain_assembly_search (MonoAssemblyName *aname, return NULL; } +#if ENABLE_NETCORE +MonoReflectionAssemblyHandle +ves_icall_System_Reflection_Assembly_InternalLoad (MonoStringHandle name_handle, MonoStackCrawlMark *stack_mark, gpointer load_Context, MonoError *error) +{ + error_init (error); + MonoDomain *domain = mono_domain_get (); + MonoAssembly *ass = NULL; + MonoAssemblyName aname; + MonoAssemblyByNameRequest req; + MonoAssemblyContextKind asmctx; + MonoImageOpenStatus status = MONO_IMAGE_OK; + gboolean parsed; + char *name; + + asmctx = MONO_ASMCTX_DEFAULT; + mono_assembly_request_prepare (&req.request, sizeof (req), asmctx); + req.basedir = NULL; + req.no_postload_search = TRUE; + + name = mono_string_handle_to_utf8 (name_handle, error); + goto_if_nok (error, fail); + parsed = mono_assembly_name_parse (name, &aname); + g_free (name); + if (!parsed) + goto fail; + + ass = mono_assembly_request_byname (&aname, &req, &status); + if (!ass) + goto fail; + + MonoReflectionAssemblyHandle refass; + refass = mono_assembly_get_object_handle (domain, ass, error); + goto_if_nok (error, fail); + return refass; + +fail: + return MONO_HANDLE_CAST (MonoReflectionAssembly, NULL_HANDLE); +} + +#endif + MonoReflectionAssemblyHandle ves_icall_System_Reflection_Assembly_LoadFrom (MonoStringHandle fname, MonoBoolean refOnly, MonoStackCrawlMark *stack_mark, MonoError *error) { @@ -2588,7 +2658,7 @@ ves_icall_System_AppDomain_InternalIsFinalizingForUnload (gint32 domain_id, Mono } void -ves_icall_System_AppDomain_DoUnhandledException (MonoExceptionHandle exc, MonoError *error) +ves_icall_System_AppDomain_DoUnhandledException (MonoAppDomainHandle ad, MonoExceptionHandle exc, MonoError *error) { mono_unhandled_exception_checked (MONO_HANDLE_CAST (MonoObject, exc), error); mono_error_assert_ok (error); @@ -2628,7 +2698,7 @@ ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomainHandle ad, MonoError* error_init (error); MonoDomain *old_domain = mono_domain_get (); - if (!mono_domain_set (MONO_HANDLE_GETVAL (ad, data), FALSE)) { + if (!mono_domain_set_fast (MONO_HANDLE_GETVAL (ad, data), FALSE)) { mono_error_set_appdomain_unloaded (error); return MONO_HANDLE_CAST (MonoAppDomain, NULL_HANDLE); } @@ -2642,7 +2712,7 @@ ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid, MonoError *er MonoDomain *current_domain = mono_domain_get (); MonoDomain *domain = mono_domain_get_by_id (domainid); - if (!domain || !mono_domain_set (domain, FALSE)) { + if (!domain || !mono_domain_set_fast (domain, FALSE)) { mono_error_set_appdomain_unloaded (error); return MONO_HANDLE_CAST (MonoAppDomain, NULL_HANDLE); } @@ -3001,7 +3071,7 @@ mono_domain_try_unload (MonoDomain *domain, MonoObject **exc) } } - mono_domain_set (domain, FALSE); + mono_domain_set_fast (domain, FALSE); /* Notify OnDomainUnload listeners */ method = mono_class_get_method_from_name_checked (domain->domain->mbr.obj.vtable->klass, "DoDomainUnload", -1, 0, error); g_assert (method); @@ -3018,10 +3088,10 @@ mono_domain_try_unload (MonoDomain *domain, MonoObject **exc) if (*exc) { /* Roll back the state change */ domain->state = MONO_APPDOMAIN_CREATED; - mono_domain_set (caller_domain, FALSE); + mono_domain_set_fast (caller_domain, FALSE); goto exit; } - mono_domain_set (caller_domain, FALSE); + mono_domain_set_fast (caller_domain, FALSE); thread_data = g_new0 (unload_data, 1); thread_data->domain = domain; @@ -3070,3 +3140,54 @@ exit: unload_data_unref (thread_data); HANDLE_FUNCTION_RETURN (); } + +#ifdef ENABLE_NETCORE + +/* Remember properties so they can be be installed in AppContext during runtime init */ +void +mono_runtime_register_appctx_properties (int nprops, const char **keys, const char **values) +{ + n_appctx_props = nprops; + appctx_keys = g_new0 (char*, nprops); + appctx_values = g_new0 (char*, nprops); + + for (int i = 0; i < nprops; ++i) { + appctx_keys [i] = g_strdup (keys [i]); + appctx_values [i] = g_strdup (values [i]); + } +} + +static GENERATE_GET_CLASS_WITH_CACHE (appctx, "System", "AppContext") + +/* Install properties into AppContext */ +void +mono_runtime_install_appctx_properties (void) +{ + ERROR_DECL (error); + gpointer args [3]; + + MonoMethod *setup = mono_class_get_method_from_name_checked (mono_class_get_appctx_class (), "Setup", 3, 0, error); + g_assert (setup); + + // FIXME: TRUSTED_PLATFORM_ASSEMBLIES is very large + + /* internal static unsafe void Setup(char** pNames, char** pValues, int count) */ + args [0] = appctx_keys; + args [1] = appctx_values; + args [2] = &n_appctx_props; + + mono_runtime_invoke_checked (setup, NULL, args, error); + mono_error_assert_ok (error); + + /* No longer needed */ + for (int i = 0; i < n_appctx_props; ++i) { + g_free (appctx_keys [i]); + g_free (appctx_values [i]); + } + g_free (appctx_keys); + g_free (appctx_values); + appctx_keys = NULL; + appctx_values = NULL; +} + +#endif diff --git a/mono/metadata/appdomain.h b/mono/metadata/appdomain.h index 92c8d18005..65848aa7cb 100644 --- a/mono/metadata/appdomain.h +++ b/mono/metadata/appdomain.h @@ -82,10 +82,10 @@ mono_domain_get_id (MonoDomain *domain); MONO_API const char * mono_domain_get_friendly_name (MonoDomain *domain); -MONO_API mono_bool +MONO_API MONO_RT_EXTERNAL_ONLY mono_bool mono_domain_set (MonoDomain *domain, mono_bool force); -MONO_API void +MONO_API MONO_RT_EXTERNAL_ONLY void mono_domain_set_internal (MonoDomain *domain); MONO_API MONO_RT_EXTERNAL_ONLY void diff --git a/mono/metadata/assembly.c.REMOVED.git-id b/mono/metadata/assembly.c.REMOVED.git-id index 68fb96e2a5..b3f704eef5 100644 --- a/mono/metadata/assembly.c.REMOVED.git-id +++ b/mono/metadata/assembly.c.REMOVED.git-id @@ -1 +1 @@ -a80005d333ee51e15456a1238ec415b4ad717f06 \ No newline at end of file +4906f4e90a9307b6fee298873f894058892b94ec \ No newline at end of file diff --git a/mono/metadata/class-init.c.REMOVED.git-id b/mono/metadata/class-init.c.REMOVED.git-id index cff6203ad7..07cd43f239 100644 --- a/mono/metadata/class-init.c.REMOVED.git-id +++ b/mono/metadata/class-init.c.REMOVED.git-id @@ -1 +1 @@ -abc9e416702cf7182da4b350bdf245879a9779e8 \ No newline at end of file +5932f0814faf3ff7a1402ae3a2e8547e3dc030b4 \ No newline at end of file diff --git a/mono/metadata/class-inlines.h b/mono/metadata/class-inlines.h index a3797518de..0b7bf0874e 100644 --- a/mono/metadata/class-inlines.h +++ b/mono/metadata/class-inlines.h @@ -118,4 +118,74 @@ mono_class_has_static_metadata (MonoClass *klass) return m_class_get_type_token (klass) && !m_class_get_image (klass)->dynamic && !mono_class_is_ginst (klass); } +static inline gboolean +m_class_is_abstract (MonoClass *klass) +{ + return (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_ABSTRACT) != 0; +} + +static inline gboolean +m_class_is_interface (MonoClass *klass) +{ + return MONO_CLASS_IS_INTERFACE_INTERNAL (klass); +} + +static inline gboolean +m_class_is_gtd (MonoClass *klass) +{ + return mono_class_is_gtd (klass); +} + +static inline gboolean +m_class_is_string (MonoClass *klass) +{ + return klass == mono_defaults.string_class; +} + +static inline gboolean +m_class_is_primitive (MonoClass *klass) +{ + return mono_type_is_primitive (m_class_get_byval_arg (klass)); +} + +static inline gboolean +m_class_is_native_pointer (MonoClass *klass) +{ + MonoType *t = m_class_get_byval_arg (klass); + + return t->type == MONO_TYPE_PTR || t->type == MONO_TYPE_FNPTR; +} + +static inline gboolean +m_class_is_nullable (MonoClass *klass) +{ + return mono_class_is_nullable (klass); +} + +static inline MonoClass* +m_class_get_nullable_elem_class (MonoClass *klass) +{ + return m_class_get_cast_class (klass); +} + +static inline gboolean +m_class_is_runtime_type (MonoClass *klass) +{ + return klass == mono_defaults.runtimetype_class; +} + +static inline gboolean +m_class_is_auto_layout (MonoClass *klass) +{ + guint32 layout = (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_LAYOUT_MASK); + + return layout == TYPE_ATTRIBUTE_AUTO_LAYOUT; +} + +static inline gboolean +m_class_is_ginst (MonoClass *klass) +{ + return mono_class_is_ginst (klass); +} + #endif diff --git a/mono/metadata/class-internals.h b/mono/metadata/class-internals.h index 6ed3693914..382fd5f7bf 100644 --- a/mono/metadata/class-internals.h +++ b/mono/metadata/class-internals.h @@ -78,6 +78,7 @@ struct _MonoMethod { unsigned int is_inflated:1; /* whether we're a MonoMethodInflated */ unsigned int skip_visibility:1; /* whenever to skip JIT visibility checks */ unsigned int verification_success:1; /* whether this method has been verified successfully.*/ + unsigned int is_reabstracted:1; /* whenever this is a reabstraction of another interface */ signed int slot : 16; /* @@ -329,6 +330,11 @@ int mono_class_interface_offset_with_variance (MonoClass *klass, MonoClass *itf, typedef gpointer MonoRuntimeGenericContext; +typedef enum { + /* array or string */ + MONO_VT_FLAG_ARRAY_OR_STRING = (1 << 0) +} MonoVTableFlags; + /* the interface_offsets array is stored in memory before this struct */ struct MonoVTable { MonoClass *klass; @@ -338,12 +344,14 @@ struct MonoVTable { */ MonoGCDescriptor gc_descr; MonoDomain *domain; /* each object/vtable belongs to exactly one domain */ - gpointer type; /* System.Type type for klass */ + gpointer type; /* System.Type type for klass */ guint8 *interface_bitmap; guint32 max_interface_id; guint8 rank; /* Keep this a guint8, the jit depends on it */ guint8 initialized; /* cctor has been run */ + /* Keep this a guint8, the jit depends on it */ + guint8 flags; /* MonoVTableFlags */ guint remote : 1; /* class is remotely activated */ guint init_failed : 1; /* cctor execution failed */ guint has_static_fields : 1; /* pointer to the data stored at the end of the vtable array */ @@ -569,6 +577,9 @@ typedef struct MonoCachedClassInfo { } MonoCachedClassInfo; typedef struct { + // Name and func fields double as "inited". + // That is, any initialized MonoJitICallInfo must + // have both of them to be non-NULL. const char *name; gconstpointer func; gconstpointer wrapper; @@ -807,6 +818,9 @@ mono_class_has_special_static_fields (MonoClass *klass); const char* mono_class_get_field_default_value (MonoClassField *field, MonoTypeEnum *def_type); +MonoProperty* +mono_class_get_property_from_name_internal (MonoClass *klass, const char *name); + const char* mono_class_get_property_default_value (MonoProperty *property, MonoTypeEnum *def_type); @@ -1004,6 +1018,7 @@ GENERATE_GET_CLASS_WITH_CACHE_DECL (appdomain) GENERATE_GET_CLASS_WITH_CACHE_DECL (appdomain_setup) GENERATE_GET_CLASS_WITH_CACHE_DECL (appdomain_unloaded_exception) +GENERATE_TRY_GET_CLASS_WITH_CACHE_DECL (appdomain_unloaded_exception) GENERATE_GET_CLASS_WITH_CACHE_DECL (valuetype) @@ -1059,46 +1074,29 @@ MONO_API gboolean mono_metadata_load_generic_param_constraints_checked (MonoImage *image, guint32 token, MonoGenericContainer *container, MonoError *error); -MonoMethodSignature* -mono_create_icall_signature (const char *sigstr); - -MonoJitICallInfo * -mono_register_jit_icall (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save); - -MonoJitICallInfo * -mono_register_jit_icall_full (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean no_wrapper, const char *c_symbol); +// This is the "real" function for registering JIT icalls. All others are one line wrappers that call it, +// i.e. filling in info or c_symbol. +void +mono_register_jit_icall_info (MonoJitICallInfo *info, gconstpointer func, const char *name, + MonoMethodSignature *sig, gboolean no_wrapper, const char *c_symbol); #ifdef __cplusplus template <typename T> -inline MonoJitICallInfo * -mono_register_jit_icall (T func, const char *name, MonoMethodSignature *sig, gboolean is_save) +inline void +mono_register_jit_icall_info (MonoJitICallInfo *info, T func, const char *name, MonoMethodSignature *sig, gboolean no_wrapper, const char *c_symbol) { - return mono_register_jit_icall ((gconstpointer)func, name, sig, is_save); -} - -template <typename T> -inline MonoJitICallInfo * -mono_register_jit_icall_full (T func, const char *name, MonoMethodSignature *sig, gboolean no_wrapper, const char *c_symbol) -{ - return mono_register_jit_icall_full ((gconstpointer)func, name, sig, no_wrapper, c_symbol); + mono_register_jit_icall_info (info, (gconstpointer)func, name, sig, no_wrapper, c_symbol); } #endif // __cplusplus +#define mono_register_jit_icall(func, sig, no_wrapper) (mono_register_jit_icall_info (&mono_get_jit_icall_info ()->func, func, #func, (sig), (no_wrapper), NULL)) + void mono_register_jit_icall_wrapper (MonoJitICallInfo *info, gconstpointer wrapper); -MonoJitICallInfo * -mono_find_jit_icall_by_name (const char *name) MONO_LLVM_INTERNAL; - MonoJitICallInfo * mono_find_jit_icall_by_addr (gconstpointer addr) MONO_LLVM_INTERNAL; -GHashTable* -mono_get_jit_icall_info (void); - -const char* -mono_lookup_jit_icall_symbol (const char *name); - gboolean mono_class_set_type_load_failure (MonoClass *klass, const char * fmt, ...) MONO_ATTR_FORMAT_PRINTF(2,3); @@ -1126,8 +1124,8 @@ MonoMethodSignature *mono_metadata_signature_deep_dup (MonoImage *image, MonoMet MONO_API void mono_image_init_name_cache (MonoImage *image); -gboolean mono_class_is_nullable (MonoClass *klass); -MonoClass *mono_class_get_nullable_param (MonoClass *klass); +MonoClass* +mono_class_get_nullable_param_internal (MonoClass *klass); /* object debugging functions, for use inside gdb */ MONO_API void mono_object_describe (MonoObject *obj); @@ -1221,6 +1219,9 @@ mono_class_has_variant_generic_params (MonoClass *klass); gboolean mono_class_is_variant_compatible (MonoClass *klass, MonoClass *oklass, gboolean check_for_reference_conv); +gboolean +mono_class_is_subclass_of_internal (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces); + mono_bool mono_class_is_assignable_from_internal (MonoClass *klass, MonoClass *oklass); @@ -1297,7 +1298,7 @@ mono_class_has_failure (const MonoClass *klass); /* Kind specific accessors */ MonoGenericClass* -mono_class_get_generic_class (MonoClass *klass); +mono_class_get_generic_class (MonoClass *klass) MONO_LLVM_INTERNAL; MonoGenericClass* mono_class_try_get_generic_class (MonoClass *klass); @@ -1462,7 +1463,10 @@ gboolean mono_class_init_checked (MonoClass *klass, MonoError *error); MonoType* -mono_class_enum_basetype_internal (MonoClass *klass); +mono_class_enum_basetype_internal (MonoClass *klass) MONO_LLVM_INTERNAL; + +// Enum and static storage for JIT icalls. +#include "jit-icall-reg.h" /*Now that everything has been defined, let's include the inline functions */ #include <mono/metadata/class-inlines.h> diff --git a/mono/metadata/class.c.REMOVED.git-id b/mono/metadata/class.c.REMOVED.git-id index c2a3725784..f6fe5bdf22 100644 --- a/mono/metadata/class.c.REMOVED.git-id +++ b/mono/metadata/class.c.REMOVED.git-id @@ -1 +1 @@ -72854bf3e52ac5442830bcdbb99f891aa57f0b3d \ No newline at end of file +8eae50bebd4e91c6c405c2123a59d342e454e9a1 \ No newline at end of file diff --git a/mono/metadata/class.h b/mono/metadata/class.h index 6d2abe70d4..9eac22e4f3 100644 --- a/mono/metadata/class.h +++ b/mono/metadata/class.h @@ -92,7 +92,7 @@ mono_class_get_field_token (MonoClassField *field); MONO_API uint32_t mono_class_get_event_token (MonoEvent *event); -MONO_API MonoProperty* +MONO_API MONO_RT_EXTERNAL_ONLY MonoProperty * mono_class_get_property_from_name (MonoClass *klass, const char *name); MONO_API uint32_t @@ -119,7 +119,7 @@ mono_class_min_align (MonoClass *klass); MONO_API MONO_RT_EXTERNAL_ONLY MonoClass * mono_class_from_mono_type (MonoType *type); -MONO_API mono_bool +MONO_API MONO_RT_EXTERNAL_ONLY mono_bool mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, mono_bool check_interfaces); @@ -220,7 +220,7 @@ MONO_API MONO_RT_EXTERNAL_ONLY mono_bool mono_class_is_delegate (MonoClass* klass); -MONO_API mono_bool +MONO_API MONO_RT_EXTERNAL_ONLY mono_bool mono_class_implements_interface (MonoClass* klass, MonoClass* iface); /* MonoClassField accessors */ @@ -292,6 +292,12 @@ mono_method_can_access_field (MonoMethod *method, MonoClassField *field); MONO_API mono_bool mono_method_can_access_method (MonoMethod *method, MonoMethod *called); +MONO_API mono_bool +mono_class_is_nullable (MonoClass *klass); + +MONO_API MONO_RT_EXTERNAL_ONLY MonoClass* +mono_class_get_nullable_param (MonoClass *klass); + MONO_END_DECLS #endif /* _MONO_CLI_CLASS_H_ */ diff --git a/mono/metadata/cominterop.c.REMOVED.git-id b/mono/metadata/cominterop.c.REMOVED.git-id index ee77c80efe..0289ee6250 100644 --- a/mono/metadata/cominterop.c.REMOVED.git-id +++ b/mono/metadata/cominterop.c.REMOVED.git-id @@ -1 +1 @@ -8be260317c039843be609da4b9f744d8c7d27bb5 \ No newline at end of file +84131ee44689dab68ed6e1bd2ac0f0e8dd24792e \ No newline at end of file diff --git a/mono/metadata/coree.c b/mono/metadata/coree.c index bb7de96af7..861c01d356 100644 --- a/mono/metadata/coree.c +++ b/mono/metadata/coree.c @@ -103,7 +103,7 @@ BOOL STDMETHODCALLTYPE _CorDllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpRes image = mono_image_open (file_name, NULL); if (image) { - image->has_entry_point = TRUE; + image->storage->has_entry_point = TRUE; mono_close_exe_image (); /* Decrement reference count to zero. (Image will not be closed.) */ mono_image_close (image); @@ -954,7 +954,7 @@ mono_load_coree (const char* exe_file_name) void mono_fixup_exe_image (MonoImage* image) { - if (!init_from_coree && image && image->is_module_handle) + if (!init_from_coree && image && m_image_is_module_handle (image)) MonoFixupExe ((HMODULE) image->raw_data); } diff --git a/mono/metadata/culture-info.h b/mono/metadata/culture-info.h index 69e9005e1e..38b17cd6ca 100644 --- a/mono/metadata/culture-info.h +++ b/mono/metadata/culture-info.h @@ -27,110 +27,144 @@ typedef guint16 stridx_t; typedef struct { - const stridx_t month_day_pattern; - const stridx_t am_designator; - const stridx_t pm_designator; + stridx_t month_day_pattern; + stridx_t am_designator; + stridx_t pm_designator; - const stridx_t day_names [NUM_DAYS]; - const stridx_t abbreviated_day_names [NUM_DAYS]; - const stridx_t shortest_day_names [NUM_DAYS]; - const stridx_t month_names [NUM_MONTHS]; - const stridx_t month_genitive_names [NUM_MONTHS]; - const stridx_t abbreviated_month_names [NUM_MONTHS]; - const stridx_t abbreviated_month_genitive_names [NUM_MONTHS]; + stridx_t day_names [NUM_DAYS]; + stridx_t abbreviated_day_names [NUM_DAYS]; + stridx_t shortest_day_names [NUM_DAYS]; + stridx_t month_names [NUM_MONTHS]; + stridx_t month_genitive_names [NUM_MONTHS]; + stridx_t abbreviated_month_names [NUM_MONTHS]; + stridx_t abbreviated_month_genitive_names [NUM_MONTHS]; - const gint8 calendar_week_rule; - const gint8 first_day_of_week; + gint8 calendar_week_rule; + gint8 first_day_of_week; - const stridx_t date_separator; - const stridx_t time_separator; + stridx_t date_separator; + stridx_t time_separator; - const stridx_t short_date_patterns [NUM_SHORT_DATE_PATTERNS]; - const stridx_t long_date_patterns [NUM_LONG_DATE_PATTERNS]; - const stridx_t short_time_patterns [NUM_SHORT_TIME_PATTERNS]; - const stridx_t long_time_patterns [NUM_LONG_TIME_PATTERNS]; - const stridx_t year_month_patterns [NUM_YEAR_MONTH_PATTERNS]; + stridx_t short_date_patterns [NUM_SHORT_DATE_PATTERNS]; + stridx_t long_date_patterns [NUM_LONG_DATE_PATTERNS]; + stridx_t short_time_patterns [NUM_SHORT_TIME_PATTERNS]; + stridx_t long_time_patterns [NUM_LONG_TIME_PATTERNS]; + stridx_t year_month_patterns [NUM_YEAR_MONTH_PATTERNS]; } DateTimeFormatEntry; typedef struct { - const stridx_t currency_decimal_separator; - const stridx_t currency_group_separator; - const stridx_t number_decimal_separator; - const stridx_t number_group_separator; + // 12x ushort -- 6 ints + stridx_t currency_decimal_separator; + stridx_t currency_group_separator; + stridx_t number_decimal_separator; + stridx_t number_group_separator; - const stridx_t currency_symbol; - const stridx_t percent_symbol; - const stridx_t nan_symbol; - const stridx_t per_mille_symbol; - const stridx_t negative_infinity_symbol; - const stridx_t positive_infinity_symbol; + stridx_t currency_symbol; + stridx_t percent_symbol; + stridx_t nan_symbol; + stridx_t per_mille_symbol; + stridx_t negative_infinity_symbol; + stridx_t positive_infinity_symbol; - const stridx_t negative_sign; - const stridx_t positive_sign; + stridx_t negative_sign; + stridx_t positive_sign; - const gint8 currency_negative_pattern; - const gint8 currency_positive_pattern; - const gint8 percent_negative_pattern; - const gint8 percent_positive_pattern; - const gint8 number_negative_pattern; + // 7x gint8 -- FIXME expand to 8, or sort by size. + // For this reason, copy the data to a simpler "managed" form. + gint8 currency_negative_pattern; + gint8 currency_positive_pattern; + gint8 percent_negative_pattern; + gint8 percent_positive_pattern; + gint8 number_negative_pattern; - const gint8 currency_decimal_digits; - const gint8 number_decimal_digits; + gint8 currency_decimal_digits; + gint8 number_decimal_digits; - const gint currency_group_sizes [GROUP_SIZE]; - const gint number_group_sizes [GROUP_SIZE]; + gint currency_group_sizes [2]; + gint number_group_sizes [2]; } NumberFormatEntry; +// Due to the questionable layout of NumberFormatEntry, in particular +// 7x byte, make something more guaranteed to match between native and managed. +// mono/metadta/culture-info.h NumberFormatEntryManaged must match +// mcs/class/corlib/ReferenceSources/CultureData.cs NumberFormatEntryManaged. +// This is sorted alphabetically. +struct NumberFormatEntryManaged { + gint32 currency_decimal_digits; + gint32 currency_decimal_separator; + gint32 currency_group_separator; + gint32 currency_group_sizes0; + gint32 currency_group_sizes1; + gint32 currency_negative_pattern; + gint32 currency_positive_pattern; + gint32 currency_symbol; + gint32 nan_symbol; + gint32 negative_infinity_symbol; + gint32 negative_sign; + gint32 number_decimal_digits; + gint32 number_decimal_separator; + gint32 number_group_separator; + gint32 number_group_sizes0; + gint32 number_group_sizes1; + gint32 number_negative_pattern; + gint32 per_mille_symbol; + gint32 percent_negative_pattern; + gint32 percent_positive_pattern; + gint32 percent_symbol; + gint32 positive_infinity_symbol; + gint32 positive_sign; +}; + typedef struct { - const gint ansi; - const gint ebcdic; - const gint mac; - const gint oem; - const MonoBoolean is_right_to_left; - const char list_sep; + gint ansi; + gint ebcdic; + gint mac; + gint oem; + MonoBoolean is_right_to_left; + char list_sep; } TextInfoEntry; typedef struct { - const gint16 lcid; - const gint16 parent_lcid; - const gint16 calendar_type; - const gint16 region_entry_index; - const stridx_t name; - const stridx_t englishname; - const stridx_t nativename; - const stridx_t win3lang; - const stridx_t iso3lang; - const stridx_t iso2lang; - const stridx_t territory; - const stridx_t native_calendar_names [NUM_CALENDARS]; + gint16 lcid; + gint16 parent_lcid; + gint16 calendar_type; + gint16 region_entry_index; + stridx_t name; + stridx_t englishname; + stridx_t nativename; + stridx_t win3lang; + stridx_t iso3lang; + stridx_t iso2lang; + stridx_t territory; + stridx_t native_calendar_names [NUM_CALENDARS]; - const gint16 datetime_format_index; - const gint16 number_format_index; - - const TextInfoEntry text_info; + gint16 datetime_format_index; + gint16 number_format_index; + + TextInfoEntry text_info; } CultureInfoEntry; typedef struct { - const stridx_t name; - const gint16 culture_entry_index; + stridx_t name; + gint16 culture_entry_index; } CultureInfoNameEntry; typedef struct { - const gint16 geo_id; - const stridx_t iso2name; - const stridx_t iso3name; - const stridx_t win3name; - const stridx_t english_name; - const stridx_t native_name; - const stridx_t currency_symbol; - const stridx_t iso_currency_symbol; - const stridx_t currency_english_name; - const stridx_t currency_native_name; + gint16 geo_id; + stridx_t iso2name; + stridx_t iso3name; + stridx_t win3name; + stridx_t english_name; + stridx_t native_name; + stridx_t currency_symbol; + stridx_t iso_currency_symbol; + stridx_t currency_english_name; + stridx_t currency_native_name; } RegionInfoEntry; typedef struct { - const stridx_t name; - const gint16 region_entry_index; + stridx_t name; + gint16 region_entry_index; } RegionInfoNameEntry; #endif diff --git a/mono/metadata/custom-attrs.c b/mono/metadata/custom-attrs.c index a7d5664045..61afd21512 100644 --- a/mono/metadata/custom-attrs.c +++ b/mono/metadata/custom-attrs.c @@ -15,6 +15,7 @@ #include <config.h> #include "mono/metadata/assembly.h" #include "mono/metadata/class-init.h" +#include "mono/metadata/class-internals.h" #include "mono/metadata/gc-internals.h" #include "mono/metadata/mono-endian.h" #include "mono/metadata/object-internals.h" @@ -956,7 +957,7 @@ create_custom_attr (MonoImage *image, MonoMethod *method, const guchar *data, gu mono_field_set_value_internal (MONO_HANDLE_RAW (attr), field, val); // FIXMEcoop } else if (named_type == CATTR_TYPE_PROPERTY) { MonoProperty *prop; - prop = mono_class_get_property_from_name (mono_handle_class (attr), name); + prop = mono_class_get_property_from_name_internal (mono_handle_class (attr), name); if (!prop) { mono_error_set_generic_error (error, "System.Reflection", "CustomAttributeFormatException", "Could not find a property with name %s", name); goto fail; @@ -1142,7 +1143,7 @@ mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *meth /* Named arg is a property */ MonoObject *obj; MonoType *prop_type; - MonoProperty *prop = mono_class_get_property_from_name (attrklass, name); + MonoProperty *prop = mono_class_get_property_from_name_internal (attrklass, name); if (!prop || !prop->set) { g_free (name); @@ -1292,7 +1293,7 @@ mono_reflection_create_custom_attr_data_args_noalloc (MonoImage *image, MonoMeth } else if (named_type == CATTR_TYPE_PROPERTY) { /* Named arg is a property */ MonoType *prop_type; - MonoProperty *prop = mono_class_get_property_from_name (attrklass, name); + MonoProperty *prop = mono_class_get_property_from_name_internal (attrklass, name); if (!prop || !prop->set) { g_free (name); @@ -1372,10 +1373,10 @@ reflection_resolve_custom_attribute_data (MonoReflectionMethod *ref_method, Mono for (i = 0; i < mono_array_length_internal (namedargs); ++i) { MonoObject *obj = mono_array_get_internal (namedargs, MonoObject*, i); - MonoObject *typedarg, *namedarg, *minfo; + MonoObject *namedarg, *minfo; if (arginfo [i].prop) { - minfo = (MonoObject*)mono_property_get_object_checked (domain, NULL, arginfo [i].prop, error); + minfo = (MonoObject*)mono_property_get_object_checked (domain, arginfo [i].prop->parent, arginfo [i].prop, error); if (!minfo) goto leave; } else { @@ -1383,9 +1384,13 @@ reflection_resolve_custom_attribute_data (MonoReflectionMethod *ref_method, Mono goto_if_nok (error, leave); } - typedarg = create_cattr_typed_arg (arginfo [i].type, obj, error); +#if ENABLE_NETCORE + namedarg = create_cattr_named_arg (minfo, obj, error); +#else + MonoObject* typedarg = create_cattr_typed_arg (arginfo [i].type, obj, error); goto_if_nok (error, leave); namedarg = create_cattr_named_arg (minfo, typedarg, error); +#endif goto_if_nok (error, leave); mono_array_setref_internal (namedargs, i, namedarg); @@ -2102,11 +2107,15 @@ mono_reflection_get_custom_attrs_info_checked (MonoObjectHandle obj, MonoError * goto_if_nok (error, leave); } else if (strcmp ("ParameterInfo", klass_name) == 0 || strcmp ("RuntimeParameterInfo", klass_name) == 0) { MonoReflectionParameterHandle param = MONO_HANDLE_CAST (MonoReflectionParameter, obj); - MonoObjectHandle member_impl = MONO_HANDLE_NEW_GET (MonoObject, param, MemberImpl); + + MonoObjectHandle member_impl = MONO_HANDLE_NEW (MonoObject, NULL); + int position; + mono_reflection_get_param_info_member_and_pos (param, member_impl, &position); + MonoClass *member_class = mono_handle_class (member_impl); if (mono_class_is_reflection_method_or_constructor (member_class)) { MonoReflectionMethodHandle rmethod = MONO_HANDLE_CAST (MonoReflectionMethod, member_impl); - cinfo = mono_custom_attrs_from_param_checked (MONO_HANDLE_GETVAL (rmethod, method), MONO_HANDLE_GETVAL (param, PositionImpl) + 1, error); + cinfo = mono_custom_attrs_from_param_checked (MONO_HANDLE_GETVAL (rmethod, method), position + 1, error); goto_if_nok (error, leave); } else if (mono_is_sr_mono_property (member_class)) { MonoReflectionPropertyHandle prop = MONO_HANDLE_CAST (MonoReflectionProperty, member_impl); @@ -2116,7 +2125,7 @@ mono_reflection_get_custom_attrs_info_checked (MonoObjectHandle obj, MonoError * method = property->set; g_assert (method); - cinfo = mono_custom_attrs_from_param_checked (method, MONO_HANDLE_GETVAL (param, PositionImpl) + 1, error); + cinfo = mono_custom_attrs_from_param_checked (method, position + 1, error); goto_if_nok (error, leave); } #ifndef DISABLE_REFLECTION_EMIT @@ -2155,10 +2164,15 @@ mono_reflection_get_custom_attrs_info_checked (MonoObjectHandle obj, MonoError * MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, mb, cattrs); cinfo = mono_custom_attrs_from_builders_handle (NULL, &dynamic_image->image, cattrs); } else if (strcmp ("ConstructorBuilder", klass_name) == 0) { +#ifdef ENABLE_NETCORE + mono_error_set_not_supported (error, ""); + goto leave; +#else MonoReflectionCtorBuilderHandle cb = MONO_HANDLE_CAST (MonoReflectionCtorBuilder, obj); MonoMethod *mhandle = MONO_HANDLE_GETVAL (cb, mhandle); MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, cb, cattrs); cinfo = mono_custom_attrs_from_builders_handle (NULL, m_class_get_image (mhandle->klass), cattrs); +#endif } else if (strcmp ("MethodBuilder", klass_name) == 0) { MonoReflectionMethodBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionMethodBuilder, obj); MonoMethod *mhandle = MONO_HANDLE_GETVAL (mb, mhandle); diff --git a/mono/metadata/debug-helpers.c b/mono/metadata/debug-helpers.c index be995b490a..e5fc4e17b0 100644 --- a/mono/metadata/debug-helpers.c +++ b/mono/metadata/debug-helpers.c @@ -110,6 +110,24 @@ find_system_class (const char *name) return NULL; } +static void +mono_custom_modifiers_get_desc (GString *res, const MonoType *type, gboolean include_namespace) +{ + ERROR_DECL (error); + int count = mono_type_custom_modifier_count (type); + for (int i = 0; i < count; ++i) { + gboolean required; + MonoType *cmod_type = mono_type_get_custom_modifier (type, i, &required, error); + mono_error_assert_ok (error); + if (required) + g_string_append (res, " modreq("); + else + g_string_append (res, " modopt("); + mono_type_get_desc (res, cmod_type, include_namespace); + g_string_append (res, ")"); + } +} + void mono_type_get_desc (GString *res, MonoType *type, gboolean include_namespace) { @@ -214,6 +232,9 @@ mono_type_get_desc (GString *res, MonoType *type, gboolean include_namespace) default: break; } + if (type->has_cmods) { + mono_custom_modifiers_get_desc (res, type, include_namespace); + } if (type->byref) g_string_append_c (res, '&'); } diff --git a/mono/metadata/debug-internals.h b/mono/metadata/debug-internals.h index 891a196267..5e00b32c02 100644 --- a/mono/metadata/debug-internals.h +++ b/mono/metadata/debug-internals.h @@ -73,7 +73,9 @@ void mono_debugger_lock (void); void mono_debugger_unlock (void); void -mono_debug_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, GPtrArray **source_file_list, int **source_files, MonoSymSeqPoint **seq_points, int *n_seq_points); +mono_debug_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, + GPtrArray **source_file_list, int **source_files, + MonoSymSeqPoint **seq_points, int *n_seq_points) MONO_LLVM_INTERNAL; MONO_API void mono_debug_free_locals (MonoDebugLocalsInfo *info); diff --git a/mono/metadata/domain-internals.h b/mono/metadata/domain-internals.h index 0ca0d2ff62..00c932043c 100644 --- a/mono/metadata/domain-internals.h +++ b/mono/metadata/domain-internals.h @@ -647,4 +647,13 @@ mono_assembly_has_reference_assembly_attribute (MonoAssembly *assembly, MonoErro GPtrArray* mono_domain_get_assemblies (MonoDomain *domain, gboolean refonly); +void +mono_runtime_register_appctx_properties (int nprops, const char **keys, const char **values); + +void +mono_runtime_install_appctx_properties (void); + +gboolean +mono_domain_set_fast (MonoDomain *domain, gboolean force); + #endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */ diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c index 741a4d8249..6ab116aac7 100644 --- a/mono/metadata/domain.c +++ b/mono/metadata/domain.c @@ -39,6 +39,7 @@ #include <mono/metadata/metadata-internals.h> #include <mono/metadata/appdomain.h> #include <mono/metadata/mono-config.h> +#include <mono/metadata/mono-hash-internals.h> #include <mono/metadata/threads-types.h> #include <mono/metadata/runtime.h> #include <mono/metadata/w32mutex.h> @@ -436,14 +437,14 @@ mono_domain_create (void) domain->mp = mono_mempool_new (); domain->code_mp = mono_code_manager_new (); domain->lock_free_mp = lock_free_mempool_new (); - domain->env = mono_g_hash_table_new_type ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Environment Variable Table"); + domain->env = mono_g_hash_table_new_type_internal ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Environment Variable Table"); domain->domain_assemblies = NULL; domain->assembly_bindings = NULL; domain->assembly_bindings_parsed = FALSE; domain->class_vtable_array = g_ptr_array_new (); domain->proxy_vtable_hash = g_hash_table_new ((GHashFunc)mono_ptrarray_hash, (GCompareFunc)mono_ptrarray_equal); mono_jit_code_hash_init (&domain->jit_code_hash); - domain->ldstr_table = mono_g_hash_table_new_type ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain String Pool Table"); + domain->ldstr_table = mono_g_hash_table_new_type_internal ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain String Pool Table"); domain->num_jit_info_table_duplicates = 0; domain->jit_info_table = mono_jit_info_table_new (domain); domain->jit_info_free_queue = NULL; @@ -709,8 +710,13 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * mono_defaults.thread_class = mono_class_load_from_name ( mono_defaults.corlib, "System.Threading", "Thread"); +#ifdef ENABLE_NETCORE + /* There is only one thread class */ + mono_defaults.internal_thread_class = mono_defaults.thread_class; +#else mono_defaults.internal_thread_class = mono_class_load_from_name ( mono_defaults.corlib, "System.Threading", "InternalThread"); +#endif mono_defaults.appdomain_class = mono_class_get_appdomain_class (); @@ -741,8 +747,13 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * mono_defaults.method_info_class = mono_class_load_from_name ( mono_defaults.corlib, "System.Reflection", "MethodInfo"); +#ifdef ENABLE_NETCORE + mono_defaults.stack_frame_class = mono_class_load_from_name ( + mono_defaults.corlib, "System.Diagnostics", "MonoStackFrame"); +#else mono_defaults.stack_frame_class = mono_class_load_from_name ( mono_defaults.corlib, "System.Diagnostics", "StackFrame"); +#endif mono_defaults.marshal_class = mono_class_load_from_name ( mono_defaults.corlib, "System.Runtime.InteropServices", "Marshal"); @@ -776,7 +787,6 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * mono_defaults.generic_ienumerator_class = mono_class_load_from_name ( mono_defaults.corlib, "System.Collections.Generic", "IEnumerator`1"); -#ifndef ENABLE_NETCORE ERROR_DECL (error); MonoClass *threadpool_wait_callback_class = mono_class_load_from_name ( @@ -785,7 +795,6 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * mono_defaults.threadpool_perform_wait_callback_method = mono_class_get_method_from_name_checked ( threadpool_wait_callback_class, "PerformWaitCallback", 0, 0, error); mono_error_assert_ok (error); -#endif domain->friendly_name = g_path_get_basename (filename); @@ -947,18 +956,6 @@ mono_domain_set_internal_with_options (MonoDomain *domain, gboolean migrate_exce } } -/** - * mono_domain_set_internal: - * \param domain the new domain - * - * Sets the current domain to \p domain. - */ -void -mono_domain_set_internal (MonoDomain *domain) -{ - mono_domain_set_internal_with_options (domain, TRUE); -} - /** * mono_domain_foreach: * \param func function to invoke with the domain data @@ -1036,9 +1033,9 @@ mono_domain_assembly_open_internal (MonoDomain *domain, const char *name) if (domain != mono_domain_get ()) { current = mono_domain_get (); - mono_domain_set (domain, FALSE); + mono_domain_set_fast (domain, FALSE); ass = mono_assembly_request_open (name, &req, NULL); - mono_domain_set (current, FALSE); + mono_domain_set_fast (current, FALSE); } else { ass = mono_assembly_request_open (name, &req, NULL); } diff --git a/mono/metadata/dynamic-image.c b/mono/metadata/dynamic-image.c index dfc682a864..451ba99447 100644 --- a/mono/metadata/dynamic-image.c +++ b/mono/metadata/dynamic-image.c @@ -21,6 +21,7 @@ #include "mono/metadata/dynamic-stream-internals.h" #include "mono/metadata/gc-internals.h" #include "mono/metadata/metadata-internals.h" +#include "mono/metadata/mono-hash-internals.h" #include "mono/metadata/profiler-private.h" #include "mono/metadata/reflection-internals.h" #include "mono/metadata/sre-internals.h" @@ -167,7 +168,7 @@ mono_dynamic_image_register_token (MonoDynamicImage *assembly, guint32 token, Mo g_assert_not_reached (); } } - mono_g_hash_table_insert (assembly->tokens, GUINT_TO_POINTER (token), MONO_HANDLE_RAW (obj)); + mono_g_hash_table_insert_internal (assembly->tokens, GUINT_TO_POINTER (token), MONO_HANDLE_RAW (obj)); dynamic_image_unlock (assembly); } #else @@ -358,19 +359,19 @@ mono_dynamic_image_create (MonoDynamicAssembly *assembly, char *assembly_name, c mono_image_init (&image->image); - image->token_fixups = mono_g_hash_table_new_type ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Fixup Table"); + image->token_fixups = mono_g_hash_table_new_type_internal ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Fixup Table"); image->method_to_table_idx = g_hash_table_new (NULL, NULL); image->field_to_table_idx = g_hash_table_new (NULL, NULL); image->method_aux_hash = g_hash_table_new (NULL, NULL); image->vararg_aux_hash = g_hash_table_new (NULL, NULL); image->handleref = g_hash_table_new (NULL, NULL); - image->tokens = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Table"); - image->generic_def_objects = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Generic Definition Table"); + image->tokens = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Table"); + image->generic_def_objects = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Generic Definition Table"); image->typespec = g_hash_table_new ((GHashFunc)mono_metadata_type_hash, (GCompareFunc)mono_metadata_type_equal); image->typeref = g_hash_table_new ((GHashFunc)mono_metadata_type_hash, (GCompareFunc)mono_metadata_type_equal); image->blob_cache = g_hash_table_new ((GHashFunc)mono_blob_entry_hash, (GCompareFunc)mono_blob_entry_equal); image->gen_params = g_ptr_array_new (); - image->remapped_tokens = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Remapped Token Table"); + image->remapped_tokens = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Remapped Token Table"); /*g_print ("string heap create for image %p (%s)\n", image, module_name);*/ string_heap_init (&image->sheap); diff --git a/mono/metadata/exception-internals.h b/mono/metadata/exception-internals.h index 429fd6921f..7164ffc079 100644 --- a/mono/metadata/exception-internals.h +++ b/mono/metadata/exception-internals.h @@ -63,6 +63,12 @@ mono_exception_new_by_name_msg (MonoImage *image, const char *name_space, MonoExceptionHandle mono_exception_new_argument (const char *arg, const char *msg, MonoError *error); +MonoExceptionHandle +mono_exception_new_argument_null (const char *arg, MonoError *error); + +MonoExceptionHandle +mono_exception_new_argument_out_of_range(const char *arg, const char *msg, MonoError *error); + MonoExceptionHandle mono_exception_new_thread_interrupted (MonoError *error); @@ -81,7 +87,4 @@ mono_error_convert_to_exception_handle (MonoError *error); MonoExceptionHandle mono_get_exception_out_of_memory_handle (void); -MonoExceptionHandle -mono_exception_new_argument_null (const char *arg, MonoError *error); - #endif diff --git a/mono/metadata/exception.c b/mono/metadata/exception.c index 659314874a..2652bfa659 100644 --- a/mono/metadata/exception.c +++ b/mono/metadata/exception.c @@ -21,6 +21,7 @@ #include <mono/metadata/object-internals.h> #include <mono/metadata/metadata-internals.h> #include <mono/metadata/appdomain.h> +#include <mono/metadata/domain-internals.h> #include <mono/metadata/mono-debug.h> #include <mono/utils/mono-error-internals.h> #include <mono/utils/mono-logger-internals.h> @@ -102,14 +103,14 @@ mono_exception_new_by_name_domain (MonoDomain *domain, MonoImage *image, goto_if_nok (error, return_null); if (domain != caller_domain) - mono_domain_set_internal (domain); + mono_domain_set_internal_with_options (domain, TRUE); mono_runtime_object_init_handle (o, error); mono_error_assert_ok (error); // Restore domain in success and error path. if (domain != caller_domain) - mono_domain_set_internal (caller_domain); + mono_domain_set_internal_with_options (caller_domain, TRUE); goto_if_ok (error, exit); return_null: @@ -678,11 +679,22 @@ mono_get_exception_argument (const char *arg, const char *msg) return mono_get_exception_argument_internal ("ArgumentException", arg, msg); } +#ifndef ENABLE_NETCORE TYPED_HANDLE_DECL (MonoArgumentException); +#endif static MonoExceptionHandle mono_exception_new_argument_internal (const char *type, const char *arg, const char *msg, MonoError *error) { +#ifdef ENABLE_NETCORE + MonoStringHandle arg_str = arg ? mono_string_new_handle (mono_domain_get (), arg, error) : NULL_HANDLE_STRING; + MonoStringHandle msg_str = msg ? mono_string_new_handle (mono_domain_get (), msg, error) : NULL_HANDLE_STRING; + + if (!strcmp (type, "ArgumentException")) + return mono_exception_from_name_two_strings_checked (mono_get_corlib (), "System", type, msg_str, arg_str, error); + else + return mono_exception_from_name_two_strings_checked (mono_get_corlib (), "System", type, arg_str, msg_str, error); +#else MonoExceptionHandle ex = mono_exception_new_by_name_msg (mono_get_corlib (), "System", type, msg, error); if (arg && !MONO_HANDLE_IS_NULL (ex)) { @@ -690,8 +702,8 @@ mono_exception_new_argument_internal (const char *type, const char *arg, const c MonoStringHandle arg_str = mono_string_new_handle (MONO_HANDLE_DOMAIN (ex), arg, error); MONO_HANDLE_SET (argex, param_name, arg_str); } - return ex; +#endif } MonoExceptionHandle @@ -706,6 +718,12 @@ mono_exception_new_argument_null (const char *arg, MonoError *error) return mono_exception_new_argument_internal ("ArgumentNullException", arg, NULL, error); } +MonoExceptionHandle +mono_exception_new_argument_out_of_range(const char *arg, const char *msg, MonoError *error) +{ + return mono_exception_new_argument_internal ("ArgumentOutOfRangeException", arg, msg, error); +} + MonoExceptionHandle mono_exception_new_serialization (const char *msg, MonoError *error) { @@ -1480,11 +1498,13 @@ mono_error_set_simple_file_not_found (MonoError *error, const char *file_name, g } void -mono_error_set_argument_out_of_range (MonoError *error, const char *name) +mono_error_set_argument_out_of_range (MonoError *error, const char *param_name, const char *msg_format, ...) { - ERROR_DECL (error_creating_exception); - mono_error_set_exception_handle (error, mono_new_exception_argument_out_of_range (name, error_creating_exception)); - mono_error_cleanup (error_creating_exception); + char *str; + SET_ERROR_MSG (str, msg_format); + mono_error_set_specific (error, MONO_ERROR_ARGUMENT_OUT_OF_RANGE, str); + if (param_name) + mono_error_set_first_argument (error, param_name); } MonoExceptionHandle diff --git a/mono/metadata/external-only.c b/mono/metadata/external-only.c index 2a959fc87f..290db63535 100644 --- a/mono/metadata/external-only.c +++ b/mono/metadata/external-only.c @@ -12,6 +12,9 @@ #include "config.h" #include "class-internals.h" +#include "domain-internals.h" +#include "mono-hash-internals.h" +#include "mono-config-internals.h" #include "object-internals.h" #include "class-init.h" #include "marshal.h" @@ -191,3 +194,93 @@ mono_class_init (MonoClass *klass) { MONO_EXTERNAL_ONLY_GC_UNSAFE (gboolean, mono_class_init_internal (klass)); } + +/** + * mono_g_hash_table_new_type: + */ +MonoGHashTable* +mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg) +{ + MONO_EXTERNAL_ONLY_GC_UNSAFE (MonoGHashTable*, mono_g_hash_table_new_type_internal (hash_func, key_equal_func, type, source, key, msg)); +} + +/** + * mono_config_for_assembly: + */ +void +mono_config_for_assembly (MonoImage *assembly) +{ + MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_config_for_assembly_internal (assembly)); +} + +/** + * mono_class_get_property_from_name: + * \param klass a class + * \param name name of the property to lookup in the specified class + * + * Use this method to lookup a property in a class + * \returns the \c MonoProperty with the given name, or NULL if the property + * does not exist on the \p klass. + */ +MonoProperty* +mono_class_get_property_from_name (MonoClass *klass, const char *name) +{ + MONO_EXTERNAL_ONLY_GC_UNSAFE (MonoProperty*, mono_class_get_property_from_name_internal (klass, name)); +} + +/** + * mono_class_is_subclass_of: + * \param klass class to probe if it is a subclass of another one + * \param klassc the class we suspect is the base class + * \param check_interfaces whether we should perform interface checks + * + * This method determines whether \p klass is a subclass of \p klassc. + * + * If the \p check_interfaces flag is set, then if \p klassc is an interface + * this method return TRUE if the \p klass implements the interface or + * if \p klass is an interface, if one of its base classes is \p klass. + * + * If \p check_interfaces is false, then if \p klass is not an interface, + * it returns TRUE if the \p klass is a subclass of \p klassc. + * + * if \p klass is an interface and \p klassc is \c System.Object, then this function + * returns TRUE. + * + */ +gboolean +mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces) +{ + MONO_EXTERNAL_ONLY_GC_UNSAFE (gboolean, mono_class_is_subclass_of_internal (klass, klassc, check_interfaces)); +} + +/** + * mono_domain_set_internal: + * \param domain the new domain + * + * Sets the current domain to \p domain. + */ +void +mono_domain_set_internal (MonoDomain *domain) +{ + MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_domain_set_internal_with_options (domain, TRUE)); +} + +/** + * mono_domain_set: + * \param domain domain + * \param force force setting. + * + * Set the current appdomain to \p domain. If \p force is set, set it even + * if it is being unloaded. + * + * \returns TRUE on success; FALSE if the domain is unloaded + */ +gboolean +mono_domain_set (MonoDomain *domain, gboolean force) +{ + if (!force && domain->state == MONO_APPDOMAIN_UNLOADED) + return FALSE; + + MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_domain_set_internal_with_options (domain, TRUE)); + return TRUE; +} diff --git a/mono/metadata/filewatcher.c b/mono/metadata/filewatcher.c index c472b1a45c..16c2d928db 100644 --- a/mono/metadata/filewatcher.c +++ b/mono/metadata/filewatcher.c @@ -9,9 +9,9 @@ * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif + +#if !ENABLE_NETCORE #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> @@ -177,3 +177,5 @@ ves_icall_System_IO_KqueueMonitor_kevent_notimeout (int *kq_ptr, gpointer change } #endif /* #if HAVE_KQUEUE */ + +#endif /* !ENABLE_NETCORE */ diff --git a/mono/metadata/filewatcher.h b/mono/metadata/filewatcher.h index f6911454fa..8a22485233 100644 --- a/mono/metadata/filewatcher.h +++ b/mono/metadata/filewatcher.h @@ -20,6 +20,8 @@ #include <unistd.h> #endif +#if !ENABLE_NETCORE + ICALL_EXPORT gint ves_icall_System_IO_FSW_SupportsFSW (void); @@ -31,6 +33,8 @@ gboolean ves_icall_System_IO_FAMW_InternalFAMNextEvent (gpointer conn, ICALL_EXPORT int ves_icall_System_IO_KqueueMonitor_kevent_notimeout (int *kq, gpointer changelist, int nchanges, gpointer eventlist, int nevents); +#endif + #ifdef HOST_IOS // This will obsoleted by System.Native as soon as it's ported to iOS MONO_API char* SystemNative_RealPath(const char* path); MONO_API void SystemNative_Sync (void); diff --git a/mono/metadata/gc.c b/mono/metadata/gc.c index 0a8b27e527..362a7fa34c 100644 --- a/mono/metadata/gc.c +++ b/mono/metadata/gc.c @@ -257,7 +257,7 @@ mono_gc_run_finalize (void *obj, void *data) /* g_print ("Finalize run on %p %s.%s\n", o, mono_object_class (o)->name_space, mono_object_class (o)->name); */ /* Use _internal here, since this thread can enter a doomed appdomain */ - mono_domain_set_internal (mono_object_domain (o)); + mono_domain_set_internal_with_options (mono_object_domain (o), TRUE); /* delegates that have a native function pointer allocated are * registered for finalization, but they don't have a Finalize @@ -267,7 +267,7 @@ mono_gc_run_finalize (void *obj, void *data) MonoDelegate* del = (MonoDelegate*)o; if (del->delegate_trampoline) mono_delegate_free_ftnptr ((MonoDelegate*)o); - mono_domain_set_internal (caller_domain); + mono_domain_set_internal_with_options (caller_domain, TRUE); return; } @@ -280,7 +280,7 @@ mono_gc_run_finalize (void *obj, void *data) * of finalizer on object with CCW. */ if (mono_marshal_free_ccw (o) && !finalizer) { - mono_domain_set_internal (caller_domain); + mono_domain_set_internal_with_options (caller_domain, TRUE); return; } @@ -339,7 +339,7 @@ unhandled_error: if (exc) mono_thread_internal_unhandled_exception (exc); - mono_domain_set_internal (caller_domain); + mono_domain_set_internal_with_options (caller_domain, TRUE); } /* @@ -615,9 +615,7 @@ ves_icall_System_GC_WaitForPendingFinalizers (void) ResetEvent (pending_done_event); mono_gc_finalize_notify (); /* g_print ("Waiting for pending finalizers....\n"); */ - MONO_ENTER_GC_SAFE; - mono_win32_wait_for_single_object_ex (pending_done_event, INFINITE, TRUE); - MONO_EXIT_GC_SAFE; + mono_coop_win32_wait_for_single_object_ex (pending_done_event, INFINITE, TRUE); /* g_print ("Done pending....\n"); */ #else gboolean alerted = FALSE; @@ -646,6 +644,53 @@ ves_icall_System_GC_get_ephemeron_tombstone (MonoError *error) return MONO_HANDLE_NEW (MonoObject, mono_domain_get ()->ephemeron_tombstone); } +#if ENABLE_NETCORE + +gpointer +ves_icall_System_GCHandle_InternalAlloc (MonoObjectHandle obj, gint32 type, MonoError *error) +{ + guint32 handle = 0; + + switch (type) { + case HANDLE_WEAK: + handle = mono_gchandle_new_weakref_from_handle (obj); + break; + case HANDLE_WEAK_TRACK: + handle = mono_gchandle_new_weakref_from_handle_track_resurrection (obj); + break; + case HANDLE_NORMAL: + handle = mono_gchandle_from_handle (obj, FALSE); + break; + case HANDLE_PINNED: + handle = mono_gchandle_from_handle (obj, TRUE); + break; + default: + g_assert_not_reached (); + } + /* The lowest bit is used to mark pinned handles by netcore's GCHandle class */ + return GUINT_TO_POINTER (handle << 1); +} + +void +ves_icall_System_GCHandle_InternalFree (gpointer handle, MonoError *error) +{ + mono_gchandle_free_internal (GPOINTER_TO_UINT (handle) >> 1); +} + +MonoObjectHandle +ves_icall_System_GCHandle_InternalGet (gpointer handle, MonoError *error) +{ + return mono_gchandle_get_target_handle (GPOINTER_TO_UINT (handle) >> 1); +} + +void +ves_icall_System_GCHandle_InternalSet (gpointer handle, MonoObjectHandle obj, MonoError *error) +{ + mono_gchandle_set_target_handle (GPOINTER_TO_UINT (handle) >> 1, obj); +} + +#else + MonoObjectHandle ves_icall_System_GCHandle_GetTarget (guint32 handle, MonoError *error) { @@ -722,6 +767,8 @@ ves_icall_System_GCHandle_CheckCurrentDomain (guint32 gchandle) return mono_gchandle_is_in_domain (gchandle, mono_domain_get ()); } +#endif + static MonoCoopSem finalizer_sem; static volatile gboolean finished; diff --git a/mono/metadata/handle.h b/mono/metadata/handle.h index 02e7a342f3..bd52c828e5 100644 --- a/mono/metadata/handle.h +++ b/mono/metadata/handle.h @@ -392,6 +392,7 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE))->FIELD = __val); \ } while (0) +// handle [idx] = value (for managed pointers) #define MONO_HANDLE_ARRAY_SETREF(HANDLE, IDX, VALUE) do { \ uintptr_t __idx = (IDX); \ MonoObjectHandle __val = MONO_HANDLE_CAST (MonoObject, VALUE); \ @@ -402,6 +403,7 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot } \ } while (0) +// handle [idx] = (type)value (for non-managed types) #define MONO_HANDLE_ARRAY_SETVAL(HANDLE, TYPE, IDX, VALUE) do { \ uintptr_t __idx = (IDX); \ TYPE __val = (VALUE); \ @@ -413,6 +415,7 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot } while (0) #if 0 // This is never used. +// handle [idx] = value #define MONO_HANDLE_ARRAY_SETRAW(HANDLE, IDX, VALUE) do { \ MONO_HANDLE_SUPPRESS_SCOPE(1); \ uintptr_t __idx = MONO_HANDLE_UNSUPPRESS(IDX); \ @@ -429,11 +432,12 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot (DEST) = __result; \ } while (0) +// dest = handle [idx] (for managed pointers) #define MONO_HANDLE_ARRAY_GETREF(DEST, HANDLE, IDX) do { \ mono_handle_array_getref (MONO_HANDLE_CAST(MonoObject, (DEST)), (HANDLE), (IDX)); \ } while (0) -#define MONO_HANDLE_ASSIGN_RAW(DESTH, SRCP) (mono_handle_assign_raw (MONO_HANDLE_CAST (MonoObject, (DESTH)), SRCP)) +#define MONO_HANDLE_ASSIGN_RAW(DESTH, SRCP) (mono_handle_assign_raw (MONO_HANDLE_CAST (MonoObject, (DESTH)), (SRCP))) #define MONO_HANDLE_ASSIGN(DESTH, SRCH) (MONO_HANDLE_ASSIGN_RAW ((DESTH), MONO_HANDLE_RAW (SRCH))) #define MONO_HANDLE_DOMAIN(HANDLE) MONO_HANDLE_SUPPRESS (mono_object_domain (MONO_HANDLE_RAW (MONO_HANDLE_CAST (MonoObject, MONO_HANDLE_UNSUPPRESS (HANDLE))))) @@ -460,6 +464,8 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot MONO_HANDLE_SUPPRESS (mono_gc_wbarrier_generic_store_internal (mono_handle_unsafe_field_addr (__obj, __field), MONO_HANDLE_RAW (__value))); \ } while (0) +#define MONO_HANDLE_GET_CLASS(handle) (MONO_HANDLE_GETVAL (MONO_HANDLE_CAST (MonoObject, (handle)), vtable)->klass) + /* Baked typed handles we all want */ TYPED_HANDLE_DECL (MonoString); TYPED_HANDLE_DECL (MonoArray); diff --git a/mono/metadata/icall-decl.h b/mono/metadata/icall-decl.h index c76dc1a6b4..1930f97c53 100644 --- a/mono/metadata/icall-decl.h +++ b/mono/metadata/icall-decl.h @@ -145,6 +145,16 @@ ICALL_EXPORT float ves_icall_System_MathF_Sqrt (float); ICALL_EXPORT float ves_icall_System_MathF_Tan (float); ICALL_EXPORT float ves_icall_System_MathF_Tanh (float); ICALL_EXPORT float ves_icall_System_Math_Abs_single (float); +#if ENABLE_NETCORE +ICALL_EXPORT gint32 ves_icall_System_Math_ILogB (double); +ICALL_EXPORT double ves_icall_System_Math_Log2 (double); +ICALL_EXPORT double ves_icall_System_Math_ScaleB (double, gint32); +ICALL_EXPORT double ves_icall_System_Math_FusedMultiplyAdd (double, double, double); +ICALL_EXPORT gint32 ves_icall_System_MathF_ILogB (float); +ICALL_EXPORT float ves_icall_System_MathF_Log2 (float); +ICALL_EXPORT float ves_icall_System_MathF_ScaleB (float, gint32); +ICALL_EXPORT float ves_icall_System_MathF_FusedMultiplyAdd (float, float, float); +#endif ICALL_EXPORT gint ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetOffsetToStringData (void); ICALL_EXPORT gint32 ves_icall_System_Buffer_ByteLengthInternal (MonoArray*); ICALL_EXPORT gint32 ves_icall_System_Environment_get_ProcessorCount (void); @@ -173,12 +183,22 @@ ICALL_EXPORT void ves_icall_System_GCHandle_FreeHandle (guint32 handle); ICALL_EXPORT void ves_icall_System_GC_InternalCollect (int generation); ICALL_EXPORT void ves_icall_System_GC_RecordPressure (gint64); ICALL_EXPORT void ves_icall_System_GC_WaitForPendingFinalizers (void); +#if !ENABLE_NETCORE ICALL_EXPORT void ves_icall_System_IO_LogcatTextWriter_Log (const char*, gint32, const char*); +#endif ICALL_EXPORT void ves_icall_System_NumberFormatter_GetFormatterTables (guint64 const**, gint32 const**, gunichar2 const**, gunichar2 const**, gint64 const**, gint32 const**); -ICALL_EXPORT void ves_icall_System_RuntimeFieldHandle_SetValueDirect (MonoReflectionField*, MonoReflectionType*, MonoTypedRef*, MonoObject*, MonoReflectionType*); +#if ENABLE_NETCORE +ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_Memmove (guint8*, guint8*, size_t); +ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_RhBulkMoveWithWriteBarrier (guint8*, guint8*, size_t); +#else ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_Memmove (guint8*, guint8*, guint); ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_Memmove_wbarrier (guint8*, guint8*, guint, MonoType*); +#endif +#if ENABLE_NETCORE +ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_ZeroMemory (guint8*, size_t); +#else ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_ZeroMemory (guint8*, guint); +#endif ICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_ecvt_s(char*, size_t, double, int, int*, int*); #if defined(ENABLE_MONODROID) || defined(ENABLE_MONOTOUCH) ICALL_EXPORT gpointer ves_icall_System_IO_Compression_DeflateStreamNative_CreateZStream (gint32 compress, MonoBoolean gzip, gpointer feeder, gpointer data); @@ -188,9 +208,9 @@ ICALL_EXPORT gint32 ves_icall_System_IO_Compression_DeflateStreamNative_ReadZStr ICALL_EXPORT gint32 ves_icall_System_IO_Compression_DeflateStreamNative_WriteZStream (gpointer stream, gpointer buffer, gint32 length); #endif #if defined(ENABLE_MONODROID) -ICALL_EXPORT gint32 ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CreateNLSocket (void); +ICALL_EXPORT gpointer ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CreateNLSocket (void); ICALL_EXPORT gint32 ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size); -ICALL_EXPORT gint32 ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CloseNLSocket (gpointer sock); +ICALL_EXPORT gpointer ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CloseNLSocket (gpointer sock); #endif #endif // __MONO_METADATA_ICALL_H__ diff --git a/mono/metadata/icall-def.h.REMOVED.git-id b/mono/metadata/icall-def.h.REMOVED.git-id index e9963c7ed4..1713af2f76 100644 --- a/mono/metadata/icall-def.h.REMOVED.git-id +++ b/mono/metadata/icall-def.h.REMOVED.git-id @@ -1 +1 @@ -9710d9b2789947e0fe1ad3d0b94f5f338dfdea2a \ No newline at end of file +37b10ca01d4b1d9c4edca405ff715ae0df92b0fa \ No newline at end of file diff --git a/mono/metadata/icall-internals.h b/mono/metadata/icall-internals.h index e7320c526b..058b1415a9 100644 --- a/mono/metadata/icall-internals.h +++ b/mono/metadata/icall-internals.h @@ -21,7 +21,7 @@ const gchar * mono_icall_get_file_path_prefix (const gchar *path); gpointer -mono_icall_module_get_hinstance (MonoReflectionModuleHandle module); +mono_icall_module_get_hinstance (MonoImage *image); MonoStringHandle mono_icall_get_machine_name (MonoError *error); @@ -62,10 +62,9 @@ guint32 mono_icall_drive_info_get_drive_type (MonoString *root_path_name); #endif /* !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */ -void* +gconstpointer mono_lookup_internal_call_full (MonoMethod *method, gboolean warn_on_missing, mono_bool *uses_handles, mono_bool *foreign); - MONO_PAL_API void mono_add_internal_call_with_flags (const char *name, const void* method, gboolean cooperative); @@ -75,6 +74,16 @@ mono_add_internal_call_internal (const char *name, gconstpointer method); MonoAssembly* mono_runtime_get_caller_from_stack_mark (MonoStackCrawlMark *stack_mark); +typedef enum { + MONO_ICALL_FLAGS_NONE = 0, + MONO_ICALL_FLAGS_FOREIGN = 1 << 1, + MONO_ICALL_FLAGS_USES_HANDLES = 1 << 2, + MONO_ICALL_FLAGS_COOPERATIVE = 1 << 3 +} MonoInternalCallFlags; + +gconstpointer +mono_lookup_internal_call_full_with_flags (MonoMethod *method, gboolean warn_on_missing, guint32 *flags); + #ifdef __cplusplus #include <type_traits> diff --git a/mono/metadata/icall-signatures.h b/mono/metadata/icall-signatures.h new file mode 100644 index 0000000000..f8fee5a66c --- /dev/null +++ b/mono/metadata/icall-signatures.h @@ -0,0 +1,283 @@ +/** + * \file + * Licensed under the MIT license. See LICENSE file in the project root for full license information. + * + * Previously JIT icall signatures were presented as strings, + * subject to parsing and hashing and allocations and locking. + * Here they are statically allocated and almost statically initialized. + * There is no parsing, locking, or hashing. + */ +#ifndef __MONO_METADATA_ICALL_SIGNATURES_H__ +#define __MONO_METADATA_ICALL_SIGNATURES_H__ + +// FIXME Some of these are only needed under ifdef. +// FIXME Some of these are redundant like obj vs. object, int vs. int32. +// +// count and types, where first type is return type +// and the rest are the parameter types. +// +// There are tradeoffs either way as to if return +// type is part of the parameter list. +// +// Define the following symbols via token pasting. +// These are listed here for code search. +// +// mono_icall_sig_object +// mono_icall_sig_ptr +// mono_icall_sig_void +// mono_icall_sig_double_double +// mono_icall_sig_double_int32 +// mono_icall_sig_double_long +// mono_icall_sig_double_ptr +// mono_icall_sig_float_long +// mono_icall_sig_int_obj +// mono_icall_sig_int16_double +// mono_icall_sig_int32_double +// mono_icall_sig_int32_obj +// mono_icall_sig_int32_object // alias of previous +// mono_icall_sig_int8_double +// mono_icall_sig_long_double +// mono_icall_sig_long_float +// mono_icall_sig_obj_ptr +// mono_icall_sig_object_int +// mono_icall_sig_object_int32 +// mono_icall_sig_object_object +// mono_icall_sig_object_ptr // alias +// mono_icall_sig_ptr_int +// mono_icall_sig_ptr_obj +// mono_icall_sig_ptr_object // alias of previous +// mono_icall_sig_ptr_ptr +// mono_icall_sig_uint16_double +// mono_icall_sig_uint32_double +// mono_icall_sig_uint8_double +// mono_icall_sig_ulong_double +// mono_icall_sig_ulong_float +// mono_icall_sig_void_int +// mono_icall_sig_void_int32 +// mono_icall_sig_void_object +// mono_icall_sig_void_ptr +// mono_icall_sig_bool_ptr_ptrref +// mono_icall_sig_double_double_double +// mono_icall_sig_float_float_float +// mono_icall_sig_int_obj_ptr +// mono_icall_sig_int32_int32_int32 +// mono_icall_sig_int32_int32_ptr +// mono_icall_sig_int32_int32_ptrref +// mono_icall_sig_int32_ptr_ptr +// mono_icall_sig_int32_ptr_ptrref +// mono_icall_sig_long_long_int32 +// mono_icall_sig_long_long_long +// mono_icall_sig_obj_ptr_int // alias +// mono_icall_sig_object_int_object +// mono_icall_sig_object_object_ptr +// mono_icall_sig_object_ptr_int +// mono_icall_sig_object_ptr_int32 +// mono_icall_sig_object_ptr_ptr +// mono_icall_sig_ptr_int32_ptrref +// mono_icall_sig_ptr_object_ptr +// mono_icall_sig_ptr_ptr_int +// mono_icall_sig_ptr_ptr_int32 +// mono_icall_sig_ptr_ptr_ptr +// mono_icall_sig_ptr_ptr_ptrref +// mono_icall_sig_ptr_uint32_ptrref +// mono_icall_sig_uint32_double_double +// mono_icall_sig_uint32_ptr_int32 +// mono_icall_sig_void_double_ptr +// mono_icall_sig_void_int32_ptrref +// mono_icall_sig_void_obj_ptr +// mono_icall_sig_void_object_object +// mono_icall_sig_void_object_ptr // alias +// mono_icall_sig_void_ptr_int +// mono_icall_sig_void_ptr_int32 +// mono_icall_sig_void_ptr_object +// mono_icall_sig_void_ptr_ptr +// mono_icall_sig_void_ptr_ptrref +// mono_icall_sig_void_uint32_ptrref +// mono_icall_sig_bool_ptr_int32_ptrref +// mono_icall_sig_int32_int32_ptr_ptrref +// mono_icall_sig_int32_ptr_int32_ptr +// mono_icall_sig_int32_ptr_int32_ptrref +// mono_icall_sig_object_int_object_object +// mono_icall_sig_object_object_ptr_ptr +// mono_icall_sig_object_ptr_int_int +// mono_icall_sig_object_ptr_int_int32 +// mono_icall_sig_object_ptr_int_ptr +// mono_icall_sig_object_ptr_ptr_int32 +// mono_icall_sig_ptr_object_int32_int32 +// mono_icall_sig_ptr_object_ptr_ptr +// mono_icall_sig_ptr_ptr_int_ptr +// mono_icall_sig_ptr_ptr_int32_ptrref +// mono_icall_sig_ptr_ptr_ptr_ptr +// mono_icall_sig_ptr_ptr_ptr_ptrref +// mono_icall_sig_ptr_ptr_uint32_ptrref +// mono_icall_sig_void_object_object_ptr +// mono_icall_sig_void_object_ptr_int32 +// mono_icall_sig_void_ptr_int_object +// mono_icall_sig_void_ptr_int_ptr +// mono_icall_sig_void_ptr_object_int32 +// mono_icall_sig_void_ptr_ptr_int +// mono_icall_sig_void_ptr_ptr_int32 +// mono_icall_sig_void_ptr_ptr_ptr +// mono_icall_sig_void_ptr_ptr_ptrref +// mono_icall_sig_int32_object_ptr_ptr_ptr +// mono_icall_sig_object_object_ptr_ptr_ptr +// mono_icall_sig_object_ptr_int_int_int +// mono_icall_sig_ptr_object_int_ptr_ptr +// mono_icall_sig_ptr_ptr_int32_ptr_ptrref +// mono_icall_sig_ptr_ptr_ptr_int32_ptrref +// mono_icall_sig_ptr_ptr_ptr_ptr_ptrref +// mono_icall_sig_ptr_ptr_ptr_ptrref_ptrref +// mono_icall_sig_void_object_ptr_int32_int32 +// mono_icall_sig_void_object_ptr_ptr_ptr +// mono_icall_sig_void_ptr_int_int_object +// mono_icall_sig_int_int_int_ptr_ptr_ptr +// mono_icall_sig_int_ptr_int_int_ptr_object +// mono_icall_sig_object_ptr_int_int_int_int +// mono_icall_sig_object_ptr_ptr_ptr_ptr_ptr +// mono_icall_sig_ptr_ptr_int32_ptr_ptr_ptrref +// mono_icall_sig_void_ptr_ptr_int32_ptr_ptrref +// mono_icall_sig_int32_ptr_ptr_ptr_ptr_ptr_int32 +// mono_icall_sig_void_ptr_ptr_int32_ptr_ptrref_ptr_ptrref + +#define ICALL_SIGS \ +ICALL_SIG (1, (object)) \ +ICALL_SIG (1, (ptr)) \ +ICALL_SIG (1, (void)) \ +ICALL_SIG (2, (double, double)) \ +ICALL_SIG (2, (double, int32)) \ +ICALL_SIG (2, (double, long)) \ +ICALL_SIG (2, (double, ptr)) \ +ICALL_SIG (2, (float, long)) \ +ICALL_SIG (2, (int, obj)) \ +ICALL_SIG (2, (int16, double)) \ +ICALL_SIG (2, (int32, double)) \ +ICALL_SIG (2, (int32, obj)) \ +ICALL_SIG (2, (int32, object)) \ +ICALL_SIG (2, (int8, double)) \ +ICALL_SIG (2, (long, double)) \ +ICALL_SIG (2, (long, float)) \ +ICALL_SIG (2, (obj, ptr)) \ +ICALL_SIG (2, (object, int)) \ +ICALL_SIG (2, (object, int32)) \ +ICALL_SIG (2, (object, object)) \ +ICALL_SIG (2, (object, ptr)) \ +ICALL_SIG (2, (ptr, int)) \ +ICALL_SIG (2, (ptr, obj)) \ +ICALL_SIG (2, (ptr, object)) \ +ICALL_SIG (2, (ptr, ptr)) \ +ICALL_SIG (2, (uint16, double)) \ +ICALL_SIG (2, (uint32, double)) \ +ICALL_SIG (2, (uint8, double)) \ +ICALL_SIG (2, (ulong, double)) \ +ICALL_SIG (2, (ulong, float)) \ +ICALL_SIG (2, (void, int)) \ +ICALL_SIG (2, (void, int32)) \ +ICALL_SIG (2, (void, object)) \ +ICALL_SIG (2, (void, ptr)) \ +ICALL_SIG (3, (bool, ptr, ptrref)) \ +ICALL_SIG (3, (double, double, double)) \ +ICALL_SIG (3, (float, float, float)) \ +ICALL_SIG (3, (int, obj, ptr)) \ +ICALL_SIG (3, (int32, int32, int32)) \ +ICALL_SIG (3, (int32, int32, ptr)) \ +ICALL_SIG (3, (int32, int32, ptrref)) \ +ICALL_SIG (3, (int32, ptr, ptr)) \ +ICALL_SIG (3, (int32, ptr, ptrref)) \ +ICALL_SIG (3, (long, long, int32)) \ +ICALL_SIG (3, (long, long, long)) \ +ICALL_SIG (3, (obj, ptr, int)) \ +ICALL_SIG (3, (object, int, object)) \ +ICALL_SIG (3, (object, object, ptr)) \ +ICALL_SIG (3, (object, ptr, int)) \ +ICALL_SIG (3, (object, ptr, int32)) \ +ICALL_SIG (3, (object, ptr, ptr)) \ +ICALL_SIG (3, (ptr, int32, ptrref)) \ +ICALL_SIG (3, (ptr, object, ptr)) \ +ICALL_SIG (3, (ptr, ptr, int)) \ +ICALL_SIG (3, (ptr, ptr, int32)) \ +ICALL_SIG (3, (ptr, ptr, ptr)) \ +ICALL_SIG (3, (ptr, ptr, ptrref)) \ +ICALL_SIG (3, (ptr, uint32, ptrref)) \ +ICALL_SIG (3, (uint32, double, double)) \ +ICALL_SIG (3, (uint32, ptr, int32)) \ +ICALL_SIG (3, (void, double, ptr)) \ +ICALL_SIG (3, (void, int32, ptrref)) \ +ICALL_SIG (3, (void, obj, ptr)) \ +ICALL_SIG (3, (void, object, object)) \ +ICALL_SIG (3, (void, object, ptr)) \ +ICALL_SIG (3, (void, ptr, int)) \ +ICALL_SIG (3, (void, ptr, int32)) \ +ICALL_SIG (3, (void, ptr, object)) \ +ICALL_SIG (3, (void, ptr, ptr)) \ +ICALL_SIG (3, (void, ptr, ptrref)) \ +ICALL_SIG (3, (void, uint32, ptrref)) \ +ICALL_SIG (4, (bool, ptr, int32, ptrref)) \ +ICALL_SIG (4, (int32, int32, ptr, ptrref)) \ +ICALL_SIG (4, (int32, ptr, int32, ptr)) \ +ICALL_SIG (4, (int32, ptr, int32, ptrref)) \ +ICALL_SIG (4, (object, int, object, object)) \ +ICALL_SIG (4, (object, object, ptr, ptr)) \ +ICALL_SIG (4, (object, ptr, int, int)) \ +ICALL_SIG (4, (object, ptr, int, int32)) \ +ICALL_SIG (4, (object, ptr, int, ptr)) \ +ICALL_SIG (4, (object, ptr, ptr, int32)) \ +ICALL_SIG (4, (ptr, object, int32, int32)) \ +ICALL_SIG (4, (ptr, object, ptr, ptr)) \ +ICALL_SIG (4, (ptr, ptr, int, ptr)) \ +ICALL_SIG (4, (ptr, ptr, int32, ptrref)) \ +ICALL_SIG (4, (ptr, ptr, ptr, ptr)) \ +ICALL_SIG (4, (ptr, ptr, ptr, ptrref)) \ +ICALL_SIG (4, (ptr, ptr, uint32, ptrref)) \ +ICALL_SIG (4, (void, object, object, ptr)) \ +ICALL_SIG (4, (void, object, ptr, int32)) \ +ICALL_SIG (4, (void, ptr, int, object)) \ +ICALL_SIG (4, (void, ptr, int, ptr)) \ +ICALL_SIG (4, (void, ptr, object, int32)) \ +ICALL_SIG (4, (void, ptr, ptr, int)) \ +ICALL_SIG (4, (void, ptr, ptr, int32)) \ +ICALL_SIG (4, (void, ptr, ptr, ptr)) \ +ICALL_SIG (4, (void, ptr, ptr, ptrref)) \ +ICALL_SIG (5, (int32, object, ptr, ptr, ptr)) \ +ICALL_SIG (5, (object, object, ptr, ptr, ptr)) \ +ICALL_SIG (5, (object, ptr, int, int, int)) \ +ICALL_SIG (5, (ptr, object, int, ptr, ptr)) \ +ICALL_SIG (5, (ptr, ptr, int32, ptr, ptrref)) \ +ICALL_SIG (5, (ptr, ptr, ptr, int32, ptrref)) \ +ICALL_SIG (5, (ptr, ptr, ptr, ptr, ptrref)) \ +ICALL_SIG (5, (ptr, ptr, ptr, ptrref, ptrref)) \ +ICALL_SIG (5, (void, object, ptr, int32, int32)) \ +ICALL_SIG (5, (void, object, ptr, ptr, ptr)) \ +ICALL_SIG (5, (void, ptr, int, int, object)) \ +ICALL_SIG (6, (int, int, int, ptr, ptr, ptr)) \ +ICALL_SIG (6, (int, ptr, int, int, ptr, object)) \ +ICALL_SIG (6, (object, ptr, int, int, int, int)) \ +ICALL_SIG (6, (object, ptr, ptr, ptr, ptr, ptr)) \ +ICALL_SIG (6, (ptr, ptr, int32, ptr, ptr, ptrref)) \ +ICALL_SIG (6, (void, ptr, ptr, int32, ptr, ptrref)) \ +ICALL_SIG (7, (int32, ptr, ptr, ptr, ptr, ptr, int32)) \ +ICALL_SIG (8, (void, ptr, ptr, int32, ptr, ptrref, ptr, ptrref)) \ + +// ICALL_SIG_NAME: mono_icall_sig pasted with its parameters with underscores between each. +#define ICALL_SIG_NAME_1(a) mono_icall_sig_ ## a +#define ICALL_SIG_NAME_2(a, b) mono_icall_sig_ ## a ## _ ## b +#define ICALL_SIG_NAME_3(a, b, c) mono_icall_sig_ ## a ## _ ## b ## _ ## c +#define ICALL_SIG_NAME_4(a, b, c, d) mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d +#define ICALL_SIG_NAME_5(a, b, c, d, e) mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e +#define ICALL_SIG_NAME_6(a, b, c, d, e, f) mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f +#define ICALL_SIG_NAME_7(a, b, c, d, e, f, g) mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f ## _ ## g +#define ICALL_SIG_NAME_8(a, b, c, d, e, f, g, h) mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f ## _ ## g ## _ ## h + +#define ICALL_SIG_NAME(n, types) ICALL_SIG_NAME_ ## n types + +// Declare each icall_sig as a MonoMethodSignature * const. +// The address is constant but the contents are not quite. +#define ICALL_SIG(n, types) extern MonoMethodSignature * const ICALL_SIG_NAME (n, types); + +ICALL_SIGS + +#undef ICALL_SIG + +void +mono_create_icall_signatures (void); + +#endif // __MONO_METADATA_ICALL_SIGNATURES_H__ diff --git a/mono/metadata/icall-table.c b/mono/metadata/icall-table.c index 4d0538590f..8222a30ab3 100644 --- a/mono/metadata/icall-table.c +++ b/mono/metadata/icall-table.c @@ -341,11 +341,11 @@ mono_icall_table_init (void) } } - MonoIcallTableCallbacks cb; - memset (&cb, 0, sizeof (MonoIcallTableCallbacks)); - cb.version = MONO_ICALL_TABLE_CALLBACKS_VERSION; - cb.lookup = icall_table_lookup; - cb.lookup_icall_symbol = lookup_icall_symbol; - - mono_install_icall_table_callbacks (&cb); + static const MonoIcallTableCallbacks mono_icall_table_callbacks = + { + MONO_ICALL_TABLE_CALLBACKS_VERSION, + icall_table_lookup, + lookup_icall_symbol, + }; + mono_install_icall_table_callbacks (&mono_icall_table_callbacks); } diff --git a/mono/metadata/icall-table.h b/mono/metadata/icall-table.h index e7ea7695ce..fed2f38656 100644 --- a/mono/metadata/icall-table.h +++ b/mono/metadata/icall-table.h @@ -20,7 +20,7 @@ typedef struct { } MonoIcallTableCallbacks; void -mono_install_icall_table_callbacks (MonoIcallTableCallbacks *cb); +mono_install_icall_table_callbacks (const MonoIcallTableCallbacks *cb); MONO_API void mono_icall_table_init (void); @@ -29,12 +29,11 @@ mono_icall_table_init (void); // Marshaling a "ptr" does nothing -- just pass it on unchanged. // Marshaling a "ref" also does nothing at this layer, but // creates a handle in marshal-ilgen.c. +// "ref" means "can be an interior pointer". +// "ptr" means "to a local". +// It is generally difficult to know, and "ref" is safer. +// Presently it does not matter. typedef gint32 *gint32_ptr; -typedef gint64 *gint64_ptr; -typedef guint *guint_ptr; -typedef guint32 *guint32_ptr; -typedef guint64 *guint64_ptr; -typedef gsize *gsize_ptr; typedef guchar *guchar_ptr; typedef const guchar *const_guchar_ptr; typedef gpointer *gpointer_ptr; @@ -54,7 +53,6 @@ typedef MonoClassField *MonoClassField_ptr; typedef MonoEvent *MonoEvent_ptr; typedef MonoImage *MonoImage_ptr; typedef MonoMethod *MonoMethod_ptr; -typedef MonoNativeOverlapped *MonoNativeOverlapped_ptr; typedef MonoProperty *MonoProperty_ptr; typedef MonoPropertyInfo *MonoPropertyInfo_ref; typedef MonoType *MonoType_ptr; @@ -81,7 +79,6 @@ typedef MonoEvent *MonoEvent_ref; typedef MonoEventInfo *MonoEventInfo_ref; typedef MonoMethod *MonoMethod_ref; typedef MonoMethodInfo *MonoMethodInfo_ref; -typedef MonoNativeOverlapped *MonoNativeOverlapped_ref; typedef MonoResolveTokenError *MonoResolveTokenError_ref; typedef MonoType *MonoType_ref; typedef MonoTypedRef *MonoTypedRef_ref; @@ -156,7 +153,6 @@ typedef MonoReflectionModuleHandle MonoReflectionModuleOutHandle; #define MONO_HANDLE_TYPE_WRAP_MonoEventInfo_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_MonoMethod_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_MonoMethodInfo_ref ICALL_HANDLES_WRAP_VALUETYPE_REF -#define MONO_HANDLE_TYPE_WRAP_MonoNativeOverlapped_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_MonoPropertyInfo_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_MonoType_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_MonoTypedRef_ref ICALL_HANDLES_WRAP_VALUETYPE_REF @@ -167,6 +163,7 @@ typedef MonoReflectionModuleHandle MonoReflectionModuleOutHandle; #define MONO_HANDLE_TYPE_WRAP_guint32_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_guint64_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_int_ref ICALL_HANDLES_WRAP_VALUETYPE_REF +#define MONO_HANDLE_TYPE_WRAP_gint32_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_int_ptr_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_char_ptr_ref ICALL_HANDLES_WRAP_VALUETYPE_REF #define MONO_HANDLE_TYPE_WRAP_guint8_ptr_ref ICALL_HANDLES_WRAP_VALUETYPE_REF @@ -178,13 +175,10 @@ typedef MonoReflectionModuleHandle MonoReflectionModuleOutHandle; #define MONO_HANDLE_TYPE_WRAP_MonoEvent_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_MonoGenericParamInfo_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_MonoMethod_ptr ICALL_HANDLES_WRAP_NONE -#define MONO_HANDLE_TYPE_WRAP_MonoNativeOverlapped_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_MonoType_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_MonoTypedRef_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_MonoStackCrawlMark_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_gint32_ptr ICALL_HANDLES_WRAP_NONE -#define MONO_HANDLE_TYPE_WRAP_guint32_ptr ICALL_HANDLES_WRAP_NONE -#define MONO_HANDLE_TYPE_WRAP_guint64_ptr ICALL_HANDLES_WRAP_NONE #define MONO_HANDLE_TYPE_WRAP_gpointer_ptr ICALL_HANDLES_WRAP_NONE // Please keep this sorted (grep ICALL_HANDLES_WRAP_OBJ$ | sort) @@ -470,7 +464,7 @@ func ( MONO_HANDLE_FOREACH_ARG_RAWPOINTER_ ## n argtypes) // Or put the handles directly in the coop frame, or pointers to them. // i.e. one TLS access at function start and end. // -// This is for functions passed to mono_register_jit_icall, etc. +// This is for functions passed to mono_register_jit_icall_info, etc. #define MONO_HANDLE_REGISTER_ICALL_IMPLEMENT(func, rettype, n, argtypes) \ \ diff --git a/mono/metadata/icall-windows.c b/mono/metadata/icall-windows.c index 52650d937b..91fcaa33e1 100644 --- a/mono/metadata/icall-windows.c +++ b/mono/metadata/icall-windows.c @@ -36,10 +36,9 @@ mono_icall_get_file_path_prefix (const gchar *path) } gpointer -mono_icall_module_get_hinstance (MonoReflectionModuleHandle module) +mono_icall_module_get_hinstance (MonoImage *image) { - MonoImage *image = MONO_HANDLE_GETVAL (module, image); - if (image && image->is_module_handle) + if (image && m_image_is_module_handle (image)) return image->raw_data; return (gpointer) (-1); diff --git a/mono/metadata/icall.c.REMOVED.git-id b/mono/metadata/icall.c.REMOVED.git-id index e07052176e..d7b77fa3c0 100644 --- a/mono/metadata/icall.c.REMOVED.git-id +++ b/mono/metadata/icall.c.REMOVED.git-id @@ -1 +1 @@ -9ce7f73bc3c02e4304622e75a22d7e02e811a17f \ No newline at end of file +aad42e95a6943cc4a09c9c3d83e55ed92a54e724 \ No newline at end of file diff --git a/mono/metadata/image.c b/mono/metadata/image.c index 101e267194..8407077639 100644 --- a/mono/metadata/image.c +++ b/mono/metadata/image.c @@ -113,8 +113,17 @@ static gboolean debug_assembly_unload = FALSE; #define mono_images_lock() if (mutex_inited) mono_os_mutex_lock (&images_mutex) #define mono_images_unlock() if (mutex_inited) mono_os_mutex_unlock (&images_mutex) +#define mono_images_storage_lock() do { if (mutex_inited) mono_os_mutex_lock (&images_storage_mutex); } while (0) +#define mono_images_storage_unlock() do { if (mutex_inited) mono_os_mutex_unlock (&images_storage_mutex); } while (0) static gboolean mutex_inited; static mono_mutex_t images_mutex; +static mono_mutex_t images_storage_mutex; + +/* Maps string keys to MonoImageStorage values. + * + * The MonoImageStorage in the hash owns the key. + */ +static GHashTable *images_storage_hash; static void install_pe_loader (void); @@ -193,7 +202,7 @@ mono_cli_rva_image_map (MonoImage *image, guint32 addr) if ((addr >= tables->st_virtual_address) && (addr < tables->st_virtual_address + tables->st_raw_data_size)){ #ifdef HOST_WIN32 - if (image->is_module_handle) + if (m_image_is_module_handle (image)) return addr; #endif return addr - tables->st_virtual_address + tables->st_raw_data_ptr; @@ -223,7 +232,7 @@ mono_image_rva_map (MonoImage *image, guint32 addr) int i; #ifdef HOST_WIN32 - if (image->is_module_handle) { + if (m_image_is_module_handle (image)) { if (addr && addr < image->raw_data_len) return image->raw_data + addr; else @@ -254,8 +263,11 @@ mono_image_rva_map (MonoImage *image, guint32 addr) void mono_images_init (void) { + mono_os_mutex_init (&images_storage_mutex); mono_os_mutex_init_recursive (&images_mutex); + images_storage_hash = g_hash_table_new (g_str_hash, g_str_equal); + int hash_idx; for(hash_idx = 0; hash_idx < IMAGES_HASH_COUNT; hash_idx++) loaded_images_hashes [hash_idx] = g_hash_table_new (g_str_hash, g_str_equal); @@ -290,6 +302,10 @@ mono_images_cleanup (void) for(hash_idx = 0; hash_idx < IMAGES_HASH_COUNT; hash_idx++) g_hash_table_destroy (loaded_images_hashes [hash_idx]); + g_hash_table_destroy (images_storage_hash); + + mono_os_mutex_destroy (&images_storage_mutex); + mutex_inited = FALSE; } @@ -319,7 +335,7 @@ mono_image_ensure_section_idx (MonoImage *image, int section) if (sect->st_raw_data_ptr + sect->st_raw_data_size > image->raw_data_len) return FALSE; #ifdef HOST_WIN32 - if (image->is_module_handle) + if (m_image_is_module_handle (image)) iinfo->cli_sections [section] = image->raw_data + sect->st_virtual_address; else #endif @@ -746,7 +762,7 @@ mono_image_load_module_checked (MonoImage *image, int idx, MonoError *error) image->modules [idx - 1] = moduleImage; #ifdef HOST_WIN32 - if (image->modules [idx - 1]->is_module_handle) + if (m_image_is_module_handle (image->modules [idx - 1])) mono_image_fixup_vtable (image->modules [idx - 1]); #endif /* g_print ("loaded module %s from %s (%p)\n", module_ref, image->name, image->assembly); */ @@ -809,7 +825,6 @@ mono_image_init (MonoImage *image) image->typespec_cache = mono_conc_hashtable_new (NULL, NULL); image->memberref_signatures = g_hash_table_new (NULL, NULL); - image->helper_signatures = g_hash_table_new (g_str_hash, g_str_equal); image->method_signatures = g_hash_table_new (NULL, NULL); image->property_hash = mono_property_hash_new (); @@ -836,7 +851,7 @@ do_load_header (MonoImage *image, MonoDotNetHeader *header, int offset) MonoDotNetHeader64 header64; #ifdef HOST_WIN32 - if (!image->is_module_handle) + if (!m_image_is_module_handle (image)) #endif if (offset + sizeof (MonoDotNetHeader32) > image->raw_data_len) return -1; @@ -957,8 +972,8 @@ do_load_header (MonoImage *image, MonoDotNetHeader *header, int offset) SWAPPDE (header->datadir.pe_reserved); #ifdef HOST_WIN32 - if (image->is_module_handle) - image->raw_data_len = header->nt.pe_image_size; + if (m_image_is_module_handle (image)) + image->storage->raw_data_len = header->nt.pe_image_size; #endif return offset; @@ -982,7 +997,7 @@ pe_image_load_pe_data (MonoImage *image) header = &iinfo->cli_header; #ifdef HOST_WIN32 - if (!image->is_module_handle) + if (!m_image_is_module_handle (image)) #endif if (offset + sizeof (msdos) > image->raw_data_len) goto invalid_image; @@ -1419,14 +1434,116 @@ invalid_image: return NULL; } -static MonoImage * -do_mono_image_open (const char *fname, MonoImageOpenStatus *status, - gboolean care_about_cli, gboolean care_about_pecoff, gboolean refonly, gboolean metadata_only, gboolean load_from_context) +static gboolean +mono_image_storage_trypublish (MonoImageStorage *candidate, MonoImageStorage **out_storage) { - MonoCLIImageInfo *iinfo; - MonoImage *image; - MonoFileMap *filed; + gboolean result; + mono_images_storage_lock (); + MonoImageStorage *val = (MonoImageStorage *)g_hash_table_lookup (images_storage_hash, candidate->key); + if (val) { + mono_refcount_inc (val); + *out_storage = val; + result = FALSE; + } else { + g_hash_table_insert (images_storage_hash, candidate->key, candidate); + result = TRUE; + } + mono_images_storage_unlock (); + return result; +} +static void +mono_image_storage_unpublish (MonoImageStorage *storage) +{ + mono_images_storage_lock (); + g_assert (storage->ref.ref == 0); + + MonoImageStorage *published = (MonoImageStorage *)g_hash_table_lookup (images_storage_hash, storage->key); + if (published == storage) { + g_hash_table_remove (images_storage_hash, storage->key); + } + + mono_images_storage_unlock (); +} + +static gboolean +mono_image_storage_tryaddref (const char *key, MonoImageStorage **found) +{ + gboolean result = FALSE; + mono_images_storage_lock (); + MonoImageStorage *val = (MonoImageStorage *)g_hash_table_lookup (images_storage_hash, key); + if (val) { + mono_refcount_inc (val); + *found = val; + result = TRUE; + } + mono_images_storage_unlock (); + return result; +} + +static void +mono_image_storage_dtor (gpointer self) +{ + MonoImageStorage *storage = (MonoImageStorage *)self; + + mono_image_storage_unpublish (storage); + +#ifdef HOST_WIN32 + if (storage->is_module_handle && !storage->has_entry_point) { + mono_images_lock (); + FreeLibrary ((HMODULE) storage->raw_data); + mono_images_unlock (); + } +#endif + + if (storage->raw_buffer_used) { + if (storage->raw_data != NULL) { +#ifndef HOST_WIN32 + if (storage->fileio_used) + mono_file_unmap_fileio (storage->raw_data, storage->raw_data_handle); + else +#endif + mono_file_unmap (storage->raw_data, storage->raw_data_handle); + } + } + if (storage->raw_data_allocated) { + g_free (storage->raw_data); + } + + g_free (storage->key); + + g_free (storage); +} + +static void +mono_image_storage_close (MonoImageStorage *storage) +{ + mono_refcount_dec (storage); +} + +static gboolean +mono_image_init_raw_data (MonoImage *image, const MonoImageStorage *storage) +{ + if (!storage) + return FALSE; + image->raw_data = storage->raw_data; + image->raw_data_len = storage->raw_data_len; + return TRUE; +} + +static MonoImageStorage * +mono_image_storage_open (const char *fname) +{ + char *key = NULL; + + key = mono_path_resolve_symlinks (fname); + MonoImageStorage *published_storage = NULL; + if (mono_image_storage_tryaddref (key, &published_storage)) { + g_free (key); + return published_storage; + } + + MonoFileMap *filed; if ((filed = mono_file_map_open (fname)) == NULL){ if (IS_PORTABILITY_SET) { gchar *ffname = mono_portability_find_file (fname, TRUE); @@ -1437,24 +1554,80 @@ do_mono_image_open (const char *fname, MonoImageOpenStatus *status, } if (filed == NULL) { - if (status) - *status = MONO_IMAGE_ERROR_ERRNO; + g_free (key); return NULL; } } - image = g_new0 (MonoImage, 1); - image->raw_buffer_used = TRUE; - image->raw_data_len = mono_file_map_size (filed); - image->raw_data = (char *)mono_file_map (image->raw_data_len, MONO_MMAP_READ|MONO_MMAP_PRIVATE, mono_file_map_fd (filed), 0, &image->raw_data_handle); + MonoImageStorage *storage = g_new0 (MonoImageStorage, 1); + mono_refcount_init (storage, mono_image_storage_dtor); + storage->raw_buffer_used = TRUE; + storage->raw_data_len = mono_file_map_size (filed); + storage->raw_data = (char*)mono_file_map (storage->raw_data_len, MONO_MMAP_READ|MONO_MMAP_PRIVATE, mono_file_map_fd (filed), 0, &storage->raw_data_handle); #if defined(HAVE_MMAP) && !defined (HOST_WIN32) - if (!image->raw_data) { - image->fileio_used = TRUE; - image->raw_data = (char *)mono_file_map_fileio (image->raw_data_len, MONO_MMAP_READ|MONO_MMAP_PRIVATE, mono_file_map_fd (filed), 0, &image->raw_data_handle); + if (!storage->raw_data) { + storage->fileio_used = TRUE; + storage->raw_data = (char *)mono_file_map_fileio (storage->raw_data_len, MONO_MMAP_READ|MONO_MMAP_PRIVATE, mono_file_map_fd (filed), 0, &storage->raw_data_handle); } #endif + mono_file_map_close (filed); + + storage->key = key; + + MonoImageStorage *other_storage = NULL; + if (!mono_image_storage_trypublish (storage, &other_storage)) { + mono_image_storage_close (storage); + storage = other_storage; + } + return storage; +} + +static MonoImageStorage * +mono_image_storage_new_raw_data (char *datac, guint32 data_len, gboolean raw_data_allocated, const char *name) +{ + char *key = (name == NULL) ? g_strdup_printf ("data-%p", datac) : g_strdup (name); + MonoImageStorage *published_storage = NULL; + if (mono_image_storage_tryaddref (key, &published_storage)) { + g_free (key); + return published_storage; + } + + MonoImageStorage *storage = g_new0 (MonoImageStorage, 1); + mono_refcount_init (storage, mono_image_storage_dtor); + + storage->raw_data = datac; + storage->raw_data_len = data_len; + storage->raw_data_allocated = raw_data_allocated; + + storage->key = key; + MonoImageStorage *other_storage = NULL; + if (!mono_image_storage_trypublish (storage, &other_storage)) { + mono_image_storage_close (storage); + storage = other_storage; + } + return storage; +} + +static MonoImage * +do_mono_image_open (const char *fname, MonoImageOpenStatus *status, + gboolean care_about_cli, gboolean care_about_pecoff, gboolean refonly, gboolean metadata_only, gboolean load_from_context) +{ + MonoCLIImageInfo *iinfo; + MonoImage *image; + + MonoImageStorage *storage = mono_image_storage_open (fname); + + if (!storage) { + if (status) + *status = MONO_IMAGE_ERROR_ERRNO; + return NULL; + } + + image = g_new0 (MonoImage, 1); + image->storage = storage; + mono_image_init_raw_data (image, storage); if (!image->raw_data) { - mono_file_map_close (filed); + mono_image_storage_close (image->storage); g_free (image); if (status) *status = MONO_IMAGE_IMAGE_INVALID; @@ -1471,7 +1644,6 @@ do_mono_image_open (const char *fname, MonoImageOpenStatus *status, /* if MONO_SECURITY_MODE_CORE_CLR is set then determine if this image is platform code */ image->core_clr_platform_code = mono_security_core_clr_determine_platform_image (image); - mono_file_map_close (filed); return do_mono_image_load (image, status, care_about_cli, care_about_pecoff); } @@ -1631,10 +1803,10 @@ mono_image_open_from_data_internal (char *data, guint32 data_len, gboolean need_ memcpy (datac, data, data_len); } + MonoImageStorage *storage = mono_image_storage_new_raw_data (datac, data_len, need_copy, name); image = g_new0 (MonoImage, 1); - image->raw_data = datac; - image->raw_data_len = data_len; - image->raw_data_allocated = need_copy; + image->storage = storage; + mono_image_init_raw_data (image, storage); image->name = (name == NULL) ? g_strdup_printf ("data-%p", datac) : g_strdup(name); iinfo = g_new0 (MonoCLIImageInfo, 1); image->image_info = iinfo; @@ -1689,6 +1861,32 @@ mono_image_open_from_data (char *data, guint32 data_len, gboolean need_copy, Mon } #ifdef HOST_WIN32 +static MonoImageStorage * +mono_image_storage_open_from_module_handle (HMODULE module_handle, const char *fname, gboolean has_entry_point) +{ + char *key = g_strdup (fname); + MonoImageStorage *published_storage = NULL; + if (mono_image_storage_tryaddref (key, &published_storage)) { + g_free (key); + return published_storage; + } + + MonoImageStorage *storage = g_new0 (MonoImageStorage, 1); + mono_refcount_init (storage, mono_image_storage_dtor); + storage->raw_data = (char*) module_handle; + storage->is_module_handle = TRUE; + storage->has_entry_point = has_entry_point; + + storage->key = key; + + MonoImageStorage *other_storage = NULL; + if (!mono_image_storage_trypublish (storage, &other_storage)) { + mono_image_storage_close (storage); + storage = other_storage; + } + return storage; +} + /* fname is not duplicated. */ MonoImage* mono_image_open_from_module_handle (HMODULE module_handle, char* fname, gboolean has_entry_point, MonoImageOpenStatus* status) @@ -1696,14 +1894,14 @@ mono_image_open_from_module_handle (HMODULE module_handle, char* fname, gboolean MonoImage* image; MonoCLIImageInfo* iinfo; + MonoImageStorage *storage = mono_image_storage_open_from_module_handle (module_handle, fname, has_entry_point); image = g_new0 (MonoImage, 1); - image->raw_data = (char*) module_handle; - image->is_module_handle = TRUE; + image->storage = storage; + mono_image_init_raw_data (image, storage); iinfo = g_new0 (MonoCLIImageInfo, 1); image->image_info = iinfo; image->name = fname; image->ref_count = has_entry_point ? 0 : 1; - image->has_entry_point = has_entry_point; image = do_mono_image_load (image, status, TRUE, TRUE); if (image == NULL) @@ -1758,8 +1956,8 @@ mono_image_open_a_lot (const char *fname, MonoImageOpenStatus *status, gboolean mono_images_unlock (); return NULL; } - g_assert (image->is_module_handle); - if (image->has_entry_point && image->ref_count == 0) { + g_assert (m_image_is_module_handle (image)); + if (m_image_has_entry_point (image) && image->ref_count == 0) { /* Increment reference count on images loaded outside of the runtime. */ fname_utf16 = g_utf8_to_utf16 (absfname, -1, NULL, NULL, NULL); /* The image is already loaded because _CorDllMain removes images from the hash. */ @@ -1806,8 +2004,8 @@ mono_image_open_a_lot (const char *fname, MonoImageOpenStatus *status, gboolean } if (image) { - g_assert (image->is_module_handle); - g_assert (image->has_entry_point); + g_assert (m_image_is_module_handle (image)); + g_assert (m_image_has_entry_point (image)); g_free (absfname); return image; } @@ -1930,7 +2128,7 @@ mono_image_fixup_vtable (MonoImage *image) guint16 slot_type; int slot_count; - g_assert (image->is_module_handle); + g_assert (m_image_is_module_handle (image)); iinfo = image->image_info; de = &iinfo->cli_cli_header.ch_vtable_fixups; @@ -2097,7 +2295,7 @@ mono_image_close_except_pools (MonoImage *image) mono_images_unlock (); #ifdef HOST_WIN32 - if (image->is_module_handle && image->has_entry_point) { + if (m_image_is_module_handle (image) && m_image_has_entry_point (image)) { mono_images_lock (); if (image->ref_count == 0) { /* Image will be closed by _CorDllMain. */ @@ -2136,25 +2334,10 @@ mono_image_close_except_pools (MonoImage *image) } } -#ifdef HOST_WIN32 - mono_images_lock (); - if (image->is_module_handle && !image->has_entry_point) - FreeLibrary ((HMODULE) image->raw_data); - mono_images_unlock (); -#endif + /* a MonoDynamicImage doesn't have any storage */ + g_assert (image_is_dynamic (image) || image->storage != NULL); - if (image->raw_buffer_used) { - if (image->raw_data != NULL) { -#ifndef HOST_WIN32 - if (image->fileio_used) - mono_file_unmap_fileio (image->raw_data, image->raw_data_handle); - else -#endif - mono_file_unmap (image->raw_data, image->raw_data_handle); - } - } - - if (image->raw_data_allocated) { + if (image->storage && m_image_is_raw_data_allocated (image)) { /* FIXME: do we need this? (image is disposed anyway) */ /* image->raw_metadata and cli_sections might lie inside image->raw_data */ MonoCLIImageInfo *ii = image->image_info; @@ -2168,9 +2351,11 @@ mono_image_close_except_pools (MonoImage *image) ((char*)(ii->cli_sections [i]) <= ((char*)image->raw_data + image->raw_data_len))) ii->cli_sections [i] = NULL; - g_free (image->raw_data); } + if (image->storage) + mono_image_storage_close (image->storage); + if (debug_assembly_unload) { char *old_name = image->name; image->name = g_strdup_printf ("%s - UNLOADED", old_name); @@ -2228,7 +2413,6 @@ mono_image_close_except_pools (MonoImage *image) /* The ownership of signatures is not well defined */ g_hash_table_destroy (image->memberref_signatures); - g_hash_table_destroy (image->helper_signatures); g_hash_table_destroy (image->method_signatures); if (image->rgctx_template_hash) @@ -2613,7 +2797,7 @@ mono_image_load_file_for_image_checked (MonoImage *image, int fileidx, MonoError mono_image_unlock (image); /* vtable fixup can't happen with the image lock held */ #ifdef HOST_WIN32 - if (res->is_module_handle) + if (m_image_is_module_handle (res)) mono_image_fixup_vtable (res); #endif } diff --git a/mono/metadata/jit-icall-reg.h b/mono/metadata/jit-icall-reg.h new file mode 100644 index 0000000000..d09f2ddcdd --- /dev/null +++ b/mono/metadata/jit-icall-reg.h @@ -0,0 +1,396 @@ +/** + * \file + * Enum for JIT icalls: MonoJitICallId MONO_JIT_ICALL_mono_foo, etc. + * Static storage for JIT icall info: mono_get_jit_icall_info(). + * + * mono_find_jit_icall_info (MonoJitICallId) + * Convert enum to pointer. + * + * mono_find_jit_icall_info ((MonoJitICallId)int) + * Convert int to pointer. + * + * mono_jit_icall_info_id (MonoJitICallInfo*) + * Convert pointer to enum. + * + * mono_jit_icall_info_index (MonoJitICallInfo*) + * Convert pointer to int. + * + * &mono_get_icall_info ()->name + * Convert name to pointer. + * + * MONO_JIT_ICALL_ ## name + * Convert name to enum. + * + * All conversions are just a few instructions. + * + * Author: + * Jay Krell (jaykrell@microsoft.com) + * + * Copyright 2019 Microsoft + * Licensed under the MIT license. See LICENSE file in the project root for full license information. + */ + +// No include guard needed. + +// Changes within MONO_JIT_ICALLS require revising MONO_AOT_FILE_VERSION. +#define MONO_JIT_ICALLS \ + \ +MONO_JIT_ICALL (ZeroIsReserved) \ + \ +/* These must be ordered like MonoTrampolineType. */ \ +MONO_JIT_ICALL (generic_trampoline_jit) \ +MONO_JIT_ICALL (generic_trampoline_jump) \ +MONO_JIT_ICALL (generic_trampoline_rgctx_lazy_fetch) \ +MONO_JIT_ICALL (generic_trampoline_aot) \ +MONO_JIT_ICALL (generic_trampoline_aot_plt) \ +MONO_JIT_ICALL (generic_trampoline_delegate) \ +MONO_JIT_ICALL (generic_trampoline_generic_virtual_remoting) \ +MONO_JIT_ICALL (generic_trampoline_vcall) \ + \ +/* These must be ordered like MonoTlsKey. */ \ +MONO_JIT_ICALL (mono_tls_get_thread) \ +MONO_JIT_ICALL (mono_tls_get_jit_tls) \ +MONO_JIT_ICALL (mono_tls_get_domain) \ +MONO_JIT_ICALL (mono_tls_get_sgen_thread_info) \ +MONO_JIT_ICALL (mono_tls_get_lmf_addr) \ + \ +MONO_JIT_ICALL (__emul_fadd) \ +MONO_JIT_ICALL (__emul_fcmp_ceq) \ +MONO_JIT_ICALL (__emul_fcmp_cgt) \ +MONO_JIT_ICALL (__emul_fcmp_cgt_un) \ +MONO_JIT_ICALL (__emul_fcmp_clt) \ +MONO_JIT_ICALL (__emul_fcmp_clt_un) \ +MONO_JIT_ICALL (__emul_fcmp_eq) \ +MONO_JIT_ICALL (__emul_fcmp_ge) \ +MONO_JIT_ICALL (__emul_fcmp_ge_un) \ +MONO_JIT_ICALL (__emul_fcmp_gt) \ +MONO_JIT_ICALL (__emul_fcmp_gt_un) \ +MONO_JIT_ICALL (__emul_fcmp_le) \ +MONO_JIT_ICALL (__emul_fcmp_le_un) \ +MONO_JIT_ICALL (__emul_fcmp_lt) \ +MONO_JIT_ICALL (__emul_fcmp_lt_un) \ +MONO_JIT_ICALL (__emul_fcmp_ne_un) \ +MONO_JIT_ICALL (__emul_fconv_to_i) \ +MONO_JIT_ICALL (__emul_fconv_to_i1) \ +MONO_JIT_ICALL (__emul_fconv_to_i2) \ +MONO_JIT_ICALL (__emul_fconv_to_i4) \ +MONO_JIT_ICALL (__emul_fconv_to_i8) \ +MONO_JIT_ICALL (__emul_fconv_to_ovf_i8) \ +MONO_JIT_ICALL (__emul_fconv_to_ovf_u8) \ +MONO_JIT_ICALL (__emul_fconv_to_r4) \ +MONO_JIT_ICALL (__emul_fconv_to_u) \ +MONO_JIT_ICALL (__emul_fconv_to_u1) \ +MONO_JIT_ICALL (__emul_fconv_to_u2) \ +MONO_JIT_ICALL (__emul_fconv_to_u4) \ +MONO_JIT_ICALL (__emul_fconv_to_u8) \ +MONO_JIT_ICALL (__emul_fdiv) \ +MONO_JIT_ICALL (__emul_fmul) \ +MONO_JIT_ICALL (__emul_fneg) \ +MONO_JIT_ICALL (__emul_frem) \ +MONO_JIT_ICALL (__emul_fsub) \ +MONO_JIT_ICALL (__emul_iconv_to_r_un) \ +MONO_JIT_ICALL (__emul_iconv_to_r4) \ +MONO_JIT_ICALL (__emul_iconv_to_r8) \ +MONO_JIT_ICALL (__emul_lconv_to_r4) \ +MONO_JIT_ICALL (__emul_lconv_to_r8) \ +MONO_JIT_ICALL (__emul_lconv_to_r8_un) \ +MONO_JIT_ICALL (__emul_ldiv) \ +MONO_JIT_ICALL (__emul_ldiv_un) \ +MONO_JIT_ICALL (__emul_lmul) \ +MONO_JIT_ICALL (__emul_lmul_ovf) \ +MONO_JIT_ICALL (__emul_lmul_ovf_un) \ +MONO_JIT_ICALL (__emul_lrem) \ +MONO_JIT_ICALL (__emul_lrem_un) \ +MONO_JIT_ICALL (__emul_lshl) \ +MONO_JIT_ICALL (__emul_lshr) \ +MONO_JIT_ICALL (__emul_lshr_un) \ +MONO_JIT_ICALL (__emul_op_idiv) \ +MONO_JIT_ICALL (__emul_op_idiv_un) \ +MONO_JIT_ICALL (__emul_op_imul) \ +MONO_JIT_ICALL (__emul_op_imul_ovf) \ +MONO_JIT_ICALL (__emul_op_imul_ovf_un) \ +MONO_JIT_ICALL (__emul_op_irem) \ +MONO_JIT_ICALL (__emul_op_irem_un) \ +MONO_JIT_ICALL (__emul_rconv_to_i8) \ +MONO_JIT_ICALL (__emul_rconv_to_ovf_i8) \ +MONO_JIT_ICALL (__emul_rconv_to_ovf_u8) \ +MONO_JIT_ICALL (__emul_rconv_to_u8) \ +MONO_JIT_ICALL (__emul_rrem) \ +MONO_JIT_ICALL (cominterop_get_ccw) \ +MONO_JIT_ICALL (cominterop_get_ccw_object) \ +MONO_JIT_ICALL (cominterop_get_function_pointer) \ +MONO_JIT_ICALL (cominterop_get_interface) \ +MONO_JIT_ICALL (cominterop_get_method_interface) \ +MONO_JIT_ICALL (cominterop_object_is_rcw) \ +MONO_JIT_ICALL (cominterop_type_from_handle) \ +MONO_JIT_ICALL (g_free) \ +MONO_JIT_ICALL (interp_to_native_trampoline) \ +MONO_JIT_ICALL (mini_llvm_init_gshared_method_mrgctx) \ +MONO_JIT_ICALL (mini_llvm_init_gshared_method_this) \ +MONO_JIT_ICALL (mini_llvm_init_gshared_method_vtable) \ +MONO_JIT_ICALL (mini_llvm_init_method) \ +MONO_JIT_ICALL (mini_llvmonly_init_delegate) \ +MONO_JIT_ICALL (mini_llvmonly_init_delegate_virtual) \ +MONO_JIT_ICALL (mini_llvmonly_init_vtable_slot) \ +MONO_JIT_ICALL (mini_llvmonly_resolve_generic_virtual_call) \ +MONO_JIT_ICALL (mini_llvmonly_resolve_generic_virtual_iface_call) \ +MONO_JIT_ICALL (mini_llvmonly_resolve_iface_call_gsharedvt) \ +MONO_JIT_ICALL (mini_llvmonly_resolve_vcall_gsharedvt) \ +MONO_JIT_ICALL (mini_llvmonly_throw_nullref_exception) \ +MONO_JIT_ICALL (mono_amd64_resume_unwind) \ +MONO_JIT_ICALL (mono_amd64_start_gsharedvt_call) \ +MONO_JIT_ICALL (mono_amd64_throw_corlib_exception) \ +MONO_JIT_ICALL (mono_amd64_throw_exception) \ +MONO_JIT_ICALL (mono_arch_rethrow_exception) \ +MONO_JIT_ICALL (mono_arch_throw_corlib_exception) \ +MONO_JIT_ICALL (mono_arch_throw_exception) \ +MONO_JIT_ICALL (mono_arm_resume_unwind) \ +MONO_JIT_ICALL (mono_arm_start_gsharedvt_call) \ +MONO_JIT_ICALL (mono_arm_throw_exception) \ +MONO_JIT_ICALL (mono_arm_throw_exception_by_token) \ +MONO_JIT_ICALL (mono_arm_unaligned_stack) \ +MONO_JIT_ICALL (mono_array_new_1) \ +MONO_JIT_ICALL (mono_array_new_2) \ +MONO_JIT_ICALL (mono_array_new_3) \ +MONO_JIT_ICALL (mono_array_new_4) \ +MONO_JIT_ICALL (mono_array_new_n_icall) \ +MONO_JIT_ICALL (mono_array_to_byte_byvalarray) \ +MONO_JIT_ICALL (mono_array_to_lparray) \ +MONO_JIT_ICALL (mono_array_to_savearray) \ +MONO_JIT_ICALL (mono_break) \ +MONO_JIT_ICALL (mono_byvalarray_to_byte_array) \ +MONO_JIT_ICALL (mono_chkstk_win64) \ +MONO_JIT_ICALL (mono_ckfinite) \ +MONO_JIT_ICALL (mono_class_interface_match) \ +MONO_JIT_ICALL (mono_class_static_field_address) \ +MONO_JIT_ICALL (mono_compile_method_icall) \ +MONO_JIT_ICALL (mono_context_get_icall) \ +MONO_JIT_ICALL (mono_context_set_icall) \ +MONO_JIT_ICALL (mono_create_corlib_exception_0) \ +MONO_JIT_ICALL (mono_create_corlib_exception_1) \ +MONO_JIT_ICALL (mono_create_corlib_exception_2) \ +MONO_JIT_ICALL (mono_debug_personality) \ +MONO_JIT_ICALL (mono_debugger_agent_breakpoint_from_context) \ +MONO_JIT_ICALL (mono_debugger_agent_single_step_from_context) \ +MONO_JIT_ICALL (mono_debugger_agent_user_break) \ +MONO_JIT_ICALL (mono_delegate_begin_invoke) \ +MONO_JIT_ICALL (mono_delegate_end_invoke) \ +MONO_JIT_ICALL (mono_delegate_to_ftnptr) \ +MONO_JIT_ICALL (mono_domain_get) \ +MONO_JIT_ICALL (mono_dummy_jit_icall) \ +MONO_JIT_ICALL (mono_exception_from_token) \ +MONO_JIT_ICALL (mono_fill_class_rgctx) \ +MONO_JIT_ICALL (mono_fill_method_rgctx) \ +MONO_JIT_ICALL (mono_fload_r4) \ +MONO_JIT_ICALL (mono_fload_r4_arg) \ +MONO_JIT_ICALL (mono_free_bstr) \ +MONO_JIT_ICALL (mono_free_lparray) \ +MONO_JIT_ICALL (mono_fstore_r4) \ +MONO_JIT_ICALL (mono_ftnptr_to_delegate) \ +MONO_JIT_ICALL (mono_gc_alloc_obj) \ +MONO_JIT_ICALL (mono_gc_alloc_string) \ +MONO_JIT_ICALL (mono_gc_alloc_vector) \ +MONO_JIT_ICALL (mono_gc_wbarrier_generic_nostore_internal) \ +MONO_JIT_ICALL (mono_gc_wbarrier_range_copy) \ +MONO_JIT_ICALL (mono_gchandle_get_target_internal) \ +MONO_JIT_ICALL (mono_generic_class_init) \ +MONO_JIT_ICALL (mono_get_assembly_object) \ +MONO_JIT_ICALL (mono_get_method_object) \ +MONO_JIT_ICALL (mono_get_native_calli_wrapper) \ +MONO_JIT_ICALL (mono_get_special_static_data) \ +MONO_JIT_ICALL (mono_gsharedvt_constrained_call) \ +MONO_JIT_ICALL (mono_gsharedvt_value_copy) \ +MONO_JIT_ICALL (mono_helper_compile_generic_method) \ +MONO_JIT_ICALL (mono_helper_ldstr) \ +MONO_JIT_ICALL (mono_helper_ldstr_mscorlib) \ +MONO_JIT_ICALL (mono_helper_newobj_mscorlib) \ +MONO_JIT_ICALL (mono_helper_stelem_ref_check) \ +MONO_JIT_ICALL (mono_init_vtable_slot) \ +MONO_JIT_ICALL (mono_interp_entry_from_trampoline) \ +MONO_JIT_ICALL (mono_interp_to_native_trampoline) \ +MONO_JIT_ICALL (mono_isfinite_double) \ +MONO_JIT_ICALL (mono_jit_set_domain) \ +MONO_JIT_ICALL (mono_ldftn) \ +MONO_JIT_ICALL (mono_ldtoken_wrapper) \ +MONO_JIT_ICALL (mono_ldtoken_wrapper_generic_shared) \ +MONO_JIT_ICALL (mono_ldvirtfn) \ +MONO_JIT_ICALL (mono_ldvirtfn_gshared) \ +MONO_JIT_ICALL (mono_llvm_clear_exception) \ +MONO_JIT_ICALL (mono_llvm_load_exception) \ +MONO_JIT_ICALL (mono_llvm_match_exception) \ +MONO_JIT_ICALL (mono_llvm_resume_exception) \ +MONO_JIT_ICALL (mono_llvm_resume_unwind_trampoline) \ +MONO_JIT_ICALL (mono_llvm_rethrow_exception) \ +MONO_JIT_ICALL (mono_llvm_rethrow_exception_trampoline) \ +MONO_JIT_ICALL (mono_llvm_set_unhandled_exception_handler) \ +MONO_JIT_ICALL (mono_llvm_throw_corlib_exception) \ +MONO_JIT_ICALL (mono_llvm_throw_corlib_exception_abs_trampoline) \ +MONO_JIT_ICALL (mono_llvm_throw_corlib_exception_trampoline) \ +MONO_JIT_ICALL (mono_llvm_throw_exception) \ +MONO_JIT_ICALL (mono_llvm_throw_exception_trampoline) \ +MONO_JIT_ICALL (mono_llvmonly_init_delegate) \ +MONO_JIT_ICALL (mono_llvmonly_init_delegate_virtual) \ +MONO_JIT_ICALL (mono_marshal_asany) \ +MONO_JIT_ICALL (mono_marshal_check_domain_image) \ +MONO_JIT_ICALL (mono_marshal_free) \ +MONO_JIT_ICALL (mono_marshal_free_array) \ +MONO_JIT_ICALL (mono_marshal_free_asany) \ +MONO_JIT_ICALL (mono_marshal_get_type_object) \ +MONO_JIT_ICALL (mono_marshal_isinst_with_cache) \ +MONO_JIT_ICALL (mono_marshal_safearray_begin) \ +MONO_JIT_ICALL (mono_marshal_safearray_create) \ +MONO_JIT_ICALL (mono_marshal_safearray_end) \ +MONO_JIT_ICALL (mono_marshal_safearray_free_indices) \ +MONO_JIT_ICALL (mono_marshal_safearray_get_value) \ +MONO_JIT_ICALL (mono_marshal_safearray_next) \ +MONO_JIT_ICALL (mono_marshal_safearray_set_value) \ +MONO_JIT_ICALL (mono_marshal_set_domain_by_id) \ +MONO_JIT_ICALL (mono_marshal_set_last_error) \ +MONO_JIT_ICALL (mono_marshal_set_last_error_windows) \ +MONO_JIT_ICALL (mono_marshal_string_to_utf16) \ +MONO_JIT_ICALL (mono_marshal_string_to_utf16_copy) \ +MONO_JIT_ICALL (mono_marshal_xdomain_copy_out_value) \ +MONO_JIT_ICALL (mono_monitor_enter_fast) \ +MONO_JIT_ICALL (mono_monitor_enter_internal) \ +MONO_JIT_ICALL (mono_monitor_enter_v4_fast) \ +MONO_JIT_ICALL (mono_monitor_enter_v4_internal) \ +MONO_JIT_ICALL (mono_object_castclass_unbox) \ +MONO_JIT_ICALL (mono_object_castclass_with_cache) \ +MONO_JIT_ICALL (mono_object_isinst_icall) \ +MONO_JIT_ICALL (mono_object_isinst_with_cache) \ +MONO_JIT_ICALL (mono_ppc_throw_exception) \ +MONO_JIT_ICALL (mono_profiler_raise_exception_clause) \ +MONO_JIT_ICALL (mono_profiler_raise_gc_allocation) \ +MONO_JIT_ICALL (mono_profiler_raise_method_enter) \ +MONO_JIT_ICALL (mono_profiler_raise_method_leave) \ +MONO_JIT_ICALL (mono_profiler_raise_method_tail_call) \ +MONO_JIT_ICALL (mono_remoting_update_exception) \ +MONO_JIT_ICALL (mono_remoting_wrapper) \ +MONO_JIT_ICALL (mono_resolve_generic_virtual_call) \ +MONO_JIT_ICALL (mono_resolve_generic_virtual_iface_call) \ +MONO_JIT_ICALL (mono_resolve_iface_call_gsharedvt) \ +MONO_JIT_ICALL (mono_resolve_vcall_gsharedvt) \ +MONO_JIT_ICALL (mono_resume_unwind) \ +MONO_JIT_ICALL (mono_rethrow_preserve_exception) \ +MONO_JIT_ICALL (mono_string_builder_to_utf16) \ +MONO_JIT_ICALL (mono_string_builder_to_utf8) \ +MONO_JIT_ICALL (mono_string_from_bstr_icall) \ +MONO_JIT_ICALL (mono_string_from_byvalstr) \ +MONO_JIT_ICALL (mono_string_from_byvalwstr) \ +MONO_JIT_ICALL (mono_string_new_len_wrapper) \ +MONO_JIT_ICALL (mono_string_new_wrapper_internal) \ +MONO_JIT_ICALL (mono_string_to_ansibstr) \ +MONO_JIT_ICALL (mono_string_to_bstr) \ +MONO_JIT_ICALL (mono_string_to_byvalstr) \ +MONO_JIT_ICALL (mono_string_to_byvalwstr) \ +MONO_JIT_ICALL (mono_string_to_utf16_internal) \ +MONO_JIT_ICALL (mono_string_to_utf8str) \ +MONO_JIT_ICALL (mono_string_utf16_to_builder) \ +MONO_JIT_ICALL (mono_string_utf16_to_builder2) \ +MONO_JIT_ICALL (mono_string_utf8_to_builder) \ +MONO_JIT_ICALL (mono_string_utf8_to_builder2) \ +MONO_JIT_ICALL (mono_struct_delete_old) \ +MONO_JIT_ICALL (mono_thread_force_interruption_checkpoint_noraise) \ +MONO_JIT_ICALL (mono_thread_get_undeniable_exception) \ +MONO_JIT_ICALL (mono_thread_interruption_checkpoint) \ +MONO_JIT_ICALL (mono_threads_attach_coop) \ +MONO_JIT_ICALL (mono_threads_detach_coop) \ +MONO_JIT_ICALL (mono_threads_enter_gc_safe_region_unbalanced) \ +MONO_JIT_ICALL (mono_threads_enter_gc_unsafe_region_unbalanced) \ +MONO_JIT_ICALL (mono_threads_exit_gc_safe_region_unbalanced) \ +MONO_JIT_ICALL (mono_threads_exit_gc_unsafe_region_unbalanced) \ +MONO_JIT_ICALL (mono_threads_state_poll) \ +MONO_JIT_ICALL (mono_throw_exception) \ +MONO_JIT_ICALL (mono_throw_method_access) \ +MONO_JIT_ICALL (mono_tls_set_domain) \ +MONO_JIT_ICALL (mono_tls_set_jit_tls) \ +MONO_JIT_ICALL (mono_tls_set_lmf_addr) \ +MONO_JIT_ICALL (mono_tls_set_sgen_thread_info) \ +MONO_JIT_ICALL (mono_tls_set_thread) \ +MONO_JIT_ICALL (mono_throw_bad_image) \ +MONO_JIT_ICALL (mono_trace_enter_method) \ +MONO_JIT_ICALL (mono_trace_leave_method) \ +MONO_JIT_ICALL (mono_upgrade_remote_class_wrapper) \ +MONO_JIT_ICALL (mono_value_copy_internal) \ +MONO_JIT_ICALL (mono_x86_start_gsharedvt_call) \ +MONO_JIT_ICALL (mono_x86_throw_corlib_exception) \ +MONO_JIT_ICALL (mono_x86_throw_exception) \ +MONO_JIT_ICALL (native_to_interp_trampoline) \ +MONO_JIT_ICALL (personality) \ +MONO_JIT_ICALL (pthread_getspecific) \ +MONO_JIT_ICALL (rgctx_fetch_trampoline_general) \ +MONO_JIT_ICALL (sdb_breakpoint_trampoline) \ +MONO_JIT_ICALL (sdb_single_step_trampoline) \ +MONO_JIT_ICALL (type_from_handle) \ +MONO_JIT_ICALL (ves_icall_array_new) \ +MONO_JIT_ICALL (ves_icall_array_new_specific) \ +MONO_JIT_ICALL (ves_icall_marshal_alloc) \ +MONO_JIT_ICALL (ves_icall_mono_delegate_ctor) \ +MONO_JIT_ICALL (ves_icall_mono_delegate_ctor_interp) \ +MONO_JIT_ICALL (ves_icall_mono_ldstr) \ +MONO_JIT_ICALL (ves_icall_mono_marshal_xdomain_copy_value) \ +MONO_JIT_ICALL (ves_icall_mono_string_from_utf16) \ +MONO_JIT_ICALL (ves_icall_mono_string_to_utf8) \ +MONO_JIT_ICALL (ves_icall_object_new) \ +MONO_JIT_ICALL (ves_icall_object_new_specific) \ +MONO_JIT_ICALL (ves_icall_runtime_class_init) \ +MONO_JIT_ICALL (ves_icall_string_alloc) \ +MONO_JIT_ICALL (ves_icall_string_new_wrapper) \ +MONO_JIT_ICALL (ves_icall_thread_finish_async_abort) \ + \ +MONO_JIT_ICALL (count) \ + +#define MONO_JIT_ICALL_mono_get_lmf_addr MONO_JIT_ICALL_mono_tls_get_lmf_addr + +#ifdef __cplusplus +typedef enum MonoJitICallId : gsize // Widen to gsize for use in MonoJumpInfo union. +#else +typedef enum MonoJitICallId +#endif +{ +#define MONO_JIT_ICALL(x) MONO_JIT_ICALL_ ## x, +MONO_JIT_ICALLS +#undef MONO_JIT_ICALL +} MonoJitICallId; + +typedef union MonoJitICallInfos { + struct { +#define MONO_JIT_ICALL(x) MonoJitICallInfo x; +MONO_JIT_ICALLS +#undef MONO_JIT_ICALL + }; + MonoJitICallInfo array [MONO_JIT_ICALL_count]; +} MonoJitICallInfos; + +// Indirect mono_jit_icall_info access through a function or macro due to loaded LLVM. +// +#if MONO_LLVM_LOADED + +MonoJitICallInfos* +mono_get_jit_icall_info (void) MONO_LLVM_INTERNAL; + +#else + +extern MonoJitICallInfos mono_jit_icall_info; + +#define mono_get_jit_icall_info() (&mono_jit_icall_info) + +#endif + +// Convert MonoJitICallInfo* to an int or enum. +// +#define mono_jit_icall_info_index(x) ((x) - mono_get_jit_icall_info ()->array) +#define mono_jit_icall_info_id(x) ((MonoJitICallId)mono_jit_icall_info_index(x)) + +// Given an enum/id, get the MonoJitICallInfo*. +// +static inline MonoJitICallInfo* +mono_find_jit_icall_info (MonoJitICallId id) +{ + const guint index = (guint)id; + + g_assert (index < MONO_JIT_ICALL_count); + g_static_assert (MONO_JIT_ICALL_count < 0x200); // fits in 9 bits + + return &mono_get_jit_icall_info ()->array [index]; +} diff --git a/mono/metadata/loader-internals.h b/mono/metadata/loader-internals.h index b1725644cc..957caa8cca 100644 --- a/mono/metadata/loader-internals.h +++ b/mono/metadata/loader-internals.h @@ -5,4 +5,16 @@ #ifndef _MONO_METADATA_LOADER_INTERNALS_H_ #define _MONO_METADATA_LOADER_INTERNALS_H_ +#include <glib.h> +#include <mono/metadata/object-forward.h> +#include <mono/utils/mono-error.h> + +gpointer +mono_lookup_pinvoke_call_internal (MonoMethod *method, MonoError *error); + +#ifdef ENABLE_NETCORE +void +mono_set_pinvoke_search_directories (int dir_count, char **dirs); +#endif + #endif diff --git a/mono/metadata/loader.c b/mono/metadata/loader.c index 7d5b7d1749..f721cf8b38 100644 --- a/mono/metadata/loader.c +++ b/mono/metadata/loader.c @@ -32,6 +32,7 @@ #include <mono/metadata/tabledefs.h> #include <mono/metadata/metadata-internals.h> #include <mono/metadata/loader.h> +#include <mono/metadata/loader-internals.h> #include <mono/metadata/class-init.h> #include <mono/metadata/class-internals.h> #include <mono/metadata/debug-helpers.h> @@ -75,6 +76,11 @@ static gint32 signatures_size; */ static MonoNativeTlsKey loader_lock_nest_id; +#if ENABLE_NETCORE +static int pinvoke_search_directories_count; +static char **pinvoke_search_directories; +#endif + static void dllmap_cleanup (void); static void cached_module_cleanup(void); @@ -84,6 +90,7 @@ static void dllmap_insert_image (MonoImage *assembly, const char *dll, const cha /* Class lazy loading functions */ GENERATE_GET_CLASS_WITH_CACHE (appdomain_unloaded_exception, "System", "AppDomainUnloadedException") +GENERATE_TRY_GET_CLASS_WITH_CACHE (appdomain_unloaded_exception, "System", "AppDomainUnloadedException") static void global_loader_data_lock (void) @@ -1186,11 +1193,114 @@ is_absolute_path (const char *path) return g_path_is_absolute (path); } +typedef enum { + LOOKUP_PINVOKE_ERR_OK = 0, /* No error */ + LOOKUP_PINVOKE_ERR_NO_LIB, /* DllNotFoundException */ + LOOKUP_PINVOKE_ERR_NO_SYM, /* EntryPointNotFoundException */ +} MonoLookupPInvokeErr; + +/* We should just use a MonoError, but mono_lookup_pinvoke_call has this legacy + * error reporting mechanism where it returns an exception class and a string + * message. So instead we return an error code and message, and for internal + * callers convert it to a MonoError. + * + * Don't expose this type to the runtime. It's just an implementation + * detail for backward compatability. + */ +typedef struct MonoLookupPInvokeStatus { + MonoLookupPInvokeErr err_code; + char *err_arg; +} MonoLookupPInvokeStatus; + +static gpointer +lookup_pinvoke_call_impl (MonoMethod *method, MonoLookupPInvokeStatus *status_out); + +static void +pinvoke_probe_convert_status_for_api (MonoLookupPInvokeStatus *status, const char **exc_class, const char **exc_arg) +{ + if (!exc_class) + return; + switch (status->err_code) { + case LOOKUP_PINVOKE_ERR_OK: + *exc_class = NULL; + *exc_arg = NULL; + break; + case LOOKUP_PINVOKE_ERR_NO_LIB: + *exc_class = "DllNotFoundException"; + *exc_arg = status->err_arg; + status->err_arg = NULL; + break; + case LOOKUP_PINVOKE_ERR_NO_SYM: + *exc_class = "EntryPointNotFoundException"; + *exc_arg = status->err_arg; + status->err_arg = NULL; + break; + default: + g_assert_not_reached (); + } +} + +static void +pinvoke_probe_convert_status_to_error (MonoLookupPInvokeStatus *status, MonoError *error) +{ + /* Note: this has to return a MONO_ERROR_GENERIC because mono_mb_emit_exception_for_error only knows how to decode generic errors. */ + switch (status->err_code) { + case LOOKUP_PINVOKE_ERR_OK: + return; + case LOOKUP_PINVOKE_ERR_NO_LIB: + mono_error_set_generic_error (error, "System", "DllNotFoundException", "%s", status->err_arg); + g_free (status->err_arg); + status->err_arg = NULL; + break; + case LOOKUP_PINVOKE_ERR_NO_SYM: + mono_error_set_generic_error (error, "System", "EntryPointNotFoundException", "%s", status->err_arg); + g_free (status->err_arg); + status->err_arg = NULL; + break; + default: + g_assert_not_reached (); + } +} + /** * mono_lookup_pinvoke_call: */ gpointer mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char **exc_arg) +{ + gpointer result; + MONO_ENTER_GC_UNSAFE; + MonoLookupPInvokeStatus status; + memset (&status, 0, sizeof (status)); + result = lookup_pinvoke_call_impl (method, &status); + pinvoke_probe_convert_status_for_api (&status, exc_class, exc_arg); + MONO_EXIT_GC_UNSAFE; + return result; +} + +static MonoDl* +pinvoke_probe_for_module (MonoImage *image, const char*new_scope, const char *import, char **found_name_out, char **error_msg_out); + +static MonoDl* +pinvoke_probe_for_module_relative_directories (MonoImage *image, const char *file_name, char **found_name_out); + +static gpointer +pinvoke_probe_for_symbol (MonoDl *module, MonoMethodPInvoke *piinfo, const char *import, char **error_msg_out); + +gpointer +mono_lookup_pinvoke_call_internal (MonoMethod *method, MonoError *error) +{ + gpointer result; + MonoLookupPInvokeStatus status; + memset (&status, 0, sizeof (status)); + result = lookup_pinvoke_call_impl (method, &status); + if (status.err_code) + pinvoke_probe_convert_status_to_error (&status, error); + return result; +} + +gpointer +lookup_pinvoke_call_impl (MonoMethod *method, MonoLookupPInvokeStatus *status_out) { MonoImage *image = m_class_get_image (method->klass); MonoMethodPInvoke *piinfo = (MonoMethodPInvoke *)method; @@ -1203,18 +1313,14 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char const char *orig_scope; const char *new_scope; char *error_msg; - char *full_name, *file_name, *found_name = NULL; - int i,j; + char *found_name = NULL; MonoDl *module = NULL; gboolean cached = FALSE; gpointer addr = NULL; g_assert (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL); - if (exc_class) { - *exc_class = NULL; - *exc_arg = NULL; - } + g_assert (status_out); if (piinfo->addr) return piinfo->addr; @@ -1248,6 +1354,8 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char // FIXME: The dllmap remaps System.Native to mono-native mono_dllmap_lookup (image, orig_scope, import, &new_scope, &import); #else + /* AK: FIXME: dllmap, above doesn't strdup the results, so these leak + * since there's no free() */ new_scope = g_strdup (orig_scope); import = g_strdup (import); #endif @@ -1267,6 +1375,138 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char found_name = g_strdup (found_name); } + if (!module) + module = pinvoke_probe_for_module (image, new_scope, import, &found_name, &error_msg); + + if (!module) { + mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_DLLIMPORT, + "DllImport unable to load library '%s'.", + error_msg); + g_free (error_msg); + + status_out->err_code = LOOKUP_PINVOKE_ERR_NO_LIB; + status_out->err_arg = g_strdup (new_scope); + return NULL; + } + + if (!cached) { + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, + "DllImport loaded library '%s'.", found_name); + mono_image_lock (image); + if (!g_hash_table_lookup (image->pinvoke_scopes, new_scope)) { + g_hash_table_insert (image->pinvoke_scopes, g_strdup (new_scope), module); + g_hash_table_insert (image->pinvoke_scope_filenames, g_strdup (new_scope), g_strdup (found_name)); + } + mono_image_unlock (image); + } + + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, + "DllImport searching in: '%s' ('%s').", new_scope, found_name); + g_free (found_name); + + addr = pinvoke_probe_for_symbol (module, piinfo, import, &error_msg); + + if (!addr) { + g_free (error_msg); + status_out->err_code = LOOKUP_PINVOKE_ERR_NO_SYM; + status_out->err_arg = g_strdup (import); + return NULL; + } + piinfo->addr = addr; + return addr; +} + +/** + * pinvoke_probe_transform_path: + * + * Try transforming the library path given in \p new_scope in different ways + * depending on \p phase + * + * \returns \c TRUE if a transformation was applied and the transformed path + * components are written to the out arguments, or \c FALSE if a transformation + * did not apply. + */ +static gboolean +pinvoke_probe_transform_path (const char *new_scope, int phase, char **file_name_out, char **base_name_out, char **dir_name_out, gboolean *is_absolute_out) +{ + char *file_name = NULL, *base_name = NULL, *dir_name = NULL; + gboolean changed = FALSE; + gboolean is_absolute = is_absolute_path (new_scope); + switch (phase) { + case 0: + /* Try the original name */ + file_name = g_strdup (new_scope); + changed = TRUE; + break; + case 1: + /* Try trimming the .dll extension */ + if (strstr (new_scope, ".dll") == (new_scope + strlen (new_scope) - 4)) { + file_name = g_strdup (new_scope); + file_name [strlen (new_scope) - 4] = '\0'; + changed = TRUE; + } + break; + case 2: + if (is_absolute) { + dir_name = g_path_get_dirname (new_scope); + base_name = g_path_get_basename (new_scope); + if (strstr (base_name, "lib") != base_name) { + char *tmp = g_strdup_printf ("lib%s", base_name); + g_free (base_name); + base_name = tmp; + file_name = g_strdup_printf ("%s%s%s", dir_name, G_DIR_SEPARATOR_S, base_name); + changed = TRUE; + } + } else if (strstr (new_scope, "lib") != new_scope) { + file_name = g_strdup_printf ("lib%s", new_scope); + changed = TRUE; + } + break; + case 3: + if (!is_absolute && mono_dl_get_system_dir ()) { + dir_name = (char*)mono_dl_get_system_dir (); + file_name = g_path_get_basename (new_scope); + base_name = NULL; + changed = TRUE; + } + break; + default: +#ifndef TARGET_WIN32 + if (!g_ascii_strcasecmp ("user32.dll", new_scope) || + !g_ascii_strcasecmp ("kernel32.dll", new_scope) || + !g_ascii_strcasecmp ("user32", new_scope) || + !g_ascii_strcasecmp ("kernel", new_scope)) { + file_name = g_strdup ("libMonoSupportW.so"); + changed = TRUE; + } +#endif + break; + } + if (changed && is_absolute) { + if (!dir_name) + dir_name = g_path_get_dirname (file_name); + if (!base_name) + base_name = g_path_get_basename (file_name); + } + *file_name_out = file_name; + *base_name_out = base_name; + *dir_name_out = dir_name; + *is_absolute_out = is_absolute; + return changed; +} + +static MonoDl* +pinvoke_probe_for_module (MonoImage *image, const char*new_scope, const char *import, char **found_name_out, char **error_msg_out) +{ + char *full_name, *file_name; + char *error_msg = NULL; + char *found_name = NULL; + int i; + MonoDl *module = NULL; + + g_assert (found_name_out); + g_assert (error_msg_out); + if (!module) { mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, "DllImport attempting to load: '%s'.", new_scope); @@ -1284,67 +1524,11 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char */ for (i = 0; i < 5; ++i) { char *base_name = NULL, *dir_name = NULL; - gboolean is_absolute = is_absolute_path (new_scope); - - switch (i) { - case 0: - /* Try the original name */ - file_name = g_strdup (new_scope); - break; - case 1: - /* Try trimming the .dll extension */ - if (strstr (new_scope, ".dll") == (new_scope + strlen (new_scope) - 4)) { - file_name = g_strdup (new_scope); - file_name [strlen (new_scope) - 4] = '\0'; - } - else - continue; - break; - case 2: - if (is_absolute) { - dir_name = g_path_get_dirname (new_scope); - base_name = g_path_get_basename (new_scope); - if (strstr (base_name, "lib") != base_name) { - char *tmp = g_strdup_printf ("lib%s", base_name); - g_free (base_name); - base_name = tmp; - file_name = g_strdup_printf ("%s%s%s", dir_name, G_DIR_SEPARATOR_S, base_name); - break; - } - } else if (strstr (new_scope, "lib") != new_scope) { - file_name = g_strdup_printf ("lib%s", new_scope); - break; - } + gboolean is_absolute; + + gboolean changed = pinvoke_probe_transform_path (new_scope, i, &file_name, &base_name, &dir_name, &is_absolute); + if (!changed) continue; - case 3: - if (!is_absolute && mono_dl_get_system_dir ()) { - dir_name = (char*)mono_dl_get_system_dir (); - file_name = g_path_get_basename (new_scope); - base_name = NULL; - } else - continue; - break; - default: -#ifndef TARGET_WIN32 - if (!g_ascii_strcasecmp ("user32.dll", new_scope) || - !g_ascii_strcasecmp ("kernel32.dll", new_scope) || - !g_ascii_strcasecmp ("user32", new_scope) || - !g_ascii_strcasecmp ("kernel", new_scope)) { - file_name = g_strdup ("libMonoSupportW.so"); - } else -#endif - continue; -#ifndef TARGET_WIN32 - break; -#endif - } - - if (is_absolute) { - if (!dir_name) - dir_name = g_path_get_dirname (file_name); - if (!base_name) - base_name = g_path_get_basename (file_name); - } if (!module && is_absolute) { module = cached_module_load (file_name, MONO_DL_LAZY, &error_msg); @@ -1359,12 +1543,113 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char } if (!module && !is_absolute) { - void *iter; - char *mdirname; + module = pinvoke_probe_for_module_relative_directories (image, file_name, &found_name); + } - for (j = 0; j < 3; ++j) { - iter = NULL; - mdirname = NULL; + if (!module) { + void *iter = NULL; + char *file_or_base = is_absolute ? base_name : file_name; + while ((full_name = mono_dl_build_path (dir_name, file_or_base, &iter))) { + module = cached_module_load (full_name, MONO_DL_LAZY, &error_msg); + if (!module) { + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, + "DllImport error loading library '%s': '%s'.", + full_name, error_msg); + g_free (error_msg); + } else { + found_name = g_strdup (full_name); + } + g_free (full_name); + if (module) + break; + } + } + + if (!module) { + module = cached_module_load (file_name, MONO_DL_LAZY, &error_msg); + if (!module) { + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, + "DllImport error loading library '%s': '%s'.", + file_name, error_msg); + } else { + found_name = g_strdup (file_name); + } + } + + g_free (file_name); + if (is_absolute) { + g_free (base_name); + g_free (dir_name); + } + + if (module) + break; + } + + *found_name_out = found_name; + *error_msg_out = error_msg; + return module; +} + +#if ENABLE_NETCORE +void +mono_set_pinvoke_search_directories (int dir_count, char **dirs) +{ + pinvoke_search_directories_count = dir_count; + pinvoke_search_directories = dirs; +} +#endif + +static MonoDl* +pinvoke_probe_for_module_in_directory (const char *mdirname, const char *file_name, char **found_name_out) +{ + void *iter = NULL; + char *full_name; + MonoDl* module = NULL; + + while ((full_name = mono_dl_build_path (mdirname, file_name, &iter)) && module == NULL) { + char *error_msg; + module = cached_module_load (full_name, MONO_DL_LAZY, &error_msg); + if (!module) { + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, "DllImport error loading library '%s': '%s'.", full_name, error_msg); + g_free (error_msg); + } else { + *found_name_out = g_strdup (full_name); + } + g_free (full_name); + } + g_free (full_name); + + return module; +} + +static MonoDl* +pinvoke_probe_for_module_relative_directories (MonoImage *image, const char *file_name, char **found_name_out) +{ + char *found_name = NULL; + MonoDl* module = NULL; + + g_assert (found_name_out); + +#if ENABLE_NETCORE + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_DLLIMPORT, "netcore DllImport handler: wanted '%s'", file_name); + + // Search in predefined directories first + for (int j = 0; j < pinvoke_search_directories_count && module == NULL; ++j) { + module = pinvoke_probe_for_module_in_directory (pinvoke_search_directories[j], file_name, &found_name); + } + + // Fallback to image directory + if (module == NULL) { + // TODO: Check DefaultDllImportSearchPathsAttribute, NativeLibrary callback + char *mdirname = g_path_get_dirname (image->name); + if (mdirname) + module = pinvoke_probe_for_module_in_directory (mdirname, file_name, &found_name); + g_free (mdirname); + } +#else + for (int j = 0; j < 3; ++j) { + char *mdirname = NULL; switch (j) { case 0: mdirname = g_path_get_dirname (image->name); @@ -1430,97 +1715,27 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char if (!mdirname) continue; - while ((full_name = mono_dl_build_path (mdirname, file_name, &iter))) { - module = cached_module_load (full_name, MONO_DL_LAZY, &error_msg); - if (!module) { - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "DllImport error loading library '%s': '%s'.", - full_name, error_msg); - g_free (error_msg); - } else { - found_name = g_strdup (full_name); - } - g_free (full_name); - if (module) - break; - - } + module = pinvoke_probe_for_module_in_directory (mdirname, file_name, &found_name); g_free (mdirname); if (module) break; } +#endif - } + *found_name_out = found_name; + return module; +} - if (!module) { - void *iter = NULL; - char *file_or_base = is_absolute ? base_name : file_name; - while ((full_name = mono_dl_build_path (dir_name, file_or_base, &iter))) { - module = cached_module_load (full_name, MONO_DL_LAZY, &error_msg); - if (!module) { - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "DllImport error loading library '%s': '%s'.", - full_name, error_msg); - g_free (error_msg); - } else { - found_name = g_strdup (full_name); - } - g_free (full_name); - if (module) - break; - } - } - if (!module) { - module = cached_module_load (file_name, MONO_DL_LAZY, &error_msg); - if (!module) { - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "DllImport error loading library '%s': '%s'.", - file_name, error_msg); - } else { - found_name = g_strdup (file_name); - } - } +static gpointer +pinvoke_probe_for_symbol (MonoDl *module, MonoMethodPInvoke *piinfo, const char *import, char **error_msg_out) +{ + char *error_msg = NULL; + gpointer addr = NULL; - g_free (file_name); - if (is_absolute) { - g_free (base_name); - g_free (dir_name); - } + g_assert (error_msg_out); - if (module) - break; - } - - if (!module) { - mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_DLLIMPORT, - "DllImport unable to load library '%s'.", - error_msg); - g_free (error_msg); - - if (exc_class) { - *exc_class = "DllNotFoundException"; - *exc_arg = new_scope; - } - return NULL; - } - - if (!cached) { - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "DllImport loaded library '%s'.", found_name); - mono_image_lock (image); - if (!g_hash_table_lookup (image->pinvoke_scopes, new_scope)) { - g_hash_table_insert (image->pinvoke_scopes, g_strdup (new_scope), module); - g_hash_table_insert (image->pinvoke_scope_filenames, g_strdup (new_scope), g_strdup (found_name)); - } - mono_image_unlock (image); - } - - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "DllImport searching in: '%s' ('%s').", new_scope, found_name); - g_free (found_name); - -#ifdef TARGET_WIN32 +#ifdef HOST_WIN32 if (import && import [0] == '#' && isdigit (import [1])) { char *end; long id; @@ -1536,30 +1751,19 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char if (piinfo->piflags & PINVOKE_ATTRIBUTE_NO_MANGLE) { error_msg = mono_dl_symbol (module, import, &addr); } else { - char *mangled_name = NULL, *mangled_name2 = NULL; - int mangle_charset; - int mangle_stdcall; - int mangle_param_count; -#ifdef TARGET_WIN32 - int param_count; -#endif - /* * Search using a variety of mangled names */ - for (mangle_charset = 0; mangle_charset <= 1; mangle_charset ++) { - for (mangle_stdcall = 0; mangle_stdcall <= 1; mangle_stdcall ++) { - gboolean need_param_count = FALSE; -#ifdef TARGET_WIN32 - if (mangle_stdcall > 0) - need_param_count = TRUE; + for (int mangle_stdcall = 0; mangle_stdcall <= 1 && addr == NULL; mangle_stdcall++) { +#if HOST_WIN32 && HOST_X86 + const int max_managle_param_count = (mangle_stdcall == 0) ? 0 : 256; +#else + const int max_managle_param_count = 0; #endif - for (mangle_param_count = 0; mangle_param_count <= (need_param_count ? 256 : 0); mangle_param_count += 4) { + for (int mangle_charset = 0; mangle_charset <= 1 && addr == NULL; mangle_charset ++) { + for (int mangle_param_count = 0; mangle_param_count <= max_managle_param_count && addr == NULL; mangle_param_count += 4) { - if (addr) - continue; - - mangled_name = (char*)import; + char *mangled_name = (char*)import; switch (piinfo->piflags & PINVOKE_ATTRIBUTE_CHAR_SET_MASK) { case PINVOKE_ATTRIBUTE_CHAR_SET_UNICODE: /* Try the mangled name first */ @@ -1567,7 +1771,7 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char mangled_name = g_strconcat (import, "W", NULL); break; case PINVOKE_ATTRIBUTE_CHAR_SET_AUTO: -#ifdef TARGET_WIN32 +#ifdef HOST_WIN32 if (mangle_charset == 0) mangled_name = g_strconcat (import, "W", NULL); #else @@ -1584,43 +1788,44 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char break; } -#ifdef TARGET_WIN32 - if (mangle_param_count == 0) - param_count = mono_method_signature_internal (method)->param_count * sizeof (gpointer); - else - /* Try brute force, since it would be very hard to compute the stack usage correctly */ - param_count = mangle_param_count; - +#if HOST_WIN32 && HOST_X86 /* Try the stdcall mangled name */ /* * gcc under windows creates mangled names without the underscore, but MS.NET * doesn't support it, so we doesn't support it either. */ - if (mangle_stdcall == 1) - mangled_name2 = g_strdup_printf ("_%s@%d", mangled_name, param_count); - else - mangled_name2 = mangled_name; -#else - mangled_name2 = mangled_name; + if (mangle_stdcall == 1) { + MonoMethod *method = &piinfo->method; + int param_count; + if (mangle_param_count == 0) + param_count = mono_method_signature_internal (method)->param_count * sizeof (gpointer); + else + /* Try brute force, since it would be very hard to compute the stack usage correctly */ + param_count = mangle_param_count; + + char *mangled_stdcall_name = g_strdup_printf ("_%s@%d", mangled_name, param_count); + + if (mangled_name != import) + g_free (mangled_name); + + mangled_name = mangled_stdcall_name; + } #endif - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "Probing '%s'.", mangled_name2); + "Probing '%s'.", mangled_name); - error_msg = mono_dl_symbol (module, mangled_name2, &addr); + error_msg = mono_dl_symbol (module, mangled_name, &addr); if (addr) mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "Found as '%s'.", mangled_name2); + "Found as '%s'.", mangled_name); else mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, - "Could not find '%s' due to '%s'.", mangled_name2, error_msg); + "Could not find '%s' due to '%s'.", mangled_name, error_msg); g_free (error_msg); error_msg = NULL; - if (mangled_name != mangled_name2) - g_free (mangled_name2); if (mangled_name != import) g_free (mangled_name); } @@ -1628,15 +1833,7 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char } } - if (!addr) { - g_free (error_msg); - if (exc_class) { - *exc_class = "EntryPointNotFoundException"; - *exc_arg = import; - } - return NULL; - } - piinfo->addr = addr; + *error_msg_out = error_msg; return addr; } @@ -1661,7 +1858,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, MonoClass *handle_class; result = (MonoMethod *)mono_lookup_dynamic_token_class (image, token, TRUE, &handle_class, context, error); - mono_error_assert_ok (error); + return_val_if_nok (error, NULL); // This checks the memberref type as well if (result && handle_class != mono_defaults.methodhandle_class) { @@ -1758,7 +1955,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, #ifdef TARGET_WIN32 /* IJW is P/Invoke with a predefined function pointer. */ - if (image->is_module_handle && (cols [1] & METHOD_IMPL_ATTRIBUTE_NATIVE)) { + if (m_image_is_module_handle (image) && (cols [1] & METHOD_IMPL_ATTRIBUTE_NATIVE)) { piinfo->addr = mono_image_rva_map (image, cols [0]); g_assert (piinfo->addr); } @@ -1921,6 +2118,8 @@ get_method_constrained (MonoImage *image, MonoMethod *method, MonoClass *constra return NULL; } } else { + if ((method->flags & METHOD_ATTRIBUTE_VIRTUAL) == 0) + return method; mono_class_setup_vtable (constrained_class); if (mono_class_has_failure (constrained_class)) { mono_error_set_for_class_failure (error, constrained_class); @@ -1944,7 +2143,7 @@ get_method_constrained (MonoImage *image, MonoMethod *method, MonoClass *constra } g_assert (res != NULL); if (inflated_generic_method) { - g_assert (res->is_generic); + g_assert (res->is_generic || res->is_inflated); res = mono_class_inflate_generic_method_checked (res, &inflated_method_ctx, error); return_val_if_nok (error, NULL); } @@ -2707,7 +2906,10 @@ mono_method_get_header_internal (MonoMethod *method, MonoError *error) // FIXME: for internal callers maybe it makes sense to do this check at the call site, not // here? if (mono_method_has_no_body (method)) { - mono_error_set_bad_image (error, img, "Method has no body"); + if (method->is_reabstracted == 1) + mono_error_set_generic_error (error, "System", "EntryPointNotFoundException", "%s", method->name); + else + mono_error_set_bad_image (error, img, "Method has no body"); return NULL; } diff --git a/mono/metadata/loader.h b/mono/metadata/loader.h index a7d21c8509..ad70c777ca 100644 --- a/mono/metadata/loader.h +++ b/mono/metadata/loader.h @@ -71,7 +71,7 @@ mono_lookup_icall_symbol (MonoMethod *m); MONO_API void mono_dllmap_insert (MonoImage *assembly, const char *dll, const char *func, const char *tdll, const char *tfunc); -MONO_API void* +MONO_API MONO_RT_EXTERNAL_ONLY void* mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char **exc_arg); MONO_API void diff --git a/mono/metadata/locales.c b/mono/metadata/locales.c index f3243d2e38..25ab2b926e 100644 --- a/mono/metadata/locales.c +++ b/mono/metadata/locales.c @@ -15,6 +15,9 @@ */ #include <config.h> + +#if !ENABLE_NETCORE + #include <glib.h> #include <string.h> @@ -284,59 +287,39 @@ ves_icall_System_Globalization_CultureData_fill_culture_data (MonoCultureData *t this_obj->CalendarWeekRule = dfe->calendar_week_rule; } -void -ves_icall_System_Globalization_CultureData_fill_number_data (MonoNumberFormatInfo* number, gint32 number_index) +gconstpointer +ves_icall_System_Globalization_CultureData_fill_number_data (gint32 number_index, + NumberFormatEntryManaged *managed) { - ERROR_DECL (error); - MonoDomain *domain; - const NumberFormatEntry *nfe; - - g_assert (number_index >= 0); - - nfe = &number_format_entries [number_index]; - - domain = mono_domain_get (); - - number->currencyDecimalDigits = nfe->currency_decimal_digits; - -#define SET_STR(obj,field,domain,expr,err) do { \ - MonoString *_tmp_str = mono_string_new_checked ((domain), (expr), (err)); \ - if (mono_error_set_pending_exception ((err))) \ - return; \ - MONO_OBJECT_SETREF_INTERNAL ((obj), field, _tmp_str); \ - } while (0) - - SET_STR (number, currencyDecimalSeparator, domain, idx2string (nfe->currency_decimal_separator), error); - SET_STR (number, currencyGroupSeparator, domain, idx2string (nfe->currency_group_separator), error); - - MonoArray *currency_sizes_arr = create_group_sizes_array (nfe->currency_group_sizes, - GROUP_SIZE, error); - if (mono_error_set_pending_exception (error)) - return; - MONO_OBJECT_SETREF_INTERNAL (number, currencyGroupSizes, currency_sizes_arr); - number->currencyNegativePattern = nfe->currency_negative_pattern; - number->currencyPositivePattern = nfe->currency_positive_pattern; - - SET_STR (number, currencySymbol, domain, idx2string (nfe->currency_symbol), error); - SET_STR (number, naNSymbol, domain, idx2string (nfe->nan_symbol), error); - SET_STR (number, negativeInfinitySymbol, domain, idx2string (nfe->negative_infinity_symbol), error); - SET_STR (number, negativeSign, domain, idx2string (nfe->negative_sign), error); - number->numberDecimalDigits = nfe->number_decimal_digits; - SET_STR (number, numberDecimalSeparator, domain, idx2string (nfe->number_decimal_separator), error); - SET_STR (number, numberGroupSeparator, domain, idx2string (nfe->number_group_separator), error); - MonoArray *number_sizes_arr = create_group_sizes_array (nfe->number_group_sizes, - GROUP_SIZE, error); - if (mono_error_set_pending_exception (error)) - return; - MONO_OBJECT_SETREF_INTERNAL (number, numberGroupSizes, number_sizes_arr); - number->numberNegativePattern = nfe->number_negative_pattern; - number->percentNegativePattern = nfe->percent_negative_pattern; - number->percentPositivePattern = nfe->percent_positive_pattern; - SET_STR (number, percentSymbol, domain, idx2string (nfe->percent_symbol), error); - SET_STR (number, perMilleSymbol, domain, idx2string (nfe->per_mille_symbol), error); - SET_STR (number, positiveInfinitySymbol, domain, idx2string (nfe->positive_infinity_symbol), error); - SET_STR (number, positiveSign, domain, idx2string (nfe->positive_sign), error); -#undef SET_STR + g_assertf (number_index >= 0 && number_index < G_N_ELEMENTS (number_format_entries), "%d", number_index); + NumberFormatEntry const * const native = &number_format_entries [number_index]; + // We could return the pointer directly, but I'm leary of the 7x byte layout. + // Does C# match C exactly? + // If the data is regenerated, suggest a byte of padding there. + managed->currency_decimal_digits = native->currency_decimal_digits; + managed->currency_decimal_separator = native->currency_decimal_separator; + managed->currency_group_separator = native->currency_group_separator; + managed->currency_group_sizes0 = native->currency_group_sizes [0]; + managed->currency_group_sizes1 = native->currency_group_sizes [1]; + managed->currency_negative_pattern = native->currency_negative_pattern; + managed->currency_positive_pattern = native->currency_positive_pattern; + managed->currency_symbol = native->currency_symbol; + managed->nan_symbol = native->nan_symbol; + managed->negative_infinity_symbol = native->negative_infinity_symbol; + managed->negative_sign = native->negative_sign; + managed->number_decimal_digits = native->number_decimal_digits; + managed->number_decimal_separator = native->number_decimal_separator; + managed->number_group_separator = native->number_group_separator; + managed->number_group_sizes0 = native->number_group_sizes [0]; + managed->number_group_sizes1 = native->number_group_sizes [1]; + managed->number_negative_pattern = native->number_negative_pattern; + managed->per_mille_symbol = native->per_mille_symbol; + managed->percent_negative_pattern = native->percent_negative_pattern; + managed->percent_positive_pattern = native->percent_positive_pattern; + managed->percent_symbol = native->percent_symbol; + managed->positive_infinity_symbol = native->positive_infinity_symbol; + managed->positive_sign = native->positive_sign; + return locale_strings; } static MonoBoolean @@ -807,9 +790,9 @@ ves_icall_System_Globalization_CompareInfo_internal_compare (const gunichar2 *us return(string_invariant_compare_char(ustr1[pos], ustr2[pos], options)); } -int +gint32 ves_icall_System_Globalization_CompareInfo_internal_index (const gunichar2 *src, gint32 sindex, - gint32 count, const gunichar2 *cmpstr, int lencmpstr, MonoBoolean first) + gint32 count, const gunichar2 *cmpstr, gint32 lencmpstr, MonoBoolean first) { gint32 pos,i; @@ -857,3 +840,5 @@ void ves_icall_System_Text_Normalization_load_normalization_resource (guint8 **a *argCombiningClass = (guint8*)combiningClass; #endif } + +#endif /* !ENABLE_NETCORE */ diff --git a/mono/metadata/locales.h b/mono/metadata/locales.h index 352243ae87..0d4c8c63cc 100644 --- a/mono/metadata/locales.h +++ b/mono/metadata/locales.h @@ -16,6 +16,8 @@ #include <mono/metadata/object-internals.h> #include <mono/metadata/icalls.h> +#if !ENABLE_NETCORE + /* This is a copy of System.Globalization.CompareOptions */ typedef enum { CompareOptions_None=0x00, @@ -34,14 +36,17 @@ MonoBoolean ves_icall_System_Globalization_CalendarData_fill_calendar_data (Mono ICALL_EXPORT void ves_icall_System_Globalization_CultureData_fill_culture_data (MonoCultureData *this_obj, gint32 datetime_index); +typedef struct NumberFormatEntryManaged NumberFormatEntryManaged; + ICALL_EXPORT -void ves_icall_System_Globalization_CultureData_fill_number_data (MonoNumberFormatInfo* number, gint32 number_index); +gconstpointer +ves_icall_System_Globalization_CultureData_fill_number_data (gint32 number_index, NumberFormatEntryManaged *managed); ICALL_EXPORT void ves_icall_System_Globalization_CultureInfo_construct_internal_locale (MonoCultureInfo *this_obj, MonoString *locale); ICALL_EXPORT -MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (MonoCultureInfo *this_obj, gint lcid); +MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (MonoCultureInfo *this_obj, gint32 lcid); ICALL_EXPORT MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (MonoCultureInfo *this_obj, MonoString *name); @@ -52,7 +57,7 @@ MonoArray *ves_icall_System_Globalization_CultureInfo_internal_get_cultures (Mon ICALL_EXPORT void ves_icall_System_Globalization_CompareInfo_construct_compareinfo (MonoCompareInfo *comp, MonoString *locale); -ICALL_EXPORT int +ICALL_EXPORT gint32 ves_icall_System_Globalization_CompareInfo_internal_compare (const gunichar2 *str1, gint32 len1, const gunichar2 *str2, gint32 len2, gint32 options); @@ -64,9 +69,11 @@ MonoBoolean ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name (MonoRegionInfo *this_obj, MonoString *name); -ICALL_EXPORT int +ICALL_EXPORT gint32 ves_icall_System_Globalization_CompareInfo_internal_index (const gunichar2 *source, gint32 sindex, - gint32 count, const gunichar2 *value, int value_length, MonoBoolean first); + gint32 count, const gunichar2 *value, gint32 value_length, MonoBoolean first); + +#endif /* !ENABLE_NETCORE */ #define MONO_LOCALE_INVARIANT (0x007F) diff --git a/mono/metadata/marshal-ilgen.c.REMOVED.git-id b/mono/metadata/marshal-ilgen.c.REMOVED.git-id index a91b9a6947..af4c6b05f4 100644 --- a/mono/metadata/marshal-ilgen.c.REMOVED.git-id +++ b/mono/metadata/marshal-ilgen.c.REMOVED.git-id @@ -1 +1 @@ -4cc14301a955239a72e3850444bc72b2628497bd \ No newline at end of file +ea478d171437f622c91986a13bad6bf4a3080fe8 \ No newline at end of file diff --git a/mono/metadata/marshal.c.REMOVED.git-id b/mono/metadata/marshal.c.REMOVED.git-id index fae4886c52..cf24a4673a 100644 --- a/mono/metadata/marshal.c.REMOVED.git-id +++ b/mono/metadata/marshal.c.REMOVED.git-id @@ -1 +1 @@ -81b0b2410495ac5bd94ccfa5d491283b9f103d76 \ No newline at end of file +006852d8be418bcd92b991ad05eff431fe206fe5 \ No newline at end of file diff --git a/mono/metadata/marshal.h b/mono/metadata/marshal.h index 4cb8d2e70a..7501b687b1 100644 --- a/mono/metadata/marshal.h +++ b/mono/metadata/marshal.h @@ -113,7 +113,7 @@ typedef enum { WRAPPER_SUBTYPE_RUNTIME_INVOKE_DIRECT, WRAPPER_SUBTYPE_RUNTIME_INVOKE_VIRTUAL, /* Subtypes of MONO_WRAPPER_MANAGED_TO_NATIVE */ - WRAPPER_SUBTYPE_ICALL_WRAPPER, + WRAPPER_SUBTYPE_ICALL_WRAPPER, // specifically JIT icalls WRAPPER_SUBTYPE_NATIVE_FUNC_AOT, WRAPPER_SUBTYPE_PINVOKE, /* Subtypes of MONO_WRAPPER_OTHER */ @@ -130,7 +130,8 @@ typedef enum { WRAPPER_SUBTYPE_GSHAREDVT_IN_SIG, WRAPPER_SUBTYPE_GSHAREDVT_OUT_SIG, WRAPPER_SUBTYPE_INTERP_IN, - WRAPPER_SUBTYPE_INTERP_LMF + WRAPPER_SUBTYPE_INTERP_LMF, + WRAPPER_SUBTYPE_AOT_INIT } WrapperSubtype; typedef struct { @@ -173,7 +174,7 @@ typedef struct { } GenericArrayHelperWrapperInfo; typedef struct { - gpointer func; + MonoJitICallId jit_icall_id; } ICallWrapperInfo; typedef struct { @@ -209,6 +210,20 @@ typedef struct { MonoMethodSignature *sig; } InterpInWrapperInfo; +typedef enum { + AOT_INIT_METHOD = 0, + AOT_INIT_METHOD_GSHARED_MRGCTX = 1, + AOT_INIT_METHOD_GSHARED_THIS = 2, + AOT_INIT_METHOD_GSHARED_VTABLE = 3 +} MonoAotInitSubtype; + +typedef struct { + // We emit this code when we init the module, + // and later match up the native code with this method + // using the name. + MonoAotInitSubtype subtype; +} AOTInitWrapperInfo; + /* * This structure contains additional information to uniquely identify a given wrapper * method. It can be retrieved by mono_marshal_get_wrapper_info () for certain types @@ -253,6 +268,8 @@ typedef struct { DelegateInvokeWrapperInfo delegate_invoke; /* INTERP_IN */ InterpInWrapperInfo interp_in; + /* AOT_INIT */ + AOTInitWrapperInfo aot_init; } d; } WrapperInfo; @@ -267,7 +284,7 @@ typedef enum { } MonoStelemrefKind; -#define MONO_MARSHAL_CALLBACKS_VERSION 2 +#define MONO_MARSHAL_CALLBACKS_VERSION 4 typedef struct { int version; @@ -306,11 +323,13 @@ typedef struct { void (*emit_thunk_invoke_wrapper) (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *csig); void (*emit_create_string_hack) (MonoMethodBuilder *mb, MonoMethodSignature *csig, MonoMethod *res); void (*emit_native_icall_wrapper) (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *csig, gboolean check_exceptions, gboolean aot, MonoMethodPInvoke *pinfo); - void (*emit_icall_wrapper) (MonoMethodBuilder *mb, MonoMethodSignature *sig, gconstpointer func, MonoMethodSignature *csig2, gboolean check_exceptions); + void (*emit_icall_wrapper) (MonoMethodBuilder *mb, MonoJitICallInfo *callinfo, MonoMethodSignature *csig2, gboolean check_exceptions); + void (*emit_return) (MonoMethodBuilder *mb); void (*emit_vtfixup_ftnptr) (MonoMethodBuilder *mb, MonoMethod *method, int param_count, guint16 type); void (*mb_skip_visibility) (MonoMethodBuilder *mb); void (*mb_set_dynamic) (MonoMethodBuilder *mb); void (*mb_emit_exception) (MonoMethodBuilder *mb, const char *exc_nspace, const char *exc_name, const char *msg); + void (*mb_emit_exception_for_error) (MonoMethodBuilder *mb, const MonoError *emitted_error); void (*mb_emit_byte) (MonoMethodBuilder *mb, guint8 op); } MonoMarshalCallbacks; @@ -411,7 +430,13 @@ gpointer mono_marshal_get_vtfixup_ftnptr (MonoImage *image, guint32 token, guint16 type); MonoMethod * -mono_marshal_get_icall_wrapper (MonoMethodSignature *sig, const char *name, gconstpointer func, gboolean check_exceptions); +mono_marshal_get_icall_wrapper (MonoJitICallInfo *callinfo, gboolean check_exceptions); + +MonoMethod * +mono_marshal_get_aot_init_wrapper (MonoAotInitSubtype subtype) MONO_LLVM_INTERNAL; + +const char * +mono_marshal_get_aot_init_wrapper_name (MonoAotInitSubtype subtype) MONO_LLVM_INTERNAL; MonoMethod * mono_marshal_get_native_wrapper (MonoMethod *method, gboolean check_exceptions, gboolean aot); diff --git a/mono/metadata/mempool-internals.h b/mono/metadata/mempool-internals.h index 3458232139..c16e83438e 100644 --- a/mono/metadata/mempool-internals.h +++ b/mono/metadata/mempool-internals.h @@ -79,7 +79,7 @@ char* mono_mempool_strdup_vprintf (MonoMemPool *pool, const char *format, va_list args); char* -mono_mempool_strdup_printf (MonoMemPool *pool, const char *format, ...) MONO_ATTR_FORMAT_PRINTF(2,3);; +mono_mempool_strdup_printf (MonoMemPool *pool, const char *format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); long mono_mempool_get_bytes_allocated (void); diff --git a/mono/metadata/mempool.c b/mono/metadata/mempool.c index 85879ec1e6..ab9fc28bcc 100644 --- a/mono/metadata/mempool.c +++ b/mono/metadata/mempool.c @@ -320,24 +320,10 @@ gpointer gpointer (mono_mempool_alloc0) (MonoMemPool *pool, guint size) { - gpointer rval; - - // For the fast path, repeat the first few lines of mono_mempool_alloc size = ALIGN_SIZE (size); - rval = pool->pos; - pool->pos = (guint8*)rval + size; - - // If that doesn't work fall back on mono_mempool_alloc to handle new chunk allocation - if (G_UNLIKELY (pool->pos >= pool->end)) { - rval = mono_mempool_alloc (pool, size); - } -#ifdef TRACE_ALLOCATIONS - else if (pool == mono_get_corlib ()->mempool) { - mono_backtrace (size); - } -#endif - - memset (rval, 0, size); + const gpointer rval = mono_mempool_alloc (pool, size); + if (rval) + memset (rval, 0, size); return rval; } diff --git a/mono/metadata/metadata-cross-helpers.c b/mono/metadata/metadata-cross-helpers.c index d153fc970a..566eb2bffb 100644 --- a/mono/metadata/metadata-cross-helpers.c +++ b/mono/metadata/metadata-cross-helpers.c @@ -23,6 +23,26 @@ #undef REALLY_INCLUDE_CLASS_DEF #endif +#ifdef MONO_GENERATING_OFFSETS +/* The offsets tool uses this structure to compute basic type sizes/alignment */ +struct basic_types_struct { + gint8 gint8_f; + gint16 gint16_f; + gint32 gint32_f; + gint64 gint64_f; + float float_f; + double double_f; + gpointer gpointer_f; +}; +typedef struct { gint8 i; } gint8_struct; +typedef struct { gint16 i; } gint16_struct; +typedef struct { gint32 i; } gint32_struct; +typedef struct { gint64 i; } gint64_struct; +typedef struct { float i; } float_struct; +typedef struct { double i; } double_struct; +typedef struct { gpointer i; } gpointer_struct; +#endif + static int dump_arch (void) { diff --git a/mono/metadata/metadata-internals.h b/mono/metadata/metadata-internals.h index 7071f8d76a..881d619a0c 100644 --- a/mono/metadata/metadata-internals.h +++ b/mono/metadata/metadata-internals.h @@ -19,6 +19,7 @@ #include "mono/utils/mono-value-hash.h" #include <mono/utils/mono-error.h> #include "mono/utils/mono-conc-hashtable.h" +#include "mono/utils/refcount.h" struct _MonoType { union { @@ -36,14 +37,94 @@ struct _MonoType { unsigned int pinned : 1; /* valid when included in a local var signature */ }; +typedef struct { + unsigned int required : 1; + MonoType *type; +} MonoSingleCustomMod; + +/* Aggregate custom modifiers can happen if a generic VAR or MVAR is inflated, + * and both the VAR and the type that will be used to inflated it have custom + * modifiers, but they come from different images. (e.g. inflating 'class G<T> + * {void Test (T modopt(IsConst) t);}' with 'int32 modopt(IsLong)' where G is + * in image1 and the int32 is in image2.) + * + * Moreover, we can't just store an image and a type token per modifier, because + * Roslyn and C++/CLI sometimes create modifiers that mention generic parameters that must be inflated, like: + * void .CL1`1.Test(!0 modopt(System.Nullable`1<!0>)) + * So we have to store a resolved MonoType*. + * + * Because the types come from different images, we allocate the aggregate + * custom modifiers container object in the mempool of a MonoImageSet to ensure + * that it doesn't have dangling image pointers. + */ +typedef struct { + uint8_t count; + MonoSingleCustomMod modifiers[1]; /* Actual length is count */ +} MonoAggregateModContainer; + +/* ECMA says upto 64 custom modifiers. It's possible we could see more at + * runtime due to modifiers being appended together when we inflate type. In + * that case we should revisit the places where this define is used to make + * sure that we don't blow up the stack (or switch to heap allocation for + * temporaries). + */ +#define MONO_MAX_EXPECTED_CMODS 64 + typedef struct { MonoType unmodified; - MonoCustomModContainer cmods; + gboolean is_aggregate; + union { + MonoCustomModContainer cmods; + /* the actual aggregate modifiers are in a MonoImageSet mempool + * that includes all the images of all the modifier types and + * also the type that this aggregate container is a part of.*/ + MonoAggregateModContainer *amods; + } mods; } MonoTypeWithModifiers; +gboolean +mono_type_is_aggregate_mods (const MonoType *t); + +static inline void +mono_type_with_mods_init (MonoType *dest, uint8_t num_mods, gboolean is_aggregate) +{ + if (num_mods == 0) { + dest->has_cmods = 0; + return; + } + dest->has_cmods = 1; + MonoTypeWithModifiers *dest_full = (MonoTypeWithModifiers *)dest; + dest_full->is_aggregate = !!is_aggregate; + if (is_aggregate) + dest_full->mods.amods = NULL; + else + dest_full->mods.cmods.count = num_mods; +} + MonoCustomModContainer * mono_type_get_cmods (const MonoType *t); +MonoAggregateModContainer * +mono_type_get_amods (const MonoType *t); + +void +mono_type_set_amods (MonoType *t, MonoAggregateModContainer *amods); + +static inline uint8_t +mono_type_custom_modifier_count (const MonoType *t) +{ + if (!t->has_cmods) + return 0; + MonoTypeWithModifiers *full = (MonoTypeWithModifiers *)t; + if (full->is_aggregate) + return full->mods.amods->count; + else + return full->mods.cmods.count; +} + +MonoType * +mono_type_get_custom_modifier (const MonoType *ty, uint8_t idx, gboolean *required, MonoError *error); + // Note: sizeof (MonoType) is dangerous. It can copy the num_mods // field without copying the variably sized array. This leads to // memory unsafety on the stack and/or heap, when we try to traverse @@ -54,11 +135,17 @@ mono_type_get_cmods (const MonoType *t); #define MONO_SIZEOF_TYPE sizeof (MonoType) size_t -mono_sizeof_type_with_mods (uint8_t num_mods); +mono_sizeof_type_with_mods (uint8_t num_mods, gboolean aggregate); size_t mono_sizeof_type (const MonoType *ty); +size_t +mono_sizeof_aggregate_modifiers (uint8_t num_mods); + +MonoAggregateModContainer * +mono_metadata_get_canonical_aggregate_modifiers (MonoAggregateModContainer *candidate); + #define MONO_SECMAN_FLAG_INIT(x) (x & 0x2) #define MONO_SECMAN_FLAG_GET_VALUE(x) (x & 0x1) #define MONO_SECMAN_FLAG_SET_VALUE(x,y) do { x = ((y) ? 0x3 : 0x2); } while (0) @@ -82,7 +169,11 @@ struct _MonoAssemblyName { uint32_t hash_alg; uint32_t hash_len; uint32_t flags; +#ifdef ENABLE_NETCORE + int major, minor, build, revision, arch; +#else uint16_t major, minor, build, revision, arch; +#endif }; struct MonoTypeNameParse { @@ -216,16 +307,24 @@ typedef struct { gboolean (*load_tables) (MonoImage*); } MonoImageLoader; -struct _MonoImage { - /* - * This count is incremented during these situations: - * - An assembly references this MonoImage though its 'image' field - * - This MonoImage is present in the 'files' field of an image - * - This MonoImage is present in the 'modules' field of an image - * - A thread is holding a temporary reference to this MonoImage between - * calls to mono_image_open and mono_image_close () - */ - int ref_count; +/* Represents the physical bytes for an image (usually in the file system, but + * could be in memory). + * + * The MonoImageStorage owns the raw data for an image and is responsible for + * cleanup. + * + * May be shared by multiple MonoImage objects if they opened the same + * underlying file or byte blob in memory. + * + * There is an abstract string key (usually a file path, but could be formed in + * other ways) that is used to share MonoImageStorage objects among images. + * + */ +typedef struct { + MonoRefCount ref; + + /* key used for lookups. owned by this image storage. */ + char *key; /* If the raw data was allocated from a source such as mmap, the allocator may store resource tracking information here. */ void *raw_data_handle; @@ -242,6 +341,24 @@ struct _MonoImage { /* Module entry point is _CorDllMain. */ guint8 has_entry_point : 1; #endif +} MonoImageStorage; + +struct _MonoImage { + /* + * This count is incremented during these situations: + * - An assembly references this MonoImage through its 'image' field + * - This MonoImage is present in the 'files' field of an image + * - This MonoImage is present in the 'modules' field of an image + * - A thread is holding a temporary reference to this MonoImage between + * calls to mono_image_open and mono_image_close () + */ + int ref_count; + + MonoImageStorage *storage; + + /* Aliases storage->raw_data when storage is non-NULL. Otherwise NULL. */ + char *raw_data; + guint32 raw_data_len; /* Whenever this is a dynamically emitted module */ guint8 dynamic : 1; @@ -352,7 +469,6 @@ struct _MonoImage { MonoConcurrentHashTable *typespec_cache; /* protected by the image lock */ /* indexed by token */ GHashTable *memberref_signatures; - GHashTable *helper_signatures; /* Indexed by blob heap indexes */ GHashTable *method_signatures; @@ -466,7 +582,7 @@ struct _MonoImage { }; /* - * Generic instances depend on many images, and they need to be deleted if one + * Generic instances and aggregated custom modifiers depend on many images, and they need to be deleted if one * of the images they depend on is unloaded. For example, * List<Foo> depends on both List's image and Foo's image. * A MonoImageSet is the owner of all generic instances depending on the same set of @@ -485,6 +601,8 @@ typedef struct { MonoWrapperCaches wrapper_caches; + GHashTable *aggregate_modifiers_cache; + mono_mutex_t lock; /* @@ -708,7 +826,7 @@ char* mono_image_strdup_vprintf (MonoImage *image, const char *format, va_list args); char* -mono_image_strdup_printf (MonoImage *image, const char *format, ...) MONO_ATTR_FORMAT_PRINTF(2,3);; +mono_image_strdup_printf (MonoImage *image, const char *format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); GList* mono_g_list_prepend_image (MonoImage *image, GList *list, gpointer data); @@ -766,6 +884,9 @@ mono_image_set_unlock (MonoImageSet *set); char* mono_image_set_strdup (MonoImageSet *set, const char *s); +MonoImageSet * +mono_metadata_get_image_set_for_aggregate_modifiers (MonoAggregateModContainer *amods); + #define mono_image_set_new0(image,type,size) ((type *) mono_image_set_alloc0 (image, sizeof (type)* (size))) gboolean @@ -1028,4 +1149,31 @@ mono_asmctx_get_kind (const MonoAssemblyContext *ctx); #define MONO_CLASS_IS_INTERFACE_INTERNAL(c) ((mono_class_get_flags (c) & TYPE_ATTRIBUTE_INTERFACE) || mono_type_is_generic_parameter (m_class_get_byval_arg (c))) +static inline gboolean +m_image_is_raw_data_allocated (MonoImage *image) +{ + return image->storage ? image->storage->raw_data_allocated : FALSE; +} + +static inline gboolean +m_image_is_fileio_used (MonoImage *image) +{ + return image->storage ? image->storage->fileio_used : FALSE; +} + +#ifdef HOST_WIN32 +static inline gboolean +m_image_is_module_handle (MonoImage *image) +{ + return image->storage ? image->storage->is_module_handle : FALSE; +} + +static inline gboolean +m_image_has_entry_point (MonoImage *image) +{ + return image->storage ? image->storage->has_entry_point : FALSE; +} + +#endif + #endif /* __MONO_METADATA_INTERNALS_H__ */ diff --git a/mono/metadata/metadata.c.REMOVED.git-id b/mono/metadata/metadata.c.REMOVED.git-id index 54f28c38e9..86ec17862a 100644 --- a/mono/metadata/metadata.c.REMOVED.git-id +++ b/mono/metadata/metadata.c.REMOVED.git-id @@ -1 +1 @@ -53a88d9e78bb91e96ae38dd1cd2ee2210a7742c7 \ No newline at end of file +aea4a39f1fb9472a01e72d05cfd93a4f2804bb78 \ No newline at end of file diff --git a/mono/metadata/metadata.h b/mono/metadata/metadata.h index c280f10e83..643cf4444b 100644 --- a/mono/metadata/metadata.h +++ b/mono/metadata/metadata.h @@ -365,7 +365,7 @@ MONO_API mono_bool mono_type_is_struct (MonoType *type); MONO_API mono_bool mono_type_is_void (MonoType *type); MONO_API mono_bool mono_type_is_pointer (MonoType *type); MONO_API mono_bool mono_type_is_reference (MonoType *type); -mono_bool mono_type_is_generic_parameter (MonoType *type); +MONO_API mono_bool mono_type_is_generic_parameter (MonoType *type); MONO_API MonoType* mono_signature_get_return_type (MonoMethodSignature *sig); diff --git a/mono/metadata/method-builder-ilgen.c b/mono/metadata/method-builder-ilgen.c index 97c27c3fa0..290d4f745a 100644 --- a/mono/metadata/method-builder-ilgen.c +++ b/mono/metadata/method-builder-ilgen.c @@ -544,10 +544,11 @@ mono_mb_emit_native_call (MonoMethodBuilder *mb, MonoMethodSignature *sig, gpoin } void -mono_mb_emit_icall (MonoMethodBuilder *mb, gpointer func) +mono_mb_emit_icall_id (MonoMethodBuilder *mb, MonoJitICallId jit_icall_id) { mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); - mono_mb_emit_op (mb, CEE_MONO_ICALL, func); + mono_mb_emit_byte (mb, CEE_MONO_ICALL); + mono_mb_emit_i4 (mb, jit_icall_id); } void @@ -591,7 +592,9 @@ mono_mb_emit_exception_for_error (MonoMethodBuilder *mb, MonoError *error) * the behaviour should conform with mono_error_prepare_exception(). */ g_assert (mono_error_get_error_code (error) == MONO_ERROR_GENERIC && "Unsupported error code."); - mono_mb_emit_exception_full (mb, "System", mono_error_get_exception_name (error), mono_error_get_message (error)); + /* Have to copy the message because it will be referenced from JITed code while the MonoError may be freed. */ + char *msg = mono_mb_strdup (mb, mono_error_get_message (error)); + mono_mb_emit_exception_full (mb, "System", mono_error_get_exception_name (error), msg); } /** diff --git a/mono/metadata/method-builder-ilgen.h b/mono/metadata/method-builder-ilgen.h index 45626f5476..82daf70e91 100644 --- a/mono/metadata/method-builder-ilgen.h +++ b/mono/metadata/method-builder-ilgen.h @@ -57,16 +57,9 @@ void mono_mb_emit_managed_call (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *opt_sig); void -mono_mb_emit_icall (MonoMethodBuilder *mb, gpointer func); +mono_mb_emit_icall_id (MonoMethodBuilder *mb, MonoJitICallId jit_icall_id); -#ifdef __cplusplus -template <typename T> -inline void -mono_mb_emit_icall (MonoMethodBuilder *mb, T func) -{ - mono_mb_emit_icall (mb, (gpointer)func); -} -#endif // __cplusplus +#define mono_mb_emit_icall(mb, name) (mono_mb_emit_icall_id ((mb), MONO_JIT_ICALL_ ## name)) int mono_mb_add_local (MonoMethodBuilder *mb, MonoType *type); @@ -140,4 +133,7 @@ mono_mb_set_clauses (MonoMethodBuilder *mb, int num_clauses, MonoExceptionClause void mono_mb_set_param_names (MonoMethodBuilder *mb, const char **param_names); +char* +mono_mb_strdup (MonoMethodBuilder *mb, const char *s); + #endif diff --git a/mono/metadata/method-builder.h b/mono/metadata/method-builder.h index 22b6e0027a..d746fd3806 100644 --- a/mono/metadata/method-builder.h +++ b/mono/metadata/method-builder.h @@ -45,6 +45,9 @@ mono_mb_create_method (MonoMethodBuilder *mb, MonoMethodSignature *signature, in guint32 mono_mb_add_data (MonoMethodBuilder *mb, gpointer data); +char* +mono_mb_strdup (MonoMethodBuilder *mb, const char *s); + void mono_install_method_builder_callbacks (MonoMethodBuilderCallbacks *cb); diff --git a/mono/metadata/monitor.c b/mono/metadata/monitor.c index b85fd191ad..8f0bcc1b93 100644 --- a/mono/metadata/monitor.c +++ b/mono/metadata/monitor.c @@ -1194,7 +1194,7 @@ ves_icall_System_Threading_Monitor_Monitor_try_enter_with_atomic_var (MonoObject void mono_monitor_enter_v4 (MonoObject *obj, char *lock_taken) { - g_assert (sizeof (MonoBoolean) == 1); // FIXME static_assert + g_static_assert (sizeof (MonoBoolean) == 1); mono_monitor_enter_v4_internal (obj, (MonoBoolean*)lock_taken); } @@ -1382,13 +1382,7 @@ ves_icall_System_Threading_Monitor_Monitor_wait (MonoObject *obj, guint32 ms) * is private to this thread. Therefore even if the event was * signalled before we wait, we still succeed. */ -#ifdef HOST_WIN32 - MONO_ENTER_GC_SAFE; - ret = mono_w32handle_convert_wait_ret (mono_win32_wait_for_single_object_ex (event, ms, TRUE), 1); - MONO_EXIT_GC_SAFE; -#else ret = mono_w32handle_wait_one (event, ms, TRUE); -#endif /* HOST_WIN32 */ /* Reset the thread state fairly early, so we don't have to worry * about the monitor error checking @@ -1411,13 +1405,7 @@ ves_icall_System_Threading_Monitor_Monitor_wait (MonoObject *obj, guint32 ms) /* Poll the event again, just in case it was signalled * while we were trying to regain the monitor lock */ -#ifdef HOST_WIN32 - MONO_ENTER_GC_SAFE; - ret = mono_w32handle_convert_wait_ret (mono_win32_wait_for_single_object_ex (event, 0, FALSE), 1); - MONO_EXIT_GC_SAFE; -#else ret = mono_w32handle_wait_one (event, 0, FALSE); -#endif /* HOST_WIN32 */ } /* Pulse will have popped our event from the queue if it signalled diff --git a/mono/metadata/mono-config-internals.h b/mono/metadata/mono-config-internals.h new file mode 100644 index 0000000000..ce26f5dd52 --- /dev/null +++ b/mono/metadata/mono-config-internals.h @@ -0,0 +1,13 @@ +/** + * \file + */ + +#ifndef __MONO_METADATA_CONFIG_INTERNALS_H__ +#define __MONO_METADATA_CONFIG_INTERNALS_H__ + +#include "mono/metadata/mono-config.h" + +void +mono_config_for_assembly_internal (MonoImage *assembly); + +#endif /* __MONO_METADATA_CONFIG_INTERNALS_H__ */ diff --git a/mono/metadata/mono-config.c b/mono/metadata/mono-config.c index d1efa47ab7..8c1c644270 100644 --- a/mono/metadata/mono-config.c +++ b/mono/metadata/mono-config.c @@ -16,6 +16,7 @@ #include "mono/metadata/assembly.h" #include "mono/metadata/loader.h" #include "mono/metadata/mono-config.h" +#include "mono/metadata/mono-config-internals.h" #include "mono/metadata/metadata-internals.h" #include "mono/metadata/object-internals.h" #include "mono/utils/mono-logger-internals.h" @@ -99,8 +100,6 @@ #endif #endif -static void mono_config_for_assembly_internal (MonoImage *assembly); - /** * mono_config_get_os: * @@ -608,17 +607,6 @@ mono_config_string_for_assembly_file (const char *filename) return NULL; } -/** - * mono_config_for_assembly: - */ -void -mono_config_for_assembly (MonoImage *assembly) -{ - MONO_ENTER_GC_UNSAFE; - mono_config_for_assembly_internal (assembly); - MONO_EXIT_GC_UNSAFE; -} - void mono_config_for_assembly_internal (MonoImage *assembly) { @@ -642,14 +630,14 @@ mono_config_for_assembly_internal (MonoImage *assembly) g_free (cfg_name); cfg_name = g_strdup_printf ("%s.config", mono_image_get_name (assembly)); - const char *mono_cfg_dir = mono_get_config_dir (); - if (!mono_cfg_dir) { + const char *cfg_dir = mono_get_config_dir (); + if (!cfg_dir) { g_free (cfg_name); return; } for (i = 0; (aname = get_assembly_filename (assembly, i)) != NULL; ++i) { - cfg = g_build_filename (mono_cfg_dir, "mono", "assemblies", aname, cfg_name, NULL); + cfg = g_build_filename (cfg_dir, "mono", "assemblies", aname, cfg_name, NULL); got_it += mono_config_parse_file_with_context (&state, cfg); g_free (cfg); @@ -692,9 +680,9 @@ mono_config_parse (const char *filename) { return; } - const char *mono_cfg_dir = mono_get_config_dir (); - if (mono_cfg_dir) { - mono_cfg = g_build_filename (mono_cfg_dir, "mono", "config", NULL); + const char *cfg_dir = mono_get_config_dir (); + if (cfg_dir) { + mono_cfg = g_build_filename (cfg_dir, "mono", "config", NULL); mono_config_parse_file (mono_cfg); g_free (mono_cfg); } diff --git a/mono/metadata/mono-config.h b/mono/metadata/mono-config.h index daebd02c28..91cdccd38e 100644 --- a/mono/metadata/mono-config.h +++ b/mono/metadata/mono-config.h @@ -24,7 +24,7 @@ MONO_API const char* mono_get_machine_config (void); MONO_API void mono_config_cleanup (void); MONO_API void mono_config_parse (const char *filename); -MONO_API void mono_config_for_assembly (MonoImage *assembly); +MONO_API MONO_RT_EXTERNAL_ONLY void mono_config_for_assembly (MonoImage *assembly); MONO_API void mono_config_parse_memory (const char *buffer); MONO_API const char* mono_config_string_for_assembly_file (const char *filename); diff --git a/mono/metadata/mono-debug.c b/mono/metadata/mono-debug.c index f67c1cd1b0..6c2d4cb073 100644 --- a/mono/metadata/mono-debug.c +++ b/mono/metadata/mono-debug.c @@ -378,7 +378,7 @@ lookup_image_func (gpointer key, gpointer value, gpointer user_data) if (data->found) return; - if (handle->image == data->image && handle->symfile) + if (handle->image == data->image && (handle->symfile || handle->ppdb)) data->found = TRUE; } diff --git a/mono/metadata/mono-debug.h b/mono/metadata/mono-debug.h index 57ac9e8e34..0e4e31f4ed 100644 --- a/mono/metadata/mono-debug.h +++ b/mono/metadata/mono-debug.h @@ -194,6 +194,8 @@ mono_debug_lookup_locals (MonoMethod *method); MonoDebugMethodAsyncInfo* mono_debug_lookup_method_async_debug_info (MonoMethod *method); +// The intent here is really MONO_LLVM_INTERNAL but that is not necessarily available. +MONO_API_NO_EXTERN_C MonoDebugSourceLocation * mono_debug_method_lookup_location (MonoDebugMethodInfo *minfo, int il_offset); diff --git a/mono/metadata/mono-hash-internals.h b/mono/metadata/mono-hash-internals.h new file mode 100644 index 0000000000..1ba508b203 --- /dev/null +++ b/mono/metadata/mono-hash-internals.h @@ -0,0 +1,17 @@ +/** + * \file + */ + +#ifndef __MONO_G_HASH_INTERNALS_H__ +#define __MONO_G_HASH_INTERNALS_H__ + +#include "mono/metadata/mono-hash.h" +#include "mono/metadata/mono-gc.h" + +MonoGHashTable * +mono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg); + +void +mono_g_hash_table_insert_internal (MonoGHashTable *h, gpointer k, gpointer v); + +#endif /* __MONO_G_HASH_INTERNALS_H__ */ diff --git a/mono/metadata/mono-hash.c b/mono/metadata/mono-hash.c index 1fedfded18..0323f012c4 100644 --- a/mono/metadata/mono-hash.c +++ b/mono/metadata/mono-hash.c @@ -30,8 +30,11 @@ #include <stdio.h> #include <math.h> #include <glib.h> + #include "mono-hash.h" +#include "mono-hash-internals.h" #include "metadata/gc-internals.h" + #include <mono/utils/checked-build.h> #include <mono/utils/mono-threads-coop.h> #include <mono/utils/unlocked.h> @@ -53,9 +56,6 @@ struct _MonoGHashTable { const char *msg; }; -MonoGHashTable * -mono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg); - #if UNUSED static gboolean test_prime (int x) @@ -140,18 +140,6 @@ static inline int mono_g_hash_table_find_slot (MonoGHashTable *hash, const MonoO return i; } - -MonoGHashTable * -mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg) -{ - MonoGHashTable *result; - MONO_ENTER_GC_UNSAFE; - result = mono_g_hash_table_new_type_internal (hash_func, key_equal_func, type, source, key, msg); - MONO_EXIT_GC_UNSAFE; - return result; -} - - MonoGHashTable * mono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg) { @@ -481,10 +469,17 @@ void mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v) { MONO_ENTER_GC_UNSAFE; - mono_g_hash_table_insert_replace (h, k, v, FALSE); + mono_g_hash_table_insert_internal (h, k, v); MONO_EXIT_GC_UNSAFE; } +void +mono_g_hash_table_insert_internal (MonoGHashTable *h, gpointer k, gpointer v) +{ + MONO_REQ_GC_UNSAFE_MODE; + mono_g_hash_table_insert_replace (h, k, v, FALSE); +} + /** * mono_g_hash_table_replace: */ diff --git a/mono/metadata/mono-hash.h b/mono/metadata/mono-hash.h index a64e532210..3082001300 100644 --- a/mono/metadata/mono-hash.h +++ b/mono/metadata/mono-hash.h @@ -25,7 +25,8 @@ extern gint32 mono_g_hash_table_max_chain_length; typedef struct _MonoGHashTable MonoGHashTable; -MONO_API MonoGHashTable *mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg); +MONO_API MONO_RT_EXTERNAL_ONLY MonoGHashTable * +mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg); MONO_API guint mono_g_hash_table_size (MonoGHashTable *hash); MONO_API gpointer mono_g_hash_table_lookup (MonoGHashTable *hash, gconstpointer key); MONO_API gboolean mono_g_hash_table_lookup_extended (MonoGHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value); @@ -34,7 +35,7 @@ MONO_API gpointer mono_g_hash_table_find (MonoGHashTable *hash, GHRFu MONO_API gboolean mono_g_hash_table_remove (MonoGHashTable *hash, gconstpointer key); MONO_API guint mono_g_hash_table_foreach_remove (MonoGHashTable *hash, GHRFunc func, gpointer user_data); MONO_API void mono_g_hash_table_destroy (MonoGHashTable *hash); -MONO_API void mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v); +MONO_API MONO_RT_EXTERNAL_ONLY void mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v); MONO_API void mono_g_hash_table_replace (MonoGHashTable *h, gpointer k, gpointer v); MONO_API void mono_g_hash_table_print_stats (MonoGHashTable *table); diff --git a/mono/metadata/mono-mlist.c b/mono/metadata/mono-mlist.c index 80bd991b92..f4389fdbfc 100644 --- a/mono/metadata/mono-mlist.c +++ b/mono/metadata/mono-mlist.c @@ -68,7 +68,11 @@ mono_mlist_alloc_checked (MonoObject *data, MonoError *error) error_init (error); MonoMList* res; if (!monolist_item_vtable) { +#ifdef ENABLE_NETCORE + MonoClass *klass = mono_class_load_from_name (mono_defaults.corlib, "Mono", "MonoListItem"); +#else MonoClass *klass = mono_class_load_from_name (mono_defaults.corlib, "System", "MonoListItem"); +#endif monolist_item_vtable = mono_class_vtable_checked (mono_get_root_domain (), klass, error); mono_error_assert_ok (error); } diff --git a/mono/metadata/mono-perfcounters.c b/mono/metadata/mono-perfcounters.c index 4421d00ff9..2970e083dc 100644 --- a/mono/metadata/mono-perfcounters.c +++ b/mono/metadata/mono-perfcounters.c @@ -49,6 +49,7 @@ #include "utils/mono-error-internals.h" #include "utils/atomic.h" #include "utils/unlocked.h" +#include "icall-decl.h" /* map of CounterSample.cs */ struct _MonoCounterSample { @@ -258,6 +259,8 @@ typedef struct { typedef struct { const char *name; const char *help; + int name_length; + int help_length; unsigned char id; signed int type : 2; unsigned int instance_type : 6; @@ -267,6 +270,8 @@ typedef struct { typedef struct { const char *name; const char *help; + int name_length; + int help_length; short id; unsigned short offset; // offset inside MonoPerfCounters int type; @@ -274,22 +279,22 @@ typedef struct { #undef PERFCTR_CAT #undef PERFCTR_COUNTER -#define PERFCTR_CAT(id,name,help,type,inst,first_counter) {name, help, CATEGORY_ ## id, type, inst ## Instance, CCOUNTER_ ## first_counter}, +#define PERFCTR_CAT(id,name,help,type,inst,first_counter) {name, help, sizeof (name) - 1, sizeof (help) - 1, CATEGORY_ ## id, type, inst ## Instance, CCOUNTER_ ## first_counter}, #define PERFCTR_COUNTER(id,name,help,type,field) static const CategoryDesc predef_categories [] = { #include "mono-perfcounters-def.h" - {NULL, NULL, NUM_CATEGORIES, -1, 0, NUM_COUNTERS} + {NULL, NULL, 0, 0, NUM_CATEGORIES, -1, 0, NUM_COUNTERS} }; #undef PERFCTR_CAT #undef PERFCTR_COUNTER #define PERFCTR_CAT(id,name,help,type,inst,first_counter) -#define PERFCTR_COUNTER(id,name,help,type,field) {name, help, COUNTER_ ## id, G_STRUCT_OFFSET (MonoPerfCounters, field), type}, +#define PERFCTR_COUNTER(id,name,help,type,field) {name, help, sizeof (name) - 1, sizeof (help) - 1, COUNTER_ ## id, G_STRUCT_OFFSET (MonoPerfCounters, field), type}, static const CounterDesc predef_counters [] = { #include "mono-perfcounters-def.h" - {NULL, NULL, -1, 0, 0} + {NULL, NULL, 0, 0, -1, 0, 0} }; /* @@ -629,21 +634,33 @@ foreach_shared_item (SharedFunc func, void *data) foreach_shared_item_in_area (p, end, func, data); } -static int -mono_string_compare_ascii (MonoString *str, const char *ascii_str) +static gboolean +mono_utf16_equal_ascii (const gunichar2 *strc, const char *ascii_str) { /* FIXME: make this case insensitive */ - const gunichar2 *strc = mono_string_chars_internal (str); while (*strc == *ascii_str++) { if (*strc == 0) - return 0; + return TRUE; strc++; } - return *strc - *(const unsigned char *)(ascii_str - 1); + return *strc == *(const unsigned char *)(ascii_str - 1); +} + +static gboolean +mono_utf16_equal_ascii_len (const gunichar2 *utf16, int utf16_length, const char *ascii, int ascii_length) +{ + /* FIXME: make this case insensitive */ + if (utf16_length != ascii_length) + return FALSE; + for (int i = 0; i < utf16_length; ++i) { + if (ascii [i] != utf16 [i]) + return FALSE; + } + return TRUE; } typedef struct { - MonoString *name; + const gunichar2 *name; SharedCategory *cat; } CatSearch; @@ -653,7 +670,7 @@ category_search (SharedHeader *header, void *data) CatSearch *search = (CatSearch *)data; if (header->ftype == FTYPE_CATEGORY) { SharedCategory *cat = (SharedCategory*)header; - if (mono_string_compare_ascii (search->name, cat->name) == 0) { + if (mono_utf16_equal_ascii (search->name, cat->name)) { search->cat = cat; return FALSE; } @@ -662,7 +679,7 @@ category_search (SharedHeader *header, void *data) } static SharedCategory* -find_custom_category (MonoString *name) +find_custom_category (const gunichar2 *name) { CatSearch search; search.name = name; @@ -703,12 +720,12 @@ next_custom_category_counter (SharedCounter* counter) } static SharedCounter* -find_custom_counter (SharedCategory* cat, MonoString *name) +find_custom_counter (SharedCategory* cat, const gunichar2 *name) { int i; SharedCounter *counter = custom_category_counters (cat); for (i = 0; i < cat->num_counters; ++i) { - if (mono_string_compare_ascii (name, counter->name) == 0) + if (mono_utf16_equal_ascii (name, counter->name)) return counter; counter = next_custom_category_counter (counter); } @@ -776,12 +793,12 @@ custom_category_help (SharedCategory* cat) } static const CounterDesc* -get_counter_in_category (const CategoryDesc *desc, MonoString *counter) +get_counter_in_category (const CategoryDesc *desc, const gunichar2 *counter, int counter_length) { const CounterDesc *cdesc = &predef_counters [desc->first_counter]; const CounterDesc *end = &predef_counters [desc [1].first_counter]; for (; cdesc < end; ++cdesc) { - if (mono_string_compare_ascii (counter, cdesc->name) == 0) + if (mono_utf16_equal_ascii_len (counter, counter_length, cdesc->name, cdesc->name_length)) return cdesc; } return NULL; @@ -846,14 +863,14 @@ get_cpu_counter (ImplVtable *vtable, MonoBoolean only_value, MonoCounterSample * } static void* -cpu_get_impl (MonoString* counter, const gchar* instance, int *type, MonoBoolean *custom) +cpu_get_impl (const gunichar2 *counter, int counter_length, const char *instance, int *type, MonoBoolean *custom) { int id = id_from_string (instance, FALSE) << 5; const CounterDesc *cdesc; *custom = FALSE; /* increase the shift above and the mask also in the implementation functions */ //g_assert (32 > desc [1].first_counter - desc->first_counter); - if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_CPU], counter))) { + if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_CPU], counter, counter_length))) { *type = cdesc->type; return create_vtable (GINT_TO_POINTER (id | cdesc->id), get_cpu_counter, NULL); } @@ -907,7 +924,7 @@ network_cleanup (ImplVtable *vtable) } static void* -network_get_impl (MonoString* counter, const gchar* instance, int *type, MonoBoolean *custom) +network_get_impl (const gunichar2 *counter, int counter_length, const char *instance, int *type, MonoBoolean *custom) { const CounterDesc *cdesc; NetworkVtableArg *narg; @@ -915,7 +932,7 @@ network_get_impl (MonoString* counter, const gchar* instance, int *type, MonoBoo char *instance_name; *custom = FALSE; - if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_NETWORK], counter))) { + if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_NETWORK], counter, counter_length))) { instance_name = g_strdup (instance); narg = g_new0 (NetworkVtableArg, 1); narg->id = cdesc->id; @@ -968,14 +985,14 @@ get_process_counter (ImplVtable *vtable, MonoBoolean only_value, MonoCounterSamp } static void* -process_get_impl (MonoString* counter, const gchar* instance, int *type, MonoBoolean *custom) +process_get_impl (const gunichar2 *counter, int counter_length, const char *instance, int *type, MonoBoolean *custom) { int id = id_from_string (instance, TRUE) << 5; const CounterDesc *cdesc; *custom = FALSE; /* increase the shift above and the mask also in the implementation functions */ //g_assert (32 > desc [1].first_counter - desc->first_counter); - if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_PROC], counter))) { + if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_PROC], counter, counter_length))) { *type = cdesc->type; return create_vtable (GINT_TO_POINTER (id | cdesc->id), get_process_counter, NULL); } @@ -1006,11 +1023,11 @@ mono_mem_counter (ImplVtable *vtable, MonoBoolean only_value, MonoCounterSample } static void* -mono_mem_get_impl (MonoString* counter, const gchar* instance, int *type, MonoBoolean *custom) +mono_mem_get_impl (const gunichar2 *counter, int counter_length, const char *instance, int *type, MonoBoolean *custom) { const CounterDesc *cdesc; *custom = FALSE; - if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_MONO_MEM], counter))) { + if ((cdesc = get_counter_in_category (&predef_categories [CATEGORY_MONO_MEM], counter, counter_length))) { *type = cdesc->type; return create_vtable (GINT_TO_POINTER ((gint) cdesc->id), mono_mem_counter, NULL); } @@ -1183,11 +1200,11 @@ predef_writable_update (ImplVtable *vtable, MonoBoolean do_incr, gint64 value) } static void* -predef_writable_get_impl (int cat, MonoString* counter, const gchar *instance, int *type, MonoBoolean *custom) +predef_writable_get_impl (int cat, const gunichar2 *counter, int counter_length, const char *instance, int *type, MonoBoolean *custom) { const CounterDesc *cdesc; *custom = TRUE; - if ((cdesc = get_counter_in_category (&predef_categories [cat], counter))) { + if ((cdesc = get_counter_in_category (&predef_categories [cat], counter, counter_length))) { *type = cdesc->type; if (instance == NULL || strcmp (instance, "") == 0) return create_vtable (GINT_TO_POINTER ((cdesc->id << 16) | cat), predef_writable_counter, predef_writable_update); @@ -1286,7 +1303,7 @@ custom_get_value_address (SharedCounter *scounter, SharedInstance* sinst) } static void* -custom_get_impl (SharedCategory *cat, MonoString *counter, MonoString* instance, int *type, MonoError *error) +custom_get_impl (SharedCategory *cat, const gunichar2 *counter, int counter_length, const gunichar2 *instance, int *type, MonoError *error) { SharedCounter *scounter; SharedInstance* inst; @@ -1296,7 +1313,7 @@ custom_get_impl (SharedCategory *cat, MonoString *counter, MonoString* instance, scounter = find_custom_counter (cat, counter); if (!scounter) return NULL; - name = mono_string_to_utf8_checked_internal (counter, error); + name = mono_utf16_to_utf8 (counter, counter_length, error); return_val_if_nok (error, NULL); *type = simple_type_to_type [scounter->type]; inst = custom_get_instance (cat, scounter, name); @@ -1307,49 +1324,48 @@ custom_get_impl (SharedCategory *cat, MonoString *counter, MonoString* instance, } static const CategoryDesc* -find_category (MonoString *category) +find_category (const gunichar2 *category, int category_length) { int i; for (i = 0; i < NUM_CATEGORIES; ++i) { - if (mono_string_compare_ascii (category, predef_categories [i].name) == 0) + if (mono_utf16_equal_ascii_len (category, category_length, predef_categories [i].name, predef_categories [i].name_length)) return &predef_categories [i]; } return NULL; } void* -mono_perfcounter_get_impl (MonoString* category, MonoString* counter, MonoString* instance, - int *type, MonoBoolean *custom) +mono_perfcounter_get_impl (const gunichar2 *category, gint32 category_length, + const gunichar2 *counter, gint32 counter_length, + const gunichar2 *instance, gint32 instance_length, + gint32 *type, MonoBoolean *custom, MonoError *error) { - ERROR_DECL (error); const CategoryDesc *cdesc; void *result = NULL; - cdesc = find_category (category); + cdesc = find_category (category, category_length); if (!cdesc) { SharedCategory *scat = find_custom_category (category); if (!scat) return NULL; *custom = TRUE; - result = custom_get_impl (scat, counter, instance, type, error); - if (mono_error_set_pending_exception (error)) - return NULL; + result = custom_get_impl (scat, counter, counter_length, instance, type, error); + return_val_if_nok (error, NULL); return result; } - gchar *c_instance = mono_string_to_utf8_checked_internal (instance, error); - if (mono_error_set_pending_exception (error)) - return NULL; + char *c_instance = mono_utf16_to_utf8 (instance, instance_length, error); + return_val_if_nok (error, NULL); switch (cdesc->id) { case CATEGORY_CPU: - result = cpu_get_impl (counter, c_instance, type, custom); + result = cpu_get_impl (counter, counter_length, c_instance, type, custom); break; case CATEGORY_PROC: - result = process_get_impl (counter, c_instance, type, custom); + result = process_get_impl (counter, counter_length, c_instance, type, custom); break; case CATEGORY_MONO_MEM: - result = mono_mem_get_impl (counter, c_instance, type, custom); + result = mono_mem_get_impl (counter, counter_length, c_instance, type, custom); break; case CATEGORY_NETWORK: - result = network_get_impl (counter, c_instance, type, custom); + result = network_get_impl (counter, counter_length, c_instance, type, custom); break; case CATEGORY_JIT: case CATEGORY_EXC: @@ -1361,7 +1377,7 @@ mono_perfcounter_get_impl (MonoString* category, MonoString* counter, MonoString case CATEGORY_SECURITY: case CATEGORY_ASPNET: case CATEGORY_THREADPOOL: - result = predef_writable_get_impl (cdesc->id, counter, c_instance, type, custom); + result = predef_writable_get_impl (cdesc->id, counter, counter_length, c_instance, type, custom); break; } g_free (c_instance); @@ -1397,11 +1413,11 @@ mono_perfcounter_free_data (void *impl) /* Category icalls */ MonoBoolean -mono_perfcounter_category_del (MonoString *name) +mono_perfcounter_category_del (const gunichar2 *name, gint32 name_length, MonoError *error) { const CategoryDesc *cdesc; SharedCategory *cat; - cdesc = find_category (name); + cdesc = find_category (name, name_length); /* can't delete a predefined category */ if (cdesc) return FALSE; @@ -1418,26 +1434,23 @@ mono_perfcounter_category_del (MonoString *name) } /* this is an icall */ -MonoString* -mono_perfcounter_category_help (MonoString *category) +MonoStringHandle +mono_perfcounter_category_help (const gunichar2 *category, gint32 category_length, MonoError *error) { - ERROR_DECL (error); - MonoString *result = NULL; + MonoStringHandle result = NULL_HANDLE_STRING; const CategoryDesc *cdesc; error_init (error); - cdesc = find_category (category); + cdesc = find_category (category, category_length); if (!cdesc) { SharedCategory *scat = find_custom_category (category); if (!scat) - return NULL; - result = mono_string_new_checked (mono_domain_get (), custom_category_help (scat), error); - if (mono_error_set_pending_exception (error)) - return NULL; + return NULL_HANDLE_STRING; + result = mono_string_new_handle (mono_domain_get (), custom_category_help (scat), error); + return_val_if_nok (error, NULL_HANDLE_STRING); return result; } - result = mono_string_new_checked (mono_domain_get (), cdesc->help, error); - if (mono_error_set_pending_exception (error)) - return NULL; + result = mono_string_new_utf8_len (mono_domain_get (), cdesc->help, cdesc->help_length, error); + return_val_if_nok (error, NULL_HANDLE_STRING); return result; } @@ -1446,10 +1459,11 @@ mono_perfcounter_category_help (MonoString *category) * TRUE only if a counter with that name exists in the category. */ MonoBoolean -mono_perfcounter_category_exists (MonoString *counter, MonoString *category) +mono_perfcounter_category_exists (const gunichar2 *counter, gint32 counter_length, const gunichar2 *category, + gint32 category_length, MonoError *error) { const CategoryDesc *cdesc; - cdesc = find_category (category); + cdesc = find_category (category, category_length); if (!cdesc) { SharedCategory *scat = find_custom_category (category); if (!scat) @@ -1463,7 +1477,7 @@ mono_perfcounter_category_exists (MonoString *counter, MonoString *category) /* counter is allowed to be null */ if (!counter) return TRUE; - if (get_counter_in_category (cdesc, counter)) + if (get_counter_in_category (cdesc, counter, counter_length)) return TRUE; return FALSE; } @@ -1476,48 +1490,53 @@ typedef struct { int type; } CounterCreationData; +TYPED_HANDLE_DECL (CounterCreationData); + /* * Since we'll keep a copy of the category per-process, we should also make sure * categories with the same name are compatible. */ MonoBoolean -mono_perfcounter_create (MonoString *category, MonoString *help, int type, MonoArray *items) +mono_perfcounter_create (const gunichar2 *category, gint32 category_length, const gunichar2 *help, + gint32 help_length, gint32 type, MonoArrayHandle items, MonoError *error) { - ERROR_DECL (error); int result = FALSE; - int i, size; - int num_counters = mono_array_length_internal (items); + int i, j = 0, k, size; + int num_counters = mono_array_handle_length (items); int counters_data_size; char *name = NULL; char *chelp = NULL; char **counter_info = NULL; char *p; SharedCategory *cat; + gsize name_length = 0; + gsize chelp_length = 0; + CounterCreationDataHandle data = MONO_HANDLE_NEW (CounterCreationData, NULL); + MonoStringHandle str = MONO_HANDLE_NEW (MonoString, NULL); /* FIXME: ensure there isn't a category created already */ - name = mono_string_to_utf8_checked_internal (category, error); - if (!mono_error_ok (error)) - goto failure; - chelp = mono_string_to_utf8_checked_internal (help, error); - if (!mono_error_ok (error)) - goto failure; + name = mono_utf16_to_utf8len (category, category_length, &name_length, error); + goto_if_nok (error, failure); + chelp = mono_utf16_to_utf8len (help, help_length, &chelp_length, error); + goto_if_nok (error, failure); counter_info = g_new0 (char*, num_counters * 2); /* calculate the size we need structure size + name/help + 2 0 string terminators */ - size = G_STRUCT_OFFSET (SharedCategory, name) + strlen (name) + strlen (chelp) + 2; + size = G_STRUCT_OFFSET (SharedCategory, name) + name_length + chelp_length + 2; for (i = 0; i < num_counters; ++i) { - CounterCreationData *data = mono_array_get_internal (items, CounterCreationData*, i); - counter_info [i * 2] = mono_string_to_utf8_checked_internal (data->name, error); - if (!mono_error_ok (error)) - goto failure; - counter_info [i * 2 + 1] = mono_string_to_utf8_checked_internal (data->help, error); - if (!mono_error_ok (error)) - goto failure; - size += sizeof (SharedCounter) + 1; /* 1 is for the help 0 terminator */ - } - for (i = 0; i < num_counters * 2; ++i) { - if (!counter_info [i]) - goto failure; - size += strlen (counter_info [i]) + 1; + MONO_HANDLE_ARRAY_GETREF (data, items, i); + for (k = 0; k < 2; ++k) { + if (k) + MONO_HANDLE_GET (str, data, help); + else + MONO_HANDLE_GET (str, data, name); + gsize utf8_length = 0; + counter_info [j] = mono_string_to_utf8len (str, &utf8_length, error); + if (!is_ok (error) || !counter_info [j]) + goto failure; + size += utf8_length + 1; + ++j; + } + size += sizeof (SharedCounter) + 1; /* FIXME +1 should be -1 */ } size += 7; size &= ~7; @@ -1538,10 +1557,11 @@ mono_perfcounter_create (MonoString *category, MonoString *help, int type, MonoA p += strlen (name) + 1; strcpy (p, chelp); p += strlen (chelp) + 1; + j = 0; for (i = 0; i < num_counters; ++i) { - CounterCreationData *data = mono_array_get_internal (items, CounterCreationData*, i); + MONO_HANDLE_ARRAY_GETREF (data, items, i); /* emit the SharedCounter structures */ - *p++ = perfctr_type_compress (data->type); + *p++ = perfctr_type_compress (MONO_HANDLE_GETVAL (data, type)); *p++ = i; strcpy (p, counter_info [i * 2]); p += strlen (counter_info [i * 2]) + 1; @@ -1560,26 +1580,24 @@ failure: } g_free (name); g_free (chelp); - mono_error_cleanup (error); return result; } MonoBoolean -mono_perfcounter_instance_exists (MonoString *instance, MonoString *category) +mono_perfcounter_instance_exists (const gunichar2 *instance, gint32 instance_length, + const gunichar2 *category, gint32 category_length, MonoError *error) { - ERROR_DECL (error); const CategoryDesc *cdesc; SharedInstance *sinst; char *name; - cdesc = find_category (category); + cdesc = find_category (category, category_length); if (!cdesc) { SharedCategory *scat; scat = find_custom_category (category); if (!scat) return FALSE; - name = mono_string_to_utf8_checked_internal (instance, error); - if (mono_error_set_pending_exception (error)) - return FALSE; + name = mono_utf16_to_utf8 (instance, instance_length, error); + return_val_if_nok (error, FALSE); sinst = find_custom_instance (scat, name); g_free (name); if (sinst) @@ -1591,62 +1609,74 @@ mono_perfcounter_instance_exists (MonoString *instance, MonoString *category) } /* this is an icall */ -MonoArray* -mono_perfcounter_category_names (void) +MonoArrayHandle +mono_perfcounter_category_names (MonoError *error) { - ERROR_DECL (error); + HANDLE_LOOP_PREPARE; + int i; - MonoArray *res; + MonoArrayHandle res; MonoDomain *domain = mono_domain_get (); GSList *custom_categories, *tmp; perfctr_lock (); custom_categories = get_custom_categories (); - res = mono_array_new_checked (domain, mono_get_string_class (), NUM_CATEGORIES + g_slist_length (custom_categories), error); + res = mono_array_new_handle (domain, mono_get_string_class (), NUM_CATEGORIES + g_slist_length (custom_categories), error); if (!is_ok (error)) { - res = NULL; + res = NULL_HANDLE_ARRAY; goto leave; } for (i = 0; i < NUM_CATEGORIES; ++i) { const CategoryDesc *cdesc = &predef_categories [i]; - MonoString *name = mono_string_new_checked (domain, cdesc->name, error); + MonoStringHandle name; + SETUP_ICALL_FRAME; + name = mono_string_new_utf8_len (domain, cdesc->name, cdesc->name_length, error); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (res, i, name); + CLEAR_ICALL_FRAME; goto_if_nok (error, leave); - mono_array_setref_internal (res, i, name); } for (tmp = custom_categories; tmp; tmp = tmp->next) { SharedCategory *scat = (SharedCategory *)tmp->data; - MonoString *name = mono_string_new_checked (domain, scat->name, error); + MonoStringHandle name; + SETUP_ICALL_FRAME; + name = mono_string_new_utf8_len (domain, scat->name, strlen (scat->name), error); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (res, i, name); + CLEAR_ICALL_FRAME; goto_if_nok (error, leave); - mono_array_setref_internal (res, i, name); i++; } leave: perfctr_unlock (); g_slist_free (custom_categories); - mono_error_set_pending_exception (error); return res; } -MonoArray* -mono_perfcounter_counter_names (MonoString *category) +MonoArrayHandle +mono_perfcounter_counter_names (const gunichar2 *category, gint32 category_length, MonoError *error) { - ERROR_DECL (error); + HANDLE_LOOP_PREPARE; + int i; SharedCategory *scat; const CategoryDesc *cdesc; - MonoArray *res; + MonoArrayHandle res = NULL_HANDLE_ARRAY; MonoDomain *domain = mono_domain_get (); - cdesc = find_category (category); + + cdesc = find_category (category, category_length); if (cdesc) { - res = mono_array_new_checked (domain, mono_get_string_class (), cdesc [1].first_counter - cdesc->first_counter, error); - if (mono_error_set_pending_exception (error)) - return NULL; + res = mono_array_new_handle (domain, mono_get_string_class (), cdesc [1].first_counter - cdesc->first_counter, error); + return_val_if_nok (error, NULL_HANDLE_ARRAY); for (i = cdesc->first_counter; i < cdesc [1].first_counter; ++i) { const CounterDesc *desc = &predef_counters [i]; - MonoString *name = mono_string_new_checked (domain, desc->name, error); - if (mono_error_set_pending_exception (error)) - return NULL; - mono_array_setref_internal (res, i - cdesc->first_counter, name); + MonoStringHandle name; + SETUP_ICALL_FRAME; + name = mono_string_new_utf8_len (domain, desc->name, desc->name_length, error); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (res, i - cdesc->first_counter, name); + CLEAR_ICALL_FRAME; + return_val_if_nok (error, NULL_HANDLE_ARRAY); } return res; } @@ -1655,34 +1685,39 @@ mono_perfcounter_counter_names (MonoString *category) if (scat) { SharedCounter *counter = custom_category_counters (scat); int i; - res = mono_array_new_checked (domain, mono_get_string_class (), scat->num_counters, error); - if (mono_error_set_pending_exception (error)) { - perfctr_unlock (); - return NULL; + res = mono_array_new_handle (domain, mono_get_string_class (), scat->num_counters, error); + if (!is_ok (error)) { + res = NULL_HANDLE_ARRAY; + goto leave; } for (i = 0; i < scat->num_counters; ++i) { - MonoString *str = mono_string_new_checked (domain, counter->name, error); + MonoStringHandle str; + SETUP_ICALL_FRAME; + str = mono_string_new_utf8_len (domain, counter->name, strlen (counter->name), error); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (res, i, str); + CLEAR_ICALL_FRAME; goto_if_nok (error, leave); - mono_array_setref_internal (res, i, str); counter = next_custom_category_counter (counter); } } else - res = mono_array_new_checked (domain, mono_get_string_class (), 0, error); + res = mono_array_new_handle (domain, mono_get_string_class (), 0, error); leave: perfctr_unlock (); - mono_error_set_pending_exception (error); return res; } -static MonoArray* +static MonoArrayHandle get_string_array (void **array, int count, gboolean is_process, MonoError *error) { + HANDLE_LOOP_PREPARE; + int i; MonoDomain *domain = mono_domain_get (); error_init (error); - MonoArray * res = mono_array_new_checked (mono_domain_get (), mono_get_string_class (), count, error); - return_val_if_nok (error, NULL); + MonoArrayHandle res = mono_array_new_handle (domain, mono_get_string_class (), count, error); + return_val_if_nok (error, NULL_HANDLE_ARRAY); for (i = 0; i < count; ++i) { char buf [128]; char *p; @@ -1693,40 +1728,50 @@ get_string_array (void **array, int count, gboolean is_process, MonoError *error sprintf (buf, "%d", GPOINTER_TO_INT (array [i])); p = buf; } - MonoString *str = mono_string_new_checked (domain, p, error); + MonoStringHandle str; + SETUP_ICALL_FRAME; + str = mono_string_new_utf8_len (domain, p, strlen (p), error); if (p != buf) g_free (p); - return_val_if_nok (error, NULL); - mono_array_setref_internal (res, i, str); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (res, i, str); + CLEAR_ICALL_FRAME; + return_val_if_nok (error, NULL_HANDLE_ARRAY); } return res; } -static MonoArray* +static MonoArrayHandle get_string_array_of_strings (void **array, int count, MonoError *error) { + HANDLE_LOOP_PREPARE; + int i; MonoDomain *domain = mono_domain_get (); error_init (error); - MonoArray * res = mono_array_new_checked (mono_domain_get (), mono_get_string_class (), count, error); - return_val_if_nok (error, NULL); + MonoArrayHandle res = mono_array_new_handle (domain, mono_get_string_class (), count, error); + return_val_if_nok (error, NULL_HANDLE_ARRAY); for (i = 0; i < count; ++i) { - char* p = (char *)array[i]; - MonoString *str = mono_string_new_checked (domain, p, error); - return_val_if_nok (error, NULL); - mono_array_setref_internal (res, i, str); + char* p = (char *)array [i]; + MonoStringHandle str; + SETUP_ICALL_FRAME; + str = mono_string_new_utf8_len (domain, p, strlen (p), error); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (res, i, str); + CLEAR_ICALL_FRAME; + return_val_if_nok (error, NULL_HANDLE_ARRAY); } return res; } -static MonoArray* +static MonoArrayHandle get_mono_instances (MonoError *error) { int count = 64; int res; void **buf = NULL; - MonoArray *array; + MonoArrayHandle array; error_init (error); do { count *= 2; @@ -1739,12 +1784,12 @@ get_mono_instances (MonoError *error) return array; } -static MonoArray* +static MonoArrayHandle get_cpu_instances (MonoError *error) { void **buf = NULL; int i, count; - MonoArray *array; + MonoArrayHandle array; error_init (error); count = mono_cpu_count () + 1; /* +1 for "_Total" */ buf = g_new (void*, count); @@ -1752,16 +1797,16 @@ get_cpu_instances (MonoError *error) buf [i] = GINT_TO_POINTER (i - 1); /* -1 => _Total */ array = get_string_array (buf, count, FALSE, error); g_free (buf); - MonoString *total = mono_string_new_checked (mono_domain_get (), "_Total", error); - return_val_if_nok (error, NULL); - mono_array_setref_internal (array, 0, total); + MonoStringHandle total = mono_string_new_handle (mono_domain_get (), "_Total", error); + return_val_if_nok (error, NULL_HANDLE_ARRAY); + MONO_HANDLE_ARRAY_SETREF (array, 0, total); return array; } -static MonoArray* +static MonoArrayHandle get_processes_instances (MonoError *error) { - MonoArray *array; + MonoArrayHandle array; int count = 0; void **buf = mono_process_list (&count); error_init (error); @@ -1772,10 +1817,10 @@ get_processes_instances (MonoError *error) return array; } -static MonoArray* +static MonoArrayHandle get_networkinterface_instances (MonoError *error) { - MonoArray *array; + MonoArrayHandle array; int count = 0; error_init (error); void **buf = mono_networkinterface_list (&count); @@ -1786,9 +1831,11 @@ get_networkinterface_instances (MonoError *error) return array; } -static MonoArray* -get_custom_instances (MonoString *category, MonoError *error) +static MonoArrayHandle +get_custom_instances (const gunichar2 *category, MonoError *error) { + HANDLE_LOOP_PREPARE; + SharedCategory *scat; error_init (error); scat = find_custom_category (category); @@ -1796,38 +1843,41 @@ get_custom_instances (MonoString *category, MonoError *error) GSList *list = get_custom_instances_list (scat); GSList *tmp; int i = 0; - MonoArray *array = mono_array_new_checked (mono_domain_get (), mono_get_string_class (), g_slist_length (list), error); + MonoArrayHandle array = mono_array_new_handle (mono_domain_get (), mono_get_string_class (), g_slist_length (list), error); if (!is_ok (error)) { - g_slist_free (list); - return NULL; + array = NULL_HANDLE_ARRAY; + goto exit; } for (tmp = list; tmp; tmp = tmp->next) { SharedInstance *inst = (SharedInstance *)tmp->data; - MonoString *str = mono_string_new_checked (mono_domain_get (), inst->instance_name, error); + MonoStringHandle str; + SETUP_ICALL_FRAME; + str = mono_string_new_utf8_len (mono_domain_get (), inst->instance_name, strlen (inst->instance_name), error); + if (is_ok (error)) + MONO_HANDLE_ARRAY_SETREF (array, i, str); + CLEAR_ICALL_FRAME; if (!is_ok (error)) { - g_slist_free (list); - return NULL; + array = NULL_HANDLE_ARRAY; + goto exit; } - mono_array_setref_internal (array, i, str); i++; } +exit: g_slist_free (list); return array; } - return mono_array_new_checked (mono_domain_get (), mono_get_string_class (), 0, error); + return mono_array_new_handle (mono_domain_get (), mono_get_string_class (), 0, error); } -MonoArray* -mono_perfcounter_instance_names (MonoString *category) +MonoArrayHandle +mono_perfcounter_instance_names (const gunichar2 *category, gint32 category_length, MonoError *error) { - ERROR_DECL (error); const CategoryDesc* cat; - MonoArray *result = NULL; - - cat = find_category (category); + MonoArrayHandle result = NULL_HANDLE_ARRAY; + + cat = find_category (category, category_length); if (!cat) { - MonoArray *result = get_custom_instances (category, error); - mono_error_set_pending_exception (error); + result = get_custom_instances (category, error); return result; } switch (cat->instance_type) { @@ -1843,11 +1893,10 @@ mono_perfcounter_instance_names (MonoString *category) case NetworkInterfaceInstance: result = get_networkinterface_instances (error); break; - case ThreadInstance: + case ThreadInstance: // fallthrough? default: - result = mono_array_new_checked (mono_domain_get (), mono_get_string_class (), 0, error); + result = mono_array_new_handle (mono_domain_get (), mono_get_string_class (), 0, error); } - mono_error_set_pending_exception (error); return result; } @@ -1896,8 +1945,12 @@ mono_perfcounter_foreach (PerfCounterEnumCallback cb, gpointer data) } #else + void* -mono_perfcounter_get_impl (MonoString* category, MonoString* counter, MonoString* instance, int *type, MonoBoolean *custom) +mono_perfcounter_get_impl (const gunichar2 *category, gint32 category_length, + const gunichar2 *counter, gint32 counter_length, + const gunichar2 *instance, gint32 instance_length, + gint32 *type, MonoBoolean *custom, MonoError *error) { g_assert_not_reached (); } @@ -1922,50 +1975,54 @@ mono_perfcounter_free_data (void *impl) /* Category icalls */ MonoBoolean -mono_perfcounter_category_del (MonoString *name) +mono_perfcounter_category_del (const gunichar2 *name, gint32 name_length, MonoError *error) { g_assert_not_reached (); } -MonoString* -mono_perfcounter_category_help (MonoString *category) +MonoStringHandle +mono_perfcounter_category_help (const gunichar2 *category, gint32 category_length, MonoError *error) { g_assert_not_reached (); } MonoBoolean -mono_perfcounter_category_exists (MonoString *counter, MonoString *category) +mono_perfcounter_category_exists (const gunichar2 *counter, gint32 counter_length, const gunichar2 *category, + gint32 category_length, MonoError *error) { g_assert_not_reached (); } MonoBoolean -mono_perfcounter_create (MonoString *category, MonoString *help, int type, MonoArray *items) +mono_perfcounter_create (const gunichar2 *category, gint32 category_length, const gunichar2 *help, + gint32 help_length, gint32 type, MonoArrayHandle items, MonoError *error) { g_assert_not_reached (); } MonoBoolean -mono_perfcounter_instance_exists (MonoString *instance, MonoString *category) +mono_perfcounter_instance_exists (const gunichar2 *instance, gint32 instance_length, + const gunichar2 *category, gint32 category_length, MonoError *error) { g_assert_not_reached (); } -MonoArray* -mono_perfcounter_category_names (void) +MonoArrayHandle +mono_perfcounter_category_names (MonoError *error) { g_assert_not_reached (); } -MonoArray* -mono_perfcounter_counter_names (MonoString *category) +MonoArrayHandle +mono_perfcounter_counter_names (const gunichar2 *category, gint32 category_length, MonoError *error) { g_assert_not_reached (); } -MonoArray* -mono_perfcounter_instance_names (MonoString *category) +MonoArrayHandle +mono_perfcounter_instance_names (const gunichar2 *category, gint32 category_length, MonoError *error) { g_assert_not_reached (); } + #endif diff --git a/mono/metadata/mono-perfcounters.h b/mono/metadata/mono-perfcounters.h index 02d4e5644b..eaa47d8344 100644 --- a/mono/metadata/mono-perfcounters.h +++ b/mono/metadata/mono-perfcounters.h @@ -12,10 +12,6 @@ typedef struct _MonoCounterSample MonoCounterSample; -ICALL_EXPORT -void* mono_perfcounter_get_impl (MonoString* category, MonoString* counter, MonoString* instance, - int *type, MonoBoolean *custom); - ICALL_EXPORT MonoBoolean mono_perfcounter_get_sample (void *impl, MonoBoolean only_value, MonoCounterSample *sample); @@ -25,31 +21,6 @@ gint64 mono_perfcounter_update_value (void *impl, MonoBoolean do_incr, gint64 ICALL_EXPORT void mono_perfcounter_free_data (void *impl); -/* Category icalls */ -ICALL_EXPORT -MonoBoolean mono_perfcounter_category_del (MonoString *name); - -ICALL_EXPORT -MonoString* mono_perfcounter_category_help (MonoString *category); - -ICALL_EXPORT -MonoBoolean mono_perfcounter_category_exists (MonoString *counter, MonoString *category); - -ICALL_EXPORT -MonoBoolean mono_perfcounter_create (MonoString *category, MonoString *help, int type, MonoArray *items); - -ICALL_EXPORT -MonoBoolean mono_perfcounter_instance_exists (MonoString *instance, MonoString *category); - -ICALL_EXPORT -MonoArray* mono_perfcounter_category_names (void); - -ICALL_EXPORT -MonoArray* mono_perfcounter_counter_names (MonoString *category); - -ICALL_EXPORT -MonoArray* mono_perfcounter_instance_names (MonoString *category); - typedef gboolean (*PerfCounterEnumCallback) (char *category_name, char *name, unsigned char type, gint64 value, gpointer user_data); MONO_API void mono_perfcounter_foreach (PerfCounterEnumCallback cb, gpointer user_data); diff --git a/mono/metadata/mono-route.h b/mono/metadata/mono-route.h index 4359823386..514b080ad4 100644 --- a/mono/metadata/mono-route.h +++ b/mono/metadata/mono-route.h @@ -7,6 +7,7 @@ #if defined(HOST_DARWIN) || defined(HOST_BSD) +#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* in_addr_t */ diff --git a/mono/metadata/mono-security-windows.c b/mono/metadata/mono-security-windows.c index 4c01c2d7b6..3e6de3c28a 100644 --- a/mono/metadata/mono-security-windows.c +++ b/mono/metadata/mono-security-windows.c @@ -12,6 +12,7 @@ #include <winsock2.h> #include <windows.h> #include "mono/metadata/mono-security-windows-internals.h" +#include <mono/metadata/handle.h> #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) #include <aclapi.h> @@ -121,6 +122,8 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token error_init (error); size = mono_security_win_get_token_name (token, &uniname, error); + if (size == 0 && !is_ok (error)) + return NULL_HANDLE_STRING; if (size > 0) { result = mono_string_new_utf16_handle (mono_domain_get (), uniname, size, error); diff --git a/mono/metadata/object-internals.h b/mono/metadata/object-internals.h index 462e0130bc..5dfbd4f6d8 100644 --- a/mono/metadata/object-internals.h +++ b/mono/metadata/object-internals.h @@ -38,6 +38,15 @@ } \ } while (0) +#define MONO_CHECK_ARG_NULL_NAMED(arg, argname, retval) do { \ + if (G_UNLIKELY (!(arg))) \ + { \ + ERROR_DECL (error); \ + mono_error_set_argument_null (error, (argname), ""); \ + mono_error_set_pending_exception (error); \ + return retval; \ + } \ +} while (0) /* Use this as MONO_CHECK_ARG_NULL (arg,) in functions returning void */ #define MONO_CHECK_ARG_NULL(arg, retval) do { \ if (G_UNLIKELY (!(arg))) \ @@ -58,6 +67,14 @@ } \ } while (0) +#define MONO_CHECK_ARG_NULL_HANDLE_NAMED(arg, argname, retval) do { \ + if (G_UNLIKELY (MONO_HANDLE_IS_NULL (arg))) \ + { \ + mono_error_set_argument_null (error, (argname), ""); \ + return retval; \ + } \ +} while (0) + /* Use this as MONO_CHECK_NULL (arg,) in functions returning void */ #define MONO_CHECK_NULL(arg, retval) do { \ if (G_UNLIKELY (!(arg))) \ @@ -239,7 +256,9 @@ mono_handle_array_get_bounds_dim (MonoArrayHandle arr, gint32 dim, MonoArrayBoun typedef struct { MonoObject obj; +#ifndef ENABLE_NETCORE MonoObject *identity; +#endif } MonoMarshalByRefObject; /* This is a copy of System.AppDomain */ @@ -324,10 +343,12 @@ typedef struct { MonoException base; } MonoSystemException; +#ifndef ENABLE_NETCORE typedef struct { MonoSystemException base; MonoString *param_name; } MonoArgumentException; +#endif typedef struct { MonoObject object; @@ -509,7 +530,15 @@ typedef enum { struct _MonoThreadInfo; +#ifdef ENABLE_NETCORE +/* + * There is only one thread object, MonoInternalThread is aliased to MonoThread, + * thread->internal_thread points to itself. + */ +struct _MonoThread { +#else struct _MonoInternalThread { +#endif MonoObject obj; volatile int lock_thread_id; /* to be used as the pre-shifted thread id in thin locks. Used for appdomain_ref push/pop */ MonoThreadHandle *handle; @@ -553,6 +582,11 @@ struct _MonoInternalThread { gint32 self_suspended; // TRUE | FALSE gsize thread_state; +#ifdef ENABLE_NETCORE + struct _MonoThread *internal_thread; + MonoObject *start_obj; + MonoException *pending_exception; +#else /* * These fields are used to avoid having to increment corlib versions * when a new field is added to this structure. @@ -560,7 +594,7 @@ struct _MonoInternalThread { * same field there. */ gsize unused2; - +#endif /* This is used only to check that we are in sync between the representation * of MonoInternalThread in native and InternalThread in managed * @@ -568,18 +602,23 @@ struct _MonoInternalThread { gpointer last; }; +#ifdef ENABLE_NETCORE +#define _MonoInternalThread _MonoThread +#else struct _MonoThread { MonoObject obj; MonoInternalThread *internal_thread; MonoObject *start_obj; MonoException *pending_exception; }; +#endif typedef struct { guint32 state; MonoObject *additional; } MonoStreamingContext; +#if !ENABLE_NETCORE typedef struct { MonoObject obj; MonoBoolean readOnly; @@ -718,6 +757,7 @@ typedef struct { MonoString *currency_english_name; MonoString *currency_native_name; } MonoRegionInfo; +#endif typedef struct { MonoObject object; @@ -973,7 +1013,9 @@ TYPED_HANDLE_DECL (MonoReflectionProperty); /*This is System.EventInfo*/ struct _MonoReflectionEvent { MonoObject object; +#ifndef ENABLE_NETCORE MonoObject *cached_add_event; +#endif }; /* Safely access System.Reflection.EventInfo from native code */ @@ -990,13 +1032,6 @@ TYPED_HANDLE_DECL (MonoReflectionMonoEvent); typedef struct { MonoObject object; - guint32 AttrsImpl; - MonoReflectionType *ClassImpl; - MonoObject *DefaultValueImpl; - MonoObject *MemberImpl; - MonoString *NameImpl; - gint32 PositionImpl; - MonoObject *MarshalAsImpl; } MonoReflectionParameter; /* Safely access System.Reflection.ParameterInfo from native code */ @@ -1013,17 +1048,8 @@ TYPED_HANDLE_DECL (MonoReflectionMethodBody); struct _MonoReflectionAssembly { MonoObject object; MonoAssembly *assembly; - MonoObject *resolve_event_holder; /* CAS related */ MonoObject *evidence; /* Evidence */ - MonoObject *minimum; /* PermissionSet - for SecurityAction.RequestMinimum */ - MonoObject *optional; /* PermissionSet - for SecurityAction.RequestOptional */ - MonoObject *refuse; /* PermissionSet - for SecurityAction.RequestRefuse */ - MonoObject *granted; /* PermissionSet - for the resolved assembly granted permissions */ - MonoObject *denied; /* PermissionSet - for the resolved assembly denied permissions */ - /* */ - MonoBoolean from_byte_array; - MonoString *name; }; typedef struct { @@ -1485,6 +1511,21 @@ typedef struct { TYPED_HANDLE_DECL (MonoReflectionCustomAttr); +#if ENABLE_NETCORE +typedef struct { + MonoObject object; + guint32 utype; + gint32 safe_array_subtype; + MonoReflectionType *marshal_safe_array_user_defined_subtype; + gint32 IidParameterIndex; + guint32 array_subtype; + gint16 size_param_index; + gint32 size_const; + MonoString *marshal_type; + MonoReflectionType *marshal_type_ref; + MonoString *marshal_cookie; +} MonoReflectionMarshalAsAttribute; +#else typedef struct { MonoObject object; MonoString *marshal_cookie; @@ -1498,6 +1539,7 @@ typedef struct { gint32 IidParameterIndex; gint16 size_param_index; } MonoReflectionMarshalAsAttribute; +#endif /* Safely access System.Runtime.InteropServices.MarshalAsAttribute */ TYPED_HANDLE_DECL (MonoReflectionMarshalAsAttribute); @@ -1697,7 +1739,6 @@ mono_string_handle_to_utf8 (MonoStringHandle s, MonoError *error); char * mono_string_to_utf8_image (MonoImage *image, MonoStringHandle s, MonoError *error); - MonoArrayHandle mono_array_clone_in_domain (MonoDomain *domain, MonoArrayHandle array, MonoError *error); @@ -1773,6 +1814,9 @@ mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass); void mono_nullable_init_from_handle (guint8 *buf, MonoObjectHandle value, MonoClass *klass); +void +mono_nullable_init_unboxed (guint8 *buf, gpointer value, MonoClass *klass); + MonoObject * mono_value_box_checked (MonoDomain *domain, MonoClass *klass, void* val, MonoError *error); @@ -2029,6 +2073,9 @@ mono_object_handle_isinst (MonoObjectHandle obj, MonoClass *klass, MonoError *er MonoObjectHandle mono_object_handle_isinst_mbyref (MonoObjectHandle obj, MonoClass *klass, MonoError *error); +gboolean +mono_object_handle_isinst_mbyref_raw (MonoObjectHandle obj, MonoClass *klass, MonoError *error); + MonoStringHandle mono_string_new_size_handle (MonoDomain *domain, gint32 len, MonoError *error); @@ -2191,6 +2238,9 @@ mono_string_length_internal (MonoString *s); MonoString* mono_string_empty_internal (MonoDomain *domain); +char * +mono_string_to_utf8len (MonoStringHandle s, gsize *utf8len, MonoError *error); + char* mono_string_to_utf8_checked_internal (MonoString *string_obj, MonoError *error); @@ -2258,6 +2308,11 @@ mono_field_static_set_value_internal (MonoVTable *vt, MonoClassField *field, voi void mono_field_get_value_internal (MonoObject *obj, MonoClassField *field, void *value); +MonoMethod* mono_get_context_capture_method (void); + +guint8* +mono_runtime_get_aotid_arr (void); + /* GC handles support * * A handle can be created to refer to a managed object and either prevent it diff --git a/mono/metadata/object-offsets.h b/mono/metadata/object-offsets.h index e6899c01db..ec4e2cd15e 100644 --- a/mono/metadata/object-offsets.h +++ b/mono/metadata/object-offsets.h @@ -74,6 +74,7 @@ DECL_OFFSET(MonoVTable, interface_bitmap) DECL_OFFSET(MonoVTable, vtable) DECL_OFFSET(MonoVTable, rank) DECL_OFFSET(MonoVTable, initialized) +DECL_OFFSET(MonoVTable, flags) DECL_OFFSET(MonoVTable, type) DECL_OFFSET(MonoVTable, runtime_generic_context) diff --git a/mono/metadata/object.c.REMOVED.git-id b/mono/metadata/object.c.REMOVED.git-id index 5fbc952320..74995f21b5 100644 --- a/mono/metadata/object.c.REMOVED.git-id +++ b/mono/metadata/object.c.REMOVED.git-id @@ -1 +1 @@ -26fffe4f3e8855412ffdbfe7d0beda24e81d6345 \ No newline at end of file +184854e32327ba82ad85996ecaa1d5b34cf3566f \ No newline at end of file diff --git a/mono/metadata/reflection-internals.h b/mono/metadata/reflection-internals.h index 40aec82fe2..31f2386f17 100644 --- a/mono/metadata/reflection-internals.h +++ b/mono/metadata/reflection-internals.h @@ -136,4 +136,7 @@ mono_runtime_get_caller_no_system_or_reflection (void); MonoAssembly* mono_runtime_get_caller_from_stack_mark (MonoStackCrawlMark *stack_mark); +void +mono_reflection_get_param_info_member_and_pos (MonoReflectionParameterHandle p, MonoObjectHandle member_impl, int *out_position); + #endif /* __MONO_METADATA_REFLECTION_INTERNALS_H__ */ diff --git a/mono/metadata/reflection.c b/mono/metadata/reflection.c deleted file mode 100644 index cf0f85edf0..0000000000 --- a/mono/metadata/reflection.c +++ /dev/null @@ -1,3101 +0,0 @@ -/** - * \file - * System.Type icalls and related reflection queries. - * - * Author: - * Paolo Molaro (lupus@ximian.com) - * - * Copyright 2001-2003 Ximian, Inc (http://www.ximian.com) - * Copyright 2004-2009 Novell, Inc (http://www.novell.com) - * Copyright 2011 Rodrigo Kumpera - * Copyright 2016 Microsoft - * - * Licensed under the MIT license. See LICENSE file in the project root for full license information. - */ -#include <config.h> -#include "mono/utils/mono-membar.h" -#include "mono/metadata/reflection-internals.h" -#include "mono/metadata/tabledefs.h" -#include "mono/metadata/metadata-internals.h" -#include <mono/metadata/profiler-private.h> -#include "mono/metadata/class-internals.h" -#include "mono/metadata/class-init.h" -#include "mono/metadata/gc-internals.h" -#include "mono/metadata/domain-internals.h" -#include "mono/metadata/opcodes.h" -#include "mono/metadata/assembly.h" -#include "mono/metadata/object-internals.h" -#include <mono/metadata/exception.h> -#include <mono/metadata/marshal.h> -#include <mono/metadata/security-manager.h> -#include <mono/metadata/reflection-cache.h> -#include <mono/metadata/sre-internals.h> -#include <stdio.h> -#include <glib.h> -#include <errno.h> -#include <time.h> -#include <string.h> -#include <ctype.h> -#include "image.h" -#include "cil-coff.h" -#include "mono-endian.h" -#include <mono/metadata/gc-internals.h> -#include <mono/metadata/mempool-internals.h> -#include <mono/metadata/security-core-clr.h> -#include <mono/metadata/debug-helpers.h> -#include <mono/metadata/verify-internals.h> -#include <mono/metadata/mono-ptr-array.h> -#include <mono/utils/mono-string.h> -#include <mono/utils/mono-error-internals.h> -#include <mono/utils/checked-build.h> -#include <mono/utils/mono-counters.h> -#include "icall-decl.h" - -static void get_default_param_value_blobs (MonoMethod *method, char **blobs, guint32 *types); -static MonoType* mono_reflection_get_type_with_rootimage (MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean *type_resolve, MonoError *error); - -/* Class lazy loading functions */ -static GENERATE_GET_CLASS_WITH_CACHE (mono_assembly, "System.Reflection", "RuntimeAssembly") -static GENERATE_GET_CLASS_WITH_CACHE (mono_module, "System.Reflection", "RuntimeModule") -static GENERATE_GET_CLASS_WITH_CACHE (mono_method, "System.Reflection", "RuntimeMethodInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (mono_cmethod, "System.Reflection", "RuntimeConstructorInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (mono_field, "System.Reflection", "RuntimeFieldInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (mono_event, "System.Reflection", "RuntimeEventInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (mono_property, "System.Reflection", "RuntimePropertyInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (mono_parameter_info, "System.Reflection", "RuntimeParameterInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (missing, "System.Reflection", "Missing"); -static GENERATE_GET_CLASS_WITH_CACHE (method_body, "System.Reflection", "MethodBody"); -static GENERATE_GET_CLASS_WITH_CACHE (local_variable_info, "System.Reflection", "LocalVariableInfo"); -static GENERATE_GET_CLASS_WITH_CACHE (exception_handling_clause, "System.Reflection", "ExceptionHandlingClause"); -static GENERATE_GET_CLASS_WITH_CACHE (type_builder, "System.Reflection.Emit", "TypeBuilder"); -static GENERATE_GET_CLASS_WITH_CACHE (dbnull, "System", "DBNull"); - - -static int class_ref_info_handle_count; - -void -mono_reflection_init (void) -{ - mono_reflection_emit_init (); - - mono_counters_register ("MonoClass::ref_info_handle count", - MONO_COUNTER_METADATA | MONO_COUNTER_INT, &class_ref_info_handle_count); - -} - -/* - * mono_class_get_ref_info: - * - * Return the type builder corresponding to KLASS, if it exists. - */ -MonoReflectionTypeBuilderHandle -mono_class_get_ref_info (MonoClass *klass) -{ - MONO_REQ_GC_UNSAFE_MODE; - guint32 ref_info_handle = mono_class_get_ref_info_handle (klass); - - if (ref_info_handle == 0) - return MONO_HANDLE_NEW (MonoReflectionTypeBuilder, NULL); - return MONO_HANDLE_CAST (MonoReflectionTypeBuilder, mono_gchandle_get_target_handle (ref_info_handle)); -} - -gboolean -mono_class_has_ref_info (MonoClass *klass) -{ - MONO_REQ_GC_UNSAFE_MODE; - return 0 != mono_class_get_ref_info_handle (klass); -} - -MonoReflectionTypeBuilder* -mono_class_get_ref_info_raw (MonoClass *klass) -{ - /* FIXME callers of mono_class_get_ref_info_raw should use handles */ - MONO_REQ_GC_UNSAFE_MODE; - guint32 ref_info_handle = mono_class_get_ref_info_handle (klass); - - if (ref_info_handle == 0) - return NULL; - return (MonoReflectionTypeBuilder*)mono_gchandle_get_target_internal (ref_info_handle); -} - -void -mono_class_set_ref_info (MonoClass *klass, MonoObjectHandle obj) -{ - MONO_REQ_GC_UNSAFE_MODE; - - guint32 candidate = mono_gchandle_from_handle (obj, FALSE); - guint32 handle = mono_class_set_ref_info_handle (klass, candidate); - ++class_ref_info_handle_count; - - if (handle != candidate) - mono_gchandle_free_internal (candidate); -} - -void -mono_class_free_ref_info (MonoClass *klass) -{ - MONO_REQ_GC_NEUTRAL_MODE; - guint32 handle = mono_class_get_ref_info_handle (klass); - - if (handle) { - mono_gchandle_free_internal (handle); - mono_class_set_ref_info_handle (klass, 0); - } -} - -/** - * mono_custom_attrs_free: - */ -void -mono_custom_attrs_free (MonoCustomAttrInfo *ainfo) -{ - MONO_REQ_GC_NEUTRAL_MODE; - - if (ainfo && !ainfo->cached) - g_free (ainfo); -} - -gboolean -mono_reflected_equal (gconstpointer a, gconstpointer b) -{ - const ReflectedEntry *ea = (const ReflectedEntry *)a; - const ReflectedEntry *eb = (const ReflectedEntry *)b; - - return (ea->item == eb->item) && (ea->refclass == eb->refclass); -} - -guint -mono_reflected_hash (gconstpointer a) { - const ReflectedEntry *ea = (const ReflectedEntry *)a; - /* Combine hashes for item and refclass. Identical to boost's hash_combine */ - guint seed = mono_aligned_addr_hash (ea->item) + 0x9e3779b9; - seed ^= mono_aligned_addr_hash (ea->refclass) + 0x9e3779b9 + (seed << 6) + (seed >> 2); - return seed; -} - -static void -clear_cached_object (MonoDomain *domain, gpointer o, MonoClass *klass) -{ - mono_domain_lock (domain); - if (domain->refobject_hash) { - ReflectedEntry pe; - gpointer orig_pe, orig_value; - - pe.item = o; - pe.refclass = klass; - - if (mono_conc_g_hash_table_lookup_extended (domain->refobject_hash, &pe, &orig_pe, &orig_value)) { - mono_conc_g_hash_table_remove (domain->refobject_hash, &pe); - free_reflected_entry ((ReflectedEntry*)orig_pe); - } - } - mono_domain_unlock (domain); -} - -static void -cleanup_refobject_hash (gpointer key, gpointer value, gpointer user_data) -{ - free_reflected_entry ((ReflectedEntry*)key); -} - -void -mono_reflection_cleanup_domain (MonoDomain *domain) -{ - if (domain->refobject_hash) { - mono_conc_g_hash_table_foreach (domain->refobject_hash, cleanup_refobject_hash, NULL); - mono_conc_g_hash_table_destroy (domain->refobject_hash); - domain->refobject_hash = NULL; - } -} - -/** - * mono_assembly_get_object: - * \param domain an app domain - * \param assembly an assembly - * \returns a \c System.Reflection.Assembly object representing the \c MonoAssembly \p assembly. - */ -MonoReflectionAssembly* -mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly) -{ - HANDLE_FUNCTION_ENTER (); - MonoReflectionAssemblyHandle result; - MONO_ENTER_GC_UNSAFE; - ERROR_DECL (error); - result = mono_assembly_get_object_handle (domain, assembly, error); - mono_error_cleanup (error); /* FIXME new API that doesn't swallow the error */ - MONO_EXIT_GC_UNSAFE; - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -static MonoReflectionAssemblyHandle -assembly_object_construct (MonoDomain *domain, MonoClass *unused_klass, MonoAssembly *assembly, gpointer user_data, MonoError *error) -{ - error_init (error); - MonoReflectionAssemblyHandle res = MONO_HANDLE_CAST (MonoReflectionAssembly, mono_object_new_handle (domain, mono_class_get_mono_assembly_class (), error)); - return_val_if_nok (error, MONO_HANDLE_CAST (MonoReflectionAssembly, NULL_HANDLE)); - MONO_HANDLE_SETVAL (res, assembly, MonoAssembly*, assembly); - return res; -} - -/* - * mono_assembly_get_object_handle: - * @domain: an app domain - * @assembly: an assembly - * - * Return an System.Reflection.Assembly object representing the MonoAssembly @assembly. - */ -MonoReflectionAssemblyHandle -mono_assembly_get_object_handle (MonoDomain *domain, MonoAssembly *assembly, MonoError *error) -{ - error_init (error); - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionAssembly, assembly, NULL, assembly_object_construct, NULL); -} - -/** - * mono_module_get_object: - */ -MonoReflectionModule* -mono_module_get_object (MonoDomain *domain, MonoImage *image) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoReflectionModuleHandle result = mono_module_get_object_handle (domain, image, error); - mono_error_cleanup (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -static MonoReflectionModuleHandle -module_object_construct (MonoDomain *domain, MonoClass *unused_klass, MonoImage *image, gpointer user_data, MonoError *error) -{ - char* basename; - - error_init (error); - MonoReflectionModuleHandle res = MONO_HANDLE_CAST (MonoReflectionModule, mono_object_new_handle (domain, mono_class_get_mono_module_class (), error)); - goto_if_nok (error, fail); - - MONO_HANDLE_SETVAL (res, image, MonoImage *, image); - MonoReflectionAssemblyHandle assm_obj; - assm_obj = mono_assembly_get_object_handle (domain, image->assembly, error); - goto_if_nok (error, fail); - MONO_HANDLE_SET (res, assembly, assm_obj); - - MONO_HANDLE_SET (res, fqname, mono_string_new_handle (domain, image->name, error)); - goto_if_nok (error, fail); - basename = g_path_get_basename (image->name); - MONO_HANDLE_SET (res, name, mono_string_new_handle (domain, basename, error)); - goto_if_nok (error, fail); - MONO_HANDLE_SET (res, scopename, mono_string_new_handle (domain, image->module_name, error)); - goto_if_nok (error, fail); - - g_free (basename); - - guint32 token; - token = 0; - if (image->assembly->image == image) { - token = mono_metadata_make_token (MONO_TABLE_MODULE, 1); - } else { - int i; - if (image->assembly->image->modules) { - for (i = 0; i < image->assembly->image->module_count; i++) { - if (image->assembly->image->modules [i] == image) - token = mono_metadata_make_token (MONO_TABLE_MODULEREF, i + 1); - } - g_assert (token != 0); - } - } - MONO_HANDLE_SETVAL (res, token, guint32, token); - - return res; -fail: - return MONO_HANDLE_CAST (MonoReflectionModule, NULL_HANDLE); -} - -MonoReflectionModuleHandle -mono_module_get_object_handle (MonoDomain *domain, MonoImage *image, MonoError *error) -{ - error_init (error); - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionModule, image, NULL, module_object_construct, NULL); -} - -/** - * mono_module_file_get_object: - */ -MonoReflectionModule* -mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_index) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoReflectionModuleHandle result = mono_module_file_get_object_handle (domain, image, table_index, error); - mono_error_cleanup (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -MonoReflectionModuleHandle -mono_module_file_get_object_handle (MonoDomain *domain, MonoImage *image, int table_index, MonoError *error) -{ - MonoTableInfo *table; - guint32 cols [MONO_FILE_SIZE]; - const char *name; - guint32 i, name_idx; - const char *val; - - error_init (error); - - MonoReflectionModuleHandle res = MONO_HANDLE_CAST (MonoReflectionModule, mono_object_new_handle (domain, mono_class_get_mono_module_class (), error)); - goto_if_nok (error, fail); - - table = &image->tables [MONO_TABLE_FILE]; - g_assert (table_index < table->rows); - mono_metadata_decode_row (table, table_index, cols, MONO_FILE_SIZE); - - MONO_HANDLE_SETVAL (res, image, MonoImage*, NULL); - MonoReflectionAssemblyHandle assm_obj; - assm_obj = mono_assembly_get_object_handle (domain, image->assembly, error); - goto_if_nok (error, fail); - MONO_HANDLE_SET (res, assembly, assm_obj); - name = mono_metadata_string_heap (image, cols [MONO_FILE_NAME]); - - /* Check whenever the row has a corresponding row in the moduleref table */ - table = &image->tables [MONO_TABLE_MODULEREF]; - for (i = 0; i < table->rows; ++i) { - name_idx = mono_metadata_decode_row_col (table, i, MONO_MODULEREF_NAME); - val = mono_metadata_string_heap (image, name_idx); - if (strcmp (val, name) == 0) - MONO_HANDLE_SETVAL (res, image, MonoImage*, image->modules [i]); - } - - MONO_HANDLE_SET (res, fqname, mono_string_new_handle (domain, name, error)); - goto_if_nok (error, fail); - MONO_HANDLE_SET (res, name, mono_string_new_handle (domain, name, error)); - goto_if_nok (error, fail); - MONO_HANDLE_SET (res, scopename, mono_string_new_handle (domain, name, error)); - goto_if_nok (error, fail); - MONO_HANDLE_SETVAL (res, is_resource, MonoBoolean, cols [MONO_FILE_FLAGS] & FILE_CONTAINS_NO_METADATA); - MONO_HANDLE_SETVAL (res, token, guint32, mono_metadata_make_token (MONO_TABLE_FILE, table_index + 1)); - - return res; -fail: - return MONO_HANDLE_CAST (MonoReflectionModule, NULL_HANDLE); -} - -static MonoType* -mono_type_normalize (MonoType *type) -{ - int i; - MonoGenericClass *gclass; - MonoGenericInst *ginst; - MonoClass *gtd; - MonoGenericContainer *gcontainer; - MonoType **argv = NULL; - gboolean is_denorm_gtd = TRUE, requires_rebind = FALSE; - - if (type->type != MONO_TYPE_GENERICINST) - return type; - - gclass = type->data.generic_class; - ginst = gclass->context.class_inst; - if (!ginst->is_open) - return type; - - gtd = gclass->container_class; - gcontainer = mono_class_get_generic_container (gtd); - argv = g_newa (MonoType*, ginst->type_argc); - - for (i = 0; i < ginst->type_argc; ++i) { - MonoType *t = ginst->type_argv [i], *norm; - if (t->type != MONO_TYPE_VAR || t->data.generic_param->num != i || t->data.generic_param->owner != gcontainer) - is_denorm_gtd = FALSE; - norm = mono_type_normalize (t); - argv [i] = norm; - if (norm != t) - requires_rebind = TRUE; - } - - if (is_denorm_gtd) - return type->byref == m_class_get_byval_arg (gtd)->byref ? m_class_get_byval_arg (gtd) : m_class_get_this_arg (gtd); - - if (requires_rebind) { - MonoClass *klass = mono_class_bind_generic_parameters (gtd, ginst->type_argc, argv, gclass->is_dynamic); - return type->byref == m_class_get_byval_arg (klass)->byref ? m_class_get_byval_arg (klass) : m_class_get_this_arg (klass); - } - - return type; -} - -/** - * mono_type_get_object: - * \param domain an app domain - * \param type a type - * \returns A \c System.MonoType object representing the type \p type. - */ -MonoReflectionType* -mono_type_get_object (MonoDomain *domain, MonoType *type) -{ - MonoReflectionType *ret; - MONO_ENTER_GC_UNSAFE; - ERROR_DECL (error); - ret = mono_type_get_object_checked (domain, type, error); - mono_error_cleanup (error); - MONO_EXIT_GC_UNSAFE; - return ret; -} - -MonoReflectionType* -mono_type_get_object_checked (MonoDomain *domain, MonoType *type, MonoError *error) -{ - MonoType *norm_type; - MonoReflectionType *res; - MonoClass *klass; - - error_init (error); - - g_assert (type != NULL); - klass = mono_class_from_mono_type_internal (type); - - /*we must avoid using @type as it might have come - * from a mono_metadata_type_dup and the caller - * expects that is can be freed. - * Using the right type from - */ - type = m_class_get_byval_arg (klass)->byref == type->byref ? m_class_get_byval_arg (klass) : m_class_get_this_arg (klass); - - /* void is very common */ - if (type->type == MONO_TYPE_VOID && domain->typeof_void) - return (MonoReflectionType*)domain->typeof_void; - - /* - * If the vtable of the given class was already created, we can use - * the MonoType from there and avoid all locking and hash table lookups. - * - * We cannot do this for TypeBuilders as mono_reflection_create_runtime_class expects - * that the resulting object is different. - */ - if (type == m_class_get_byval_arg (klass) && !image_is_dynamic (m_class_get_image (klass))) { - MonoVTable *vtable = mono_class_try_get_vtable (domain, klass); - if (vtable && vtable->type) - return (MonoReflectionType *)vtable->type; - } - - mono_loader_lock (); /*FIXME mono_class_init_internal and mono_class_vtable acquire it*/ - mono_domain_lock (domain); - if (!domain->type_hash) - domain->type_hash = mono_g_hash_table_new_type ((GHashFunc)mono_metadata_type_hash, - (GCompareFunc)mono_metadata_type_equal, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Reflection Type Table"); - if ((res = (MonoReflectionType *)mono_g_hash_table_lookup (domain->type_hash, type))) { - mono_domain_unlock (domain); - mono_loader_unlock (); - return res; - } - - /*Types must be normalized so a generic instance of the GTD get's the same inner type. - * For example in: Foo<A,B>; Bar<A> : Foo<A, Bar<A>> - * The second Bar will be encoded a generic instance of Bar with <A> as parameter. - * On all other places, Bar<A> will be encoded as the GTD itself. This is an implementation - * artifact of how generics are encoded and should be transparent to managed code so we - * need to weed out this diference when retrieving managed System.Type objects. - */ - norm_type = mono_type_normalize (type); - if (norm_type != type) { - res = mono_type_get_object_checked (domain, norm_type, error); - if (!mono_error_ok (error)) { - mono_domain_unlock (domain); - mono_loader_unlock (); - return NULL; - } - mono_g_hash_table_insert (domain->type_hash, type, res); - mono_domain_unlock (domain); - mono_loader_unlock (); - return res; - } - - if ((type->type == MONO_TYPE_GENERICINST) && type->data.generic_class->is_dynamic && !m_class_was_typebuilder (type->data.generic_class->container_class)) { - /* This can happen if a TypeBuilder for a generic class K<T,U> - * had reflection_create_generic_class) called on it, but not - * ves_icall_TypeBuilder_create_runtime_class. This can happen - * if the K`2 is refernced from a generic instantiation - * (e.g. K<int,string>) that appears as type argument - * (e.g. Dict<string,K<int,string>>), field (e.g. K<int,string> - * Foo) or method signature, parent class or any of the above - * in a nested class of some other TypeBuilder. Such an - * occurrence caused mono_reflection_type_get_handle to be - * called on the sre generic instance (K<int,string>) which - * required the container_class for the generic class K`2 to be - * set up, but the remainder of class construction for K`2 has - * not been done. */ - char * full_name = mono_type_get_full_name (klass); - /* I would have expected ReflectionTypeLoadException, but evidently .NET throws TLE in this case. */ - mono_error_set_type_load_class (error, klass, "TypeBuilder.CreateType() not called for generic class %s", full_name); - g_free (full_name); - mono_domain_unlock (domain); - mono_loader_unlock (); - return NULL; - } - - if (mono_class_has_ref_info (klass) && !m_class_was_typebuilder (klass) && !type->byref) { - mono_domain_unlock (domain); - mono_loader_unlock (); - return &mono_class_get_ref_info_raw (klass)->type; /* FIXME use handles */ - } - /* This is stored in vtables/JITted code so it has to be pinned */ - res = (MonoReflectionType *)mono_object_new_pinned (domain, mono_defaults.runtimetype_class, error); - if (!mono_error_ok (error)) { - mono_domain_unlock (domain); - mono_loader_unlock (); - return NULL; - } - - res->type = type; - mono_g_hash_table_insert (domain->type_hash, type, res); - - if (type->type == MONO_TYPE_VOID) - domain->typeof_void = (MonoObject*)res; - - mono_domain_unlock (domain); - mono_loader_unlock (); - return res; -} - -MonoReflectionTypeHandle -mono_type_get_object_handle (MonoDomain *domain, MonoType *type, MonoError *error) -{ - /* NOTE: We happen to know that mono_type_get_object_checked returns - * pinned objects, so we can just wrap its return value in a handle for - * uniformity. If it ever starts returning unpinned, objects, this - * implementation would need to change! - */ - return MONO_HANDLE_NEW (MonoReflectionType, mono_type_get_object_checked (domain, type, error)); -} - -/** - * mono_method_get_object: - * \param domain an app domain - * \param method a method - * \param refclass the reflected type (can be NULL) - * \returns A \c System.Reflection.MonoMethod object representing the method \p method. - */ -MonoReflectionMethod* -mono_method_get_object (MonoDomain *domain, MonoMethod *method, MonoClass *refclass) -{ - HANDLE_FUNCTION_ENTER (); - MonoReflectionMethodHandle ret; - MONO_ENTER_GC_UNSAFE; - ERROR_DECL (error); - ret = mono_method_get_object_handle (domain, method, refclass, error); - mono_error_cleanup (error); - MONO_EXIT_GC_UNSAFE; - HANDLE_FUNCTION_RETURN_OBJ (ret); -} - -static MonoReflectionMethodHandle -method_object_construct (MonoDomain *domain, MonoClass *refclass, MonoMethod *method, gpointer user_data, MonoError *error) -{ - error_init (error); - g_assert (refclass != NULL); - /* - * We use the same C representation for methods and constructors, but the type - * name in C# is different. - */ - MonoClass *klass; - - error_init (error); - - if (*method->name == '.' && (strcmp (method->name, ".ctor") == 0 || strcmp (method->name, ".cctor") == 0)) { - klass = mono_class_get_mono_cmethod_class (); - } - else { - klass = mono_class_get_mono_method_class (); - } - MonoReflectionMethodHandle ret = MONO_HANDLE_CAST (MonoReflectionMethod, mono_object_new_handle (domain, klass, error)); - goto_if_nok (error, fail); - MONO_HANDLE_SETVAL (ret, method, MonoMethod*, method); - - MonoReflectionTypeHandle rt; - rt = mono_type_get_object_handle (domain, m_class_get_byval_arg (refclass), error); - goto_if_nok (error, fail); - - MONO_HANDLE_SET (ret, reftype, rt); - - return ret; - -fail: - return MONO_HANDLE_CAST (MonoReflectionMethod, NULL_HANDLE); -} - -/* - * mono_method_get_object_handle: - * @domain: an app domain - * @method: a method - * @refclass: the reflected type (can be NULL) - * @error: set on error. - * - * Return an System.Reflection.MonoMethod object representing the method @method. - * Returns NULL and sets @error on error. - */ -MonoReflectionMethodHandle -mono_method_get_object_handle (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error) -{ - error_init (error); - if (!refclass) - refclass = method->klass; - - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionMethod, method, refclass, method_object_construct, NULL); -} -/* - * mono_method_get_object_checked: - * @domain: an app domain - * @method: a method - * @refclass: the reflected type (can be NULL) - * @error: set on error. - * - * Return an System.Reflection.MonoMethod object representing the method @method. - * Returns NULL and sets @error on error. - */ -MonoReflectionMethod* -mono_method_get_object_checked (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - MonoReflectionMethodHandle result = mono_method_get_object_handle (domain, method, refclass, error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -/* - * mono_method_clear_object: - * - * Clear the cached reflection objects for the dynamic method METHOD. - */ -void -mono_method_clear_object (MonoDomain *domain, MonoMethod *method) -{ - MonoClass *klass; - g_assert (method_is_dynamic (method)); - - klass = method->klass; - while (klass) { - clear_cached_object (domain, method, klass); - klass = m_class_get_parent (klass); - } - /* Added by mono_param_get_objects () */ - clear_cached_object (domain, &(method->signature), NULL); - klass = method->klass; - while (klass) { - clear_cached_object (domain, &(method->signature), klass); - klass = m_class_get_parent (klass); - } -} - -/** - * mono_field_get_object: - * \param domain an app domain - * \param klass a type - * \param field a field - * \returns A \c System.Reflection.MonoField object representing the field \p field - * in class \p klass. - */ -MonoReflectionField* -mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoReflectionFieldHandle result = mono_field_get_object_handle (domain, klass, field, error); - mono_error_cleanup (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -static MonoReflectionFieldHandle -field_object_construct (MonoDomain *domain, MonoClass *klass, MonoClassField *field, gpointer user_data, MonoError *error) -{ - error_init (error); - - MonoReflectionFieldHandle res = MONO_HANDLE_CAST (MonoReflectionField, mono_object_new_handle (domain, mono_class_get_mono_field_class (), error)); - goto_if_nok (error, fail); - MONO_HANDLE_SETVAL (res, klass, MonoClass *, klass); - MONO_HANDLE_SETVAL (res, field, MonoClassField *, field); - MonoStringHandle name; - name = mono_string_new_handle (domain, mono_field_get_name (field), error); - goto_if_nok (error, fail); - MONO_HANDLE_SET (res, name, name); - - if (field->type) { - MonoReflectionTypeHandle rt = mono_type_get_object_handle (domain, field->type, error); - goto_if_nok (error, fail); - - MONO_HANDLE_SET (res, type, rt); - } - MONO_HANDLE_SETVAL (res, attrs, guint32, mono_field_get_flags (field)); - return res; -fail: - return MONO_HANDLE_CAST (MonoReflectionField, NULL_HANDLE); -} - -/* - * mono_field_get_object_handle: - * @domain: an app domain - * @klass: a type - * @field: a field - * @error: set on error - * - * Return an System.Reflection.MonoField object representing the field @field - * in class @klass. On error, returns NULL and sets @error. - */ -MonoReflectionFieldHandle -mono_field_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoClassField *field, MonoError *error) -{ - error_init (error); - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionField, field, klass, field_object_construct, NULL); -} - - -/* - * mono_field_get_object_checked: - * @domain: an app domain - * @klass: a type - * @field: a field - * @error: set on error - * - * Return an System.Reflection.MonoField object representing the field @field - * in class @klass. On error, returns NULL and sets @error. - */ -MonoReflectionField* -mono_field_get_object_checked (MonoDomain *domain, MonoClass *klass, MonoClassField *field, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - MonoReflectionFieldHandle result = mono_field_get_object_handle (domain, klass, field, error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -/* - * mono_property_get_object: - * @domain: an app domain - * @klass: a type - * @property: a property - * - * Return an System.Reflection.MonoProperty object representing the property @property - * in class @klass. - */ -MonoReflectionProperty* -mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoReflectionPropertyHandle result = mono_property_get_object_handle (domain, klass, property, error); - mono_error_cleanup (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -static MonoReflectionPropertyHandle -property_object_construct (MonoDomain *domain, MonoClass *klass, MonoProperty *property, gpointer user_data, MonoError *error) -{ - error_init (error); - - MonoReflectionPropertyHandle res = MONO_HANDLE_CAST (MonoReflectionProperty, mono_object_new_handle (domain, mono_class_get_mono_property_class (), error)); - goto_if_nok (error, fail); - MONO_HANDLE_SETVAL (res, klass, MonoClass *, klass); - MONO_HANDLE_SETVAL (res, property, MonoProperty *, property); - return res; -fail: - return MONO_HANDLE_CAST (MonoReflectionProperty, NULL_HANDLE); -} - -/** - * mono_property_get_object_handle: - * \param domain an app domain - * \param klass a type - * \param property a property - * \param error set on error - * - * \returns A \c System.Reflection.MonoProperty object representing the property \p property - * in class \p klass. On error returns NULL and sets \p error. - */ -MonoReflectionPropertyHandle -mono_property_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoProperty *property, MonoError *error) -{ - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionProperty, property, klass, property_object_construct, NULL); -} - -/** - * mono_property_get_object: - * \param domain an app domain - * \param klass a type - * \param property a property - * \param error set on error - * \returns a \c System.Reflection.MonoProperty object representing the property \p property - * in class \p klass. On error returns NULL and sets \p error. - */ -MonoReflectionProperty* -mono_property_get_object_checked (MonoDomain *domain, MonoClass *klass, MonoProperty *property, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - MonoReflectionPropertyHandle res = mono_property_get_object_handle (domain, klass, property, error); - HANDLE_FUNCTION_RETURN_OBJ (res); -} - -/** - * mono_event_get_object: - * \param domain an app domain - * \param klass a type - * \param event a event - * \returns A \c System.Reflection.MonoEvent object representing the event \p event - * in class \p klass. - */ -MonoReflectionEvent* -mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoReflectionEventHandle result = mono_event_get_object_handle (domain, klass, event, error); - mono_error_cleanup (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -static MonoReflectionEventHandle -event_object_construct (MonoDomain *domain, MonoClass *klass, MonoEvent *event, gpointer user_data, MonoError *error) -{ - - error_init (error); - MonoReflectionMonoEventHandle mono_event = MONO_HANDLE_CAST (MonoReflectionMonoEvent, mono_object_new_handle (domain, mono_class_get_mono_event_class (), error)); - if (!is_ok (error)) - return MONO_HANDLE_CAST (MonoReflectionEvent, NULL_HANDLE); - MONO_HANDLE_SETVAL (mono_event, klass, MonoClass* , klass); - MONO_HANDLE_SETVAL (mono_event, event, MonoEvent* , event); - return MONO_HANDLE_CAST (MonoReflectionEvent, mono_event); -} - -/** - * mono_event_get_object_handle: - * \param domain an app domain - * \param klass a type - * \param event a event - * \param error set on error - * \returns a \c System.Reflection.MonoEvent object representing the event \p event - * in class \p klass. On failure sets \p error and returns NULL - */ -MonoReflectionEventHandle -mono_event_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoEvent *event, MonoError *error) -{ - error_init (error); - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionEvent, event, klass, event_object_construct, NULL); -} - - -/** - * mono_get_reflection_missing_object: - * \param domain Domain where the object lives - * - * \returns the \c System.Reflection.Missing.Value singleton object - * (of type \c System.Reflection.Missing). - * - * Used as the value for \c ParameterInfo.DefaultValue when Optional - * is present - */ -static MonoObjectHandle -mono_get_reflection_missing_object (MonoDomain *domain) -{ - ERROR_DECL (error); - static MonoClassField *missing_value_field = NULL; - - if (!missing_value_field) { - MonoClass *missing_klass; - missing_klass = mono_class_get_missing_class (); - mono_class_init_internal (missing_klass); - missing_value_field = mono_class_get_field_from_name_full (missing_klass, "Value", NULL); - g_assert (missing_value_field); - } - /* FIXME change mono_field_get_value_object_checked to return a handle */ - MonoObjectHandle obj = MONO_HANDLE_NEW (MonoObject, mono_field_get_value_object_checked (domain, missing_value_field, NULL, error)); - mono_error_assert_ok (error); - return obj; -} - -static MonoObjectHandle -get_dbnull_object (MonoDomain *domain, MonoError *error) -{ - static MonoClassField *dbnull_value_field = NULL; - - error_init (error); - - if (!dbnull_value_field) { - MonoClass *dbnull_klass; - dbnull_klass = mono_class_get_dbnull_class (); - dbnull_value_field = mono_class_get_field_from_name_full (dbnull_klass, "Value", NULL); - g_assert (dbnull_value_field); - } - /* FIXME change mono_field_get_value_object_checked to return a handle */ - MonoObjectHandle obj = MONO_HANDLE_NEW (MonoObject, mono_field_get_value_object_checked (domain, dbnull_value_field, NULL, error)); - return obj; -} - -static MonoObjectHandle -get_dbnull (MonoDomain *domain, MonoObjectHandle dbnull, MonoError *error) -{ - error_init (error); - if (MONO_HANDLE_IS_NULL (dbnull)) - MONO_HANDLE_ASSIGN (dbnull, get_dbnull_object (domain, error)); - return dbnull; -} - -static MonoObjectHandle -get_reflection_missing (MonoDomain *domain, MonoObjectHandleOut reflection_missing) -{ - if (MONO_HANDLE_IS_NULL (reflection_missing)) - MONO_HANDLE_ASSIGN (reflection_missing, mono_get_reflection_missing_object (domain)); - return reflection_missing; -} - -static gboolean -add_parameter_object_to_array (MonoDomain *domain, MonoMethod *method, MonoObjectHandle member, int idx, const char *name, MonoType *sig_param, guint32 blob_type_enum, const char *blob, MonoMarshalSpec *mspec, MonoObjectHandle missing, MonoObjectHandle dbnull, MonoArrayHandle dest, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - error_init (error); - MonoReflectionParameterHandle param = MONO_HANDLE_CAST (MonoReflectionParameter, mono_object_new_handle (domain, mono_class_get_mono_parameter_info_class (), error)); - goto_if_nok (error, leave); - - MonoReflectionTypeHandle rt; - rt = mono_type_get_object_handle (domain, sig_param, error); - goto_if_nok (error, leave); - - MONO_HANDLE_SET (param, ClassImpl, rt); - - MONO_HANDLE_SET (param, MemberImpl, member); - - MonoStringHandle name_str; - name_str = mono_string_new_handle (domain, name, error); - goto_if_nok (error, leave); - - MONO_HANDLE_SET (param, NameImpl, name_str); - - MONO_HANDLE_SETVAL (param, PositionImpl, gint32, idx); - - MONO_HANDLE_SETVAL (param, AttrsImpl, guint32, sig_param->attrs); - - if (!(sig_param->attrs & PARAM_ATTRIBUTE_HAS_DEFAULT)) { - if (sig_param->attrs & PARAM_ATTRIBUTE_OPTIONAL) - MONO_HANDLE_SET (param, DefaultValueImpl, get_reflection_missing (domain, missing)); - else - MONO_HANDLE_SET (param, DefaultValueImpl, get_dbnull (domain, dbnull, error)); - goto_if_nok (error, leave); - } else { - - MonoType blob_type; - - blob_type.type = (MonoTypeEnum)blob_type_enum; - blob_type.data.klass = NULL; - if (blob_type_enum == MONO_TYPE_CLASS) - blob_type.data.klass = mono_defaults.object_class; - else if ((sig_param->type == MONO_TYPE_VALUETYPE) && m_class_is_enumtype (sig_param->data.klass)) { - /* For enums, types [i] contains the base type */ - - blob_type.type = MONO_TYPE_VALUETYPE; - blob_type.data.klass = mono_class_from_mono_type_internal (sig_param); - } else - blob_type.data.klass = mono_class_from_mono_type_internal (&blob_type); - - MonoObjectHandle default_val_obj = MONO_HANDLE_NEW (MonoObject, mono_get_object_from_blob (domain, &blob_type, blob, error)); /* FIXME make mono_get_object_from_blob return a handle */ - goto_if_nok (error, leave); - MONO_HANDLE_SET (param, DefaultValueImpl, default_val_obj); - - /* Type in the Constant table is MONO_TYPE_CLASS for nulls */ - if (blob_type_enum != MONO_TYPE_CLASS && MONO_HANDLE_IS_NULL(default_val_obj)) { - if (sig_param->attrs & PARAM_ATTRIBUTE_OPTIONAL) - MONO_HANDLE_SET (param, DefaultValueImpl, get_reflection_missing (domain, missing)); - else - MONO_HANDLE_SET (param, DefaultValueImpl, get_dbnull (domain, dbnull, error)); - goto_if_nok (error, leave); - } - } - - if (mspec) { - MonoReflectionMarshalAsAttributeHandle mobj = mono_reflection_marshal_as_attribute_from_marshal_spec (domain, method->klass, mspec, error); - goto_if_nok (error, leave); - MONO_HANDLE_SET (param, MarshalAsImpl, mobj); - } - - MONO_HANDLE_ARRAY_SETREF (dest, idx, param); - -leave: - HANDLE_FUNCTION_RETURN_VAL (is_ok (error)); -} - -static MonoArrayHandle -param_objects_construct (MonoDomain *domain, MonoClass *refclass, MonoMethodSignature **addr_of_sig, gpointer user_data, MonoError *error) -{ - MonoMethod *method = (MonoMethod*)user_data; - MonoMethodSignature *sig = *addr_of_sig; /* see note in mono_param_get_objects_internal */ - - MonoArrayHandle res = MONO_HANDLE_NEW (MonoArray, NULL); - char **names = NULL, **blobs = NULL; - guint32 *types = NULL; - MonoMarshalSpec **mspecs = NULL; - int i; - - error_init (error); - - MonoReflectionMethodHandle member = mono_method_get_object_handle (domain, method, refclass, error); - goto_if_nok (error, leave); - names = g_new (char *, sig->param_count); - mono_method_get_param_names (method, (const char **) names); - - mspecs = g_new (MonoMarshalSpec*, sig->param_count + 1); - mono_method_get_marshal_info (method, mspecs); - - res = mono_array_new_handle (domain, mono_class_get_mono_parameter_info_class (), sig->param_count, error); - if (MONO_HANDLE_IS_NULL (res)) - goto leave; - - gboolean any_default_value; - any_default_value = FALSE; - for (i = 0; i < sig->param_count; ++i) { - if ((sig->params [i]->attrs & PARAM_ATTRIBUTE_HAS_DEFAULT) != 0) { - any_default_value = TRUE; - break; - } - } - if (any_default_value) { - blobs = g_new0 (char *, sig->param_count); - types = g_new0 (guint32, sig->param_count); - get_default_param_value_blobs (method, blobs, types); - } - - /* Handles missing and dbnull are assigned in add_parameter_object_to_array when needed */ - MonoObjectHandle missing; - missing = MONO_HANDLE_NEW (MonoObject, NULL); - MonoObjectHandle dbnull; - dbnull = MONO_HANDLE_NEW (MonoObject, NULL); - for (i = 0; i < sig->param_count; ++i) { - if (!add_parameter_object_to_array (domain, method, MONO_HANDLE_CAST(MonoObject, member), i, names[i], sig->params[i], types ? types[i] : 0, blobs ? blobs[i] : NULL, mspecs [i + 1], missing, dbnull, res, error)) - goto leave; - } - -leave: - g_free (names); - g_free (blobs); - g_free (types); - - if (sig && mspecs) { - for (i = sig->param_count; i >= 0; i--) { - if (mspecs [i]) - mono_metadata_free_marshal_spec (mspecs [i]); - } - } - g_free (mspecs); - - if (!is_ok (error)) - return NULL_HANDLE_ARRAY; - - return res; -} - -/* - * mono_param_get_objects: - * @domain: an app domain - * @method: a method - * - * Return an System.Reflection.ParameterInfo array object representing the parameters - * in the method @method. - */ -MonoArrayHandle -mono_param_get_objects_internal (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error) -{ - error_init (error); - - /* side-effect: sets method->signature non-NULL on success */ - MonoMethodSignature *sig = mono_method_signature_checked (method, error); - goto_if_nok (error, fail); - - if (!sig->param_count) { - MonoArrayHandle res = mono_array_new_handle (domain, mono_class_get_mono_parameter_info_class (), 0, error); - goto_if_nok (error, fail); - - return res; - } - - /* Note: the cache is based on the address of the signature into the method - * since we already cache MethodInfos with the method as keys. - */ - return CHECK_OR_CONSTRUCT_HANDLE (MonoArray, &method->signature, refclass, param_objects_construct, method); -fail: - return MONO_HANDLE_NEW (MonoArray, NULL); -} - -/** - * mono_param_get_objects: - */ -MonoArray* -mono_param_get_objects (MonoDomain *domain, MonoMethod *method) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoArrayHandle result = mono_param_get_objects_internal (domain, method, NULL, error); - mono_error_assert_ok (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -static gboolean -add_local_var_info_to_array (MonoDomain *domain, MonoMethodHeader *header, int idx, MonoArrayHandle dest, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - error_init (error); - MonoReflectionLocalVariableInfoHandle info = MONO_HANDLE_CAST (MonoReflectionLocalVariableInfo, mono_object_new_handle (domain, mono_class_get_local_variable_info_class (), error)); - goto_if_nok (error, leave); - - MonoReflectionTypeHandle rt; - rt = mono_type_get_object_handle (domain, header->locals [idx], error); - goto_if_nok (error, leave); - - MONO_HANDLE_SET (info, local_type, rt); - - MONO_HANDLE_SETVAL (info, is_pinned, MonoBoolean, header->locals [idx]->pinned); - MONO_HANDLE_SETVAL (info, local_index, guint16, idx); - - MONO_HANDLE_ARRAY_SETREF (dest, idx, info); - -leave: - HANDLE_FUNCTION_RETURN_VAL (is_ok (error)); -} - -static gboolean -add_exception_handling_clause_to_array (MonoDomain *domain, MonoMethodHeader *header, int idx, MonoArrayHandle dest, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - error_init (error); - MonoReflectionExceptionHandlingClauseHandle info = MONO_HANDLE_CAST (MonoReflectionExceptionHandlingClause, mono_object_new_handle (domain, mono_class_get_exception_handling_clause_class (), error)); - goto_if_nok (error, leave); - MonoExceptionClause *clause; - clause = &header->clauses [idx]; - - MONO_HANDLE_SETVAL (info, flags, gint32, clause->flags); - MONO_HANDLE_SETVAL (info, try_offset, gint32, clause->try_offset); - MONO_HANDLE_SETVAL (info, try_length, gint32, clause->try_len); - MONO_HANDLE_SETVAL (info, handler_offset, gint32, clause->handler_offset); - MONO_HANDLE_SETVAL (info, handler_length, gint32, clause->handler_len); - if (clause->flags == MONO_EXCEPTION_CLAUSE_FILTER) - MONO_HANDLE_SETVAL (info, filter_offset, gint32, clause->data.filter_offset); - else if (clause->data.catch_class) { - MonoReflectionTypeHandle rt = mono_type_get_object_handle (mono_domain_get (), m_class_get_byval_arg (clause->data.catch_class), error); - goto_if_nok (error, leave); - - MONO_HANDLE_SET (info, catch_type, rt); - } - - MONO_HANDLE_ARRAY_SETREF (dest, idx, info); -leave: - HANDLE_FUNCTION_RETURN_VAL (is_ok (error)); -} - -/** - * mono_method_body_get_object: - * \param domain an app domain - * \param method a method - * \return A \c System.Reflection.MethodBody object representing the method \p method. - */ -MonoReflectionMethodBody* -mono_method_body_get_object (MonoDomain *domain, MonoMethod *method) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoReflectionMethodBodyHandle result = mono_method_body_get_object_handle (domain, method, error); - mono_error_cleanup (error); - HANDLE_FUNCTION_RETURN_OBJ (result); -} - -/* WARNING: This method can return NULL on success */ -static MonoReflectionMethodBodyHandle -method_body_object_construct (MonoDomain *domain, MonoClass *unused_class, MonoMethod *method, gpointer user_data, MonoError *error) -{ - MonoMethodHeader *header = NULL; - MonoImage *image; - guint32 method_rva, local_var_sig_token; - char *ptr; - unsigned char format, flags; - int i; - gpointer params [6]; - MonoBoolean init_locals_param; - gint32 sig_token_param; - gint32 max_stack_param; - - error_init (error); - - /* for compatibility with .net */ - if (method_is_dynamic (method)) { - mono_error_set_generic_error (error, "System", "InvalidOperationException", ""); - goto fail; - } - - image = m_class_get_image (method->klass); - if ((method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) || - (method->flags & METHOD_ATTRIBUTE_ABSTRACT) || - (method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) || - (image->raw_data && image->raw_data [1] != 'Z') || - (method->iflags & METHOD_IMPL_ATTRIBUTE_RUNTIME)) - return MONO_HANDLE_CAST (MonoReflectionMethodBody, NULL_HANDLE); - - header = mono_method_get_header_checked (method, error); - goto_if_nok (error, fail); - - if (!image_is_dynamic (image)) { - /* Obtain local vars signature token */ - method_rva = mono_metadata_decode_row_col (&image->tables [MONO_TABLE_METHOD], mono_metadata_token_index (method->token) - 1, MONO_METHOD_RVA); - ptr = mono_image_rva_map (image, method_rva); - flags = *(const unsigned char *) ptr; - format = flags & METHOD_HEADER_FORMAT_MASK; - switch (format){ - case METHOD_HEADER_TINY_FORMAT: - local_var_sig_token = 0; - break; - case METHOD_HEADER_FAT_FORMAT: - ptr += 2; - ptr += 2; - ptr += 4; - local_var_sig_token = read32 (ptr); - break; - default: - g_assert_not_reached (); - } - } else - local_var_sig_token = 0; //FIXME - - static MonoMethod *ctor; - if (!ctor) { - MonoMethod *tmp = mono_class_get_method_from_name_checked (mono_class_get_method_body_class (), ".ctor", 6, 0, error); - mono_error_assert_ok (error); - g_assert (tmp); - - mono_memory_barrier (); - ctor = tmp; - } - - MonoReflectionMethodBodyHandle ret; - ret = MONO_HANDLE_CAST (MonoReflectionMethodBody, mono_object_new_handle (domain, mono_class_get_method_body_class (), error)); - goto_if_nok (error, fail); - - MonoArrayHandle il_arr; - il_arr = mono_array_new_handle (domain, mono_defaults.byte_class, header->code_size, error); - goto_if_nok (error, fail); - uint32_t il_gchandle; - guint8* il_data; - il_data = MONO_ARRAY_HANDLE_PIN (il_arr, guint8, 0, &il_gchandle); - memcpy (il_data, header->code, header->code_size); - mono_gchandle_free_internal (il_gchandle); - - /* Locals */ - MonoArrayHandle locals_arr; - locals_arr = mono_array_new_handle (domain, mono_class_get_local_variable_info_class (), header->num_locals, error); - goto_if_nok (error, fail); - for (i = 0; i < header->num_locals; ++i) { - if (!add_local_var_info_to_array (domain, header, i, locals_arr, error)) - goto fail; - } - - /* Exceptions */ - MonoArrayHandle exn_clauses; - exn_clauses = mono_array_new_handle (domain, mono_class_get_exception_handling_clause_class (), header->num_clauses, error); - goto_if_nok (error, fail); - for (i = 0; i < header->num_clauses; ++i) { - if (!add_exception_handling_clause_to_array (domain, header, i, exn_clauses, error)) - goto fail; - } - - /* - MethodBody (ExceptionHandlingClause[] clauses, LocalVariableInfo[] locals, - byte[] il, bool init_locals, int sig_token, int max_stack) - */ - init_locals_param = header->init_locals; - sig_token_param = local_var_sig_token; - max_stack_param = header->max_stack; - mono_metadata_free_mh (header); - header = NULL; - - params [0] = MONO_HANDLE_RAW (exn_clauses); - params [1] = MONO_HANDLE_RAW (locals_arr); - params [2] = MONO_HANDLE_RAW (il_arr); - params [3] = &init_locals_param; - params [4] = &sig_token_param; - params [5] = &max_stack_param; - mono_runtime_invoke_handle_void (ctor, MONO_HANDLE_CAST (MonoObject, ret), params, error); - mono_error_assert_ok (error); - - return ret; -fail: - if (header) - mono_metadata_free_mh (header); - return MONO_HANDLE_CAST (MonoReflectionMethodBody, NULL_HANDLE); -} - -/** - * mono_method_body_get_object_handle: - * \param domain an app domain - * \param method a method - * \param error set on error - * \returns a \c System.Reflection.MethodBody object representing the - * method \p method. On failure, returns NULL and sets \p error. - */ -MonoReflectionMethodBodyHandle -mono_method_body_get_object_handle (MonoDomain *domain, MonoMethod *method, MonoError *error) -{ - error_init (error); - return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionMethodBody, method, NULL, method_body_object_construct, NULL); -} - - -/** - * mono_get_dbnull_object: - * \param domain Domain where the object lives - * Used as the value for \c ParameterInfo.DefaultValue - * \returns the \c System.DBNull.Value singleton object - */ -MonoObject * -mono_get_dbnull_object (MonoDomain *domain) -{ - HANDLE_FUNCTION_ENTER (); - ERROR_DECL (error); - MonoObjectHandle obj = get_dbnull_object (domain, error); - mono_error_assert_ok (error); - HANDLE_FUNCTION_RETURN_OBJ (obj); -} - -static void -get_default_param_value_blobs (MonoMethod *method, char **blobs, guint32 *types) -{ - guint32 param_index, i, lastp, crow = 0; - guint32 param_cols [MONO_PARAM_SIZE], const_cols [MONO_CONSTANT_SIZE]; - gint32 idx; - - MonoClass *klass = method->klass; - MonoImage *image = m_class_get_image (klass); - MonoMethodSignature *methodsig = mono_method_signature_internal (method); - - MonoTableInfo *constt; - MonoTableInfo *methodt; - MonoTableInfo *paramt; - - if (!methodsig->param_count) - return; - - mono_class_init_internal (klass); - - if (image_is_dynamic (image)) { - MonoReflectionMethodAux *aux; - if (method->is_inflated) - method = ((MonoMethodInflated*)method)->declaring; - aux = (MonoReflectionMethodAux *)g_hash_table_lookup (((MonoDynamicImage*)m_class_get_image (method->klass))->method_aux_hash, method); - if (aux && aux->param_defaults) { - memcpy (blobs, &(aux->param_defaults [1]), methodsig->param_count * sizeof (char*)); - memcpy (types, &(aux->param_default_types [1]), methodsig->param_count * sizeof (guint32)); - } - return; - } - - methodt = &image->tables [MONO_TABLE_METHOD]; - paramt = &image->tables [MONO_TABLE_PARAM]; - constt = &image->tables [MONO_TABLE_CONSTANT]; - - idx = mono_method_get_index (method) - 1; - g_assert (idx != -1); - - param_index = mono_metadata_decode_row_col (methodt, idx, MONO_METHOD_PARAMLIST); - if (idx + 1 < methodt->rows) - lastp = mono_metadata_decode_row_col (methodt, idx + 1, MONO_METHOD_PARAMLIST); - else - lastp = paramt->rows + 1; - - for (i = param_index; i < lastp; ++i) { - guint32 paramseq; - - mono_metadata_decode_row (paramt, i - 1, param_cols, MONO_PARAM_SIZE); - paramseq = param_cols [MONO_PARAM_SEQUENCE]; - - if (!(param_cols [MONO_PARAM_FLAGS] & PARAM_ATTRIBUTE_HAS_DEFAULT)) - continue; - - crow = mono_metadata_get_constant_index (image, MONO_TOKEN_PARAM_DEF | i, crow + 1); - if (!crow) { - continue; - } - - mono_metadata_decode_row (constt, crow - 1, const_cols, MONO_CONSTANT_SIZE); - blobs [paramseq - 1] = (char *)mono_metadata_blob_heap (image, const_cols [MONO_CONSTANT_VALUE]); - types [paramseq - 1] = const_cols [MONO_CONSTANT_TYPE]; - } - - return; -} - -MonoObject * -mono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob, MonoError *error) -{ - void *retval; - MonoClass *klass; - MonoObject *object; - MonoType *basetype = type; - - error_init (error); - - if (!blob) - return NULL; - - klass = mono_class_from_mono_type_internal (type); - if (m_class_is_valuetype (klass)) { - object = mono_object_new_checked (domain, klass, error); - return_val_if_nok (error, NULL); - retval = mono_object_get_data (object); - if (m_class_is_enumtype (klass)) - basetype = mono_class_enum_basetype_internal (klass); - } else { - retval = &object; - } - - if (!mono_get_constant_value_from_blob (domain, basetype->type, blob, retval, error)) - return object; - else - return NULL; -} - -static int -assembly_name_to_aname (MonoAssemblyName *assembly, char *p) { - int found_sep; - char *s; - gboolean quoted = FALSE; - - memset (assembly, 0, sizeof (MonoAssemblyName)); - assembly->culture = ""; - memset (assembly->public_key_token, 0, MONO_PUBLIC_KEY_TOKEN_LENGTH); - - if (*p == '"') { - quoted = TRUE; - p++; - } - assembly->name = p; - while (*p && (isalnum (*p) || *p == '.' || *p == '-' || *p == '_' || *p == '$' || *p == '@' || g_ascii_isspace (*p))) - p++; - if (quoted) { - if (*p != '"') - return 1; - *p = 0; - p++; - } - if (*p != ',') - return 1; - *p = 0; - /* Remove trailing whitespace */ - s = p - 1; - while (*s && g_ascii_isspace (*s)) - *s-- = 0; - p ++; - while (g_ascii_isspace (*p)) - p++; - while (*p) { - if (*p == 'V' && g_ascii_strncasecmp (p, "Version=", 8) == 0) { - p += 8; - assembly->major = strtoul (p, &s, 10); - if (s == p || *s != '.') - return 1; - p = ++s; - assembly->minor = strtoul (p, &s, 10); - if (s == p || *s != '.') - return 1; - p = ++s; - assembly->build = strtoul (p, &s, 10); - if (s == p || *s != '.') - return 1; - p = ++s; - assembly->revision = strtoul (p, &s, 10); - if (s == p) - return 1; - p = s; - } else if (*p == 'C' && g_ascii_strncasecmp (p, "Culture=", 8) == 0) { - p += 8; - if (g_ascii_strncasecmp (p, "neutral", 7) == 0) { - assembly->culture = ""; - p += 7; - } else { - assembly->culture = p; - while (*p && *p != ',') { - p++; - } - } - } else if (*p == 'P' && g_ascii_strncasecmp (p, "PublicKeyToken=", 15) == 0) { - p += 15; - if (strncmp (p, "null", 4) == 0) { - p += 4; - } else { - int len; - gchar *start = p; - while (*p && *p != ',') { - p++; - } - len = (p - start + 1); - if (len > MONO_PUBLIC_KEY_TOKEN_LENGTH) - len = MONO_PUBLIC_KEY_TOKEN_LENGTH; - g_strlcpy ((char*)assembly->public_key_token, start, len); - } - } else { - while (*p && *p != ',') - p++; - } - found_sep = 0; - while (g_ascii_isspace (*p) || *p == ',') { - *p++ = 0; - found_sep = 1; - continue; - } - /* failed */ - if (!found_sep) - return 1; - } - - return 0; -} - -/* - * mono_reflection_parse_type: - * @name: type name - * - * Parse a type name as accepted by the GetType () method and output the info - * extracted in the info structure. - * the name param will be mangled, so, make a copy before passing it to this function. - * The fields in info will be valid until the memory pointed to by name is valid. - * - * See also mono_type_get_name () below. - * - * Returns: 0 on parse error. - */ -static int -_mono_reflection_parse_type (char *name, char **endptr, gboolean is_recursed, - MonoTypeNameParse *info) -{ - char *start, *p, *w, *last_point, *startn; - int in_modifiers = 0; - int isbyref = 0, rank = 0, isptr = 0; - - start = p = w = name; - - memset (info, 0, sizeof (MonoTypeNameParse)); - - /* last_point separates the namespace from the name */ - last_point = NULL; - /* Skips spaces */ - while (*p == ' ') p++, start++, w++, name++; - - while (*p) { - switch (*p) { - case '+': - *p = 0; /* NULL terminate the name */ - startn = p + 1; - info->nested = g_list_append (info->nested, startn); - /* we have parsed the nesting namespace + name */ - if (info->name) - break; - if (last_point) { - info->name_space = start; - *last_point = 0; - info->name = last_point + 1; - } else { - info->name_space = (char *)""; - info->name = start; - } - break; - case '.': - last_point = p; - break; - case '\\': - ++p; - break; - case '&': - case '*': - case '[': - case ',': - case ']': - in_modifiers = 1; - break; - default: - break; - } - if (in_modifiers) - break; - // *w++ = *p++; - p++; - } - - if (!info->name) { - if (last_point) { - info->name_space = start; - *last_point = 0; - info->name = last_point + 1; - } else { - info->name_space = (char *)""; - info->name = start; - } - } - while (*p) { - switch (*p) { - case '&': - if (isbyref) /* only one level allowed by the spec */ - return 0; - isbyref = 1; - isptr = 0; - info->modifiers = g_list_append (info->modifiers, GUINT_TO_POINTER (0)); - *p++ = 0; - break; - case '*': - if (isbyref) /* pointer to ref not okay */ - return 0; - info->modifiers = g_list_append (info->modifiers, GUINT_TO_POINTER (-1)); - isptr = 1; - *p++ = 0; - break; - case '[': - if (isbyref) /* array of ref and generic ref are not okay */ - return 0; - //Decide if it's an array of a generic argument list - *p++ = 0; - - if (!*p) //XXX test - return 0; - if (*p == ',' || *p == '*' || *p == ']') { //array - gboolean bounded = FALSE; - isptr = 0; - rank = 1; - while (*p) { - if (*p == ']') - break; - if (*p == ',') - rank++; - else if (*p == '*') /* '*' means unknown lower bound */ - bounded = TRUE; - else - return 0; - ++p; - } - if (*p++ != ']') - return 0; - /* bounded only allowed when rank == 1 */ - if (bounded && rank > 1) - return 0; - /* n.b. bounded needs both modifiers: -2 == bounded, 1 == rank 1 array */ - if (bounded) - info->modifiers = g_list_append (info->modifiers, GUINT_TO_POINTER (-2)); - info->modifiers = g_list_append (info->modifiers, GUINT_TO_POINTER (rank)); - } else { - if (rank || isptr) /* generic args after array spec or ptr*/ //XXX test - return 0; - isptr = 0; - info->type_arguments = g_ptr_array_new (); - while (*p) { - MonoTypeNameParse *subinfo = g_new0 (MonoTypeNameParse, 1); - gboolean fqname = FALSE; - - g_ptr_array_add (info->type_arguments, subinfo); - - while (*p == ' ') p++; - if (*p == '[') { - p++; - fqname = TRUE; - } - - if (!_mono_reflection_parse_type (p, &p, TRUE, subinfo)) - return 0; - - /*MS is lenient on [] delimited parameters that aren't fqn - and F# uses them.*/ - if (fqname && (*p != ']')) { - char *aname; - - if (*p != ',') - return 0; - *p++ = 0; - - aname = p; - while (*p && (*p != ']')) - p++; - - if (*p != ']') - return 0; - - *p++ = 0; - while (*aname) { - if (g_ascii_isspace (*aname)) { - ++aname; - continue; - } - break; - } - if (!*aname || - !assembly_name_to_aname (&subinfo->assembly, aname)) - return 0; - } else if (fqname && (*p == ']')) { - *p++ = 0; - } - if (*p == ']') { - *p++ = 0; - break; - } else if (!*p) { - return 0; - } - *p++ = 0; - } - } - break; - case ']': - if (is_recursed) - goto end; - return 0; - case ',': - if (is_recursed) - goto end; - *p++ = 0; - while (*p) { - if (g_ascii_isspace (*p)) { - ++p; - continue; - } - break; - } - if (!*p) - return 0; /* missing assembly name */ - if (!assembly_name_to_aname (&info->assembly, p)) - return 0; - break; - default: - return 0; - } - if (info->assembly.name) - break; - } - // *w = 0; /* terminate class name */ - end: - if (!info->name || !*info->name) - return 0; - if (endptr) - *endptr = p; - /* add other consistency checks */ - return 1; -} - - -/** - * mono_identifier_unescape_type_name_chars: - * \param identifier the display name of a mono type - * - * \returns The name in internal form, that is without escaping backslashes. - * - * The string is modified in place! - */ -char* -mono_identifier_unescape_type_name_chars(char* identifier) -{ - char *w, *r; - if (!identifier) - return NULL; - for (w = r = identifier; *r != 0; r++) - { - char c = *r; - if (c == '\\') { - r++; - if (*r == 0) - break; - c = *r; - } - *w = c; - w++; - } - if (w != r) - *w = 0; - return identifier; -} - -void -mono_identifier_unescape_info (MonoTypeNameParse* info); - -static void -unescape_each_type_argument(void* data, void* user_data) -{ - MonoTypeNameParse* info = (MonoTypeNameParse*)data; - mono_identifier_unescape_info (info); -} - -static void -unescape_each_nested_name (void* data, void* user_data) -{ - char* nested_name = (char*) data; - mono_identifier_unescape_type_name_chars(nested_name); -} - -/** - * mono_identifier_unescape_info: - * - * \param info a parsed display form of an (optionally assembly qualified) full type name. - * - * Destructively updates the info by unescaping the identifiers that - * comprise the type namespace, name, nested types (if any) and - * generic type arguments (if any). - * - * The resulting info has the names in internal form. - * - */ -void -mono_identifier_unescape_info (MonoTypeNameParse *info) -{ - if (!info) - return; - mono_identifier_unescape_type_name_chars(info->name_space); - mono_identifier_unescape_type_name_chars(info->name); - // but don't escape info->assembly - if (info->type_arguments) - g_ptr_array_foreach(info->type_arguments, &unescape_each_type_argument, NULL); - if (info->nested) - g_list_foreach(info->nested, &unescape_each_nested_name, NULL); -} - -/** - * mono_reflection_parse_type: - */ -int -mono_reflection_parse_type (char *name, MonoTypeNameParse *info) -{ - ERROR_DECL (error); - gboolean result = mono_reflection_parse_type_checked (name, info, error); - mono_error_cleanup (error); - return result ? 1 : 0; -} - -/** - * mono_reflection_parse_type_checked: - * \param name the string to parse - * \param info the parsed name components - * \param error set on error - * - * Parse the given \p name and write the results to \p info, setting \p error - * on error. The string \p name is modified in place and \p info points into - * its memory and into allocated memory. - * - * \returns TRUE if parsing succeeded, otherwise returns FALSE and sets \p error. - * - */ -gboolean -mono_reflection_parse_type_checked (char *name, MonoTypeNameParse *info, MonoError *error) -{ - error_init (error); - int ok = _mono_reflection_parse_type (name, NULL, FALSE, info); - if (ok) { - mono_identifier_unescape_info (info); - } else { - mono_error_set_argument_format (error, "typeName", "failed parse: %s", name); - } - return (ok != 0); -} - -static MonoType* -_mono_reflection_get_type_from_info (MonoTypeNameParse *info, MonoImage *image, gboolean ignorecase, MonoError *error) -{ - gboolean type_resolve = FALSE; - MonoType *type; - MonoImage *rootimage = image; - - error_init (error); - - if (info->assembly.name) { - MonoAssembly *assembly = mono_assembly_loaded_full (&info->assembly, FALSE); - if (!assembly && image && image->assembly && mono_assembly_names_equal (&info->assembly, &image->assembly->aname)) - /* - * This could happen in the AOT compiler case when the search hook is not - * installed. - */ - assembly = image->assembly; - if (!assembly) { - /* then we must load the assembly ourselve - see #60439 */ - assembly = mono_assembly_load (&info->assembly, image->assembly->basedir, NULL); - if (!assembly) - return NULL; - } - image = assembly->image; - } else if (!image) { - image = mono_defaults.corlib; - } - - type = mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, &type_resolve, error); - if (type == NULL && !info->assembly.name && image != mono_defaults.corlib) { - /* ignore the error and try again */ - mono_error_cleanup (error); - error_init (error); - image = mono_defaults.corlib; - type = mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, &type_resolve, error); - } - - return type; -} - -/** - * mono_reflection_get_type_internal: - * - * Returns: may return NULL on success, sets error on failure. - */ -static MonoType* -mono_reflection_get_type_internal (MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - MonoClass *klass; - GList *mod; - int modval; - gboolean bounded = FALSE; - MonoType* type = NULL; - - error_init (error); - if (!image) - image = mono_defaults.corlib; - - if (!rootimage) - rootimage = mono_defaults.corlib; - - if (ignorecase) - klass = mono_class_from_name_case_checked (image, info->name_space, info->name, error); - else - klass = mono_class_from_name_checked (image, info->name_space, info->name, error); - - if (!klass) - goto leave; - - for (mod = info->nested; mod; mod = mod->next) { - gpointer iter = NULL; - MonoClass *parent; - - parent = klass; - mono_class_init_internal (parent); - - while ((klass = mono_class_get_nested_types (parent, &iter))) { - const char *lastp; - char *nested_name, *nested_nspace; - gboolean match = TRUE; - - lastp = strrchr ((const char *)mod->data, '.'); - if (lastp) { - /* Nested classes can have namespaces */ - int nspace_len; - - nested_name = g_strdup (lastp + 1); - nspace_len = lastp - (char*)mod->data; - nested_nspace = (char *)g_malloc (nspace_len + 1); - memcpy (nested_nspace, mod->data, nspace_len); - nested_nspace [nspace_len] = '\0'; - - } else { - nested_name = (char *)mod->data; - nested_nspace = NULL; - } - - if (nested_nspace) { - const char *klass_name_space = m_class_get_name_space (klass); - if (ignorecase) { - if (!(klass_name_space && mono_utf8_strcasecmp (klass_name_space, nested_nspace) == 0)) - match = FALSE; - } else { - if (!(klass_name_space && strcmp (klass_name_space, nested_nspace) == 0)) - match = FALSE; - } - } - if (match) { - const char *klass_name = m_class_get_name (klass); - if (ignorecase) { - if (mono_utf8_strcasecmp (klass_name, nested_name) != 0) - match = FALSE; - } else { - if (strcmp (klass_name, nested_name) != 0) - match = FALSE; - } - } - if (lastp) { - g_free (nested_name); - g_free (nested_nspace); - } - if (match) - break; - } - - if (!klass) - break; - } - if (!klass) - goto leave; - - if (info->type_arguments) { - MonoType **type_args = g_new0 (MonoType *, info->type_arguments->len); - MonoReflectionTypeHandle the_type; - MonoType *instance; - int i; - - for (i = 0; i < info->type_arguments->len; i++) { - MonoTypeNameParse *subinfo = (MonoTypeNameParse *)g_ptr_array_index (info->type_arguments, i); - - type_args [i] = _mono_reflection_get_type_from_info (subinfo, rootimage, ignorecase, error); - if (!type_args [i]) { - g_free (type_args); - goto leave; - } - } - - the_type = mono_type_get_object_handle (mono_domain_get (), m_class_get_byval_arg (klass), error); - if (!is_ok (error) || MONO_HANDLE_IS_NULL (the_type)) - goto leave; - - instance = mono_reflection_bind_generic_parameters ( - the_type, info->type_arguments->len, type_args, error); - - g_free (type_args); - if (!instance) - goto leave; - - klass = mono_class_from_mono_type_internal (instance); - } - - for (mod = info->modifiers; mod; mod = mod->next) { - modval = GPOINTER_TO_UINT (mod->data); - if (!modval) { /* byref: must be last modifier */ - type = m_class_get_this_arg (klass); - goto leave; - } else if (modval == -1) { - klass = mono_class_create_ptr (m_class_get_byval_arg (klass)); - } else if (modval == -2) { - bounded = TRUE; - } else { /* array rank */ - klass = mono_class_create_bounded_array (klass, modval, bounded); - } - } - - type = m_class_get_byval_arg (klass); - -leave: - HANDLE_FUNCTION_RETURN_VAL (type); -} - -/** - * mono_reflection_get_type: - * \param image a metadata context - * \param info type description structure - * \param ignorecase flag for case-insensitive string compares - * \param type_resolve whenever type resolve was already tried - * - * Build a MonoType from the type description in \p info. - * - */ -MonoType* -mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean *type_resolve) { - ERROR_DECL (error); - MonoType *result = mono_reflection_get_type_with_rootimage (image, image, info, ignorecase, type_resolve, error); - mono_error_cleanup (error); - return result; -} - -/** - * mono_reflection_get_type_checked: - * \param rootimage the image of the currently active managed caller - * \param image a metadata context - * \param info type description structure - * \param ignorecase flag for case-insensitive string compares - * \param type_resolve whenever type resolve was already tried - * \param error set on error. - * Build a \c MonoType from the type description in \p info. On failure returns NULL and sets \p error. - */ -MonoType* -mono_reflection_get_type_checked (MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean *type_resolve, MonoError *error) { - error_init (error); - return mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, type_resolve, error); -} - - -static MonoType* -module_builder_array_get_type (MonoArrayHandle module_builders, int i, MonoImage *rootimage, MonoTypeNameParse *info, gboolean ignorecase, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - error_init (error); - MonoType *type = NULL; - MonoReflectionModuleBuilderHandle mb = MONO_HANDLE_NEW (MonoReflectionModuleBuilder, NULL); - MONO_HANDLE_ARRAY_GETREF (mb, module_builders, i); - MonoDynamicImage *dynamic_image = MONO_HANDLE_GETVAL (mb, dynamic_image); - type = mono_reflection_get_type_internal (rootimage, &dynamic_image->image, info, ignorecase, error); - HANDLE_FUNCTION_RETURN_VAL (type); -} - -static MonoType* -module_array_get_type (MonoArrayHandle modules, int i, MonoImage *rootimage, MonoTypeNameParse *info, gboolean ignorecase, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - error_init (error); - MonoType *type = NULL; - MonoReflectionModuleHandle mod = MONO_HANDLE_NEW (MonoReflectionModule, NULL); - MONO_HANDLE_ARRAY_GETREF (mod, modules, i); - MonoImage *image = MONO_HANDLE_GETVAL (mod, image); - type = mono_reflection_get_type_internal (rootimage, image, info, ignorecase, error); - HANDLE_FUNCTION_RETURN_VAL (type); -} - -static MonoType* -mono_reflection_get_type_internal_dynamic (MonoImage *rootimage, MonoAssembly *assembly, MonoTypeNameParse *info, gboolean ignorecase, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - MonoType *type = NULL; - int i; - - error_init (error); - g_assert (assembly_is_dynamic (assembly)); - MonoReflectionAssemblyBuilderHandle abuilder = MONO_HANDLE_CAST (MonoReflectionAssemblyBuilder, mono_assembly_get_object_handle (((MonoDynamicAssembly*)assembly)->domain, assembly, error)); - goto_if_nok (error, leave); - - /* Enumerate all modules */ - - MonoArrayHandle modules; - modules = MONO_HANDLE_NEW (MonoArray, NULL); - MONO_HANDLE_GET (modules, abuilder, modules); - if (!MONO_HANDLE_IS_NULL (modules)) { - int n = mono_array_handle_length (modules); - for (i = 0; i < n; ++i) { - type = module_builder_array_get_type (modules, i, rootimage, info, ignorecase, error); - if (type) - break; - goto_if_nok (error, leave); - } - } - - MonoArrayHandle loaded_modules; - loaded_modules = MONO_HANDLE_NEW (MonoArray, NULL); - MONO_HANDLE_GET (loaded_modules, abuilder, loaded_modules); - if (!type && !MONO_HANDLE_IS_NULL(loaded_modules)) { - int n = mono_array_handle_length (loaded_modules); - for (i = 0; i < n; ++i) { - type = module_array_get_type (loaded_modules, i, rootimage, info, ignorecase, error); - if (type) - break; - goto_if_nok (error, leave); - } - } - -leave: - HANDLE_FUNCTION_RETURN_VAL (type); -} - -MonoType* -mono_reflection_get_type_with_rootimage (MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean *type_resolve, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - - MonoType *type; - MonoReflectionAssemblyHandle reflection_assembly; - GString *fullName = NULL; - GList *mod; - - error_init (error); - - if (image && image_is_dynamic (image)) - type = mono_reflection_get_type_internal_dynamic (rootimage, image->assembly, info, ignorecase, error); - else - type = mono_reflection_get_type_internal (rootimage, image, info, ignorecase, error); - goto_if_nok (error, return_null); - - if (type) - goto exit; - if (!mono_domain_has_type_resolve (mono_domain_get ())) - goto return_null; - - if (type_resolve) { - if (*type_resolve) - goto return_null; - *type_resolve = TRUE; - } - - /* Reconstruct the type name */ - fullName = g_string_new (""); - if (info->name_space && (info->name_space [0] != '\0')) - g_string_printf (fullName, "%s.%s", info->name_space, info->name); - else - g_string_printf (fullName, "%s", info->name); - for (mod = info->nested; mod; mod = mod->next) - g_string_append_printf (fullName, "+%s", (char*)mod->data); - - MonoStringHandle name_handle; - name_handle = mono_string_new_handle (mono_domain_get (), fullName->str, error); - goto_if_nok (error, return_null); - reflection_assembly = mono_domain_try_type_resolve_name ( mono_domain_get (), name_handle, error); - goto_if_nok (error, return_null); - - if (MONO_HANDLE_BOOL (reflection_assembly)) { - MonoAssembly *assembly = MONO_HANDLE_GETVAL (reflection_assembly, assembly); - if (assembly_is_dynamic (assembly)) - type = mono_reflection_get_type_internal_dynamic (rootimage, assembly, - info, ignorecase, error); - else - type = mono_reflection_get_type_internal (rootimage, assembly->image, - info, ignorecase, error); - } - goto_if_nok (error, return_null); - goto exit; - -return_null: - type = NULL; - goto exit; - -exit: - if (fullName) - g_string_free (fullName, TRUE); - HANDLE_FUNCTION_RETURN_VAL (type); -} - -/** - * mono_reflection_free_type_info: - */ -void -mono_reflection_free_type_info (MonoTypeNameParse *info) -{ - g_list_free (info->modifiers); - g_list_free (info->nested); - - if (info->type_arguments) { - int i; - - for (i = 0; i < info->type_arguments->len; i++) { - MonoTypeNameParse *subinfo = (MonoTypeNameParse *)g_ptr_array_index (info->type_arguments, i); - - mono_reflection_free_type_info (subinfo); - /*We free the subinfo since it is allocated by _mono_reflection_parse_type*/ - g_free (subinfo); - } - - g_ptr_array_free (info->type_arguments, TRUE); - } -} - -/** - * mono_reflection_type_from_name: - * \param name type name. - * \param image a metadata context (can be NULL). - * - * Retrieves a \c MonoType from its \p name. If the name is not fully qualified, - * it defaults to get the type from \p image or, if \p image is NULL or loading - * from it fails, uses corlib. - * - */ -MonoType* -mono_reflection_type_from_name (char *name, MonoImage *image) -{ - ERROR_DECL (error); - error_init (error); - - MonoType * const result = mono_reflection_type_from_name_checked (name, image, error); - - mono_error_cleanup (error); - return result; -} - -/** - * mono_reflection_type_from_name_checked: - * \param name type name. - * \param image a metadata context (can be NULL). - * \param error set on errror. - * Retrieves a MonoType from its \p name. If the name is not fully qualified, - * it defaults to get the type from \p image or, if \p image is NULL or loading - * from it fails, uses corlib. On failure returns NULL and sets \p error. - */ -MonoType* -mono_reflection_type_from_name_checked (char *name, MonoImage *image, MonoError *error) -{ - MonoType *type = NULL; - MonoTypeNameParse info; - char *tmp; - - error_init (error); - /* Make a copy since parse_type modifies its argument */ - tmp = g_strdup (name); - - /*g_print ("requested type %s\n", str);*/ - ERROR_DECL (parse_error); - if (!mono_reflection_parse_type_checked (tmp, &info, parse_error)) { - mono_error_cleanup (parse_error); - goto leave; - } - type = _mono_reflection_get_type_from_info (&info, image, FALSE, error); -leave: - g_free (tmp); - mono_reflection_free_type_info (&info); - return type; -} - -/** - * mono_reflection_get_token: - * \returns the metadata token of \p obj which should be an object - * representing a metadata element. - */ -guint32 -mono_reflection_get_token (MonoObject *obj_raw) -{ - HANDLE_FUNCTION_ENTER (); - MONO_HANDLE_DCL (MonoObject, obj); - ERROR_DECL (error); - guint32 result = mono_reflection_get_token_checked (obj, error); - mono_error_assert_ok (error); - HANDLE_FUNCTION_RETURN_VAL (result); -} - -/** - * mono_reflection_get_token_checked: - * \param obj the object - * \param error set on error - * \returns the metadata token of \p obj which should be an object - * representing a metadata element. On failure sets \p error. - */ -guint32 -mono_reflection_get_token_checked (MonoObjectHandle obj, MonoError *error) -{ - guint32 token = 0; - - error_init (error); - - MonoClass *klass = mono_handle_class (obj); - - const char *klass_name = m_class_get_name (klass); - if (strcmp (klass_name, "MethodBuilder") == 0) { - MonoReflectionMethodBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionMethodBuilder, obj); - - token = MONO_HANDLE_GETVAL (mb, table_idx) | MONO_TOKEN_METHOD_DEF; - } else if (strcmp (klass_name, "ConstructorBuilder") == 0) { - MonoReflectionCtorBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionCtorBuilder, obj); - - token = MONO_HANDLE_GETVAL (mb, table_idx) | MONO_TOKEN_METHOD_DEF; - } else if (strcmp (klass_name, "FieldBuilder") == 0) { - g_assert_not_reached (); - } else if (strcmp (klass_name, "TypeBuilder") == 0) { - MonoReflectionTypeBuilderHandle tb = MONO_HANDLE_CAST (MonoReflectionTypeBuilder, obj); - token = MONO_HANDLE_GETVAL (tb, table_idx) | MONO_TOKEN_TYPE_DEF; - } else if (strcmp (klass_name, "RuntimeType") == 0) { - MonoType *type = mono_reflection_type_handle_mono_type (MONO_HANDLE_CAST (MonoReflectionType, obj), error); - return_val_if_nok (error, 0); - MonoClass *mc = mono_class_from_mono_type_internal (type); - if (!mono_class_init_internal (mc)) { - mono_error_set_for_class_failure (error, mc); - return 0; - } - - token = m_class_get_type_token (mc); - } else if (strcmp (klass_name, "RuntimeMethodInfo") == 0 || - strcmp (klass_name, "RuntimeConstructorInfo") == 0) { - MonoReflectionMethodHandle m = MONO_HANDLE_CAST (MonoReflectionMethod, obj); - MonoMethod *method = MONO_HANDLE_GETVAL (m, method); - if (method->is_inflated) { - MonoMethodInflated *inflated = (MonoMethodInflated *) method; - return inflated->declaring->token; - } else { - token = method->token; - } - } else if (strcmp (klass_name, "RuntimeFieldInfo") == 0) { - MonoReflectionFieldHandle f = MONO_HANDLE_CAST (MonoReflectionField, obj); - - token = mono_class_get_field_token (MONO_HANDLE_GETVAL (f, field)); - } else if (strcmp (klass_name, "RuntimePropertyInfo") == 0) { - MonoReflectionPropertyHandle p = MONO_HANDLE_CAST (MonoReflectionProperty, obj); - - token = mono_class_get_property_token (MONO_HANDLE_GETVAL (p, property)); - } else if (strcmp (klass_name, "RuntimeEventInfo") == 0) { - MonoReflectionMonoEventHandle p = MONO_HANDLE_CAST (MonoReflectionMonoEvent, obj); - - token = mono_class_get_event_token (MONO_HANDLE_GETVAL (p, event)); - } else if (strcmp (klass_name, "ParameterInfo") == 0 || strcmp (klass_name, "RuntimeParameterInfo") == 0) { - MonoReflectionParameterHandle p = MONO_HANDLE_CAST (MonoReflectionParameter, obj); - MonoObjectHandle member_impl = MONO_HANDLE_NEW (MonoObject, NULL); - MONO_HANDLE_GET (member_impl, p, MemberImpl); - MonoClass *member_class = mono_handle_class (member_impl); - g_assert (mono_class_is_reflection_method_or_constructor (member_class)); - MonoMethod *method = MONO_HANDLE_GETVAL (MONO_HANDLE_CAST (MonoReflectionMethod, member_impl), method); - - token = mono_method_get_param_token (method, MONO_HANDLE_GETVAL (p, PositionImpl)); - } else if (strcmp (klass_name, "RuntimeModule") == 0 || strcmp (klass_name, "ModuleBuilder") == 0) { - MonoReflectionModuleHandle m = MONO_HANDLE_CAST (MonoReflectionModule, obj); - - token = MONO_HANDLE_GETVAL (m, token); - } else if (strcmp (klass_name, "RuntimeAssembly") == 0) { - token = mono_metadata_make_token (MONO_TABLE_ASSEMBLY, 1); - } else { - mono_error_set_not_implemented (error, "MetadataToken is not supported for type '%s.%s'", - m_class_get_name_space (klass), klass_name); - return 0; - } - - return token; -} - - -gboolean -mono_reflection_is_usertype (MonoReflectionTypeHandle ref) -{ - MonoClass *klass = mono_handle_class (ref); - return m_class_get_image (klass) != mono_defaults.corlib || strcmp ("TypeDelegator", m_class_get_name (klass)) == 0; -} - -/** - * mono_reflection_bind_generic_parameters: - * \param type a managed type object (which should be some kind of generic (instance? definition?)) - * \param type_args the number of type arguments to bind - * \param types array of type arguments - * \param error set on error - * Given a managed type object for a generic type instance, binds each of its arguments to the specified types. - * \returns the \c MonoType* for the resulting type instantiation. On failure returns NULL and sets \p error. - */ -MonoType* -mono_reflection_bind_generic_parameters (MonoReflectionTypeHandle reftype, int type_argc, MonoType **types, MonoError *error) -{ - gboolean is_dynamic = FALSE; - MonoClass *geninst; - - error_init (error); - - mono_loader_lock (); - - MonoClass *klass = mono_handle_class (reftype); - if (mono_is_sre_type_builder (klass)) { - is_dynamic = TRUE; - } else if (mono_is_sre_generic_instance (klass)) { - /* Does this ever make sense? what does instantiating a generic instance even mean? */ - g_assert_not_reached (); - MonoReflectionGenericClassHandle rgi = MONO_HANDLE_CAST (MonoReflectionGenericClass, reftype); - MonoReflectionTypeHandle gtd = MONO_HANDLE_NEW_GET (MonoReflectionType, rgi, generic_type); - - if (mono_is_sre_type_builder (mono_handle_class (gtd))) - is_dynamic = TRUE; - } - - MonoType *t = mono_reflection_type_handle_mono_type (reftype, error); - if (!is_ok (error)) { - mono_loader_unlock (); - return NULL; - } - - klass = mono_class_from_mono_type_internal (t); - if (!mono_class_is_gtd (klass)) { - mono_loader_unlock (); - mono_error_set_type_load_class (error, klass, "Cannot bind generic parameters of a non-generic type"); - return NULL; - } - - guint gtd_type_argc = mono_class_get_generic_container (klass)->type_argc; - if (gtd_type_argc != type_argc) { - mono_loader_unlock (); - mono_error_set_argument_format (error, "types", "The generic type definition needs %d type arguments, but was instantiated with %d ", gtd_type_argc, type_argc); - return NULL; - } - - - if (m_class_was_typebuilder (klass)) - is_dynamic = TRUE; - - mono_loader_unlock (); - - geninst = mono_class_bind_generic_parameters (klass, type_argc, types, is_dynamic); - - return m_class_get_byval_arg (geninst); -} - -MonoClass* -mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic) -{ - MonoGenericClass *gclass; - MonoGenericInst *inst; - - g_assert (mono_class_is_gtd (klass)); - - inst = mono_metadata_get_generic_inst (type_argc, types); - gclass = mono_metadata_lookup_generic_class (klass, inst, is_dynamic); - - return mono_class_create_generic_inst (gclass); -} - -static MonoGenericInst* -generic_inst_from_type_array_handle (MonoArrayHandle types, MonoError *error) -{ - HANDLE_FUNCTION_ENTER (); - error_init (error); - MonoGenericInst *ginst = NULL; - int count = mono_array_handle_length (types); - MonoType **type_argv = g_new0 (MonoType *, count); - MonoReflectionTypeHandle garg = MONO_HANDLE_NEW (MonoReflectionType, NULL); - for (int i = 0; i < count; i++) { - MONO_HANDLE_ARRAY_GETREF (garg, types, i); - type_argv [i] = mono_reflection_type_handle_mono_type (garg, error); - goto_if_nok (error, leave); - - } - ginst = mono_metadata_get_generic_inst (count, type_argv); -leave: - g_free (type_argv); - HANDLE_FUNCTION_RETURN_VAL (ginst); -} - -static MonoMethod* -reflection_bind_generic_method_parameters (MonoMethod *method, MonoArrayHandle types, MonoError *error) -{ - MonoClass *klass; - MonoMethod *inflated; - MonoGenericContext tmp_context; - - error_init (error); - - klass = method->klass; - - if (method->is_inflated) - method = ((MonoMethodInflated *) method)->declaring; - - int count = mono_method_signature_internal (method)->generic_param_count; - if (count != mono_array_handle_length (types)) { - mono_error_set_argument (error, "typeArguments", "Incorrect number of generic arguments"); - return NULL; - } - - MonoGenericInst *ginst = generic_inst_from_type_array_handle (types, error); - return_val_if_nok (error, NULL); - - tmp_context.class_inst = mono_class_is_ginst (klass) ? mono_class_get_generic_class (klass)->context.class_inst : NULL; - tmp_context.method_inst = ginst; - - inflated = mono_class_inflate_generic_method_checked (method, &tmp_context, error); - mono_error_assert_ok (error); - - if (!mono_verifier_is_method_valid_generic_instantiation (inflated)) { - mono_error_set_argument (error, "typeArguments", "Invalid generic arguments"); - return NULL; - } - - return inflated; -} - -MonoReflectionMethodHandle -ves_icall_RuntimeMethodInfo_MakeGenericMethod_impl (MonoReflectionMethodHandle rmethod, MonoArrayHandle types, MonoError *error) -{ - error_init (error); - g_assert (0 != strcmp (m_class_get_name (mono_handle_class (rmethod)), "MethodBuilder")); - - MonoMethod *method = MONO_HANDLE_GETVAL (rmethod, method); - MonoMethod *imethod = reflection_bind_generic_method_parameters (method, types, error); - return_val_if_nok (error, MONO_HANDLE_CAST (MonoReflectionMethod, NULL_HANDLE)); - - /*FIXME but I think this is no longer necessary*/ - if (image_is_dynamic (m_class_get_image (method->klass))) { - MonoDynamicImage *image = (MonoDynamicImage*)m_class_get_image (method->klass); - /* - * This table maps metadata structures representing inflated methods/fields - * to the reflection objects representing their generic definitions. - */ - mono_image_lock ((MonoImage*)image); - mono_g_hash_table_insert (image->generic_def_objects, imethod, MONO_HANDLE_RAW (rmethod)); - mono_image_unlock ((MonoImage*)image); - } - - return mono_method_get_object_handle (MONO_HANDLE_DOMAIN (rmethod), imethod, NULL, error); -} - - -/* SECURITY_ACTION_* are defined in mono/metadata/tabledefs.h */ -const static guint32 declsec_flags_map[] = { - 0x00000000, /* empty */ - MONO_DECLSEC_FLAG_REQUEST, /* SECURITY_ACTION_REQUEST (x01) */ - MONO_DECLSEC_FLAG_DEMAND, /* SECURITY_ACTION_DEMAND (x02) */ - MONO_DECLSEC_FLAG_ASSERT, /* SECURITY_ACTION_ASSERT (x03) */ - MONO_DECLSEC_FLAG_DENY, /* SECURITY_ACTION_DENY (x04) */ - MONO_DECLSEC_FLAG_PERMITONLY, /* SECURITY_ACTION_PERMITONLY (x05) */ - MONO_DECLSEC_FLAG_LINKDEMAND, /* SECURITY_ACTION_LINKDEMAND (x06) */ - MONO_DECLSEC_FLAG_INHERITANCEDEMAND, /* SECURITY_ACTION_INHERITANCEDEMAND (x07) */ - MONO_DECLSEC_FLAG_REQUEST_MINIMUM, /* SECURITY_ACTION_REQUEST_MINIMUM (x08) */ - MONO_DECLSEC_FLAG_REQUEST_OPTIONAL, /* SECURITY_ACTION_REQUEST_OPTIONAL (x09) */ - MONO_DECLSEC_FLAG_REQUEST_REFUSE, /* SECURITY_ACTION_REQUEST_REFUSE (x0A) */ - MONO_DECLSEC_FLAG_PREJIT_GRANT, /* SECURITY_ACTION_PREJIT_GRANT (x0B) */ - MONO_DECLSEC_FLAG_PREJIT_DENY, /* SECURITY_ACTION_PREJIT_DENY (x0C) */ - MONO_DECLSEC_FLAG_NONCAS_DEMAND, /* SECURITY_ACTION_NONCAS_DEMAND (x0D) */ - MONO_DECLSEC_FLAG_NONCAS_LINKDEMAND, /* SECURITY_ACTION_NONCAS_LINKDEMAND (x0E) */ - MONO_DECLSEC_FLAG_NONCAS_INHERITANCEDEMAND, /* SECURITY_ACTION_NONCAS_INHERITANCEDEMAND (x0F) */ - MONO_DECLSEC_FLAG_LINKDEMAND_CHOICE, /* SECURITY_ACTION_LINKDEMAND_CHOICE (x10) */ - MONO_DECLSEC_FLAG_INHERITANCEDEMAND_CHOICE, /* SECURITY_ACTION_INHERITANCEDEMAND_CHOICE (x11) */ - MONO_DECLSEC_FLAG_DEMAND_CHOICE, /* SECURITY_ACTION_DEMAND_CHOICE (x12) */ -}; - -/* - * Returns flags that includes all available security action associated to the handle. - * @token: metadata token (either for a class or a method) - * @image: image where resides the metadata. - */ -static guint32 -mono_declsec_get_flags (MonoImage *image, guint32 token) -{ - int index = mono_metadata_declsec_from_index (image, token); - MonoTableInfo *t = &image->tables [MONO_TABLE_DECLSECURITY]; - guint32 result = 0; - guint32 action; - int i; - - /* HasSecurity can be present for other, not specially encoded, attributes, - e.g. SuppressUnmanagedCodeSecurityAttribute */ - if (index < 0) - return 0; - - for (i = index; i < t->rows; i++) { - guint32 cols [MONO_DECL_SECURITY_SIZE]; - - mono_metadata_decode_row (t, i, cols, MONO_DECL_SECURITY_SIZE); - if (cols [MONO_DECL_SECURITY_PARENT] != token) - break; - - action = cols [MONO_DECL_SECURITY_ACTION]; - if ((action >= MONO_DECLSEC_ACTION_MIN) && (action <= MONO_DECLSEC_ACTION_MAX)) { - result |= declsec_flags_map [action]; - } else { - g_assert_not_reached (); - } - } - return result; -} - -/** - * mono_declsec_flags_from_method: - * \param method The method for which we want the declarative security flags. - * Get the security actions (in the form of flags) associated with the specified method. - * To keep \c MonoMethod size down we do not cache the declarative security flags - * (except for the stack modifiers which are kept in the MonoJitInfo structure) - * \returns the declarative security flags for the method (only). - */ -guint32 -mono_declsec_flags_from_method (MonoMethod *method) -{ - if (method->flags & METHOD_ATTRIBUTE_HAS_SECURITY) { - /* FIXME: No cache (for the moment) */ - guint32 idx = mono_method_get_index (method); - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_METHODDEF; - return mono_declsec_get_flags (m_class_get_image (method->klass), idx); - } - return 0; -} - -/** - * mono_declsec_flags_from_class: - * \param klass The class for which we want the declarative security flags. - * Get the security actions (in the form of flags) associated with the specified class. - * We cache the flags inside the \c MonoClass structure as this will get - * called very often (at least for each method). - * \returns the declarative security flags for the class. - */ -guint32 -mono_declsec_flags_from_class (MonoClass *klass) -{ - if (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_HAS_SECURITY) { - guint32 flags = mono_class_get_declsec_flags (klass); - - if (!flags) { - guint32 idx; - - idx = mono_metadata_token_index (m_class_get_type_token (klass)); - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_TYPEDEF; - flags = mono_declsec_get_flags (m_class_get_image (klass), idx); - /* we cache the flags on classes */ - mono_class_set_declsec_flags (klass, flags); - } - return flags; - } - return 0; -} - -/** - * mono_declsec_flags_from_assembly: - * \param assembly The assembly for which we want the declarative security flags. - * Get the security actions (in the form of flags) associated with the specified assembly. - * \returns the declarative security flags for the assembly. - */ -guint32 -mono_declsec_flags_from_assembly (MonoAssembly *assembly) -{ - guint32 idx = 1; /* there is only one assembly */ - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_ASSEMBLY; - return mono_declsec_get_flags (assembly->image, idx); -} - - -/* - * Fill actions for the specific index (which may either be an encoded class token or - * an encoded method token) from the metadata image. - * Returns TRUE if some actions requiring code generation are present, FALSE otherwise. - */ -static MonoBoolean -fill_actions_from_index (MonoImage *image, guint32 token, MonoDeclSecurityActions* actions, - guint32 id_std, guint32 id_noncas, guint32 id_choice) -{ - MonoBoolean result = FALSE; - MonoTableInfo *t; - guint32 cols [MONO_DECL_SECURITY_SIZE]; - int index = mono_metadata_declsec_from_index (image, token); - int i; - - t = &image->tables [MONO_TABLE_DECLSECURITY]; - for (i = index; i < t->rows; i++) { - mono_metadata_decode_row (t, i, cols, MONO_DECL_SECURITY_SIZE); - - if (cols [MONO_DECL_SECURITY_PARENT] != token) - return result; - - /* if present only replace (class) permissions with method permissions */ - /* if empty accept either class or method permissions */ - if (cols [MONO_DECL_SECURITY_ACTION] == id_std) { - if (!actions->demand.blob) { - const char *blob = mono_metadata_blob_heap (image, cols [MONO_DECL_SECURITY_PERMISSIONSET]); - actions->demand.index = cols [MONO_DECL_SECURITY_PERMISSIONSET]; - actions->demand.blob = (char*) (blob + 2); - actions->demand.size = mono_metadata_decode_blob_size (blob, &blob); - result = TRUE; - } - } else if (cols [MONO_DECL_SECURITY_ACTION] == id_noncas) { - if (!actions->noncasdemand.blob) { - const char *blob = mono_metadata_blob_heap (image, cols [MONO_DECL_SECURITY_PERMISSIONSET]); - actions->noncasdemand.index = cols [MONO_DECL_SECURITY_PERMISSIONSET]; - actions->noncasdemand.blob = (char*) (blob + 2); - actions->noncasdemand.size = mono_metadata_decode_blob_size (blob, &blob); - result = TRUE; - } - } else if (cols [MONO_DECL_SECURITY_ACTION] == id_choice) { - if (!actions->demandchoice.blob) { - const char *blob = mono_metadata_blob_heap (image, cols [MONO_DECL_SECURITY_PERMISSIONSET]); - actions->demandchoice.index = cols [MONO_DECL_SECURITY_PERMISSIONSET]; - actions->demandchoice.blob = (char*) (blob + 2); - actions->demandchoice.size = mono_metadata_decode_blob_size (blob, &blob); - result = TRUE; - } - } - } - - return result; -} - -static MonoBoolean -mono_declsec_get_class_demands_params (MonoClass *klass, MonoDeclSecurityActions* demands, - guint32 id_std, guint32 id_noncas, guint32 id_choice) -{ - guint32 idx = mono_metadata_token_index (m_class_get_type_token (klass)); - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_TYPEDEF; - return fill_actions_from_index (m_class_get_image (klass), idx, demands, id_std, id_noncas, id_choice); -} - -static MonoBoolean -mono_declsec_get_method_demands_params (MonoMethod *method, MonoDeclSecurityActions* demands, - guint32 id_std, guint32 id_noncas, guint32 id_choice) -{ - guint32 idx = mono_method_get_index (method); - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_METHODDEF; - return fill_actions_from_index (m_class_get_image (method->klass), idx, demands, id_std, id_noncas, id_choice); -} - -/** - * mono_declsec_get_demands: - * Collect all actions (that requires to generate code in mini) assigned for - * the specified method. - * Don't use the content of actions if the function return FALSE. - */ -MonoBoolean -mono_declsec_get_demands (MonoMethod *method, MonoDeclSecurityActions* demands) -{ - guint32 mask = MONO_DECLSEC_FLAG_DEMAND | MONO_DECLSEC_FLAG_NONCAS_DEMAND | - MONO_DECLSEC_FLAG_DEMAND_CHOICE; - MonoBoolean result = FALSE; - guint32 flags; - - /* quick exit if no declarative security is present in the metadata */ - if (!m_class_get_image (method->klass)->tables [MONO_TABLE_DECLSECURITY].rows) - return FALSE; - - /* we want the original as the wrapper is "free" of the security informations */ - if (method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE || method->wrapper_type == MONO_WRAPPER_MANAGED_TO_MANAGED) { - method = mono_marshal_method_from_wrapper (method); - if (!method) - return FALSE; - } - - /* First we look for method-level attributes */ - if (method->flags & METHOD_ATTRIBUTE_HAS_SECURITY) { - mono_class_init_internal (method->klass); - memset (demands, 0, sizeof (MonoDeclSecurityActions)); - - result = mono_declsec_get_method_demands_params (method, demands, - SECURITY_ACTION_DEMAND, SECURITY_ACTION_NONCASDEMAND, SECURITY_ACTION_DEMANDCHOICE); - } - - /* Here we use (or create) the class declarative cache to look for demands */ - flags = mono_declsec_flags_from_class (method->klass); - if (flags & mask) { - if (!result) { - mono_class_init_internal (method->klass); - memset (demands, 0, sizeof (MonoDeclSecurityActions)); - } - result |= mono_declsec_get_class_demands_params (method->klass, demands, - SECURITY_ACTION_DEMAND, SECURITY_ACTION_NONCASDEMAND, SECURITY_ACTION_DEMANDCHOICE); - } - - /* The boolean return value is used as a shortcut in case nothing needs to - be generated (e.g. LinkDemand[Choice] and InheritanceDemand[Choice]) */ - return result; -} - - -/** - * mono_declsec_get_linkdemands: - * Collect all Link actions: \c LinkDemand, \c NonCasLinkDemand and \c LinkDemandChoice (2.0). - * Don't use the content of actions if the function return FALSE. - */ -MonoBoolean -mono_declsec_get_linkdemands (MonoMethod *method, MonoDeclSecurityActions* klass, MonoDeclSecurityActions *cmethod) -{ - MonoBoolean result = FALSE; - guint32 flags; - - /* quick exit if no declarative security is present in the metadata */ - if (!m_class_get_image (method->klass)->tables [MONO_TABLE_DECLSECURITY].rows) - return FALSE; - - /* we want the original as the wrapper is "free" of the security informations */ - if (method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE || method->wrapper_type == MONO_WRAPPER_MANAGED_TO_MANAGED) { - method = mono_marshal_method_from_wrapper (method); - if (!method) - return FALSE; - } - - /* results are independant - zeroize both */ - memset (cmethod, 0, sizeof (MonoDeclSecurityActions)); - memset (klass, 0, sizeof (MonoDeclSecurityActions)); - - /* First we look for method-level attributes */ - if (method->flags & METHOD_ATTRIBUTE_HAS_SECURITY) { - mono_class_init_internal (method->klass); - - result = mono_declsec_get_method_demands_params (method, cmethod, - SECURITY_ACTION_LINKDEMAND, SECURITY_ACTION_NONCASLINKDEMAND, SECURITY_ACTION_LINKDEMANDCHOICE); - } - - /* Here we use (or create) the class declarative cache to look for demands */ - flags = mono_declsec_flags_from_class (method->klass); - if (flags & (MONO_DECLSEC_FLAG_LINKDEMAND | MONO_DECLSEC_FLAG_NONCAS_LINKDEMAND | MONO_DECLSEC_FLAG_LINKDEMAND_CHOICE)) { - mono_class_init_internal (method->klass); - - result |= mono_declsec_get_class_demands_params (method->klass, klass, - SECURITY_ACTION_LINKDEMAND, SECURITY_ACTION_NONCASLINKDEMAND, SECURITY_ACTION_LINKDEMANDCHOICE); - } - - return result; -} - -/** - * mono_declsec_get_inheritdemands_class: - * \param klass The inherited class - this is the class that provides the security check (attributes) - * \param demands - * Collect all Inherit actions - \c InheritanceDemand, \c NonCasInheritanceDemand and \c InheritanceDemandChoice (2.0). - * Don't use the content of actions if the function return FALSE. - * \returns TRUE if inheritance demands (any kind) are present, FALSE otherwise. - */ -MonoBoolean -mono_declsec_get_inheritdemands_class (MonoClass *klass, MonoDeclSecurityActions* demands) -{ - MonoBoolean result = FALSE; - guint32 flags; - - /* quick exit if no declarative security is present in the metadata */ - if (!m_class_get_image (klass)->tables [MONO_TABLE_DECLSECURITY].rows) - return FALSE; - - /* Here we use (or create) the class declarative cache to look for demands */ - flags = mono_declsec_flags_from_class (klass); - if (flags & (MONO_DECLSEC_FLAG_INHERITANCEDEMAND | MONO_DECLSEC_FLAG_NONCAS_INHERITANCEDEMAND | MONO_DECLSEC_FLAG_INHERITANCEDEMAND_CHOICE)) { - mono_class_init_internal (klass); - memset (demands, 0, sizeof (MonoDeclSecurityActions)); - - result |= mono_declsec_get_class_demands_params (klass, demands, - SECURITY_ACTION_INHERITDEMAND, SECURITY_ACTION_NONCASINHERITANCE, SECURITY_ACTION_INHERITDEMANDCHOICE); - } - - return result; -} - -/** - * mono_declsec_get_inheritdemands_method: - * Collect all Inherit actions: \c InheritanceDemand, \c NonCasInheritanceDemand and \c InheritanceDemandChoice (2.0). - * Don't use the content of actions if the function return FALSE. - */ -MonoBoolean -mono_declsec_get_inheritdemands_method (MonoMethod *method, MonoDeclSecurityActions* demands) -{ - /* quick exit if no declarative security is present in the metadata */ - if (!m_class_get_image (method->klass)->tables [MONO_TABLE_DECLSECURITY].rows) - return FALSE; - - /* we want the original as the wrapper is "free" of the security informations */ - if (method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE || method->wrapper_type == MONO_WRAPPER_MANAGED_TO_MANAGED) { - method = mono_marshal_method_from_wrapper (method); - if (!method) - return FALSE; - } - - if (method->flags & METHOD_ATTRIBUTE_HAS_SECURITY) { - mono_class_init_internal (method->klass); - memset (demands, 0, sizeof (MonoDeclSecurityActions)); - - return mono_declsec_get_method_demands_params (method, demands, - SECURITY_ACTION_INHERITDEMAND, SECURITY_ACTION_NONCASINHERITANCE, SECURITY_ACTION_INHERITDEMANDCHOICE); - } - return FALSE; -} - - -static MonoBoolean -get_declsec_action (MonoImage *image, guint32 token, guint32 action, MonoDeclSecurityEntry *entry) -{ - guint32 cols [MONO_DECL_SECURITY_SIZE]; - MonoTableInfo *t; - int i; - - int index = mono_metadata_declsec_from_index (image, token); - if (index == -1) - return FALSE; - - t = &image->tables [MONO_TABLE_DECLSECURITY]; - for (i = index; i < t->rows; i++) { - mono_metadata_decode_row (t, i, cols, MONO_DECL_SECURITY_SIZE); - - /* shortcut - index are ordered */ - if (token != cols [MONO_DECL_SECURITY_PARENT]) - return FALSE; - - if (cols [MONO_DECL_SECURITY_ACTION] == action) { - const char *metadata = mono_metadata_blob_heap (image, cols [MONO_DECL_SECURITY_PERMISSIONSET]); - entry->blob = (char*) (metadata + 2); - entry->size = mono_metadata_decode_blob_size (metadata, &metadata); - return TRUE; - } - } - - return FALSE; -} - -MonoBoolean -mono_declsec_get_method_action (MonoMethod *method, guint32 action, MonoDeclSecurityEntry *entry) -{ - if (method->flags & METHOD_ATTRIBUTE_HAS_SECURITY) { - guint32 idx = mono_method_get_index (method); - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_METHODDEF; - return get_declsec_action (m_class_get_image (method->klass), idx, action, entry); - } - return FALSE; -} - -/** - * mono_declsec_get_class_action: - */ -MonoBoolean -mono_declsec_get_class_action (MonoClass *klass, guint32 action, MonoDeclSecurityEntry *entry) -{ - /* use cache */ - guint32 flags = mono_declsec_flags_from_class (klass); - if (declsec_flags_map [action] & flags) { - guint32 idx = mono_metadata_token_index (m_class_get_type_token (klass)); - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_TYPEDEF; - return get_declsec_action (m_class_get_image (klass), idx, action, entry); - } - return FALSE; -} - -/** - * mono_declsec_get_assembly_action: - */ -MonoBoolean -mono_declsec_get_assembly_action (MonoAssembly *assembly, guint32 action, MonoDeclSecurityEntry *entry) -{ - guint32 idx = 1; /* there is only one assembly */ - idx <<= MONO_HAS_DECL_SECURITY_BITS; - idx |= MONO_HAS_DECL_SECURITY_ASSEMBLY; - - return get_declsec_action (assembly->image, idx, action, entry); -} - -gboolean -mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass, MonoError *error) -{ - MonoObject *res, *exc; - void *params [1]; - static MonoMethod *method = NULL; - - error_init (error); - - if (method == NULL) { - method = mono_class_get_method_from_name_checked (mono_class_get_type_builder_class (), "IsAssignableTo", 1, 0, error); - mono_error_assert_ok (error); - g_assert (method); - } - - /* - * The result of mono_type_get_object_checked () might be a System.MonoType but we - * need a TypeBuilder so use mono_class_get_ref_info (klass). - */ - g_assert (mono_class_has_ref_info (klass)); - g_assert (!strcmp (m_class_get_name (mono_object_class (&mono_class_get_ref_info_raw (klass)->type.object)), "TypeBuilder")); /* FIXME use handles */ - - params [0] = mono_type_get_object_checked (mono_domain_get (), m_class_get_byval_arg (oklass), error); - return_val_if_nok (error, FALSE); - - ERROR_DECL (inner_error); - res = mono_runtime_try_invoke (method, &mono_class_get_ref_info_raw (klass)->type.object, params, &exc, inner_error); /* FIXME use handles */ - - if (exc || !is_ok (inner_error)) { - mono_error_cleanup (inner_error); - return FALSE; - } else - return *(MonoBoolean*)mono_object_unbox_internal (res); -} - -/** - * mono_reflection_type_get_type: - * \param reftype the \c System.Type object - * \returns the \c MonoType* associated with the C# \c System.Type object \p reftype. - */ -MonoType* -mono_reflection_type_get_type (MonoReflectionType *reftype) -{ - MonoType *result; - MONO_ENTER_GC_UNSAFE; - g_assert (reftype); - - ERROR_DECL (error); - result = mono_reflection_type_get_handle (reftype, error); - mono_error_assert_ok (error); - MONO_EXIT_GC_UNSAFE; - return result; -} - -/** - * mono_reflection_assembly_get_assembly: - * \param refassembly the \c System.Reflection.Assembly object - * \returns the \c MonoAssembly* associated with the C# \c System.Reflection.Assembly object \p refassembly. - */ -MonoAssembly* -mono_reflection_assembly_get_assembly (MonoReflectionAssembly *refassembly) -{ - g_assert (refassembly); - - return refassembly->assembly; -} - -/** - * mono_class_from_mono_type_handle: - * \param reftype the \c System.Type handle - * \returns the \c MonoClass* corresponding to the given type. - */ -MonoClass* -mono_class_from_mono_type_handle (MonoReflectionTypeHandle reftype) -{ - return mono_class_from_mono_type_internal (MONO_HANDLE_RAW (reftype)->type); -} - -// This is called by calls, it will return NULL and set pending exception (in wrapper) on failure. -MonoReflectionTypeHandle -mono_type_from_handle_impl (MonoType *handle, MonoError *error) -{ - mono_class_init_internal (mono_class_from_mono_type_internal (handle)); - return mono_type_get_object_handle (mono_domain_get (), handle, error); -} diff --git a/mono/metadata/reflection.c.REMOVED.git-id b/mono/metadata/reflection.c.REMOVED.git-id new file mode 100644 index 0000000000..bf495ebf8f --- /dev/null +++ b/mono/metadata/reflection.c.REMOVED.git-id @@ -0,0 +1 @@ +f51462b32d452d53a373f0f326a51cd8e70d1580 \ No newline at end of file diff --git a/mono/metadata/remoting.c b/mono/metadata/remoting.c index 769f3556ee..295736092b 100644 --- a/mono/metadata/remoting.c +++ b/mono/metadata/remoting.c @@ -22,9 +22,11 @@ #include "mono/metadata/tabledefs.h" #include "mono/metadata/exception.h" #include "mono/metadata/debug-helpers.h" +#include "mono/metadata/domain-internals.h" #include "mono/metadata/reflection-internals.h" #include "mono/metadata/assembly.h" #include "icall-decl.h" +#include "icall-signatures.h" typedef enum { MONO_MARSHAL_NONE, /* No marshalling needed */ @@ -103,19 +105,16 @@ static MonoMethod *method_set_call_context, *method_needs_context_sink, *method_ static gpointer mono_compile_method_icall (MonoMethod *method); -#ifdef __cplusplus -template <typename T> -static void -register_icall (T func, const char *name, const char *sigstr, gboolean save) -#else -static void -register_icall (gpointer func, const char *name, const char *sigstr, gboolean save) -#endif -{ - MonoMethodSignature *sig = mono_create_icall_signature (sigstr); - - mono_register_jit_icall (func, name, sig, save); -} +// func is an identifier, that names a function, and is also in jit-icall-reg.h, +// and therefore a field in mono_jit_icall_info and can be token pasted into an enum value. +// +// The name of func must be linkable for AOT, for example g_free does not work (monoeg_g_free instead), +// nor does the C++ overload fmod (mono_fmod instead). These functions therefore +// must be extern "C". +// +// This is not the same as other register_icall (last parameter NULL vs. #func) +#define register_icall(func, sig, save) \ + (mono_register_jit_icall_info (&mono_get_jit_icall_info ()->func, func, #func, (sig), (save), NULL)) static inline void remoting_lock (void) @@ -223,21 +222,21 @@ mono_remoting_marshal_init (void) mono_loader_lock (); if (!icalls_registered) { - register_icall (type_from_handle, "type_from_handle", "object ptr", FALSE); - register_icall (mono_marshal_set_domain_by_id, "mono_marshal_set_domain_by_id", "int32 int32 int32", FALSE); - register_icall (mono_marshal_check_domain_image, "mono_marshal_check_domain_image", "int32 int32 ptr", FALSE); - register_icall (ves_icall_mono_marshal_xdomain_copy_value, "ves_icall_mono_marshal_xdomain_copy_value", "object object", FALSE); - register_icall (mono_marshal_xdomain_copy_out_value, "mono_marshal_xdomain_copy_out_value", "void object object", FALSE); - register_icall (mono_remoting_wrapper, "mono_remoting_wrapper", "object ptr ptr", FALSE); - register_icall (mono_remoting_update_exception, "mono_remoting_update_exception", "object object", FALSE); - register_icall (mono_upgrade_remote_class_wrapper, "mono_upgrade_remote_class_wrapper", "void object object", FALSE); + register_icall (type_from_handle, mono_icall_sig_object_ptr, FALSE); + register_icall (mono_marshal_set_domain_by_id, mono_icall_sig_int32_int32_int32, FALSE); + register_icall (mono_marshal_check_domain_image, mono_icall_sig_int32_int32_ptr, FALSE); + register_icall (ves_icall_mono_marshal_xdomain_copy_value, mono_icall_sig_object_object, FALSE); + register_icall (mono_marshal_xdomain_copy_out_value, mono_icall_sig_void_object_object, FALSE); + register_icall (mono_remoting_wrapper, mono_icall_sig_object_ptr_ptr, FALSE); + register_icall (mono_remoting_update_exception, mono_icall_sig_object_object, FALSE); + register_icall (mono_upgrade_remote_class_wrapper, mono_icall_sig_void_object_object, FALSE); #ifndef DISABLE_JIT - register_icall (mono_compile_method_icall, "mono_compile_method_icall", "ptr ptr", FALSE); + register_icall (mono_compile_method_icall, mono_icall_sig_ptr_ptr, FALSE); #endif - register_icall (mono_context_get_icall, "mono_context_get_icall", "object", FALSE); - register_icall (mono_context_set_icall, "mono_context_set_icall", "void object", FALSE); + register_icall (mono_context_get_icall, mono_icall_sig_object, FALSE); + register_icall (mono_context_set_icall, mono_icall_sig_void_object, FALSE); } icalls_registered = TRUE; @@ -626,7 +625,7 @@ mono_marshal_set_domain_by_id (gint32 id, MonoBoolean push) MonoDomain *current_domain = mono_domain_get (); MonoDomain *domain = mono_domain_get_by_id (id); - if (!domain || !mono_domain_set (domain, FALSE)) { + if (!domain || !mono_domain_set_fast (domain, FALSE)) { mono_set_pending_exception (mono_get_exception_appdomain_unloaded ()); return 0; } @@ -1924,6 +1923,9 @@ mono_marshal_get_proxy_cancast (MonoClass *klass) mb->method->save_lmf = 1; #ifndef DISABLE_JIT + + mono_remoting_marshal_init (); // register icalls + /* get the real proxy from the transparent proxy*/ mono_mb_emit_ldarg (mb, 0); mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp)); diff --git a/mono/metadata/runtime.c b/mono/metadata/runtime.c index 7eb839fbb0..d779517492 100644 --- a/mono/metadata/runtime.c +++ b/mono/metadata/runtime.c @@ -55,9 +55,23 @@ static void fire_process_exit_event (MonoDomain *domain, gpointer user_data) { ERROR_DECL (error); + MonoObject *exc; + +#if ENABLE_NETCORE + MonoClass *appcontext_class; + MonoMethod *procexit_method; + + appcontext_class = mono_class_try_load_from_name (mono_defaults.corlib, "System", "AppContext"); + g_assert (appcontext_class); + + procexit_method = mono_class_get_method_from_name_checked (appcontext_class, "OnProcessExit", 0, 0, error); + g_assert (procexit_method); + + mono_runtime_try_invoke (procexit_method, NULL, NULL, &exc, error); +#else MonoClassField *field; gpointer pa [2]; - MonoObject *delegate, *exc; + MonoObject *delegate; field = mono_class_get_field_from_name_full (mono_defaults.appdomain_class, "ProcessExit", NULL); g_assert (field); @@ -70,6 +84,7 @@ fire_process_exit_event (MonoDomain *domain, gpointer user_data) pa [1] = NULL; mono_runtime_delegate_try_invoke (delegate, pa, &exc, error); mono_error_cleanup (error); +#endif } static void @@ -124,8 +139,8 @@ mono_runtime_init_tls (void) mono_marshal_init_tls (); } -char* -mono_runtime_get_aotid (void) +guint8* +mono_runtime_get_aotid_arr (void) { int i; guint8 aotid_sum = 0; @@ -135,12 +150,22 @@ mono_runtime_get_aotid (void) return NULL; guint8 (*aotid)[16] = &domain->entry_assembly->image->aotid; - for (i = 0; i < 16; ++i) aotid_sum |= (*aotid)[i]; if (aotid_sum == 0) return NULL; - return mono_guid_to_string ((guint8*) aotid); + return (guint8*)aotid; +} + +char* +mono_runtime_get_aotid (void) +{ + guint8 *aotid = mono_runtime_get_aotid_arr (); + + if (!aotid) + return NULL; + + return mono_guid_to_string (aotid); } diff --git a/mono/metadata/security-manager.c b/mono/metadata/security-manager.c index a5f1e15d2e..efad0ecf04 100644 --- a/mono/metadata/security-manager.c +++ b/mono/metadata/security-manager.c @@ -15,7 +15,6 @@ /* Class lazy loading functions */ static GENERATE_GET_CLASS_WITH_CACHE (security_manager, "System.Security", "SecurityManager") -static GENERATE_TRY_GET_CLASS_WITH_CACHE (execution_context, "System.Threading", "ExecutionContext") static MonoSecurityMode mono_security_mode = MONO_SECURITY_MODE_NONE; @@ -84,35 +83,6 @@ mono_is_ecma_key (const char *publickey, int size) return TRUE; } -/* - * Context propagation is required when: - * (a) the security manager is active (1.x and later) - * (b) other contexts needs to be propagated (2.x and later) - * - * returns NULL if no context propagation is required, else the returns the - * MonoMethod to call to Capture the ExecutionContext. - */ -MonoMethod* -mono_get_context_capture_method (void) -{ - static MonoMethod *method = NULL; - - if (mono_image_get_assembly (mono_defaults.corlib)->aname.major < 2) - return NULL; - - /* older corlib revisions won't have the class (nor the method) */ - MonoClass *execution_context = mono_class_try_get_execution_context_class (); - if (execution_context && !method) { - ERROR_DECL (error); - mono_class_init_internal (execution_context); - method = mono_class_get_method_from_name_checked (execution_context, "Capture", 0, 0, error); - mono_error_assert_ok (error); - } - - return method; -} - - /* System.Security icalls */ MonoBoolean diff --git a/mono/metadata/security-manager.h b/mono/metadata/security-manager.h index e389769ac1..b3b798739b 100644 --- a/mono/metadata/security-manager.h +++ b/mono/metadata/security-manager.h @@ -52,7 +52,6 @@ typedef struct { } MonoSecurityManager; gboolean mono_is_ecma_key (const char *publickey, int size); -MonoMethod* mono_get_context_capture_method (void); MonoSecurityManager* mono_security_manager_get_methods (void); diff --git a/mono/metadata/seq-points-data.c b/mono/metadata/seq-points-data.c index 7adbfe9f7c..d911258e75 100644 --- a/mono/metadata/seq-points-data.c +++ b/mono/metadata/seq-points-data.c @@ -401,6 +401,11 @@ mono_seq_point_data_read (SeqPointData *data, char *path) fseek(f, 0, SEEK_END); fsize = ftell(f); + if (fsize == -1){ + fclose (f); + return FALSE; + } + fseek(f, 0, SEEK_SET); buffer_orig = buffer = (guint8 *)g_malloc (fsize + 1); diff --git a/mono/metadata/sgen-mono.c b/mono/metadata/sgen-mono.c index 4f078be119..c987afeaa7 100644 --- a/mono/metadata/sgen-mono.c +++ b/mono/metadata/sgen-mono.c @@ -36,6 +36,7 @@ #include "utils/mono-threads-coop.h" #include "utils/mono-threads.h" #include "metadata/w32handle.h" +#include "icall-signatures.h" #ifdef HEAVY_STATISTICS static guint64 stat_wbarrier_set_arrayref = 0; @@ -2803,10 +2804,10 @@ sgen_client_init (void) void mono_gc_init_icalls (void) { - mono_register_jit_icall (mono_gc_alloc_obj, "mono_gc_alloc_obj", mono_create_icall_signature ("object ptr int"), FALSE); - mono_register_jit_icall (mono_gc_alloc_vector, "mono_gc_alloc_vector", mono_create_icall_signature ("object ptr int int"), FALSE); - mono_register_jit_icall (mono_gc_alloc_string, "mono_gc_alloc_string", mono_create_icall_signature ("object ptr int int32"), FALSE); - mono_register_jit_icall (mono_profiler_raise_gc_allocation, "mono_profiler_raise_gc_allocation", mono_create_icall_signature ("void object"), FALSE); + mono_register_jit_icall (mono_gc_alloc_obj, mono_icall_sig_object_ptr_int, FALSE); + mono_register_jit_icall (mono_gc_alloc_vector, mono_icall_sig_object_ptr_int_int, FALSE); + mono_register_jit_icall (mono_gc_alloc_string, mono_icall_sig_object_ptr_int_int32, FALSE); + mono_register_jit_icall (mono_profiler_raise_gc_allocation, mono_icall_sig_void_object, FALSE); } gboolean diff --git a/mono/metadata/sre-encode.c b/mono/metadata/sre-encode.c index d7da6a5e52..97868a4bef 100644 --- a/mono/metadata/sre-encode.c +++ b/mono/metadata/sre-encode.c @@ -273,22 +273,39 @@ encode_custom_modifiers (MonoDynamicImage *assembly, MonoArrayHandle modreq, Mon error_init (error); - if (!MONO_HANDLE_IS_NULL (modreq)) { - for (i = 0; i < mono_array_handle_length (modreq); ++i) { - MonoType *mod = mono_type_array_get_and_resolve (modreq, i, error); - goto_if_nok (error, leave); - sigbuffer_add_byte (buf, MONO_TYPE_CMOD_REQD); - sigbuffer_add_value (buf, mono_image_typedef_or_ref (assembly, mod)); - } - } + /* Have to follow .NET Framework behavior here. For an IL type spec like: + * int32 modreq(A) modreq(B) modopt(C) modopt(D) + * + * we emit: + * cmod_opt [encoding of D] cmod_opt [encoding of C] cmod_req [encoding of B] cmod_req [encoding of A] I4. + * + * Even though the reflection API specifies required and optional + * modifiers in separate arrays, the .NET Framework creates a typespec + * as above: required mods first, then optional. (And so we emit the + * optional ones first, then required). + */ + if (!MONO_HANDLE_IS_NULL (modopt)) { - for (i = 0; i < mono_array_handle_length (modopt); ++i) { + int count = mono_array_handle_length (modopt); + g_assert (count > 0); + for (i = count - 1; i >= 0 ; --i) { MonoType *mod = mono_type_array_get_and_resolve (modopt, i, error); goto_if_nok (error, leave); sigbuffer_add_byte (buf, MONO_TYPE_CMOD_OPT); sigbuffer_add_value (buf, mono_image_typedef_or_ref (assembly, mod)); } } + if (!MONO_HANDLE_IS_NULL (modreq)) { + int count = mono_array_handle_length (modreq); + g_assert (count > 0); + for (i = count - 1; i >= 0 ; --i) { + MonoType *mod = mono_type_array_get_and_resolve (modreq, i, error); + goto_if_nok (error, leave); + sigbuffer_add_byte (buf, MONO_TYPE_CMOD_REQD); + sigbuffer_add_value (buf, mono_image_typedef_or_ref (assembly, mod)); + } + } + leave: HANDLE_FUNCTION_RETURN (); } diff --git a/mono/metadata/sre-save.c.REMOVED.git-id b/mono/metadata/sre-save.c.REMOVED.git-id index a4dfccaa8e..fac487b8d7 100644 --- a/mono/metadata/sre-save.c.REMOVED.git-id +++ b/mono/metadata/sre-save.c.REMOVED.git-id @@ -1 +1 @@ -a741da86e6195f828669b4692d5e5ad7a3535750 \ No newline at end of file +a4787ee7961f01eb5c109094c930b920211e05ef \ No newline at end of file diff --git a/mono/metadata/sre.c.REMOVED.git-id b/mono/metadata/sre.c.REMOVED.git-id index 88f9a531f1..c65697d114 100644 --- a/mono/metadata/sre.c.REMOVED.git-id +++ b/mono/metadata/sre.c.REMOVED.git-id @@ -1 +1 @@ -ef061d1bbe765df74ed5f3e33d855345f0ffdbc6 \ No newline at end of file +8cf94d30b51da5f556dcb61e4c4f4590bbd835d6 \ No newline at end of file diff --git a/mono/metadata/sysmath.c b/mono/metadata/sysmath.c index 7e250fbaae..3cef4c1b21 100644 --- a/mono/metadata/sysmath.c +++ b/mono/metadata/sysmath.c @@ -200,6 +200,39 @@ ves_icall_System_Math_Ceiling (gdouble v) return ceil (v); } +#if ENABLE_NETCORE +gint32 +ves_icall_System_Math_ILogB (gdouble x) +{ + int ret; + if (FP_ILOGB0 != -2147483648 && x == 0.0) + ret = -2147483648; + else if (FP_ILOGBNAN != 2147483647 && isnan(x)) + ret = 2147483647; + else + ret = ilogb(x); + return ret; +} + +gdouble +ves_icall_System_Math_Log2 (gdouble x) +{ + return log2 (x); +} + +gdouble +ves_icall_System_Math_ScaleB (gdouble x, gint32 n) +{ + return scalbn (x, n); +} + +gdouble +ves_icall_System_Math_FusedMultiplyAdd (gdouble x, gdouble y, gdouble z) +{ + return fma (x, y, z); +} +#endif + float ves_icall_System_MathF_Acos (float x) { @@ -337,3 +370,36 @@ ves_icall_System_MathF_ModF (float x, float *d) { return modff (x, d); } + +#if ENABLE_NETCORE +gint32 +ves_icall_System_MathF_ILogB (float x) +{ + int ret; + if (FP_ILOGB0 != -2147483648 && x == 0.0) + ret = -2147483648; + else if (FP_ILOGBNAN != 2147483647 && isnan(x)) + ret = 2147483647; + else + ret = ilogbf(x); + return ret; +} + +float +ves_icall_System_MathF_Log2 (float x) +{ + return log2f (x); +} + +float +ves_icall_System_MathF_ScaleB (float x, gint32 n) +{ + return scalbnf (x, n); +} + +float +ves_icall_System_MathF_FusedMultiplyAdd (float x, float y, float z) +{ + return fmaf (x, y, z); +} +#endif diff --git a/mono/metadata/tabledefs.h b/mono/metadata/tabledefs.h index e3aa51b4cf..6cfc4c8ffe 100644 --- a/mono/metadata/tabledefs.h +++ b/mono/metadata/tabledefs.h @@ -190,6 +190,8 @@ enum { #define METHOD_ATTRIBUTE_PINVOKE_IMPL 0x2000 #define METHOD_ATTRIBUTE_UNMANAGED_EXPORT 0x0008 +#define METHOD_ATTRIBUTE_REQSECOBJ 0x8000 + /* * For runtime use only */ diff --git a/mono/metadata/threadpool-io.c b/mono/metadata/threadpool-io.c index c89f3e1fda..7fb51b4821 100644 --- a/mono/metadata/threadpool-io.c +++ b/mono/metadata/threadpool-io.c @@ -10,11 +10,11 @@ */ #include <config.h> +#include <glib.h> +#include <mono/metadata/threadpool-io.h> #ifndef DISABLE_SOCKETS -#include <glib.h> - #if defined(HOST_WIN32) #include <windows.h> #else @@ -23,9 +23,9 @@ #endif #include <mono/metadata/gc-internals.h> +#include <mono/metadata/mono-hash-internals.h> #include <mono/metadata/mono-mlist.h> #include <mono/metadata/threadpool.h> -#include <mono/metadata/threadpool-io.h> #include <mono/utils/atomic.h> #include <mono/utils/mono-threads.h> #include <mono/utils/mono-lazy-init.h> @@ -198,7 +198,7 @@ selector_thread_wakeup_drain_pipes (void) break; if (received == SOCKET_ERROR) { if (WSAGetLastError () != WSAEINTR && WSAGetLastError () != WSAEWOULDBLOCK) - g_warning ("selector_thread_wakeup_drain_pipes: recv () failed, error (%d) %s\n", WSAGetLastError ()); + g_warning ("selector_thread_wakeup_drain_pipes: recv () failed, error (%d)\n", WSAGetLastError ()); break; } #endif @@ -338,7 +338,7 @@ selector_thread (gpointer data) return 0; } - states = mono_g_hash_table_new_type (g_direct_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREAD_POOL, NULL, "Thread Pool I/O State Table"); + states = mono_g_hash_table_new_type_internal (g_direct_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREAD_POOL, NULL, "Thread Pool I/O State Table"); while (!mono_runtime_is_shutting_down ()) { gint i, j; @@ -727,4 +727,4 @@ mono_threadpool_io_remove_domain_jobs (MonoDomain *domain) g_assert_not_reached (); } -#endif +#endif \ No newline at end of file diff --git a/mono/metadata/threadpool-worker-default.c b/mono/metadata/threadpool-worker-default.c index 96372a15f3..d7122937e2 100644 --- a/mono/metadata/threadpool-worker-default.c +++ b/mono/metadata/threadpool-worker-default.c @@ -974,10 +974,10 @@ hill_climbing_update (gint16 current_thread_count, guint32 sample_duration, gint * throughput). Our "error" estimate (the amount of noise that might be present in the * frequency band we're really interested in) is the average of the adjacent bands. */ throughput_wave_component = mono_double_complex_scalar_div (hill_climbing_get_wave_component (hc->samples, sample_count, hc->wave_period), average_throughput); - throughput_error_estimate = cabs (mono_double_complex_scalar_div (hill_climbing_get_wave_component (hc->samples, sample_count, adjacent_period_1), average_throughput)); + throughput_error_estimate = mono_cabs (mono_double_complex_scalar_div (hill_climbing_get_wave_component (hc->samples, sample_count, adjacent_period_1), average_throughput)); if (adjacent_period_2 <= sample_count) { - throughput_error_estimate = MAX (throughput_error_estimate, cabs (mono_double_complex_scalar_div (hill_climbing_get_wave_component ( + throughput_error_estimate = MAX (throughput_error_estimate, mono_cabs (mono_double_complex_scalar_div (hill_climbing_get_wave_component ( hc->samples, sample_count, adjacent_period_2), average_throughput))); } @@ -994,7 +994,7 @@ hill_climbing_update (gint16 current_thread_count, guint32 sample_duration, gint + ((1.0 + hc->throughput_error_smoothing_factor) * hc->average_throughput_noise); } - if (cabs (thread_wave_component) > 0) { + if (mono_cabs (thread_wave_component) > 0) { /* Adjust the throughput wave so it's centered around the target wave, * and then calculate the adjusted throughput/thread ratio. */ ratio = mono_double_complex_div (mono_double_complex_sub (throughput_wave_component, mono_double_complex_scalar_mul(thread_wave_component, hc->target_throughput_ratio)), thread_wave_component); @@ -1006,7 +1006,7 @@ hill_climbing_update (gint16 current_thread_count, guint32 sample_duration, gint noise_for_confidence = MAX (hc->average_throughput_noise, throughput_error_estimate); if (noise_for_confidence > 0) { - confidence = cabs (thread_wave_component) / noise_for_confidence / hc->target_signal_to_noise_ratio; + confidence = mono_cabs (thread_wave_component) / noise_for_confidence / hc->target_signal_to_noise_ratio; } else { /* there is no noise! */ confidence = 1.0; @@ -1020,7 +1020,7 @@ hill_climbing_update (gint16 current_thread_count, guint32 sample_duration, gint * backward (because this indicates that our changes are having the opposite of the intended effect). * If they're 90 degrees out of phase, we won't move at all, because we can't tell wether we're * having a negative or positive effect on throughput. */ - move = creal (ratio); + move = mono_creal (ratio); move = CLAMP (move, -1.0, 1.0); /* Apply our confidence multiplier. */ @@ -1058,8 +1058,8 @@ hill_climbing_update (gint16 current_thread_count, guint32 sample_duration, gint if (new_thread_count != current_thread_count) hill_climbing_change_thread_count (new_thread_count, transition); - if (creal (ratio) < 0.0 && new_thread_count == worker.limit_worker_min) - *adjustment_interval = (gint)(0.5 + hc->current_sample_interval * (10.0 * MAX (-1.0 * creal (ratio), 1.0))); + if (mono_creal (ratio) < 0.0 && new_thread_count == worker.limit_worker_min) + *adjustment_interval = (gint)(0.5 + hc->current_sample_interval * (10.0 * MAX (-1.0 * mono_creal (ratio), 1.0))); else *adjustment_interval = hc->current_sample_interval; diff --git a/mono/metadata/threadpool.c b/mono/metadata/threadpool.c index 81458c8c96..d64d9fed50 100644 --- a/mono/metadata/threadpool.c +++ b/mono/metadata/threadpool.c @@ -28,6 +28,7 @@ #include <glib.h> #include <mono/metadata/class-internals.h> +#include <mono/metadata/domain-internals.h> #include <mono/metadata/exception.h> #include <mono/metadata/gc-internals.h> #include <mono/metadata/object.h> @@ -184,20 +185,17 @@ mono_threadpool_enqueue_work_item (MonoDomain *domain, MonoObject *work_item, Mo current_domain = mono_domain_get (); if (current_domain == domain) { mono_runtime_invoke_checked (unsafe_queue_custom_work_item_method, NULL, args, error); - return_val_if_nok (error, FALSE); } else { mono_thread_push_appdomain_ref (domain); - if (mono_domain_set (domain, FALSE)) { + if (mono_domain_set_fast (domain, FALSE)) { mono_runtime_invoke_checked (unsafe_queue_custom_work_item_method, NULL, args, error); - if (!is_ok (error)) { - mono_thread_pop_appdomain_ref (); - return FALSE; - } - mono_domain_set (current_domain, TRUE); + mono_domain_set_fast (current_domain, TRUE); + } else { + // mono_domain_set_fast failing still leads to success. } mono_thread_pop_appdomain_ref (); } - return TRUE; + return is_ok (error); } /* LOCKING: domains_lock must be held. */ @@ -364,7 +362,7 @@ worker_callback (void) ThreadState_Background); mono_thread_push_appdomain_ref (tpdomain->domain); - if (mono_domain_set (tpdomain->domain, FALSE)) { + if (mono_domain_set_fast (tpdomain->domain, FALSE)) { MonoObject *exc = NULL, *res; res = try_invoke_perform_wait_callback (&exc, error); @@ -378,7 +376,7 @@ worker_callback (void) retire = TRUE; } - mono_domain_set (mono_get_root_domain (), TRUE); + mono_domain_set_fast (mono_get_root_domain (), TRUE); } mono_thread_pop_appdomain_ref (); @@ -501,13 +499,7 @@ mono_threadpool_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObj MONO_OBJECT_SETREF_INTERNAL (ares, handle, (MonoObject*) wait_handle); } mono_monitor_exit_internal ((MonoObject*) ares); -#ifdef HOST_WIN32 - MONO_ENTER_GC_SAFE; - mono_win32_wait_for_single_object_ex (wait_event, INFINITE, TRUE); - MONO_EXIT_GC_SAFE; -#else mono_w32handle_wait_one (wait_event, MONO_INFINITE_WAIT, TRUE); -#endif } ac = (MonoAsyncCall*) ares->object_data; @@ -807,24 +799,3 @@ ves_icall_System_Threading_ThreadPool_RequestWorkerThread (MonoError *error) mono_refcount_dec (&threadpool); return TRUE; } - -MonoBoolean G_GNUC_UNUSED -ves_icall_System_Threading_ThreadPool_PostQueuedCompletionStatus (MonoNativeOverlapped *native_overlapped, MonoError *error) -{ - /* This copy the behavior of the current Mono implementation */ - mono_error_set_not_implemented (error, ""); - return FALSE; -} - -MonoBoolean G_GNUC_UNUSED -ves_icall_System_Threading_ThreadPool_BindIOCompletionCallbackNative (gpointer file_handle, MonoError *error) -{ - /* This copy the behavior of the current Mono implementation */ - return TRUE; -} - -MonoBoolean G_GNUC_UNUSED -ves_icall_System_Threading_ThreadPool_IsThreadPoolHosted (MonoError *error) -{ - return FALSE; -} diff --git a/mono/metadata/threadpool.h b/mono/metadata/threadpool.h index c02b9861b9..e2ff2b80c4 100644 --- a/mono/metadata/threadpool.h +++ b/mono/metadata/threadpool.h @@ -12,8 +12,6 @@ #include <mono/metadata/object-internals.h> #include <mono/metadata/icalls.h> -typedef struct _MonoNativeOverlapped MonoNativeOverlapped; - void mono_threadpool_cleanup (void); diff --git a/mono/metadata/threads-types.h b/mono/metadata/threads-types.h index f4d65a4ce5..f1f8367ed9 100644 --- a/mono/metadata/threads-types.h +++ b/mono/metadata/threads-types.h @@ -215,6 +215,9 @@ gint32 ves_icall_System_Threading_Interlocked_Decrement_Int(gint32 *location); ICALL_EXPORT gint64 ves_icall_System_Threading_Interlocked_Decrement_Long(gint64 * location); +ICALL_EXPORT +void ves_icall_System_Threading_Interlocked_MemoryBarrierProcessWide (void); + ICALL_EXPORT gint8 ves_icall_System_Threading_Thread_VolatileRead1 (void *ptr); @@ -275,6 +278,9 @@ gint32 ves_icall_System_Threading_Volatile_Read4 (void *ptr); ICALL_EXPORT gint64 ves_icall_System_Threading_Volatile_Read8 (void *ptr); +ICALL_EXPORT +guint64 ves_icall_System_Threading_Volatile_ReadU8 (void *ptr); + ICALL_EXPORT void * ves_icall_System_Threading_Volatile_ReadIntPtr (void *ptr); @@ -299,6 +305,9 @@ void ves_icall_System_Threading_Volatile_Write4 (void *ptr, gint32); ICALL_EXPORT void ves_icall_System_Threading_Volatile_Write8 (void *ptr, gint64); +ICALL_EXPORT +void ves_icall_System_Threading_Volatile_WriteU8 (void *ptr, guint64); + ICALL_EXPORT void ves_icall_System_Threading_Volatile_WriteIntPtr (void *ptr, void *); diff --git a/mono/metadata/threads.c.REMOVED.git-id b/mono/metadata/threads.c.REMOVED.git-id index 2391825a12..3f9846eea3 100644 --- a/mono/metadata/threads.c.REMOVED.git-id +++ b/mono/metadata/threads.c.REMOVED.git-id @@ -1 +1 @@ -6f5a08f73e135167470b565447164d792b75be19 \ No newline at end of file +913f01ea4583e438cdaca45bb19d1d52d902b6a6 \ No newline at end of file diff --git a/mono/metadata/verify.c.REMOVED.git-id b/mono/metadata/verify.c.REMOVED.git-id index 0fa49d904c..0e09c8efda 100644 --- a/mono/metadata/verify.c.REMOVED.git-id +++ b/mono/metadata/verify.c.REMOVED.git-id @@ -1 +1 @@ -7edc8f9909c13fa5696bca2aad4129a554999233 \ No newline at end of file +842fa588bda94fbd8da74bab13b774eb2240be55 \ No newline at end of file diff --git a/mono/metadata/w32event-unix.c b/mono/metadata/w32event-unix.c index 7737beba02..4d38307ac2 100644 --- a/mono/metadata/w32event-unix.c +++ b/mono/metadata/w32event-unix.c @@ -37,7 +37,7 @@ struct MonoW32HandleNamedEvent { MonoW32HandleNamespace sharedns; }; -static void event_handle_signal (MonoW32Handle *handle_data) +static gint32 event_handle_signal (MonoW32Handle *handle_data) { MonoW32HandleEvent *event_handle; @@ -52,6 +52,7 @@ static void event_handle_signal (MonoW32Handle *handle_data) } else { mono_w32handle_set_signal_state (handle_data, TRUE, TRUE); } + return MONO_W32HANDLE_WAIT_RET_SUCCESS_0; } static gboolean event_handle_own (MonoW32Handle *handle_data, gboolean *abandoned) diff --git a/mono/metadata/w32file-unix.c.REMOVED.git-id b/mono/metadata/w32file-unix.c.REMOVED.git-id index 419fca2fd2..60e8d8beb6 100644 --- a/mono/metadata/w32file-unix.c.REMOVED.git-id +++ b/mono/metadata/w32file-unix.c.REMOVED.git-id @@ -1 +1 @@ -b875b40979520776bd091436a518bf1235a7f6f5 \ No newline at end of file +184165554a9e418d4201192d10f7a6d528021834 \ No newline at end of file diff --git a/mono/metadata/w32file-win32.c b/mono/metadata/w32file-win32.c index 72a824793a..e952de61b7 100644 --- a/mono/metadata/w32file-win32.c +++ b/mono/metadata/w32file-win32.c @@ -58,7 +58,7 @@ mono_w32file_create(const gunichar2 *name, guint32 fileaccess, guint32 sharemode { gpointer res; MONO_ENTER_GC_SAFE; - res = CreateFile (name, fileaccess, sharemode, NULL, createmode, attrs, NULL); + res = CreateFileW (name, fileaccess, sharemode, NULL, createmode, attrs, NULL); MONO_EXIT_GC_SAFE; return res; } @@ -78,24 +78,49 @@ mono_w32file_delete (const gunichar2 *name) { gboolean res; MONO_ENTER_GC_SAFE; - res = DeleteFile (name); + res = DeleteFileW (name); MONO_EXIT_GC_SAFE; return res; } +// See win32_wait_interrupt_handler for details. +static void +win32_io_interrupt_handler (gpointer ignored) +{ +} + gboolean mono_w32file_read(gpointer handle, gpointer buffer, guint32 numbytes, guint32 *bytesread, gint32 *win32error) { gboolean res; MonoThreadInfo *info = mono_thread_info_current (); + gboolean alerted = FALSE; + + if (info) { + mono_thread_info_install_interrupt (win32_io_interrupt_handler, NULL, &alerted); + if (alerted) { + SetLastError (ERROR_OPERATION_ABORTED); + *win32error = ERROR_OPERATION_ABORTED; + return FALSE; + } + mono_win32_enter_blocking_io_call (info, handle); + } - mono_win32_enter_blocking_io_call (info, (HANDLE)handle); MONO_ENTER_GC_SAFE; - res = ReadFile ((HANDLE)handle, buffer, numbytes, (PDWORD)bytesread, NULL); + if (info && mono_thread_info_is_interrupt_state (info)) { + res = FALSE; + SetLastError (ERROR_OPERATION_ABORTED); + } else { + res = ReadFile (handle, buffer, numbytes, (PDWORD)bytesread, NULL); + } if (!res) *win32error = GetLastError (); MONO_EXIT_GC_SAFE; - mono_win32_leave_blocking_io_call (info, (HANDLE)handle); + + if (info) { + mono_win32_leave_blocking_io_call (info, handle); + mono_thread_info_uninstall_interrupt (&alerted); + } return res; } @@ -105,14 +130,33 @@ mono_w32file_write (gpointer handle, gconstpointer buffer, guint32 numbytes, gui { gboolean res; MonoThreadInfo *info = mono_thread_info_current (); + gboolean alerted = FALSE; + + if (info) { + mono_thread_info_install_interrupt (win32_io_interrupt_handler, NULL, &alerted); + if (alerted) { + SetLastError (ERROR_OPERATION_ABORTED); + *win32error = ERROR_OPERATION_ABORTED; + return FALSE; + } + mono_win32_enter_blocking_io_call (info, handle); + } - mono_win32_enter_blocking_io_call (info, (HANDLE)handle); MONO_ENTER_GC_SAFE; - res = WriteFile ((HANDLE)handle, buffer, numbytes, (PDWORD)byteswritten, NULL); + if (info && mono_thread_info_is_interrupt_state (info)) { + res = FALSE; + SetLastError (ERROR_OPERATION_ABORTED); + } else { + res = WriteFile (handle, buffer, numbytes, (PDWORD)byteswritten, NULL); + } if (!res) *win32error = GetLastError (); MONO_EXIT_GC_SAFE; - mono_win32_leave_blocking_io_call (info, (HANDLE)handle); + + if (info) { + mono_win32_leave_blocking_io_call (info, handle); + mono_thread_info_uninstall_interrupt (&alerted); + } return res; } @@ -178,21 +222,21 @@ mono_w32file_filetime_to_systemtime (const FILETIME *file_time, SYSTEMTIME *syst } gpointer -mono_w32file_find_first (const gunichar2 *pattern, WIN32_FIND_DATA *find_data) +mono_w32file_find_first (const gunichar2 *pattern, WIN32_FIND_DATAW *find_data) { gpointer res; MONO_ENTER_GC_SAFE; - res = FindFirstFile (pattern, find_data); + res = FindFirstFileW (pattern, find_data); MONO_EXIT_GC_SAFE; return res; } gboolean -mono_w32file_find_next (gpointer handle, WIN32_FIND_DATA *find_data) +mono_w32file_find_next (gpointer handle, WIN32_FIND_DATAW *find_data) { gboolean res; MONO_ENTER_GC_SAFE; - res = FindNextFile (handle, find_data); + res = FindNextFileW (handle, find_data); MONO_EXIT_GC_SAFE; return res; } @@ -212,7 +256,7 @@ mono_w32file_create_directory (const gunichar2 *name) { gboolean res; MONO_ENTER_GC_SAFE; - res = CreateDirectory (name, NULL); + res = CreateDirectoryW (name, NULL); MONO_EXIT_GC_SAFE; return res; } @@ -222,7 +266,7 @@ mono_w32file_remove_directory (const gunichar2 *name) { gboolean res; MONO_ENTER_GC_SAFE; - res = RemoveDirectory (name); + res = RemoveDirectoryW (name); MONO_EXIT_GC_SAFE; return res; } @@ -235,33 +279,25 @@ guint32 mono_w32file_get_attributes (const gunichar2 *name) { guint32 res; - guint32 error; HANDLE find_handle; - WIN32_FIND_DATA find_data; + WIN32_FIND_DATAW find_data; MONO_ENTER_GC_SAFE; - res = GetFileAttributes (name); - error = GetLastError (); + + res = GetFileAttributesW (name); + if (res == INVALID_FILE_ATTRIBUTES && GetLastError () == ERROR_SHARING_VIOLATION) { + find_handle = FindFirstFileW (name, &find_data); + if (find_handle != INVALID_HANDLE_VALUE) { + FindClose (find_handle); + res = find_data.dwFileAttributes; + } else { + res = INVALID_FILE_ATTRIBUTES; + } + } + MONO_EXIT_GC_SAFE; - if (res != INVALID_FILE_ATTRIBUTES) - return res; - - if (error != ERROR_SHARING_VIOLATION) - return INVALID_FILE_ATTRIBUTES; - - MONO_ENTER_GC_SAFE; - find_handle = FindFirstFile (name, &find_data); - MONO_EXIT_GC_SAFE; - - if (find_handle == INVALID_HANDLE_VALUE) - return INVALID_FILE_ATTRIBUTES; - - MONO_ENTER_GC_SAFE; - FindClose (find_handle); - MONO_EXIT_GC_SAFE; - - return find_data.dwFileAttributes; + return res; } static gint64 @@ -274,44 +310,35 @@ gboolean mono_w32file_get_attributes_ex (const gunichar2 *name, MonoIOStat *stat) { gboolean res; - guint32 error; HANDLE find_handle; - WIN32_FIND_DATA find_data; + WIN32_FIND_DATAW find_data; WIN32_FILE_ATTRIBUTE_DATA file_attribute_data; MONO_ENTER_GC_SAFE; - res = GetFileAttributesEx (name, GetFileExInfoStandard, &file_attribute_data); - error = GetLastError (); - MONO_EXIT_GC_SAFE; + + res = GetFileAttributesExW (name, GetFileExInfoStandard, &file_attribute_data); if (res) { stat->attributes = file_attribute_data.dwFileAttributes; stat->creation_time = convert_filetime (&file_attribute_data.ftCreationTime); stat->last_access_time = convert_filetime (&file_attribute_data.ftLastAccessTime); stat->last_write_time = convert_filetime (&file_attribute_data.ftLastWriteTime); stat->length = ((gint64)file_attribute_data.nFileSizeHigh << 32) | file_attribute_data.nFileSizeLow; - return TRUE; + } else if (!res && GetLastError () == ERROR_SHARING_VIOLATION) { + find_handle = FindFirstFileW (name, &find_data); + if (find_handle != INVALID_HANDLE_VALUE) { + FindClose (find_handle); + stat->attributes = find_data.dwFileAttributes; + stat->creation_time = convert_filetime (&find_data.ftCreationTime); + stat->last_access_time = convert_filetime (&find_data.ftLastAccessTime); + stat->last_write_time = convert_filetime (&find_data.ftLastWriteTime); + stat->length = ((gint64)find_data.nFileSizeHigh << 32) | find_data.nFileSizeLow; + res = TRUE; + } } - if (error != ERROR_SHARING_VIOLATION) - return FALSE; - - MONO_ENTER_GC_SAFE; - find_handle = FindFirstFile (name, &find_data); MONO_EXIT_GC_SAFE; - if (find_handle == INVALID_HANDLE_VALUE) - return FALSE; - - MONO_ENTER_GC_SAFE; - FindClose (find_handle); - MONO_EXIT_GC_SAFE; - - stat->attributes = find_data.dwFileAttributes; - stat->creation_time = convert_filetime (&find_data.ftCreationTime); - stat->last_access_time = convert_filetime (&find_data.ftLastAccessTime); - stat->last_write_time = convert_filetime (&find_data.ftLastWriteTime); - stat->length = ((gint64)find_data.nFileSizeHigh << 32) | find_data.nFileSizeLow; - return TRUE; + return res; } gboolean @@ -319,7 +346,7 @@ mono_w32file_set_attributes (const gunichar2 *name, guint32 attrs) { gboolean res; MONO_ENTER_GC_SAFE; - res = SetFileAttributes (name, attrs); + res = SetFileAttributesW (name, attrs); MONO_EXIT_GC_SAFE; return res; } @@ -329,7 +356,7 @@ mono_w32file_get_cwd (guint32 length, gunichar2 *buffer) { guint32 res; MONO_ENTER_GC_SAFE; - res = GetCurrentDirectory (length, buffer); + res = GetCurrentDirectoryW (length, buffer); MONO_EXIT_GC_SAFE; return res; } @@ -339,7 +366,7 @@ mono_w32file_set_cwd (const gunichar2 *path) { gboolean res; MONO_ENTER_GC_SAFE; - res = SetCurrentDirectory (path); + res = SetCurrentDirectoryW (path); MONO_EXIT_GC_SAFE; return res; } @@ -401,7 +428,7 @@ mono_w32file_move (const gunichar2 *path, const gunichar2 *dest, gint32 *error) MONO_ENTER_GC_SAFE; - result = MoveFile (path, dest); + result = MoveFileW (path, dest); if (!result) *error = GetLastError (); @@ -419,7 +446,7 @@ mono_w32file_replace (const gunichar2 *destinationFileName, const gunichar2 *sou MONO_ENTER_GC_SAFE; - result = ReplaceFile (destinationFileName, sourceFileName, destinationBackupFileName, flags, NULL, NULL); + result = ReplaceFileW (destinationFileName, sourceFileName, destinationBackupFileName, flags, NULL, NULL); if (!result) *error = GetLastError (); @@ -447,7 +474,7 @@ mono_w32file_copy (const gunichar2 *path, const gunichar2 *dest, gboolean overwr MONO_ENTER_GC_SAFE; - result = CopyFile (path, dest, !overwrite); + result = CopyFileW (path, dest, !overwrite); if (!result) *error = GetLastError (); @@ -576,7 +603,7 @@ mono_w32file_get_logical_drive (guint32 len, gunichar2 *buf) { gint32 res; MONO_ENTER_GC_SAFE; - res = GetLogicalDriveStrings (len, buf); + res = GetLogicalDriveStringsW (len, buf); MONO_EXIT_GC_SAFE; return res; } diff --git a/mono/metadata/w32file.c b/mono/metadata/w32file.c index 79a121f1ba..d58a28da99 100644 --- a/mono/metadata/w32file.c +++ b/mono/metadata/w32file.c @@ -187,6 +187,8 @@ static guint32 convert_attrs(MonoFileAttributes attrs) /* System.IO.MonoIO internal calls */ +#if !ENABLE_NETCORE + MonoBoolean ves_icall_System_IO_MonoIO_CreateDirectory (const gunichar2 *path, gint32 *error) { @@ -839,6 +841,18 @@ void ves_icall_System_IO_MonoIO_Unlock (HANDLE handle, gint64 position, mono_w32file_unlock (handle, position, length, error); } + +#ifndef HOST_WIN32 +void mono_w32handle_dump (void); + +void ves_icall_System_IO_MonoIO_DumpHandles (void) +{ + mono_w32handle_dump (); +} +#endif /* !HOST_WIN32 */ + +#endif /* !ENABLE_NETCORE */ + //Support for io-layer free mmap'd files. #if defined (TARGET_IOS) || defined (TARGET_ANDROID) @@ -883,12 +897,3 @@ mono_filesize_from_fd (int fd) } #endif - -#ifndef HOST_WIN32 -void mono_w32handle_dump (void); - -void ves_icall_System_IO_MonoIO_DumpHandles (void) -{ - mono_w32handle_dump (); -} -#endif /* !HOST_WIN32 */ diff --git a/mono/metadata/w32file.h b/mono/metadata/w32file.h index 04d119b347..ac68571355 100644 --- a/mono/metadata/w32file.h +++ b/mono/metadata/w32file.h @@ -113,6 +113,8 @@ typedef struct _MonoFSAsyncResult { */ /* System.IO.MonoIO */ +#if !ENABLE_NETCORE + ICALL_EXPORT MonoBoolean ves_icall_System_IO_MonoIO_CreateDirectory (const gunichar2 *path, gint32 *error); @@ -237,6 +239,12 @@ ves_icall_System_IO_MonoIO_ReplaceFile (const gunichar2 *source_file_name, const const gunichar2 *destination_backup_file_name, MonoBoolean ignore_metadata_errors, gint32 *error); +ICALL_EXPORT +void +ves_icall_System_IO_MonoIO_DumpHandles (void); + +#endif /* !ENABLE_NETCORE */ + #if defined (TARGET_IOS) || defined (TARGET_ANDROID) MONO_API MONO_RT_EXTERNAL_ONLY gint64 @@ -247,10 +255,6 @@ mono_filesize_from_fd (int fd); #endif -ICALL_EXPORT -void -ves_icall_System_IO_MonoIO_DumpHandles (void); - #if !defined(HOST_WIN32) #define GENERIC_READ 0x80000000 diff --git a/mono/metadata/w32handle.c b/mono/metadata/w32handle.c index cb84302761..a7ef008a57 100644 --- a/mono/metadata/w32handle.c +++ b/mono/metadata/w32handle.c @@ -540,11 +540,13 @@ mono_w32handle_ops_typesize (MonoW32Type type) return handle_ops [type]->typesize (); } -static void +static gint32 mono_w32handle_ops_signal (MonoW32Handle *handle_data) { if (handle_ops [handle_data->type] && handle_ops [handle_data->type]->signal) - handle_ops [handle_data->type]->signal (handle_data); + return handle_ops [handle_data->type]->signal (handle_data); + + return MONO_W32HANDLE_WAIT_RET_SUCCESS_0; } static gboolean @@ -813,6 +815,13 @@ own_if_owned (MonoW32Handle *handle_data, gboolean *abandoned) return TRUE; } +#ifdef HOST_WIN32 +MonoW32HandleWaitRet +mono_w32handle_wait_one (gpointer handle, guint32 timeout, gboolean alertable) +{ + return mono_w32handle_convert_wait_ret (mono_coop_win32_wait_for_single_object_ex (handle, timeout, alertable), 1); +} +#else MonoW32HandleWaitRet mono_w32handle_wait_one (gpointer handle, guint32 timeout, gboolean alertable) { @@ -903,6 +912,7 @@ done: return ret; } +#endif /* HOST_WIN32 */ static MonoW32Handle* mono_w32handle_has_duplicates (MonoW32Handle *handles [ ], gsize nhandles) @@ -965,6 +975,16 @@ mono_w32handle_check_duplicates (MonoW32Handle *handles [ ], gsize nhandles, gbo mono_w32handle_clear_duplicates (handles, nhandles); } +#ifdef HOST_WIN32 +MonoW32HandleWaitRet +mono_w32handle_wait_multiple (gpointer *handles, gsize nhandles, gboolean waitall, guint32 timeout, gboolean alertable, MonoError *error) +{ + DWORD const wait_result = (nhandles != 1) + ? mono_coop_win32_wait_for_multiple_objects_ex (nhandles, handles, waitall, timeout, alertable, error) + : mono_coop_win32_wait_for_single_object_ex (handles [0], timeout, alertable); + return mono_w32handle_convert_wait_ret (wait_result, nhandles); +} +#else MonoW32HandleWaitRet mono_w32handle_wait_multiple (gpointer *handles, gsize nhandles, gboolean waitall, guint32 timeout, gboolean alertable, MonoError *error) { @@ -1159,7 +1179,15 @@ done: return ret; } +#endif /* HOST_WIN32 */ +#ifdef HOST_WIN32 +MonoW32HandleWaitRet +mono_w32handle_signal_and_wait (gpointer signal_handle, gpointer wait_handle, guint32 timeout, gboolean alertable) +{ + return mono_w32handle_convert_wait_ret (mono_coop_win32_signal_object_and_wait (signal_handle, wait_handle, timeout, alertable), 1); +} +#else MonoW32HandleWaitRet mono_w32handle_signal_and_wait (gpointer signal_handle, gpointer wait_handle, guint32 timeout, gboolean alertable) { @@ -1202,10 +1230,16 @@ mono_w32handle_signal_and_wait (gpointer signal_handle, gpointer wait_handle, gu mono_w32handle_lock_handles (handles_data, 2); - mono_w32handle_ops_signal (signal_handle_data); + gint32 signal_ret = mono_w32handle_ops_signal (signal_handle_data); mono_w32handle_unlock (signal_handle_data); + if (signal_ret == MONO_W32HANDLE_WAIT_RET_TOO_MANY_POSTS || + signal_ret == MONO_W32HANDLE_WAIT_RET_NOT_OWNED_BY_CALLER) { + ret = (MonoW32HandleWaitRet) signal_ret; + goto done; + } + if (mono_w32handle_test_capabilities (wait_handle_data, MONO_W32HANDLE_CAP_OWN)) { if (own_if_owned (wait_handle_data, &abandoned)) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_HANDLE, "%s: handle %p already owned", __func__, wait_handle_data); @@ -1263,3 +1297,4 @@ done: return ret; } +#endif /* HOST_WIN32 */ diff --git a/mono/metadata/w32handle.h b/mono/metadata/w32handle.h index 37f454c1c3..215606314f 100644 --- a/mono/metadata/w32handle.h +++ b/mono/metadata/w32handle.h @@ -48,6 +48,8 @@ typedef enum { MONO_W32HANDLE_WAIT_RET_ALERTED = -1, MONO_W32HANDLE_WAIT_RET_TIMEOUT = -2, MONO_W32HANDLE_WAIT_RET_FAILED = -3, + MONO_W32HANDLE_WAIT_RET_TOO_MANY_POSTS = -4, + MONO_W32HANDLE_WAIT_RET_NOT_OWNED_BY_CALLER = -5 } MonoW32HandleWaitRet; typedef struct @@ -55,7 +57,7 @@ typedef struct void (*close)(gpointer data); /* mono_w32handle_signal_and_wait */ - void (*signal)(MonoW32Handle *handle_data); + gint32 (*signal)(MonoW32Handle *handle_data); /* Called by mono_w32handle_wait_one and mono_w32handle_wait_multiple, * with the handle locked (shared handles aren't locked.) diff --git a/mono/metadata/w32mutex-unix.c b/mono/metadata/w32mutex-unix.c index 54596415d9..0e1da775ff 100644 --- a/mono/metadata/w32mutex-unix.c +++ b/mono/metadata/w32mutex-unix.c @@ -68,7 +68,7 @@ thread_disown_mutex (MonoInternalThread *internal, gpointer handle) mono_w32handle_close (handle); } -static void +static gint32 mutex_handle_signal (MonoW32Handle *handle_data) { MonoW32HandleMutex *mutex_handle; @@ -87,6 +87,7 @@ mutex_handle_signal (MonoW32Handle *handle_data) } else if (!pthread_equal (mutex_handle->tid, tid)) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_MUTEX, "%s: we don't own %s handle %p (owned by %ld, me %ld)", __func__, mono_w32handle_get_typename (handle_data->type), handle_data, (long)mutex_handle->tid, (long)tid); + return MONO_W32HANDLE_WAIT_RET_NOT_OWNED_BY_CALLER; } else { /* OK, we own this mutex */ mutex_handle->recursion--; @@ -101,6 +102,7 @@ mutex_handle_signal (MonoW32Handle *handle_data) mono_w32handle_set_signal_state (handle_data, TRUE, FALSE); } } + return MONO_W32HANDLE_WAIT_RET_SUCCESS_0; } static gboolean diff --git a/mono/metadata/w32process-unix.c.REMOVED.git-id b/mono/metadata/w32process-unix.c.REMOVED.git-id index 0ebc8ac17e..cc960cc58f 100644 --- a/mono/metadata/w32process-unix.c.REMOVED.git-id +++ b/mono/metadata/w32process-unix.c.REMOVED.git-id @@ -1 +1 @@ -b937b3315e34933da500d5f64488eb8a362f7f86 \ No newline at end of file +334982a42e5ef9aa11ad112aacf795f070fd4120 \ No newline at end of file diff --git a/mono/metadata/w32process.c b/mono/metadata/w32process.c index 875b7e37ce..e738971d7f 100644 --- a/mono/metadata/w32process.c +++ b/mono/metadata/w32process.c @@ -461,7 +461,7 @@ get_domain_assemblies (MonoDomain *domain) mono_domain_assemblies_lock (domain); for (tmp = domain->domain_assemblies; tmp; tmp = tmp->next) { MonoAssembly *ass = (MonoAssembly *)tmp->data; - if (ass->image->fileio_used) + if (m_image_is_fileio_used (ass->image)) continue; g_ptr_array_add (assemblies, ass); } diff --git a/mono/metadata/w32semaphore-unix.c b/mono/metadata/w32semaphore-unix.c index a69412c552..86562dc97e 100644 --- a/mono/metadata/w32semaphore-unix.c +++ b/mono/metadata/w32semaphore-unix.c @@ -28,7 +28,7 @@ struct MonoW32HandleNamedSemaphore { MonoW32HandleNamespace sharedns; }; -static void sem_handle_signal (MonoW32Handle *handle_data) +static gint32 sem_handle_signal (MonoW32Handle *handle_data) { MonoW32HandleSemaphore *sem_handle; @@ -41,6 +41,7 @@ static void sem_handle_signal (MonoW32Handle *handle_data) if (sem_handle->val + 1 > (guint32)sem_handle->max) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_SEMAPHORE, "%s: %s handle %p val %d count %d max %d, max value would be exceeded", __func__, mono_w32handle_get_typename (handle_data->type), handle_data, sem_handle->val, 1, sem_handle->max); + return MONO_W32HANDLE_WAIT_RET_TOO_MANY_POSTS; } else { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_SEMAPHORE, "%s: %s handle %p val %d count %d max %d", __func__, mono_w32handle_get_typename (handle_data->type), handle_data, sem_handle->val, 1, sem_handle->max); @@ -48,6 +49,7 @@ static void sem_handle_signal (MonoW32Handle *handle_data) sem_handle->val += 1; mono_w32handle_set_signal_state (handle_data, TRUE, TRUE); } + return MONO_W32HANDLE_WAIT_RET_SUCCESS_0; } static gboolean sem_handle_own (MonoW32Handle *handle_data, gboolean *abandoned) diff --git a/mono/metadata/w32socket-win32.c b/mono/metadata/w32socket-win32.c index f38c86ab1a..44147f6c68 100644 --- a/mono/metadata/w32socket-win32.c +++ b/mono/metadata/w32socket-win32.c @@ -38,15 +38,36 @@ mono_w32socket_cleanup (void) { } +// See win32_wait_interrupt_handler for details. +static void +win32_io_interrupt_handler(gpointer ignored) +{ +} + #define INTERRUPTABLE_SOCKET_CALL(blocking, ret, op, sock, ...) \ MonoThreadInfo *info = mono_thread_info_current (); \ - if (blocking) \ - mono_win32_enter_blocking_io_call (info, (HANDLE)sock); \ - MONO_ENTER_GC_SAFE; \ - ret = op (sock, __VA_ARGS__); \ - MONO_EXIT_GC_SAFE; \ - if (blocking) \ - mono_win32_leave_blocking_io_call (info, (HANDLE)sock); + gboolean alerted = FALSE; \ + if (blocking && info) { \ + mono_thread_info_install_interrupt (win32_io_interrupt_handler, NULL, &alerted); \ + if (alerted) { \ + WSASetLastError (WSAEINTR); \ + } else { \ + mono_win32_enter_blocking_io_call (info, (HANDLE)sock); \ + } \ + } \ + if (!alerted) { \ + MONO_ENTER_GC_SAFE; \ + if (blocking && info && mono_thread_info_is_interrupt_state (info)) { \ + WSASetLastError (WSAEINTR); \ + } else { \ + ret = op (sock, __VA_ARGS__); \ + } \ + MONO_EXIT_GC_SAFE; \ + } \ + if (blocking && info && !alerted) { \ + mono_win32_leave_blocking_io_call (info, (HANDLE)sock); \ + mono_thread_info_uninstall_interrupt (&alerted); \ + } SOCKET mono_w32socket_accept (SOCKET s, struct sockaddr *addr, socklen_t *addrlen, gboolean blocking) { @@ -115,17 +136,32 @@ internal_w32socket_transmit_file (SOCKET sock, gpointer file, TRANSMIT_FILE_BUFF if (!WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER, &transmit_file_guid, sizeof (GUID), &transmit_file, sizeof (LPFN_TRANSMITFILE), &output_bytes, NULL, NULL)) { MonoThreadInfo *info = mono_thread_info_current (); + gboolean alerted = FALSE; - if (blocking) - mono_win32_enter_blocking_io_call (info, (HANDLE)sock); + if (blocking && info) { + mono_thread_info_install_interrupt (win32_io_interrupt_handler, NULL, &alerted); + if (alerted) { + WSASetLastError (WSAEINTR); + } else { + mono_win32_enter_blocking_io_call (info, (HANDLE)sock); + } + } - MONO_ENTER_GC_SAFE; - if (transmit_file (sock, file, 0, 0, NULL, lpTransmitBuffers, dwReserved)) - ret = 0; - MONO_EXIT_GC_SAFE; + if (!alerted) { + MONO_ENTER_GC_SAFE; + if (blocking && info && mono_thread_info_is_interrupt_state (info)) { + WSASetLastError (WSAEINTR); + } else { + if (transmit_file (sock, file, 0, 0, NULL, lpTransmitBuffers, dwReserved)) + ret = 0; + } + MONO_EXIT_GC_SAFE; + } - if (blocking) + if (blocking && info && !alerted) { mono_win32_leave_blocking_io_call (info, (HANDLE)sock); + mono_thread_info_uninstall_interrupt (&alerted); + } } if (ret != 0) @@ -144,17 +180,32 @@ internal_w32socket_disconnect (SOCKET sock, gboolean reuse, gboolean blocking) if (!WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER, &disconnect_guid, sizeof (GUID), &disconnect, sizeof (LPFN_DISCONNECTEX), &output_bytes, NULL, NULL)) { MonoThreadInfo *info = mono_thread_info_current (); + gboolean alerted = FALSE; - if (blocking) - mono_win32_enter_blocking_io_call (info, (HANDLE)sock); + if (blocking && info) { + mono_thread_info_install_interrupt (win32_io_interrupt_handler, NULL, &alerted); + if (alerted) { + WSASetLastError (WSAEINTR); + } else { + mono_win32_enter_blocking_io_call (info, (HANDLE)sock); + } + } - MONO_ENTER_GC_SAFE; - if (disconnect (sock, NULL, reuse ? TF_REUSE_SOCKET : 0, 0)) - ret = 0; - MONO_EXIT_GC_SAFE; + if (!alerted) { + MONO_ENTER_GC_SAFE; + if (blocking && info && mono_thread_info_is_interrupt_state (info)) { + WSASetLastError (WSAEINTR); + } else { + if (disconnect (sock, NULL, reuse ? TF_REUSE_SOCKET : 0, 0)) + ret = 0; + } + MONO_EXIT_GC_SAFE; + } - if (blocking) + if (blocking && info && !alerted) { mono_win32_leave_blocking_io_call (info, (HANDLE)sock); + mono_thread_info_uninstall_interrupt (&alerted); + } } if (ret != 0) diff --git a/mono/metadata/w32socket.c b/mono/metadata/w32socket.c index a8a4f64c63..2aae8102ed 100644 --- a/mono/metadata/w32socket.c +++ b/mono/metadata/w32socket.c @@ -1186,7 +1186,7 @@ create_sockaddr_from_handle (MonoObjectHandle saddr_obj, socklen_t *sa_size, gin * two bytes hold the SocketAddress family */ if (len - 2 >= sizeof (sock_un->sun_path)) { - mono_error_set_argument_out_of_range (error, "SocketAddress.Size"); + mono_error_set_argument_out_of_range (error, "SocketAddress.Size", "MonoArgumentException:SocketAddress.Size"); mono_gchandle_free_internal (gchandle); return NULL; } @@ -1923,14 +1923,14 @@ ipaddress_handle_to_struct_in_addr (MonoObjectHandle ipaddr) struct in_addr inaddr; MonoClassField *field; - field = mono_class_get_field_from_name_full (mono_handle_class (ipaddr), "m_Address", NULL); + field = mono_class_get_field_from_name_full (mono_handle_class (ipaddr), "_addressOrScopeId", NULL); g_assert (field); /* No idea why .net uses a 64bit type to hold a 32bit value... * * Internal value of IPAddess is in little-endian order */ - inaddr.s_addr = GUINT_FROM_LE ((guint32)MONO_HANDLE_GET_FIELD_VAL (ipaddr, guint64, field)); + inaddr.s_addr = GUINT_FROM_LE ((guint32)MONO_HANDLE_GET_FIELD_VAL (ipaddr, guint32, field)); return inaddr; } @@ -1943,7 +1943,7 @@ ipaddress_handle_to_struct_in6_addr (MonoObjectHandle ipaddr) MonoClassField *field; int i; - field = mono_class_get_field_from_name_full (mono_handle_class (ipaddr), "m_Numbers", NULL); + field = mono_class_get_field_from_name_full (mono_handle_class (ipaddr), "_numbers", NULL); g_assert (field); MonoArrayHandle data = MONO_HANDLE_NEW_GET_FIELD (ipaddr, MonoArray, field); diff --git a/mono/metadata/w32subset.h b/mono/metadata/w32subset.h index d66b5ce577..c3be13415a 100644 --- a/mono/metadata/w32subset.h +++ b/mono/metadata/w32subset.h @@ -178,3 +178,35 @@ #define HAVE_API_SUPPORT_WIN32_GET_MODULE_HANDLE 0 #endif #endif + +#ifndef HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT +#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#define HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT 1 +#else +#define HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT 0 +#endif +#endif + +#ifndef HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO +#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#define HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO 1 +#else +#define HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO 0 +#endif +#endif + +#ifndef HAVE_API_SUPPORT_WIN32_OPEN_THREAD +#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#define HAVE_API_SUPPORT_WIN32_OPEN_THREAD 1 +#else +#define HAVE_API_SUPPORT_WIN32_OPEN_THREAD 0 +#endif +#endif + +#ifndef HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS +#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#define HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS 1 +#else +#define HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS 0 +#endif +#endif diff --git a/mono/mini/Makefile.am b/mono/mini/Makefile.am index 7a8c94b2fe..b8de67f890 100644 --- a/mono/mini/Makefile.am +++ b/mono/mini/Makefile.am @@ -516,6 +516,7 @@ common_sources = \ ee.h \ mini-runtime.h +# keep in sync with mcs/class/Mono.Runtime.Tests test_sources = \ basic-calls.cs \ basic-long.cs \ @@ -781,40 +782,40 @@ GENMDESC_OPTS= GENMDESC_PRG=python $(srcdir)/genmdesc.py $(target_define) $(srcdir) -cpu-wasm.h: mini-ops.h cpu-wasm.md +cpu-wasm.h: mini-ops.h cpu-wasm.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-wasm.h wasm_desc $(srcdir)/cpu-wasm.md -cpu-x86.h: mini-ops.h cpu-x86.md +cpu-x86.h: mini-ops.h cpu-x86.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-x86.h x86_desc $(srcdir)/cpu-x86.md -cpu-amd64.h: mini-ops.h cpu-amd64.md +cpu-amd64.h: mini-ops.h cpu-amd64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-amd64.h amd64_desc $(srcdir)/cpu-amd64.md -cpu-ppc.h: mini-ops.h cpu-ppc.md +cpu-ppc.h: mini-ops.h cpu-ppc.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-ppc.h ppcg4 $(srcdir)/cpu-ppc.md -cpu-ppc64.h: mini-ops.h cpu-ppc64.md +cpu-ppc64.h: mini-ops.h cpu-ppc64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-ppc64.h ppc64_cpu_desc $(srcdir)/cpu-ppc64.md -cpu-arm.h: mini-ops.h cpu-arm.md +cpu-arm.h: mini-ops.h cpu-arm.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-arm.h arm_cpu_desc $(srcdir)/cpu-arm.md -cpu-arm64.h: mini-ops.h cpu-arm64.md +cpu-arm64.h: mini-ops.h cpu-arm64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-arm64.h arm64_cpu_desc $(srcdir)/cpu-arm64.md -cpu-sparc.h: mini-ops.h cpu-sparc.md +cpu-sparc.h: mini-ops.h cpu-sparc.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-sparc.h sparc_desc $(srcdir)/cpu-sparc.md -cpu-s390x.h: mini-ops.h cpu-s390x.md +cpu-s390x.h: mini-ops.h cpu-s390x.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-s390x.h s390x_cpu_desc $(srcdir)/cpu-s390x.md -cpu-mips.h: mini-ops.h cpu-mips.md +cpu-mips.h: mini-ops.h cpu-mips.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-mips.h mips_desc $(srcdir)/cpu-mips.md -cpu-riscv32.h: cpu-riscv32.md +cpu-riscv32.h: cpu-riscv32.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-riscv32.h riscv32_cpu_desc $(srcdir)/cpu-riscv32.md -cpu-riscv64.h: cpu-riscv64.md +cpu-riscv64.h: cpu-riscv64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-riscv64.h riscv64_cpu_desc $(srcdir)/cpu-riscv64.md testi: mono test.exe @@ -911,15 +912,20 @@ FULLAOT_LIBS_UNIVERSAL = \ FULLAOT_LIBS_DISABLED = -if FULL_AOT_TESTS # Skip aoting the tests that aren't compiled # on the full aot profiles because they're skipped # on mobile profiles +if FULL_AOT_TESTS +FULLAOT_LIBS_DISABLED += \ + Mono.Posix.dll \ + System.Configuration.dll +else +if FULL_AOT_INTERP_TESTS FULLAOT_LIBS_DISABLED += \ Mono.Posix.dll \ System.Configuration.dll endif - +endif FULLAOT_LIBS = $(filter-out $(FULLAOT_LIBS_DISABLED),$(FULLAOT_LIBS_UNIVERSAL)) @@ -956,9 +962,9 @@ llvmonly_regtests = $(fullaot_regtests) gshared.exe llvmonlycheck: mono $(llvmonly_regtests) rm -rf fullaot-tmp mkdir fullaot-tmp - $(MAKE) fullaot-libs AOT_FLAGS="llvmonly,$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" + $(MAKE) fullaot-libs AOT_FLAGS="llvmonly,clangxx=clang++-6.0,$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" cp $(llvmonly_regtests) $(fullaot_testing_deps) fullaot-tmp/ - MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --aot=llvmonly fullaot-tmp/{$(fullaot_testing_deps_commas),*.exe} || exit 1 + MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --aot=llvmonly,clangxx=clang++-6.0 fullaot-tmp/{$(fullaot_testing_deps_commas),*.exe} || exit 1 ln -s $$PWD/mono fullaot-tmp/ for i in $(llvmonly_regtests); do echo $$i; MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --llvmonly fullaot-tmp/$$i --exclude '!BITCODE' || exit 1; done diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 7a8c94b2fe..b8de67f890 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -516,6 +516,7 @@ common_sources = \ ee.h \ mini-runtime.h +# keep in sync with mcs/class/Mono.Runtime.Tests test_sources = \ basic-calls.cs \ basic-long.cs \ @@ -781,40 +782,40 @@ GENMDESC_OPTS= GENMDESC_PRG=python $(srcdir)/genmdesc.py $(target_define) $(srcdir) -cpu-wasm.h: mini-ops.h cpu-wasm.md +cpu-wasm.h: mini-ops.h cpu-wasm.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-wasm.h wasm_desc $(srcdir)/cpu-wasm.md -cpu-x86.h: mini-ops.h cpu-x86.md +cpu-x86.h: mini-ops.h cpu-x86.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-x86.h x86_desc $(srcdir)/cpu-x86.md -cpu-amd64.h: mini-ops.h cpu-amd64.md +cpu-amd64.h: mini-ops.h cpu-amd64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-amd64.h amd64_desc $(srcdir)/cpu-amd64.md -cpu-ppc.h: mini-ops.h cpu-ppc.md +cpu-ppc.h: mini-ops.h cpu-ppc.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-ppc.h ppcg4 $(srcdir)/cpu-ppc.md -cpu-ppc64.h: mini-ops.h cpu-ppc64.md +cpu-ppc64.h: mini-ops.h cpu-ppc64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-ppc64.h ppc64_cpu_desc $(srcdir)/cpu-ppc64.md -cpu-arm.h: mini-ops.h cpu-arm.md +cpu-arm.h: mini-ops.h cpu-arm.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-arm.h arm_cpu_desc $(srcdir)/cpu-arm.md -cpu-arm64.h: mini-ops.h cpu-arm64.md +cpu-arm64.h: mini-ops.h cpu-arm64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-arm64.h arm64_cpu_desc $(srcdir)/cpu-arm64.md -cpu-sparc.h: mini-ops.h cpu-sparc.md +cpu-sparc.h: mini-ops.h cpu-sparc.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-sparc.h sparc_desc $(srcdir)/cpu-sparc.md -cpu-s390x.h: mini-ops.h cpu-s390x.md +cpu-s390x.h: mini-ops.h cpu-s390x.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-s390x.h s390x_cpu_desc $(srcdir)/cpu-s390x.md -cpu-mips.h: mini-ops.h cpu-mips.md +cpu-mips.h: mini-ops.h cpu-mips.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-mips.h mips_desc $(srcdir)/cpu-mips.md -cpu-riscv32.h: cpu-riscv32.md +cpu-riscv32.h: cpu-riscv32.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-riscv32.h riscv32_cpu_desc $(srcdir)/cpu-riscv32.md -cpu-riscv64.h: cpu-riscv64.md +cpu-riscv64.h: cpu-riscv64.md $(srcdir)/genmdesc.py $(GENMDESC_PRG) cpu-riscv64.h riscv64_cpu_desc $(srcdir)/cpu-riscv64.md testi: mono test.exe @@ -911,15 +912,20 @@ FULLAOT_LIBS_UNIVERSAL = \ FULLAOT_LIBS_DISABLED = -if FULL_AOT_TESTS # Skip aoting the tests that aren't compiled # on the full aot profiles because they're skipped # on mobile profiles +if FULL_AOT_TESTS +FULLAOT_LIBS_DISABLED += \ + Mono.Posix.dll \ + System.Configuration.dll +else +if FULL_AOT_INTERP_TESTS FULLAOT_LIBS_DISABLED += \ Mono.Posix.dll \ System.Configuration.dll endif - +endif FULLAOT_LIBS = $(filter-out $(FULLAOT_LIBS_DISABLED),$(FULLAOT_LIBS_UNIVERSAL)) @@ -956,9 +962,9 @@ llvmonly_regtests = $(fullaot_regtests) gshared.exe llvmonlycheck: mono $(llvmonly_regtests) rm -rf fullaot-tmp mkdir fullaot-tmp - $(MAKE) fullaot-libs AOT_FLAGS="llvmonly,$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" + $(MAKE) fullaot-libs AOT_FLAGS="llvmonly,clangxx=clang++-6.0,$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" cp $(llvmonly_regtests) $(fullaot_testing_deps) fullaot-tmp/ - MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --aot=llvmonly fullaot-tmp/{$(fullaot_testing_deps_commas),*.exe} || exit 1 + MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --aot=llvmonly,clangxx=clang++-6.0 fullaot-tmp/{$(fullaot_testing_deps_commas),*.exe} || exit 1 ln -s $$PWD/mono fullaot-tmp/ for i in $(llvmonly_regtests); do echo $$i; MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --llvmonly fullaot-tmp/$$i --exclude '!BITCODE' || exit 1; done diff --git a/mono/mini/Makefile.in.REMOVED.git-id b/mono/mini/Makefile.in.REMOVED.git-id index 4f1132bf59..82bb8d5003 100644 --- a/mono/mini/Makefile.in.REMOVED.git-id +++ b/mono/mini/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -ca08bcc4fd7c112cd0bf3821ce7a02515008a2e3 \ No newline at end of file +791ce6c3ba55dffeff73ef3f575d35c26410417c \ No newline at end of file diff --git a/mono/mini/alias-analysis.c b/mono/mini/alias-analysis.c index 465be90423..9ebbaaa603 100644 --- a/mono/mini/alias-analysis.c +++ b/mono/mini/alias-analysis.c @@ -150,6 +150,30 @@ lower_store_imm (MonoCompile *cfg, MonoInst *store, MonoInst *ldaddr) return TRUE; } +static void +kill_call_arg_alias (MonoCompile *cfg, GHashTable *addr_loads, GSList *l) +{ + for (; l; l = l->next) { + MonoInst *tmp; + guint32 regpair, reg; + + regpair = (guint32)(gssize)(l->data); + reg = regpair & 0xffffff; + + tmp = (MonoInst *)g_hash_table_lookup (addr_loads, GINT_TO_POINTER (reg)); + if (tmp) { + // This call passes an alias as an argument. This means that the contents + // of the passed pointer can change. If the content is also an alias then + // we need to forget it as we do for moves. + if (g_hash_table_remove (addr_loads, GINT_TO_POINTER (((MonoInst*)tmp->inst_p0)->dreg))) { + if (cfg->verbose_level > 2) + printf ("Killed alias %d\n", ((MonoInst*)tmp->inst_p0)->dreg); + } + + } + } +} + static gboolean lower_memory_access (MonoCompile *cfg) { @@ -264,6 +288,17 @@ handle_instruction: needs_dce = TRUE; } break; + default: { + if (MONO_IS_CALL (ins)) { + MonoCallInst *call = (MonoCallInst*)ins; + + kill_call_arg_alias (cfg, addr_loads, call->out_ireg_args); + } + // FIXME Kill more aliases if used as dreg, since we are not in ssa form. + // This would need some optimizations so we don't lookup hash table for every + // instruction + break; + } } } } diff --git a/mono/mini/aot-compiler.c.REMOVED.git-id b/mono/mini/aot-compiler.c.REMOVED.git-id index ccc86282bf..631454adc0 100644 --- a/mono/mini/aot-compiler.c.REMOVED.git-id +++ b/mono/mini/aot-compiler.c.REMOVED.git-id @@ -1 +1 @@ -462d22828e9b72d0a16225d6739d72808ab2bc77 \ No newline at end of file +49df06410360845e2c923c5a2323766bc97aedad \ No newline at end of file diff --git a/mono/mini/aot-compiler.h b/mono/mini/aot-compiler.h index 643322280a..6b8803b343 100644 --- a/mono/mini/aot-compiler.h +++ b/mono/mini/aot-compiler.h @@ -10,6 +10,7 @@ int mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options, gpointer **aot_state); int mono_compile_deferred_assemblies (guint32 opts, const char *aot_options, gpointer **aot_state); void* mono_aot_readonly_field_override (MonoClassField *field); +gboolean mono_aot_direct_icalls_enabled_for_method (MonoCompile *cfg, MonoMethod *method); gboolean mono_aot_is_shared_got_offset (int offset) MONO_LLVM_INTERNAL; guint32 mono_aot_get_got_offset (MonoJumpInfo *ji) MONO_LLVM_INTERNAL; @@ -21,6 +22,7 @@ char* mono_aot_get_plt_symbol (MonoJumpInfoType type, gconstpointe char* mono_aot_get_direct_call_symbol (MonoJumpInfoType type, gconstpointer data) MONO_LLVM_INTERNAL; int mono_aot_get_method_index (MonoMethod *method) MONO_LLVM_INTERNAL; MonoJumpInfo* mono_aot_patch_info_dup (MonoJumpInfo* ji) MONO_LLVM_INTERNAL; +gboolean mono_aot_can_specialize (MonoMethod *method) MONO_LLVM_INTERNAL; #endif diff --git a/mono/mini/aot-runtime.c.REMOVED.git-id b/mono/mini/aot-runtime.c.REMOVED.git-id index a3859e7dd7..906b12d07d 100644 --- a/mono/mini/aot-runtime.c.REMOVED.git-id +++ b/mono/mini/aot-runtime.c.REMOVED.git-id @@ -1 +1 @@ -0abdc895b47a19e554a020a88141e224146e2d43 \ No newline at end of file +38fedfdf2fd76a433947e89c2cc0e1a7ef1d78c9 \ No newline at end of file diff --git a/mono/mini/aot-runtime.h b/mono/mini/aot-runtime.h index 5824201928..85c4a0c8e2 100644 --- a/mono/mini/aot-runtime.h +++ b/mono/mini/aot-runtime.h @@ -11,7 +11,7 @@ #include "mini.h" /* Version number of the AOT file format */ -#define MONO_AOT_FILE_VERSION 156 +#define MONO_AOT_FILE_VERSION 162 #define MONO_AOT_TRAMP_PAGE_SIZE 16384 @@ -80,7 +80,8 @@ typedef enum { MONO_AOT_METHOD_FLAG_NONE = 0, MONO_AOT_METHOD_FLAG_HAS_CCTOR = 1, MONO_AOT_METHOD_FLAG_GSHAREDVT_VARIABLE = 2, - MONO_AOT_METHOD_FLAG_HAS_PATCHES = 4 + MONO_AOT_METHOD_FLAG_HAS_PATCHES = 4, + MONO_AOT_METHOD_FLAG_HAS_CTX = 8 } MonoAotMethodFlags; typedef enum { @@ -261,26 +262,12 @@ MonoMethod* mono_aot_get_array_helper_from_wrapper (MonoMethod *method); void mono_aot_set_make_unreadable (gboolean unreadable); gboolean mono_aot_is_pagefault (void *ptr); void mono_aot_handle_pagefault (void *ptr); -void mono_aot_register_jit_icall (const char *name, gpointer addr); - -#ifdef __cplusplus -template <typename T> -inline void -mono_aot_register_jit_icall (const char *name, T addr) -{ - mono_aot_register_jit_icall (name, (gpointer)addr); -} -#endif // __cplusplus guint32 mono_aot_find_method_index (MonoMethod *method); -gboolean mono_aot_init_llvmonly_method (gpointer amodule, guint32 method_index, MonoClass *init_class, - MonoGenericContext *context, gboolean lookup_context, MonoError *error); +gboolean mono_aot_init_llvmonly_method (gpointer amodule, guint32 method_index, MonoClass *init_class, MonoError *error); GHashTable *mono_aot_get_weak_field_indexes (MonoImage *image); MonoAotMethodFlags mono_aot_get_method_flags (guint8 *code); -/* This is an exported function */ -MONO_API void mono_aot_register_module (gpointer *aot_info); - /* These are used to load the AOT data for aot images compiled with MONO_AOT_FILE_FLAG_SEPARATE_DATA */ /* * Return the AOT data for ASSEMBLY. SIZE is the size of the data. OUT_HANDLE should be set to a handle which is later diff --git a/mono/mini/arrays.cs b/mono/mini/arrays.cs index 841025d98c..2358acb0e7 100644 --- a/mono/mini/arrays.cs +++ b/mono/mini/arrays.cs @@ -525,7 +525,7 @@ class Tests size = -1; try { res = new float [size]; - } catch (OverflowException e) { + } catch (OverflowException) { } catch (Exception) { return 1; @@ -536,7 +536,7 @@ class Tests size = -2147483648; try { res = new float [size]; - } catch (OverflowException e) { + } catch (OverflowException) { } catch (Exception) { return 3; @@ -620,7 +620,7 @@ class Tests size = -1; try { res = new float [dym_size, size]; - } catch (OverflowException e) { + } catch (OverflowException) { } catch (Exception) { return 1; @@ -631,7 +631,7 @@ class Tests size = -2147483648; try { res = new float [size, dym_size]; - } catch (OverflowException e) { + } catch (OverflowException) { } catch (Exception) { return 3; @@ -786,7 +786,7 @@ class Tests try { var arr = new byte[l]; return false; - } catch (Exception e) { + } catch (Exception) { return true; } } @@ -840,8 +840,26 @@ class Tests return i; } - return 0; + return 0; + } + + class JaggedClass { + public int[][] a; + + public JaggedClass () { + a = new int[][]{ + new int[]{1,2,3}, + new int[]{4,5,6}, + new int[]{7,8,9} + }; + } + } + + public static int test_4_ref_jagged_array () { + var f = new JaggedClass (); + + ref int[] r = ref f.a[1]; + + return r [0]; } } - - diff --git a/mono/mini/basic-math.cs b/mono/mini/basic-math.cs index ce3a942b27..1ffdeeef11 100644 --- a/mono/mini/basic-math.cs +++ b/mono/mini/basic-math.cs @@ -176,6 +176,9 @@ class Tests return 5; if (Math.Min ((long)-100, (long)-101) != -101) return 6; + // this will trip if Min is accidentally using unsigned/logical comparison + if (Math.Min((long)-100000000000L, (long)0L) != (long)-100000000000L) + return 7; return 0; } @@ -192,6 +195,9 @@ class Tests return 5; if (Math.Max ((long)-100, (long)-101) != -100) return 6; + // this will trip if Max is accidentally using unsigned/logical comparison + if (Math.Max((long)-100000000000L, (long)0L) != (long)0L) + return 7; return 0; } diff --git a/mono/mini/calls.c b/mono/mini/calls.c index 2e545c4045..a0b7b45c43 100644 --- a/mono/mini/calls.c +++ b/mono/mini/calls.c @@ -16,10 +16,20 @@ #include <mono/metadata/abi-details.h> #include <mono/metadata/class-abi-details.h> #include <mono/utils/mono-utils-debug.h> +#include "mono/metadata/icall-signatures.h" static const gboolean debug_tailcall_break_compile = FALSE; // break in method_to_ir static const gboolean debug_tailcall_break_run = FALSE; // insert breakpoint in generated code +void +mono_call_add_patch_info (MonoCompile *cfg, MonoCallInst *call, int ip) +{ + if (call->inst.flags & MONO_INST_HAS_METHOD) + mono_add_patch_info (cfg, ip, MONO_PATCH_INFO_METHOD, call->method); + else + mono_add_patch_info (cfg, ip, MONO_PATCH_INFO_ABS, call->fptr); +} + void mini_test_tailcall (MonoCompile *cfg, gboolean tailcall) { @@ -467,6 +477,9 @@ mini_emit_method_call_full (MonoCompile *cfg, MonoMethod *method, MonoMethodSign if (cfg->llvm_only && cfg->interp && !virtual_ && !tailcall && can_enter_interp (cfg, method, FALSE)) { MonoInst *ftndesc = mini_emit_get_rgctx_method (cfg, -1, method, MONO_RGCTX_INFO_METHOD_FTNDESC); + /* Need wrappers for this signature to be able to enter interpreter */ + cfg->interp_in_signatures = g_slist_prepend_mempool (cfg->mempool, cfg->interp_in_signatures, sig); + /* This call might need to enter the interpreter so make it indirect */ return mini_emit_llvmonly_calli (cfg, sig, args, ftndesc); } @@ -553,15 +566,17 @@ mini_emit_method_call_full (MonoCompile *cfg, MonoMethod *method, MonoMethodSign virtual_ = FALSE; } + if (!virtual_) { + if (!method->string_ctor) + MONO_EMIT_NEW_CHECK_THIS (cfg, this_reg); + } + if (!virtual_ && cfg->llvm_only && cfg->interp && !tailcall && can_enter_interp (cfg, method, FALSE)) { MonoInst *ftndesc = mini_emit_get_rgctx_method (cfg, -1, method, MONO_RGCTX_INFO_METHOD_FTNDESC); /* This call might need to enter the interpreter so make it indirect */ return mini_emit_llvmonly_calli (cfg, sig, args, ftndesc); } else if (!virtual_) { - if (!method->string_ctor) - MONO_EMIT_NEW_CHECK_THIS (cfg, this_reg); - call->inst.opcode = callvirt_to_call (call->inst.opcode); } else { vtable_reg = alloc_preg (cfg); @@ -617,16 +632,24 @@ mono_emit_native_call (MonoCompile *cfg, gconstpointer func, MonoMethodSignature return (MonoInst*)call; } +// FiXME remove or make static MonoInst* -mono_emit_jit_icall (MonoCompile *cfg, gconstpointer func, MonoInst **args) +mono_emit_jit_icall_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args) { - MonoJitICallInfo *info = mono_find_jit_icall_by_addr (func); - g_assert (info); + g_assertf (info->name, "%d", (int)mono_jit_icall_info_index (info)); + g_assertf (info->func, "%d", (int)mono_jit_icall_info_index (info)); return mono_emit_native_call (cfg, mono_icall_get_wrapper (info), info->sig, args); } + +MonoInst* +mono_emit_jit_icall_id (MonoCompile *cfg, MonoJitICallId jit_icall_id, MonoInst **args) +{ + return mono_emit_jit_icall_info (cfg, mono_find_jit_icall_info (jit_icall_id), args); +} + /* * mini_emit_abs_call: * @@ -686,7 +709,7 @@ mini_emit_llvmonly_virtual_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMeth variant_iface = TRUE; if (!helper_sig_llvmonly_imt_trampoline) { - MonoMethodSignature *tmp = mono_create_icall_signature ("ptr ptr ptr"); + MonoMethodSignature *tmp = mono_icall_sig_ptr_ptr_ptr; mono_memory_barrier (); helper_sig_llvmonly_imt_trampoline = tmp; } diff --git a/mono/mini/cpu-ppc.md b/mono/mini/cpu-ppc.md index 4e7e5f6591..cb31d18c90 100644 --- a/mono/mini/cpu-ppc.md +++ b/mono/mini/cpu-ppc.md @@ -209,7 +209,13 @@ endfilter: src1:i len:32 aotconst: dest:i len:8 load_gotaddr: dest:i len:32 got_entry: dest:i src1:b len:32 +abs: dest:f src1:f len:4 sqrt: dest:f src1:f len:4 +sqrtf: dest:f src1:f len:4 +round: dest:f src1:f len:4 +ppc_trunc: dest:f src1:f len:4 +ppc_ceil: dest:f src1:f len:4 +ppc_floor: dest:f src1:f len:4 adc: dest:i src1:i src2:i len:4 addcc: dest:i src1:i src2:i len:4 subcc: dest:i src1:i src2:i len:4 @@ -323,6 +329,16 @@ icompare_imm: src1:i len:12 long_conv_to_ovf_i4_2: dest:i src1:i src2:i len:32 +# shouldn't use long stuff on ppc32 +#long_min: dest:i src1:i src2:i len:8 clob:1 +#long_min_un: dest:i src1:i src2:i len:8 clob:1 +#long_max: dest:i src1:i src2:i len:8 clob:1 +#long_max_un: dest:i src1:i src2:i len:8 clob:1 +int_min: dest:i src1:i src2:i len:8 clob:1 +int_max: dest:i src1:i src2:i len:8 clob:1 +int_min_un: dest:i src1:i src2:i len:8 clob:1 +int_max_un: dest:i src1:i src2:i len:8 clob:1 + vcall2: len:20 clob:c vcall2_reg: src1:i len:8 clob:c vcall2_membase: src1:b len:16 clob:c diff --git a/mono/mini/cpu-ppc64.md b/mono/mini/cpu-ppc64.md index 46596201b7..f0651f5f8d 100644 --- a/mono/mini/cpu-ppc64.md +++ b/mono/mini/cpu-ppc64.md @@ -213,7 +213,13 @@ endfilter: src1:i len:20 aotconst: dest:i len:8 load_gotaddr: dest:i len:32 got_entry: dest:i src1:b len:32 +abs: dest:f src1:f len:4 sqrt: dest:f src1:f len:4 +sqrtf: dest:f src1:f len:4 +round: dest:f src1:f len:4 +ppc_trunc: dest:f src1:f len:4 +ppc_ceil: dest:f src1:f len:4 +ppc_floor: dest:f src1:f len:4 adc: dest:i src1:i src2:i len:4 addcc: dest:i src1:i src2:i len:4 subcc: dest:i src1:i src2:i len:4 @@ -389,6 +395,15 @@ long_xor_imm: dest:i src1:i clob:1 len:4 lcompare: src1:i src2:i len:4 lcompare_imm: src1:i len:12 +long_min: dest:i src1:i src2:i len:8 clob:1 +long_min_un: dest:i src1:i src2:i len:8 clob:1 +long_max: dest:i src1:i src2:i len:8 clob:1 +long_max_un: dest:i src1:i src2:i len:8 clob:1 +int_min: dest:i src1:i src2:i len:8 clob:1 +int_max: dest:i src1:i src2:i len:8 clob:1 +int_min_un: dest:i src1:i src2:i len:8 clob:1 +int_max_un: dest:i src1:i src2:i len:8 clob:1 + #long_conv_to_ovf_i4_2: dest:i src1:i src2:i len:30 vcall2: len:36 clob:c diff --git a/mono/mini/debugger-agent.c.REMOVED.git-id b/mono/mini/debugger-agent.c.REMOVED.git-id index efe1a49246..f3862e3898 100644 --- a/mono/mini/debugger-agent.c.REMOVED.git-id +++ b/mono/mini/debugger-agent.c.REMOVED.git-id @@ -1 +1 @@ -ebd594b90cd64eebfd2f7a0aece4f06d78e1fae4 \ No newline at end of file +29c9909182ab475c762b098073c74eac90a43ab1 \ No newline at end of file diff --git a/mono/mini/decompose.c b/mono/mini/decompose.c index 482aa4a672..596bfec8f5 100644 --- a/mono/mini/decompose.c +++ b/mono/mini/decompose.c @@ -1986,6 +1986,13 @@ mono_local_emulate_ops (MonoCompile *cfg) first_bb->in_count = first_bb->out_count = 0; cfg->cbb = first_bb; + if (!saved_prev) { + /* first instruction of basic block got replaced, so create + * dummy inst that points to start of basic block */ + MONO_INST_NEW (cfg, saved_prev, OP_NOP); + saved_prev = bb->code; + } + /* ins is hanging, continue scanning the emitted code */ ins = saved_prev; } else { diff --git a/mono/mini/driver.c b/mono/mini/driver.c index bb165733da..7669d93b90 100644 --- a/mono/mini/driver.c +++ b/mono/mini/driver.c @@ -76,6 +76,7 @@ static FILE *mini_stats_fd; static void mini_usage (void); static void mono_runtime_set_execution_mode (MonoEEMode mode); +static void mono_runtime_set_execution_mode_full (MonoEEMode mode, gboolean override); static int mono_jit_exec_internal (MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[]); #ifdef HOST_WIN32 @@ -1198,15 +1199,22 @@ compile_all_methods_thread_main_inner (CompileAllThreadArgs *args) g_print ("Compiling %d %s\n", count, desc); g_free (desc); } - cfg = mini_method_compile (method, mono_get_optimizations_for_method (method, args->opts), mono_get_root_domain (), (JitFlags)JIT_FLAG_DISCARD_RESULTS, 0, -1); - if (cfg->exception_type != MONO_EXCEPTION_NONE) { - const char *msg = cfg->exception_message; - if (cfg->exception_type == MONO_EXCEPTION_MONO_ERROR) - msg = mono_error_get_message (&cfg->error); - g_print ("Compilation of %s failed with exception '%s':\n", mono_method_full_name (cfg->method, TRUE), msg); - fail_count ++; + if (mono_use_interpreter) { + mini_get_interp_callbacks ()->create_method_pointer (method, TRUE, error); + // FIXME There are a few failures due to DllNotFoundException related to System.Native + if (verbose && !mono_error_ok (error)) + g_print ("Compilation of %s failed\n", mono_method_full_name (method, TRUE)); + } else { + cfg = mini_method_compile (method, mono_get_optimizations_for_method (method, args->opts), mono_get_root_domain (), (JitFlags)JIT_FLAG_DISCARD_RESULTS, 0, -1); + if (cfg->exception_type != MONO_EXCEPTION_NONE) { + const char *msg = cfg->exception_message; + if (cfg->exception_type == MONO_EXCEPTION_MONO_ERROR) + msg = mono_error_get_message (&cfg->error); + g_print ("Compilation of %s failed with exception '%s':\n", mono_method_full_name (cfg->method, TRUE), msg); + fail_count ++; + } + mono_destroy_compile (cfg); } - mono_destroy_compile (cfg); } if (fail_count) @@ -1542,6 +1550,7 @@ mini_usage (void) " --verbose, -v Increases the verbosity level\n" " --help, -h Show usage information\n" " --version, -V Show version information\n" + " --version=number Show version number\n" " --runtime=VERSION Use the VERSION runtime, instead of autodetecting\n" " --optimize=OPT Turns on or off a specific optimization\n" " Use --list-opt to get a list of optimizations\n" @@ -1876,12 +1885,8 @@ apply_root_domain_configuration_file_bindings (MonoDomain *domain, char *root_do } static void -mono_enable_interp (const char *opts) +mono_check_interp_supported (void) { - mono_runtime_set_execution_mode (MONO_EE_MODE_INTERP); - if (opts) - mono_interp_opts_string = opts; - #ifdef DISABLE_INTERPRETER g_error ("Mono IL interpreter support is missing\n"); #endif @@ -1893,7 +1898,6 @@ mono_enable_interp (const char *opts) #ifndef MONO_ARCH_INTERPRETER_SUPPORTED g_error ("--interpreter not supported on this architecture.\n"); #endif - } static int @@ -2040,6 +2044,9 @@ mono_main (int argc, char* argv[]) g_free (full_opts); } else if (strcmp (argv [i], "--verbose") == 0 || strcmp (argv [i], "-v") == 0) { mini_verbose_level++; + } else if (strcmp (argv [i], "--version=number") == 0) { + g_print ("%s\n", VERSION); + return 0; } else if (strcmp (argv [i], "--version") == 0 || strcmp (argv [i], "-V") == 0) { char *build = mono_get_runtime_build_info (); char *gc_descr; @@ -2334,9 +2341,10 @@ mono_main (int argc, char* argv[]) } else if (strcmp (argv [i], "--nollvm") == 0){ mono_use_llvm = FALSE; } else if ((strcmp (argv [i], "--interpreter") == 0) || !strcmp (argv [i], "--interp")) { - mono_enable_interp (NULL); + mono_runtime_set_execution_mode (MONO_EE_MODE_INTERP); } else if (strncmp (argv [i], "--interp=", 9) == 0) { - mono_enable_interp (argv [i] + 9); + mono_runtime_set_execution_mode_full (MONO_EE_MODE_INTERP, FALSE); + mono_interp_opts_string = argv [i] + 9; } else if (strcmp (argv [i], "--print-icall-table") == 0) { #ifdef ENABLE_ICALL_SYMBOL_MAP print_icall_table (); @@ -2787,8 +2795,13 @@ mono_jit_set_aot_only (gboolean val) } static void -mono_runtime_set_execution_mode (MonoEEMode mode) +mono_runtime_set_execution_mode_full (MonoEEMode mode, gboolean override) { + static gboolean mode_initialized = FALSE; + if (mode_initialized && !override) + return; + + mode_initialized = TRUE; memset (&mono_ee_features, 0, sizeof (mono_ee_features)); switch (mode) { @@ -2832,6 +2845,7 @@ mono_runtime_set_execution_mode (MonoEEMode mode) break; case MONO_EE_MODE_INTERP: + mono_check_interp_supported (); mono_use_interpreter = TRUE; mono_ee_features.force_use_interpreter = TRUE; @@ -2844,6 +2858,13 @@ mono_runtime_set_execution_mode (MonoEEMode mode) default: g_error ("Unknown execution-mode %d", mode); } + +} + +static void +mono_runtime_set_execution_mode (MonoEEMode mode) +{ + mono_runtime_set_execution_mode_full (mode, TRUE); } /** @@ -2989,15 +3010,15 @@ merge_parsed_options (GPtrArray *parsed_options, int *ref_argc, char **ref_argv static char * mono_parse_options (const char *options, int *ref_argc, char **ref_argv [], gboolean prepend) { + if (options == NULL) + return NULL; + GPtrArray *array = g_ptr_array_new (); GString *buffer = g_string_new (""); const char *p; gboolean in_quotes = FALSE; char quote_char = '\0'; - if (options == NULL) - return NULL; - for (p = options; *p; p++){ switch (*p){ case ' ': case '\t': case '\n': diff --git a/mono/mini/dwarfwriter.c b/mono/mini/dwarfwriter.c index 939f769f19..4e91d4bb01 100644 --- a/mono/mini/dwarfwriter.c +++ b/mono/mini/dwarfwriter.c @@ -1397,13 +1397,7 @@ disasm_ins (MonoMethod *method, const guchar *ip, const guint8 **endip) switch (ip [1]) { case CEE_MONO_ICALL: { - MonoJitICallInfo *info; - - token = read32 (ip + 2); - data = mono_method_get_wrapper_data (method, token); - info = mono_find_jit_icall_by_addr (data); - g_assert (info); - + MonoJitICallInfo const * const info = mono_find_jit_icall_info ((MonoJitICallId)read32 (ip + 2)); dis = g_strdup_printf ("IL_%04x: mono_icall <%s>", (int)(ip - header->code), info->name); ip += 6; break; diff --git a/mono/mini/exceptions-amd64.c b/mono/mini/exceptions-amd64.c index 2e28e3259d..f7002f5e63 100644 --- a/mono/mini/exceptions-amd64.c +++ b/mono/mini/exceptions-amd64.c @@ -530,15 +530,15 @@ get_throw_trampoline (MonoTrampInfo **info, gboolean rethrow, gboolean corlib, g } if (aot) { - const char *icall_name; + MonoJitICallId icall_id; if (resume_unwind) - icall_name = "mono_amd64_resume_unwind"; + icall_id = MONO_JIT_ICALL_mono_amd64_resume_unwind; else if (corlib) - icall_name = "mono_amd64_throw_corlib_exception"; + icall_id = MONO_JIT_ICALL_mono_amd64_throw_corlib_exception; else - icall_name = "mono_amd64_throw_exception"; - ji = mono_patch_info_list_prepend (ji, code - start, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + icall_id = MONO_JIT_ICALL_mono_amd64_throw_exception; + ji = mono_patch_info_list_prepend (ji, code - start, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (icall_id)); amd64_mov_reg_membase (code, AMD64_R11, AMD64_RIP, 0, 8); } else { amd64_mov_reg_imm (code, AMD64_R11, resume_unwind ? ((gpointer)mono_amd64_resume_unwind) : (corlib ? (gpointer)mono_amd64_throw_corlib_exception : (gpointer)mono_amd64_throw_exception)); @@ -867,7 +867,7 @@ altstack_handle_and_restore (MonoContext *ctx, MonoObject *obj, gboolean stack_o MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), MONO_CONTEXT_GET_IP (ctx), NULL); if (!ji) - mono_handle_native_crash ("SIGSEGV", NULL, NULL); + mono_handle_native_crash ("SIGSEGV", ctx, NULL); mctx = *ctx; @@ -925,14 +925,19 @@ mono_amd64_get_exception_trampolines (gboolean aot) MonoTrampInfo *info; GSList *tramps = NULL; + // FIXME Macro to make one line per trampoline. + /* LLVM needs different throw trampolines */ get_throw_trampoline (&info, FALSE, TRUE, FALSE, FALSE, "llvm_throw_corlib_exception_trampoline", aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline; tramps = g_slist_prepend (tramps, info); get_throw_trampoline (&info, FALSE, TRUE, TRUE, FALSE, "llvm_throw_corlib_exception_abs_trampoline", aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline; tramps = g_slist_prepend (tramps, info); get_throw_trampoline (&info, FALSE, TRUE, TRUE, TRUE, "llvm_resume_unwind_trampoline", aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline; tramps = g_slist_prepend (tramps, info); return tramps; @@ -956,19 +961,24 @@ mono_arch_exceptions_init (void) gpointer tramp; if (mono_ee_features.use_aot_trampolines) { + + // FIXME Macro can make one line per trampoline here. tramp = mono_aot_get_trampoline ("llvm_throw_corlib_exception_trampoline"); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline, tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE, NULL); + tramp = mono_aot_get_trampoline ("llvm_throw_corlib_exception_abs_trampoline"); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline, tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE, NULL); + tramp = mono_aot_get_trampoline ("llvm_resume_unwind_trampoline"); - mono_register_jit_icall (tramp, "llvm_resume_unwind_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline, tramp, "llvm_resume_unwind_trampoline", NULL, TRUE, NULL); + } else if (!mono_llvm_only) { /* Call this to avoid initialization races */ tramps = mono_amd64_get_exception_trampolines (FALSE); for (l = tramps; l; l = l->next) { MonoTrampInfo *info = (MonoTrampInfo *)l->data; - mono_register_jit_icall (info->code, g_strdup (info->name), NULL, TRUE); + mono_register_jit_icall_info (info->jit_icall_info, info->code, g_strdup (info->name), NULL, TRUE, NULL); mono_tramp_info_register (info, NULL); } g_slist_free (tramps); diff --git a/mono/mini/exceptions-arm.c b/mono/mini/exceptions-arm.c index b09fa52609..75af2d9791 100644 --- a/mono/mini/exceptions-arm.c +++ b/mono/mini/exceptions-arm.c @@ -299,16 +299,16 @@ get_throw_trampoline (int size, gboolean corlib, gboolean rethrow, gboolean llvm } if (aot) { - const char *icall_name; + MonoJitICallId icall_id; if (resume_unwind) - icall_name = "mono_arm_resume_unwind"; + icall_id = MONO_JIT_ICALL_mono_arm_resume_unwind; else if (corlib) - icall_name = "mono_arm_throw_exception_by_token"; + icall_id = MONO_JIT_ICALL_mono_arm_throw_exception_by_token; else - icall_name = "mono_arm_throw_exception"; + icall_id = MONO_JIT_ICALL_mono_arm_throw_exception; - ji = mono_patch_info_list_prepend (ji, code - start, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + ji = mono_patch_info_list_prepend (ji, code - start, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (icall_id)); ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0); ARM_B (code, 0); *(gpointer*)(gpointer)code = NULL; @@ -391,14 +391,19 @@ mono_arm_get_exception_trampolines (gboolean aot) MonoTrampInfo *info; GSList *tramps = NULL; + // FIXME Macro to make one line per trampoline and less repitition of names. + /* LLVM uses the normal trampolines, but with a different name */ get_throw_trampoline (168, TRUE, FALSE, FALSE, FALSE, "llvm_throw_corlib_exception_trampoline", &info, aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline; tramps = g_slist_prepend (tramps, info); get_throw_trampoline (168, TRUE, FALSE, TRUE, FALSE, "llvm_throw_corlib_exception_abs_trampoline", &info, aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline; tramps = g_slist_prepend (tramps, info); get_throw_trampoline (168, FALSE, FALSE, FALSE, TRUE, "llvm_resume_unwind_trampoline", &info, aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline; tramps = g_slist_prepend (tramps, info); return tramps; @@ -422,18 +427,23 @@ mono_arch_exceptions_init (void) GSList *tramps, *l; if (mono_aot_only) { + + // FIXME Macroize. + tramp = mono_aot_get_trampoline ("llvm_throw_corlib_exception_trampoline"); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline, tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE, NULL); + tramp = mono_aot_get_trampoline ("llvm_throw_corlib_exception_abs_trampoline"); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline, tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE, NULL); + tramp = mono_aot_get_trampoline ("llvm_resume_unwind_trampoline"); - mono_register_jit_icall (tramp, "llvm_resume_unwind_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline, tramp, "llvm_resume_unwind_trampoline", NULL, TRUE, NULL); + } else { tramps = mono_arm_get_exception_trampolines (FALSE); for (l = tramps; l; l = l->next) { MonoTrampInfo *info = (MonoTrampInfo*)l->data; - - mono_register_jit_icall (info->code, g_strdup (info->name), NULL, TRUE); + mono_register_jit_icall_info (info->jit_icall_info, info->code, g_strdup (info->name), NULL, TRUE, NULL); mono_tramp_info_register (info, NULL); } g_slist_free (tramps); @@ -584,7 +594,7 @@ get_handle_signal_exception_addr (void) gboolean mono_arch_handle_exception (void *ctx, gpointer obj) { -#if defined(MONO_CROSS_COMPILE) || !defined(MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX) +#if defined(MONO_CROSS_COMPILE) g_assert_not_reached (); #elif defined(MONO_ARCH_USE_SIGACTION) arm_ucontext *sigctx = (arm_ucontext*)ctx; diff --git a/mono/mini/exceptions-arm64.c b/mono/mini/exceptions-arm64.c index 769119030c..0c1778aea0 100644 --- a/mono/mini/exceptions-arm64.c +++ b/mono/mini/exceptions-arm64.c @@ -230,14 +230,14 @@ get_throw_trampoline (int size, gboolean corlib, gboolean rethrow, gboolean llvm /* Call the function */ if (aot) { - const char *icall_name; + MonoJitICallId icall_id; if (resume_unwind) - icall_name = "mono_arm_resume_unwind"; + icall_id = MONO_JIT_ICALL_mono_arm_resume_unwind; else - icall_name = "mono_arm_throw_exception"; + icall_id = MONO_JIT_ICALL_mono_arm_throw_exception; - code = mono_arm_emit_aotconst (&ji, code, start, ARMREG_LR, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + code = mono_arm_emit_aotconst (&ji, code, start, ARMREG_LR, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (icall_id)); } else { gpointer icall_func; @@ -292,14 +292,19 @@ mono_arm_get_exception_trampolines (gboolean aot) MonoTrampInfo *info; GSList *tramps = NULL; + // FIXME Macroize. + /* LLVM uses the normal trampolines, but with a different name */ get_throw_trampoline (256, TRUE, FALSE, FALSE, FALSE, "llvm_throw_corlib_exception_trampoline", &info, aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline; tramps = g_slist_prepend (tramps, info); - + get_throw_trampoline (256, TRUE, FALSE, TRUE, FALSE, "llvm_throw_corlib_exception_abs_trampoline", &info, aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline; tramps = g_slist_prepend (tramps, info); get_throw_trampoline (256, FALSE, FALSE, FALSE, TRUE, "llvm_resume_unwind_trampoline", &info, aot, FALSE); + info->jit_icall_info = &mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline; tramps = g_slist_prepend (tramps, info); return tramps; @@ -323,18 +328,23 @@ mono_arch_exceptions_init (void) GSList *tramps, *l; if (mono_aot_only) { + + // FIXME Macroize. + tramp = mono_aot_get_trampoline ("llvm_throw_corlib_exception_trampoline"); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline, tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE, NULL); + tramp = mono_aot_get_trampoline ("llvm_throw_corlib_exception_abs_trampoline"); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline, tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE, NULL); + tramp = mono_aot_get_trampoline ("llvm_resume_unwind_trampoline"); - mono_register_jit_icall (tramp, "llvm_resume_unwind_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline, tramp, "llvm_resume_unwind_trampoline", NULL, TRUE, NULL); + } else { tramps = mono_arm_get_exception_trampolines (FALSE); for (l = tramps; l; l = l->next) { MonoTrampInfo *info = (MonoTrampInfo*)l->data; - - mono_register_jit_icall (info->code, g_strdup (info->name), NULL, TRUE); + mono_register_jit_icall_info (info->jit_icall_info, info->code, g_strdup (info->name), NULL, TRUE, NULL); mono_tramp_info_register (info, NULL); } g_slist_free (tramps); diff --git a/mono/mini/exceptions-ppc.c b/mono/mini/exceptions-ppc.c index 9957e505dc..acdf7001d1 100644 --- a/mono/mini/exceptions-ppc.c +++ b/mono/mini/exceptions-ppc.c @@ -396,7 +396,7 @@ mono_arch_get_throw_exception_generic (int size, MonoTrampInfo **info, int corli if (aot) { code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_IMAGE, mono_defaults.corlib); ppc_mr (code, ppc_r3, ppc_r12); - code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_exception_from_token"); + code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_exception_from_token)); #ifdef PPC_USES_FUNCTION_DESCRIPTOR ppc_ldptr (code, ppc_r2, sizeof (target_mgreg_t), ppc_r12); ppc_ldptr (code, ppc_r12, 0, ppc_r12); @@ -433,7 +433,7 @@ mono_arch_get_throw_exception_generic (int size, MonoTrampInfo **info, int corli // r30 contains the got address. // So emit the got address loading code too code = mono_arch_emit_load_got_addr (start, code, NULL, &ji); - code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_ppc_throw_exception"); + code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_ppc_throw_exception)); #ifdef PPC_USES_FUNCTION_DESCRIPTOR ppc_ldptr (code, ppc_r2, sizeof (target_mgreg_t), ppc_r12); ppc_ldptr (code, ppc_r12, 0, ppc_r12); @@ -642,13 +642,10 @@ mono_arch_ip_from_context (void *sigctx) } static void -altstack_handle_and_restore (void *sigctx, gpointer obj) +altstack_handle_and_restore (MonoContext *mctx, gpointer obj) { - MonoContext mctx; - - mono_sigctx_to_monoctx (sigctx, &mctx); - mono_handle_exception (&mctx, obj); - mono_restore_context (&mctx); + mono_handle_exception (mctx, obj); + mono_restore_context (mctx); } void @@ -658,8 +655,8 @@ mono_arch_handle_altstack_exception (void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *s g_assert_not_reached (); #else #ifdef MONO_ARCH_USE_SIGACTION - os_ucontext *uc = (ucontext_t*)sigctx; - os_ucontext *uc_copy; + os_ucontext *uc = (os_ucontext*)sigctx; + MonoContext *uc_copy; MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), mono_arch_ip_from_context (sigctx), NULL); gpointer *sp; int frame_size; @@ -684,14 +681,14 @@ mono_arch_handle_altstack_exception (void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *s * ... * 224 is the size of the red zone */ - frame_size = sizeof (ucontext_t) + sizeof (gpointer) * 16 + 224; + frame_size = sizeof (MonoContext) + sizeof (gpointer) * 16 + 224; frame_size += 15; frame_size &= ~15; sp = (gpointer)(UCONTEXT_REG_Rn(uc, 1) & ~15); sp = (gpointer)((char*)sp - frame_size); /* may need to adjust pointers in the new struct copy, depending on the OS */ - uc_copy = (ucontext_t*)(sp + 16); - memcpy (uc_copy, uc, sizeof (os_ucontext)); + uc_copy = (MonoContext*)(sp + 16); + mono_sigctx_to_monoctx (uc, uc_copy); #if defined(__linux__) && !defined(__mono_ppc64__) uc_copy->uc_mcontext.uc_regs = (gpointer)((char*)uc_copy + ((char*)uc->uc_mcontext.uc_regs - (char*)uc)); #endif @@ -714,7 +711,7 @@ mono_arch_handle_altstack_exception (void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *s #endif #endif UCONTEXT_REG_Rn(uc, 1) = (unsigned long)sp; - UCONTEXT_REG_Rn(uc, PPC_FIRST_ARG_REG) = (unsigned long)(sp + 16); + UCONTEXT_REG_Rn(uc, PPC_FIRST_ARG_REG) = (unsigned long)uc_copy; UCONTEXT_REG_Rn(uc, PPC_FIRST_ARG_REG + 1) = 0; UCONTEXT_REG_Rn(uc, PPC_FIRST_ARG_REG + 2) = 0; #endif diff --git a/mono/mini/exceptions-x86.c b/mono/mini/exceptions-x86.c index 05dc83f33f..c7438e5968 100644 --- a/mono/mini/exceptions-x86.c +++ b/mono/mini/exceptions-x86.c @@ -664,7 +664,7 @@ get_throw_trampoline (const char *name, gboolean rethrow, gboolean llvm, gboolea // ebx contains the got address. // So emit the got address loading code too code = mono_arch_emit_load_got_addr (start, code, NULL, &ji); - code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, corlib ? "mono_x86_throw_corlib_exception" : "mono_x86_throw_exception"); + code = mono_arch_emit_load_aotconst (start, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, corlib ? MONO_JIT_ICALL_mono_x86_throw_corlib_exception : MONO_JIT_ICALL_mono_x86_throw_exception); x86_call_reg (code, X86_EAX); } else { x86_call_code (code, resume_unwind ? (gpointer)(mono_x86_resume_unwind) : (corlib ? (gpointer)mono_x86_throw_corlib_exception : (gpointer)mono_x86_throw_exception)); @@ -766,25 +766,27 @@ mono_arch_exceptions_init (void) return; } + // FIXME Macroize. + /* LLVM needs different throw trampolines */ tramp = get_throw_trampoline ("llvm_throw_exception_trampoline", FALSE, TRUE, FALSE, FALSE, FALSE, &tinfo, FALSE, FALSE); - mono_register_jit_icall (tramp, "llvm_throw_exception_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_exception_trampoline, tramp, "llvm_throw_exception_trampoline", NULL, TRUE, NULL); mono_tramp_info_register (tinfo, NULL); tramp = get_throw_trampoline ("llvm_rethrow_exception_trampoline", TRUE, TRUE, FALSE, FALSE, FALSE, &tinfo, FALSE, FALSE); - mono_register_jit_icall (tramp, "llvm_rethrow_exception_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_rethrow_exception_trampoline, tramp, "llvm_rethrow_exception_trampoline", NULL, TRUE, NULL); mono_tramp_info_register (tinfo, NULL); tramp = get_throw_trampoline ("llvm_throw_corlib_exception_trampoline", FALSE, TRUE, TRUE, FALSE, FALSE, &tinfo, FALSE, FALSE); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_trampoline, tramp, "llvm_throw_corlib_exception_trampoline", NULL, TRUE, NULL); mono_tramp_info_register (tinfo, NULL); tramp = get_throw_trampoline ("llvm_throw_corlib_exception_abs_trampoline", FALSE, TRUE, TRUE, TRUE, FALSE, &tinfo, FALSE, FALSE); - mono_register_jit_icall (tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_throw_corlib_exception_abs_trampoline, tramp, "llvm_throw_corlib_exception_abs_trampoline", NULL, TRUE, NULL); mono_tramp_info_register (tinfo, NULL); tramp = get_throw_trampoline ("llvm_resume_unwind_trampoline", FALSE, FALSE, FALSE, FALSE, TRUE, &tinfo, FALSE, FALSE); - mono_register_jit_icall (tramp, "llvm_resume_unwind_trampoline", NULL, TRUE); + mono_register_jit_icall_info (&mono_get_jit_icall_info ()->mono_llvm_resume_unwind_trampoline, tramp, "llvm_resume_unwind_trampoline", NULL, TRUE, NULL); mono_tramp_info_register (tinfo, NULL); signal_exception_trampoline = mono_x86_get_signal_exception_trampoline (&tinfo, FALSE); @@ -1125,8 +1127,11 @@ mono_arch_handle_altstack_exception (void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *s } if (stack_ovf) exc = mono_domain_get ()->stack_overflow_ex; - if (!ji) - mono_handle_native_crash ("SIGSEGV", sigctx, siginfo); + if (!ji) { + MonoContext mctx; + mono_sigctx_to_monoctx (sigctx, &mctx); + mono_handle_native_crash ("SIGSEGV", &mctx, siginfo); + } /* setup a call frame on the real stack so that control is returned there * and exception handling can continue. * If this was a stack overflow the caller already ensured the stack pages diff --git a/mono/mini/genmdesc.py b/mono/mini/genmdesc.py index 624088944b..79a110bfb6 100755 --- a/mono/mini/genmdesc.py +++ b/mono/mini/genmdesc.py @@ -146,7 +146,7 @@ def parse_input(infile, opcodes): print ("Unknown specifier '{0}' for opcode '{0}'".format (spec)) exit (1) -def gen_output(f, opcodes): +def gen_output(f, opcodes): sorted_opcodes = [] for op in opcodes.values (): sorted_opcodes.append (op) @@ -154,29 +154,44 @@ def gen_output(f, opcodes): f.write ("/* File automatically generated by genmdesc.py, don't change */\n\n") - # Write desc table - f.write ("const char mono_{0} [] = {{\n".format (symbol_name)) - f.write ("\t\"") + # Write desc table + + f.write ("const MonoInstSpec mono_{0} [] = {{\n".format (symbol_name)) + f.write (" {{") + for i in range(MONO_INST_MAX): - f.write (r"\x0") - f.write ("\"\t/* null entry */\n") - idx = 1 + f.write (" 0") + if i != MONO_INST_MAX - 1: + f.write (", ") + f.write ("}}, // null entry\n") + idx = 1 + row = 40 for op in sorted_opcodes: if not op.used: continue - try: - f.write ("\t\"") - for c in op.spec[:MONO_INST_MAX]: + try: + if row == 40: + f.write("// dest src1 src2 src3 len clob\n"); + f.write("// ----- ----- ----- ---- ----- -----\n"); + row = 0 + else: + row += 1 + f.write (" {{") + j = 0 + for c in op.spec[:MONO_INST_MAX]: + j += 1 if c == "": - f.write (r"\x0") - f.write ("\" \"") + f.write (" 0") elif c.isalnum () and ord (c) < 0x80: - f.write (c) + f.write (" '%c'" % c) + elif ord (c) >= 0 and ord (c) <= 9: + f.write (" %d" % ord (c)) else: - f.write (r"\x{0:x}".format (ord (c))) - f.write ("\" \"") - f.write ("\"\t/* {0} */\n".format (op.name)) - op.desc_idx = idx * MONO_INST_MAX + f.write ("0x%02x" % ord (c)) + if j < MONO_INST_MAX: + f.write (", ") + f.write ("}}, // %s\n" % op.name) + op.desc_idx = idx idx += 1 except: print ("Error emitting opcode '{0}': '{1}'.".format (op.name, sys.exc_info())) @@ -186,9 +201,9 @@ def gen_output(f, opcodes): f.write ("const guint16 mono_{0}_idx [] = {{\n".format (symbol_name)) for op in sorted_opcodes: if not op.used: - f.write ("\t0,\t/* {0} */\n".format (op.name)) + f.write (" 0, // {0}\n".format (op.name)) else: - f.write ("\t{0},\t/* {1} */\n".format (op.desc_idx, op.name)) + f.write (" {0}, // {1}\n".format (op.desc_idx, op.name)) f.write ("};\n\n") # diff --git a/mono/mini/graph.c b/mono/mini/graph.c index f135300821..39d7bdec76 100644 --- a/mono/mini/graph.c +++ b/mono/mini/graph.c @@ -90,14 +90,14 @@ cfg_emit_one_loop_level (MonoCompile *cfg, FILE *fp, MonoBasicBlock *h) if (bb->region != -1) { switch (bb->region & (MONO_REGION_FINALLY|MONO_REGION_CATCH|MONO_REGION_FAULT|MONO_REGION_FILTER)) { case MONO_REGION_CATCH: - fprintf (fp, "BB%d [color=blue];\n", bb->block_num);; + fprintf (fp, "BB%d [color=blue];\n", bb->block_num); break; case MONO_REGION_FINALLY: - fprintf (fp, "BB%d [color=green];\n", bb->block_num);; + fprintf (fp, "BB%d [color=green];\n", bb->block_num); break; case MONO_REGION_FAULT: case MONO_REGION_FILTER: - fprintf (fp, "BB%d [color=yellow];\n", bb->block_num);; + fprintf (fp, "BB%d [color=yellow];\n", bb->block_num); break; default: break; diff --git a/mono/mini/interp/interp-internals.h b/mono/mini/interp/interp-internals.h index 551e0adf47..80fa33eb9c 100644 --- a/mono/mini/interp/interp-internals.h +++ b/mono/mini/interp/interp-internals.h @@ -95,7 +95,6 @@ typedef struct _InterpMethod struct _InterpMethod *next_jit_code_hash; guint32 locals_size; guint32 total_locals_size; - guint32 args_size; guint32 stack_size; guint32 vt_stack_size; guint32 alloca_size; @@ -103,13 +102,11 @@ typedef struct _InterpMethod unsigned int vararg : 1; unsigned int needs_thread_attach : 1; unsigned short *code; - unsigned short *new_body_start; /* after all STINARG instrs */ MonoPIFunc func; int num_clauses; MonoExceptionClause *clauses; void **data_items; int transformed; - guint32 *arg_offsets; guint32 *local_offsets; guint32 *exvar_offsets; unsigned int param_count; @@ -153,6 +150,14 @@ typedef struct { MonoJitExceptionInfo *handler_ei; } ThreadContext; +typedef struct { + gint64 transform_time; + gint32 inlined_methods; + gint32 inline_failures; +} MonoInterpStats; + +extern MonoInterpStats mono_interp_stats; + extern int mono_interp_traceopt; extern int mono_interp_opt; extern GSList *mono_interp_jit_classes; diff --git a/mono/mini/interp/interp.c.REMOVED.git-id b/mono/mini/interp/interp.c.REMOVED.git-id index c563ea50b0..adaed72e25 100644 --- a/mono/mini/interp/interp.c.REMOVED.git-id +++ b/mono/mini/interp/interp.c.REMOVED.git-id @@ -1 +1 @@ -aa050833a2dbe0071c8238825140aadc179ae7ff \ No newline at end of file +c7abdf0b6901956206f01f8f3a6521ef7443b06a \ No newline at end of file diff --git a/mono/mini/interp/mintops.c b/mono/mini/interp/mintops.c index 06b044258f..f7ec781972 100644 --- a/mono/mini/interp/mintops.c +++ b/mono/mini/interp/mintops.c @@ -45,7 +45,7 @@ mono_interp_dis_mintop_len (const guint16 *ip) g_assert_not_reached (); } else if (len == 0) { /* SWITCH */ int n = READ32 (ip + 1); - len = 3 + n * 2; + len = MINT_SWITCH_LEN (n); } return ip + len; diff --git a/mono/mini/interp/mintops.def b/mono/mini/interp/mintops.def index 3e332c78a7..b8dd72b600 100644 --- a/mono/mini/interp/mintops.def +++ b/mono/mini/interp/mintops.def @@ -37,6 +37,7 @@ OPDEF(MINT_LDC_I4_8, "ldc.i4.8", 1, MintOpNoArgs) OPDEF(MINT_LDC_I4_S, "ldc.i4.s", 2, MintOpShortInt) OPDEF(MINT_LDC_I4, "ldc.i4", 3, MintOpInt) OPDEF(MINT_LDC_I8, "ldc.i8", 5, MintOpLongInt) +OPDEF(MINT_LDC_I8_S, "ldc.i8.s", 2, MintOpShortInt) OPDEF(MINT_LDC_R4, "ldc.r4", 3, MintOpFloat) OPDEF(MINT_LDC_R8, "ldc.r8", 5, MintOpDouble) @@ -67,19 +68,8 @@ OPDEF(MINT_STARG_O, "starg.o", 2, MintOpUShortInt) OPDEF(MINT_STARG_P, "starg.p", 2, MintOpUShortInt) OPDEF(MINT_STARG_VT, "starg.vt", 4, MintOpShortAndInt) -OPDEF(MINT_STINARG_I1, "stinarg.i1", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_U1, "stinarg.u1", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_I2, "stinarg.i2", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_U2, "stinarg.u2", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_I4, "stinarg.i4", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_I8, "stinarg.i8", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_R4, "stinarg.r4", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_R8, "stinarg.r8", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_O, "stinarg.o", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_P, "stinarg.p", 2, MintOpUShortInt) -OPDEF(MINT_STINARG_VT, "stinarg.vt", 4, MintOpShortAndInt) - OPDEF(MINT_LDARGA, "ldarga", 2, MintOpUShortInt) +OPDEF(MINT_LDARGA_VT, "ldarga.vt", 2, MintOpUShortInt) OPDEF(MINT_LDFLD_I1, "ldfld.i1", 2, MintOpUShortInt) OPDEF(MINT_LDFLD_U1, "ldfld.u1", 2, MintOpUShortInt) @@ -91,7 +81,7 @@ OPDEF(MINT_LDFLD_R4, "ldfld.r4", 2, MintOpUShortInt) OPDEF(MINT_LDFLD_R8, "ldfld.r8", 2, MintOpUShortInt) OPDEF(MINT_LDFLD_O, "ldfld.o", 2, MintOpUShortInt) OPDEF(MINT_LDFLD_P, "ldfld.p", 2, MintOpUShortInt) -OPDEF(MINT_LDFLD_VT, "ldfld.vt", 3, MintOpUShortInt) +OPDEF(MINT_LDFLD_VT, "ldfld.vt", 4, MintOpShortAndInt) OPDEF(MINT_LDFLD_I8_UNALIGNED, "ldfld.i8.unaligned", 2, MintOpUShortInt) OPDEF(MINT_LDFLD_R8_UNALIGNED, "ldfld.r8.unaligned", 2, MintOpUShortInt) @@ -118,7 +108,19 @@ OPDEF(MINT_STFLD_R8_UNALIGNED, "stfld.r8.unaligned", 2, MintOpUShortInt) OPDEF(MINT_STRMFLD, "strmfld", 2, MintOpFieldToken) OPDEF(MINT_STRMFLD_VT, "strmfld.vt", 2, MintOpUShortInt) -OPDEF(MINT_LDSFLD, "ldsfld", 2, MintOpFieldToken) +OPDEF(MINT_LDTSFLD_I1, "ldtsfld.i1", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_U1, "ldtsfld.u1", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_I2, "ldtsfld.i2", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_U2, "ldtsfld.u2", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_I4, "ldtsfld.i4", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_I8, "ldtsfld.i8", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_R4, "ldtsfld.r4", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_R8, "ldtsfld.r8", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_O, "ldtsfld.o", 3, MintOpInt) +OPDEF(MINT_LDTSFLD_P, "ldtsfld.p", 3, MintOpInt) +OPDEF(MINT_LDSSFLD, "ldssfld", 4, MintOpFieldToken) +OPDEF(MINT_LDSSFLD_VT, "ldssfld.vt", 5, MintOpInt) + OPDEF(MINT_LDSFLD_I1, "ldsfld.i1", 3, MintOpUShortInt) OPDEF(MINT_LDSFLD_U1, "ldsfld.u1", 3, MintOpUShortInt) OPDEF(MINT_LDSFLD_I2, "ldsfld.i2", 3, MintOpUShortInt) @@ -129,9 +131,20 @@ OPDEF(MINT_LDSFLD_R4, "ldsfld.r4", 3, MintOpUShortInt) OPDEF(MINT_LDSFLD_R8, "ldsfld.r8", 3, MintOpUShortInt) OPDEF(MINT_LDSFLD_O, "ldsfld.o", 3, MintOpUShortInt) OPDEF(MINT_LDSFLD_P, "ldsfld.p", 3, MintOpUShortInt) -OPDEF(MINT_LDSFLD_VT, "ldsfld.vt", 4, MintOpShortAndInt) +OPDEF(MINT_LDSFLD_VT, "ldsfld.vt", 5, MintOpTwoShorts) -OPDEF(MINT_STSFLD, "stsfld", 2, MintOpUShortInt) +OPDEF(MINT_STTSFLD_I1, "sttsfld.i1", 3, MintOpInt) +OPDEF(MINT_STTSFLD_U1, "sttsfld.u1", 3, MintOpInt) +OPDEF(MINT_STTSFLD_I2, "sttsfld.i2", 3, MintOpInt) +OPDEF(MINT_STTSFLD_U2, "sttsfld.u2", 3, MintOpInt) +OPDEF(MINT_STTSFLD_I4, "sttsfld.i4", 3, MintOpInt) +OPDEF(MINT_STTSFLD_I8, "sttsfld.i8", 3, MintOpInt) +OPDEF(MINT_STTSFLD_R4, "sttsfld.r4", 3, MintOpInt) +OPDEF(MINT_STTSFLD_R8, "sttsfld.r8", 3, MintOpInt) +OPDEF(MINT_STTSFLD_O, "sttsfld.o", 3, MintOpInt) +OPDEF(MINT_STTSFLD_P, "sttsfld.p", 3, MintOpInt) +OPDEF(MINT_STSSFLD, "stssfld", 4, MintOpFieldToken) +OPDEF(MINT_STSSFLD_VT, "stssfld.vt", 5, MintOpInt) OPDEF(MINT_STSFLD_I1, "stsfld.i1", 3, MintOpUShortInt) OPDEF(MINT_STSFLD_U1, "stsfld.u1", 3, MintOpUShortInt) OPDEF(MINT_STSFLD_I2, "stsfld.i2", 3, MintOpUShortInt) @@ -142,8 +155,9 @@ OPDEF(MINT_STSFLD_R4, "stsfld.r4", 3, MintOpUShortInt) OPDEF(MINT_STSFLD_R8, "stsfld.r8", 3, MintOpUShortInt) OPDEF(MINT_STSFLD_O, "stsfld.o", 3, MintOpUShortInt) OPDEF(MINT_STSFLD_P, "stsfld.p", 3, MintOpUShortInt) -OPDEF(MINT_STSFLD_VT, "stsfld.vt", 2, MintOpUShortInt) -OPDEF(MINT_LDSFLDA, "ldsflda", 2, MintOpUShortInt) +OPDEF(MINT_STSFLD_VT, "stsfld.vt", 5, MintOpTwoShorts) +OPDEF(MINT_LDSFLDA, "ldsflda", 3, MintOpTwoShorts) +OPDEF(MINT_LDSSFLDA, "ldssflda", 4, MintOpInt) OPDEF(MINT_LDLOC_I1, "ldloc.i1", 2, MintOpUShortInt) OPDEF(MINT_LDLOC_U1, "ldloc.u1", 2, MintOpUShortInt) @@ -182,9 +196,11 @@ OPDEF(MINT_LDIND_I4_CHECK, "ldind.i4.check", 1, MintOpNoArgs) OPDEF(MINT_LDIND_U4_CHECK, "ldind.u4.check", 1, MintOpNoArgs) OPDEF(MINT_LDIND_I8_CHECK, "ldind.i8.check", 1, MintOpNoArgs) OPDEF(MINT_LDIND_I, "ldind.i", 2, MintOpUShortInt) +OPDEF(MINT_LDIND_I8, "ldind.i8", 2, MintOpUShortInt) OPDEF(MINT_LDIND_R4_CHECK, "ldind.r4.check", 1, MintOpNoArgs) OPDEF(MINT_LDIND_R8_CHECK, "ldind.r8.check", 1, MintOpNoArgs) OPDEF(MINT_LDIND_REF, "ldind.ref", 1, MintOpNoArgs) +OPDEF(MINT_LDIND_REF_CHECK, "ldind.ref.check", 1, MintOpNoArgs) OPDEF(MINT_STIND_I1, "stind.i1", 1, MintOpNoArgs) OPDEF(MINT_STIND_I2, "stind.i2", 1, MintOpNoArgs) OPDEF(MINT_STIND_I4, "stind.i4", 1, MintOpNoArgs) @@ -323,8 +339,9 @@ OPDEF(MINT_VCALLVIRT, "vcallvirt", 2, MintOpMethodToken) OPDEF(MINT_CALLVIRT_FAST, "callvirt.fast", 3, MintOpMethodToken) OPDEF(MINT_VCALLVIRT_FAST, "vcallvirt.fast", 3, MintOpMethodToken) OPDEF(MINT_CALLI, "calli", 2, MintOpMethodToken) -OPDEF(MINT_CALLI_NAT, "calli.nat", 3, MintOpMethodToken) -OPDEF(MINT_CALLI_NAT_FAST, "calli.nat.fast", 2, MintOpMethodToken) +OPDEF(MINT_CALLI_NAT, "calli.nat", 2, MintOpMethodToken) +OPDEF(MINT_CALLI_NAT_FAST, "calli.nat.fast", 3, MintOpMethodToken) +OPDEF(MINT_CALL_VARARG, "call.vararg", 3, MintOpMethodToken) OPDEF(MINT_JMP, "jmp", 2, MintOpMethodToken) OPDEF(MINT_CALLRUN, "callrun", 3, MintOpNoArgs) @@ -340,9 +357,14 @@ OPDEF(MINT_NEWOBJ_MAGIC, "newobj_magic", 2, MintOpMethodToken) OPDEF(MINT_INITOBJ, "initobj", 3, MintOpInt) OPDEF(MINT_CASTCLASS, "castclass", 2, MintOpClassToken) OPDEF(MINT_ISINST, "isinst", 2, MintOpClassToken) +OPDEF(MINT_CASTCLASS_INTERFACE, "castclass.interface", 2, MintOpClassToken) +OPDEF(MINT_ISINST_INTERFACE, "isinst.interface", 2, MintOpClassToken) +OPDEF(MINT_CASTCLASS_COMMON, "castclass.common", 2, MintOpClassToken) +OPDEF(MINT_ISINST_COMMON, "isinst.common", 2, MintOpClassToken) OPDEF(MINT_NEWARR, "newarr", 2, MintOpClassToken) OPDEF(MINT_BOX, "box", 3, MintOpTwoShorts) OPDEF(MINT_BOX_VT, "box.vt", 3, MintOpTwoShorts) +OPDEF(MINT_BOX_NULLABLE, "box.nullable", 3, MintOpTwoShorts) OPDEF(MINT_UNBOX, "unbox", 2, MintOpClassToken) OPDEF(MINT_LDTOKEN, "ldtoken", 2, MintOpClassToken) /* not really */ OPDEF(MINT_LDFTN, "ldftn", 2, MintOpMethodToken) @@ -350,9 +372,7 @@ OPDEF(MINT_LDFTN_DYNAMIC, "ldftn.dynamic", 1, MintOpMethodToken) OPDEF(MINT_LDVIRTFTN, "ldvirtftn", 2, MintOpMethodToken) OPDEF(MINT_CPOBJ, "cpobj", 2, MintOpClassToken) OPDEF(MINT_CPOBJ_VT, "cpobj.vt", 2, MintOpClassToken) -OPDEF(MINT_LDOBJ, "ldobj", 2, MintOpClassToken) -OPDEF(MINT_LDOBJ_VT, "ldobj.vt", 2, MintOpClassToken) -OPDEF(MINT_STOBJ, "stobj", 2, MintOpClassToken) +OPDEF(MINT_LDOBJ_VT, "ldobj.vt", 3, MintOpInt) OPDEF(MINT_STOBJ_VT, "stobj.vt", 2, MintOpClassToken) OPDEF(MINT_CPBLK, "cpblk", 1, MintOpNoArgs) OPDEF(MINT_INITBLK, "initblk", 1, MintOpNoArgs) @@ -370,7 +390,7 @@ OPDEF(MINT_LDELEM_I8, "ldelem.i8", 1, MintOpNoArgs) OPDEF(MINT_LDELEM_R4, "ldelem.r4", 1, MintOpNoArgs) OPDEF(MINT_LDELEM_R8, "ldelem.r8", 1, MintOpNoArgs) OPDEF(MINT_LDELEM_REF, "ldelem.ref", 1, MintOpNoArgs) -OPDEF(MINT_LDELEM_VT, "ldelem.vt", 4, MintOpShortAndInt) +OPDEF(MINT_LDELEM_VT, "ldelem.vt", 3, MintOpInt) OPDEF(MINT_LDELEMA, "ldelema", 3, MintOpTwoShorts) OPDEF(MINT_LDELEMA_TC, "ldelema.tc", 3, MintOpTwoShorts) @@ -625,7 +645,6 @@ OPDEF(MINT_MKREFANY, "mkrefany", 2, MintOpClassToken) OPDEF(MINT_REFANYTYPE, "refanytype", 1, MintOpNoArgs) OPDEF(MINT_REFANYVAL, "refanyval", 2, MintOpNoArgs) -OPDEF(MINT_CKNULL, "cknull", 1, MintOpNoArgs) OPDEF(MINT_CKNULL_N, "cknull_n", 2, MintOpUShortInt) OPDEF(MINT_GETCHR, "getchr", 1, MintOpNoArgs) @@ -665,11 +684,36 @@ OPDEF(MINT_LD_DELEGATE_INVOKE_IMPL, "ld_delegate_invoke_impl", 2, MintOpNoArgs) OPDEF(MINT_START_ABORT_PROT, "start_abort_protected", 1, MintOpNoArgs) +// Math intrinsics +OPDEF(MINT_ABS, "abs", 1, MintOpNoArgs) +OPDEF(MINT_ASIN, "asin", 1, MintOpNoArgs) +OPDEF(MINT_ASINH, "asinh", 1, MintOpNoArgs) +OPDEF(MINT_ACOS, "acos", 1, MintOpNoArgs) +OPDEF(MINT_ACOSH, "acosh", 1, MintOpNoArgs) +OPDEF(MINT_ATAN, "atan", 1, MintOpNoArgs) +OPDEF(MINT_ATANH, "atanh", 1, MintOpNoArgs) +OPDEF(MINT_COS, "cos", 1, MintOpNoArgs) +OPDEF(MINT_CBRT, "cbrt", 1, MintOpNoArgs) +OPDEF(MINT_COSH, "cosh", 1, MintOpNoArgs) +OPDEF(MINT_SIN, "sin", 1, MintOpNoArgs) +OPDEF(MINT_SQRT, "sqrt", 1, MintOpNoArgs) +OPDEF(MINT_SINH, "sinh", 1, MintOpNoArgs) +OPDEF(MINT_TAN, "tan", 1, MintOpNoArgs) +OPDEF(MINT_TANH, "tanh", 1, MintOpNoArgs) + /* * This needs to be an opcode because we need to trigger the enter event after * the STINARG* opcodes have executed. */ OPDEF(MINT_PROF_ENTER, "prof_enter", 1, MintOpNoArgs) +OPDEF(MINT_TRACE_ENTER, "trace_enter", 1, MintOpNoArgs) +OPDEF(MINT_TRACE_EXIT, "trace_exit", 1, MintOpNoArgs) +OPDEF(MINT_INTRINS_ENUM_HASFLAG, "intrins_enum_hasflag", 2, MintOpClassToken) +OPDEF(MINT_INTRINS_GET_HASHCODE, "intrins_get_hashcode", 1, MintOpNoArgs) +OPDEF(MINT_INTRINS_GET_TYPE, "intrins_get_type", 1, MintOpNoArgs) OPDEF(MINT_INTRINS_BYREFERENCE_CTOR, "intrins_byreference_ctor", 2, MintOpClassToken) OPDEF(MINT_INTRINS_BYREFERENCE_GET_VALUE, "intrins_byreference_get_value", 1, MintOpNoArgs) +OPDEF(MINT_INTRINS_UNSAFE_ADD_BYTE_OFFSET, "intrins_unsafe_add_byte_offset", 1, MintOpNoArgs) +OPDEF(MINT_INTRINS_UNSAFE_BYTE_OFFSET, "intrins_unsafe_byte_offset", 1, MintOpNoArgs) +OPDEF(MINT_INTRINS_RUNTIMEHELPERS_OBJECT_HAS_COMPONENT_SIZE, "intrins_runtimehelpers_object_has_component_size", 1, MintOpNoArgs) diff --git a/mono/mini/interp/mintops.h b/mono/mini/interp/mintops.h index 24b4952ade..2920224511 100644 --- a/mono/mini/interp/mintops.h +++ b/mono/mini/interp/mintops.h @@ -53,6 +53,8 @@ enum { #define READ64(x) (*(guint64 *)(x)) #endif +#define MINT_SWITCH_LEN(n) (3 + (n) * 2) + extern const char *mono_interp_opname[]; extern unsigned char mono_interp_oplen[]; extern MintOpArgType mono_interp_opargtype[]; diff --git a/mono/mini/interp/transform.c.REMOVED.git-id b/mono/mini/interp/transform.c.REMOVED.git-id index 90dcf7050a..6d7ecc3252 100644 --- a/mono/mini/interp/transform.c.REMOVED.git-id +++ b/mono/mini/interp/transform.c.REMOVED.git-id @@ -1 +1 @@ -230ba7773d293d953f10ebf43b2c063ce157af4d \ No newline at end of file +8958a46e16f157d3d03e0a15317ef771215beb39 \ No newline at end of file diff --git a/mono/mini/intrinsics.c b/mono/mini/intrinsics.c index 47dc8a117f..18b9d28f3d 100644 --- a/mono/mini/intrinsics.c +++ b/mono/mini/intrinsics.c @@ -274,6 +274,15 @@ emit_unsafe_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignatu ins->type = STACK_OBJ; ins->klass = mono_get_object_class (); return ins; + } else if (ctx->method_inst->type_argc == 1) { + // Casts the given object to the specified type, performs no dynamic type checking. + g_assert (fsig->param_count == 1); + g_assert (fsig->params [0]->type == MONO_TYPE_OBJECT); + dreg = alloc_preg (cfg); + EMIT_NEW_UNALU (cfg, ins, OP_MOVE, dreg, args [0]->dreg); + ins->type = STACK_OBJ; + ins->klass = mono_class_from_mono_type_internal (ctx->method_inst->type_argv [0]); + return ins; } } else if (!strcmp (cmethod->name, "AsPointer")) { g_assert (ctx); @@ -314,7 +323,7 @@ emit_unsafe_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignatu dreg = alloc_ireg (cfg); EMIT_NEW_BIALU (cfg, ins, OP_COMPARE, -1, args [0]->dreg, args [1]->dreg); - EMIT_NEW_UNALU (cfg, ins, OP_PCLT, dreg, -1); + EMIT_NEW_UNALU (cfg, ins, OP_PCLT_UN, dreg, -1); return ins; } else if (!strcmp (cmethod->name, "IsAddressGreaterThan")) { g_assert (ctx); @@ -324,7 +333,7 @@ emit_unsafe_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignatu dreg = alloc_ireg (cfg); EMIT_NEW_BIALU (cfg, ins, OP_COMPARE, -1, args [0]->dreg, args [1]->dreg); - EMIT_NEW_UNALU (cfg, ins, OP_PCGT, dreg, -1); + EMIT_NEW_UNALU (cfg, ins, OP_PCGT_UN, dreg, -1); return ins; } else if (!strcmp (cmethod->name, "Add")) { g_assert (ctx); @@ -335,17 +344,21 @@ emit_unsafe_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignatu int mul_reg = alloc_preg (cfg); t = ctx->method_inst->type_argv [0]; + MonoInst *esize_ins; if (mini_is_gsharedvt_variable_type (t)) { - MonoInst *esize_ins = mini_emit_get_gsharedvt_info_klass (cfg, mono_class_from_mono_type_internal (t), MONO_RGCTX_INFO_CLASS_SIZEOF); - EMIT_NEW_BIALU (cfg, ins, OP_IMUL, mul_reg, args [1]->dreg, esize_ins->dreg); + esize_ins = mini_emit_get_gsharedvt_info_klass (cfg, mono_class_from_mono_type_internal (t), MONO_RGCTX_INFO_CLASS_SIZEOF); + if (SIZEOF_REGISTER == 8) + MONO_EMIT_NEW_UNALU (cfg, OP_SEXT_I4, esize_ins->dreg, esize_ins->dreg); } else { t = mini_type_get_underlying_type (t); int esize = mono_class_array_element_size (mono_class_from_mono_type_internal (t)); - - EMIT_NEW_BIALU_IMM (cfg, ins, OP_IMUL_IMM, mul_reg, args [1]->dreg, esize); + EMIT_NEW_ICONST (cfg, esize_ins, esize); } - if (SIZEOF_REGISTER == 8) - MONO_EMIT_NEW_UNALU (cfg, OP_SEXT_I4, mul_reg, mul_reg); + esize_ins->type = STACK_I4; + + EMIT_NEW_BIALU (cfg, ins, OP_PMUL, mul_reg, args [1]->dreg, esize_ins->dreg); + ins->type = STACK_PTR; + dreg = alloc_preg (cfg); EMIT_NEW_BIALU (cfg, ins, OP_PADD, dreg, args [0]->dreg, mul_reg); ins->type = STACK_PTR; @@ -402,6 +415,89 @@ emit_unsafe_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignatu ins->flags |= MONO_INST_UNALIGNED; return ins; } + } else if (!strcmp (cmethod->name, "WriteUnaligned")) { + g_assert (ctx); + g_assert (ctx->method_inst); + g_assert (ctx->method_inst->type_argc == 1); + g_assert (fsig->param_count == 2); + + t = ctx->method_inst->type_argv [0]; + t = mini_get_underlying_type (t); + if (MONO_TYPE_IS_PRIMITIVE (t) && t->type != MONO_TYPE_R4 && t->type != MONO_TYPE_R8) { + dreg = alloc_ireg (cfg); + EMIT_NEW_STORE_MEMBASE_TYPE (cfg, ins, t, args [0]->dreg, 0, args [1]->dreg); + ins->flags |= MONO_INST_UNALIGNED; + return ins; + } + } else if (!strcmp (cmethod->name, "ByteOffset")) { + g_assert (ctx); + g_assert (ctx->method_inst); + g_assert (ctx->method_inst->type_argc == 1); + g_assert (fsig->param_count == 2); + + int dreg = alloc_preg (cfg); + EMIT_NEW_BIALU (cfg, ins, OP_PSUB, dreg, args [1]->dreg, args [0]->dreg); + ins->type = STACK_PTR; + return ins; + } + + return NULL; +} + +static MonoInst* +emit_jit_helpers_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args) +{ + MonoInst *ins; + int dreg; + MonoGenericContext *ctx = mono_method_get_context (cmethod); + MonoType *t; + + if (!strcmp (cmethod->name, "EnumEquals") || !strcmp (cmethod->name, "EnumCompareTo")) { + g_assert (ctx); + g_assert (ctx->method_inst); + g_assert (ctx->method_inst->type_argc == 1); + g_assert (fsig->param_count == 2); + + t = ctx->method_inst->type_argv [0]; + t = mini_get_underlying_type (t); + if (mini_is_gsharedvt_variable_type (t)) + return NULL; + + gboolean is_i8 = (t->type == MONO_TYPE_I8 || t->type == MONO_TYPE_U8); + gboolean is_unsigned = (t->type == MONO_TYPE_U1 || t->type == MONO_TYPE_U2 || t->type == MONO_TYPE_U4 || t->type == MONO_TYPE_U8 || t->type == MONO_TYPE_U); + int cmp_op, ceq_op, cgt_op, clt_op; + + if (is_i8) { + cmp_op = OP_LCOMPARE; + ceq_op = OP_LCEQ; + cgt_op = is_unsigned ? OP_LCGT_UN : OP_LCGT; + clt_op = is_unsigned ? OP_LCLT_UN : OP_LCLT; + } else { + cmp_op = OP_ICOMPARE; + ceq_op = OP_ICEQ; + cgt_op = is_unsigned ? OP_ICGT_UN : OP_ICGT; + clt_op = is_unsigned ? OP_ICLT_UN : OP_ICLT; + } + + if (!strcmp (cmethod->name, "EnumEquals")) { + dreg = alloc_ireg (cfg); + EMIT_NEW_BIALU (cfg, ins, cmp_op, -1, args [0]->dreg, args [1]->dreg); + EMIT_NEW_UNALU (cfg, ins, ceq_op, dreg, -1); + } else { + // Use the branchless code (a > b) - (a < b) + int reg1, reg2; + + reg1 = alloc_ireg (cfg); + reg2 = alloc_ireg (cfg); + dreg = alloc_ireg (cfg); + + EMIT_NEW_BIALU (cfg, ins, cmp_op, -1, args [0]->dreg, args [1]->dreg); + EMIT_NEW_UNALU (cfg, ins, cgt_op, reg1, -1); + EMIT_NEW_BIALU (cfg, ins, cmp_op, -1, args [0]->dreg, args [1]->dreg); + EMIT_NEW_UNALU (cfg, ins, clt_op, reg2, -1); + EMIT_NEW_BIALU (cfg, ins, OP_ISUB, dreg, reg1, reg2); + } + return ins; } return NULL; @@ -427,6 +523,12 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign int dreg = alloc_preg (cfg); EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, args [0]->dreg, 0); return ins; + } else if (in_corlib && cmethod->klass == mono_defaults.object_class) { + if (!strcmp (cmethod->name, "GetRawData")) { + int dreg = alloc_preg (cfg); + EMIT_NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, dreg, args [0]->dreg, MONO_ABI_SIZEOF (MonoObject)); + return ins; + } } if (!(cfg->opt & MONO_OPT_INTRINS)) @@ -507,7 +609,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign return emit_array_generic_access (cfg, fsig, args, TRUE); else if (!strcmp (cmethod->name, "GetRawSzArrayData")) { int dreg = alloc_preg (cfg); - EMIT_NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, dreg, args [0]->sreg1, MONO_STRUCT_OFFSET (MonoArray, vector)); + EMIT_NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, dreg, args [0]->dreg, MONO_STRUCT_OFFSET (MonoArray, vector)); return ins; } @@ -618,6 +720,38 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign EMIT_NEW_BIALU_IMM (cfg, ins, OP_ISUB_IMM, dreg, info->dreg, 1); } + return ins; + } else if (strcmp (cmethod->name, "IsBitwiseEquatable") == 0 && fsig->param_count == 0) { + MonoGenericContext *ctx = mono_method_get_context (cmethod); + g_assert (ctx); + g_assert (ctx->method_inst); + g_assert (ctx->method_inst->type_argc == 1); + MonoType *arg_type = ctx->method_inst->type_argv [0]; + MonoType *t; + ins = NULL; + + /* Resolve the argument class as possible so we can handle common cases fast */ + t = mini_get_underlying_type (arg_type); + + if (MONO_TYPE_IS_PRIMITIVE (t) && t->type != MONO_TYPE_R4 && t->type != MONO_TYPE_R8) + EMIT_NEW_ICONST (cfg, ins, 1); + else + EMIT_NEW_ICONST (cfg, ins, 0); + return ins; + } else if (!strcmp (cmethod->name, "ObjectHasComponentSize")) { + g_assert (fsig->param_count == 1); + g_assert (fsig->params [0]->type == MONO_TYPE_OBJECT); + // Return true for arrays and string + int dreg; + + dreg = alloc_ireg (cfg); + + MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOAD_MEMBASE, dreg, args [0]->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable)); + MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, dreg, dreg, MONO_STRUCT_OFFSET (MonoVTable, flags)); + MONO_EMIT_NEW_BIALU_IMM (cfg, OP_IAND_IMM, dreg, dreg, MONO_VT_FLAG_ARRAY_OR_STRING); + EMIT_NEW_BIALU_IMM (cfg, ins, OP_COMPARE_IMM, -1, dreg, 0); + EMIT_NEW_UNALU (cfg, ins, OP_ICGT, dreg, -1); + ins->type = STACK_I4; return ins; } else return NULL; @@ -641,10 +775,19 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign NEW_BBLOCK (cfg, end_bb); - ins = mono_emit_jit_icall (cfg, is_v4 ? (gpointer)mono_monitor_enter_v4_fast : (gpointer)mono_monitor_enter_fast, args); + if (is_v4) + ins = mono_emit_jit_icall (cfg, mono_monitor_enter_v4_fast, args); + else + ins = mono_emit_jit_icall (cfg, mono_monitor_enter_fast, args); + MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ICOMPARE_IMM, -1, ins->dreg, 0); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBNE_UN, end_bb); - ins = mono_emit_jit_icall (cfg, is_v4 ? (gpointer)mono_monitor_enter_v4_internal : (gpointer)mono_monitor_enter_internal, args); + + if (is_v4) + ins = mono_emit_jit_icall (cfg, mono_monitor_enter_v4_internal, args); + else + ins = mono_emit_jit_icall (cfg, mono_monitor_enter_internal, args); + MONO_START_BB (cfg, end_bb); return ins; } @@ -1254,7 +1397,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign (strcmp (cmethod_klass_name, "Debugger") == 0)) { if (!strcmp (cmethod->name, "Break") && fsig->param_count == 0) { if (mini_should_insert_breakpoint (cfg->method)) { - ins = mono_emit_jit_icall (cfg, mini_get_dbg_callbacks ()->user_break, NULL); + ins = mono_emit_jit_icall (cfg, mono_debugger_agent_user_break, NULL); } else { MONO_INST_NEW (cfg, ins, OP_NOP); MONO_ADD_INS (cfg->cbb, ins); @@ -1512,12 +1655,16 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign return emit_span_intrinsics (cfg, cmethod, fsig, args); } else if (in_corlib && !strcmp (cmethod_klass_name_space, "Internal.Runtime.CompilerServices") && - (!strcmp (cmethod_klass_name, "Unsafe"))) { + !strcmp (cmethod_klass_name, "Unsafe")) { + return emit_unsafe_intrinsics (cfg, cmethod, fsig, args); + } else if (!strcmp (cmethod_klass_name_space, "System.Runtime.CompilerServices") && + !strcmp (cmethod_klass_name, "Unsafe") && + (in_corlib || !strcmp (cmethod_klass_image->assembly->aname.name, "System.Runtime.CompilerServices.Unsafe"))) { return emit_unsafe_intrinsics (cfg, cmethod, fsig, args); } else if (in_corlib && !strcmp (cmethod_klass_name_space, "System.Runtime.CompilerServices") && - (!strcmp (cmethod_klass_name, "Unsafe"))) { - return emit_unsafe_intrinsics (cfg, cmethod, fsig, args); + !strcmp (cmethod_klass_name, "JitHelpers")) { + return emit_jit_helpers_intrinsics (cfg, cmethod, fsig, args); } #ifdef MONO_ARCH_SIMD_INTRINSICS diff --git a/mono/mini/ir-emit.h b/mono/mini/ir-emit.h index a4b0d4ada7..7d2510caae 100644 --- a/mono/mini/ir-emit.h +++ b/mono/mini/ir-emit.h @@ -337,7 +337,7 @@ alloc_dreg (MonoCompile *cfg, MonoStackType stack_type) } \ } while (0) -#define NEW_JIT_ICALL_ADDRCONST(cfg,dest,name) NEW_AOTCONST ((cfg), (dest), MONO_PATCH_INFO_JIT_ICALL_ADDR, (name)) +#define NEW_JIT_ICALL_ADDRCONST(cfg, dest, jit_icall_id) NEW_AOTCONST ((cfg), (dest), MONO_PATCH_INFO_JIT_ICALL_ADDR, (jit_icall_id)) #define NEW_VARLOAD(cfg,dest,var,vartype) do { \ MONO_INST_NEW ((cfg), (dest), OP_MOVE); \ @@ -494,7 +494,7 @@ handle_gsharedvt_ldaddr (MonoCompile *cfg) #define EMIT_NEW_METHOD_RGCTX_CONST(cfg,dest,method) do { NEW_METHOD_RGCTX_CONST ((cfg), (dest), (method)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0) -#define EMIT_NEW_JIT_ICALL_ADDRCONST(cfg,dest,name) do { NEW_JIT_ICALL_ADDRCONST ((cfg), (dest), (name)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0) +#define EMIT_NEW_JIT_ICALL_ADDRCONST(cfg, dest, jit_icall_id) do { NEW_JIT_ICALL_ADDRCONST ((cfg), (dest), (jit_icall_id)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0) #define EMIT_NEW_VARLOAD(cfg,dest,var,vartype) do { NEW_VARLOAD ((cfg), (dest), (var), (vartype)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0) diff --git a/mono/mini/jit-icalls.c b/mono/mini/jit-icalls.c index e0defbe560..0b6e1e4682 100644 --- a/mono/mini/jit-icalls.c +++ b/mono/mini/jit-icalls.c @@ -724,151 +724,57 @@ mono_array_new_n_icall (MonoMethod *cm, gint32 pcount, intptr_t *params) return mono_error_set_pending_exception (error) ? NULL : arr; } +static MonoArray * +mono_array_new_n (MonoMethod *cm, int n, uintptr_t lengths [], intptr_t lower_bounds []) +{ + ERROR_DECL (error); + intptr_t *plower_bounds = NULL; + const int pcount = mono_method_signature_internal (cm)->param_count; + const int rank = m_class_get_rank (cm->klass); + + g_assert (rank == pcount); + g_assert (rank == n); + + if (m_class_get_byval_arg (cm->klass)->type == MONO_TYPE_ARRAY) + plower_bounds = lower_bounds; + + MonoArray *arr = mono_array_new_full_checked (mono_domain_get (), + cm->klass, lengths, plower_bounds, error); + + return mono_error_set_pending_exception (error) ? NULL : arr; +} + /* Specialized version of mono_array_new_va () which avoids varargs */ MonoArray * mono_array_new_1 (MonoMethod *cm, guint32 length) { - ERROR_DECL (error); - MonoArray *arr; - MonoDomain *domain = mono_domain_get (); - uintptr_t lengths [1]; - intptr_t *lower_bounds; - int pcount; - int rank; - - pcount = mono_method_signature_internal (cm)->param_count; - rank = m_class_get_rank (cm->klass); - - lengths [0] = length; - - g_assert (rank == pcount); - - if (m_class_get_byval_arg (cm->klass)->type == MONO_TYPE_ARRAY) { - lower_bounds = g_newa (intptr_t, rank); - memset (lower_bounds, 0, sizeof (intptr_t) * rank); - } else { - lower_bounds = NULL; - } - - arr = mono_array_new_full_checked (domain, cm->klass, lengths, lower_bounds, error); - - if (!mono_error_ok (error)) { - mono_error_set_pending_exception (error); - return NULL; - } - - return arr; + uintptr_t lengths [ ] = {length}; + intptr_t lower_bounds [G_N_ELEMENTS (lengths)] = {0}; + return mono_array_new_n (cm, G_N_ELEMENTS (lengths), lengths, lower_bounds); } MonoArray * mono_array_new_2 (MonoMethod *cm, guint32 length1, guint32 length2) { - ERROR_DECL (error); - MonoArray *arr; - MonoDomain *domain = mono_domain_get (); - uintptr_t lengths [2]; - intptr_t *lower_bounds; - int pcount; - int rank; - - pcount = mono_method_signature_internal (cm)->param_count; - rank = m_class_get_rank (cm->klass); - - lengths [0] = length1; - lengths [1] = length2; - - g_assert (rank == pcount); - - if (m_class_get_byval_arg (cm->klass)->type == MONO_TYPE_ARRAY) { - lower_bounds = g_newa (intptr_t, rank); - memset (lower_bounds, 0, sizeof (intptr_t) * rank); - } else { - lower_bounds = NULL; - } - - arr = mono_array_new_full_checked (domain, cm->klass, lengths, lower_bounds, error); - - if (!mono_error_ok (error)) { - mono_error_set_pending_exception (error); - return NULL; - } - - return arr; + uintptr_t lengths [ ] = {length1, length2}; + intptr_t lower_bounds [G_N_ELEMENTS (lengths)] = {0}; + return mono_array_new_n (cm, G_N_ELEMENTS (lengths), lengths, lower_bounds); } MonoArray * mono_array_new_3 (MonoMethod *cm, guint32 length1, guint32 length2, guint32 length3) { - ERROR_DECL (error); - MonoArray *arr; - MonoDomain *domain = mono_domain_get (); - uintptr_t lengths [3]; - intptr_t *lower_bounds; - int pcount; - int rank; - - pcount = mono_method_signature_internal (cm)->param_count; - rank = m_class_get_rank (cm->klass); - - lengths [0] = length1; - lengths [1] = length2; - lengths [2] = length3; - - g_assert (rank == pcount); - - if (m_class_get_byval_arg (cm->klass)->type == MONO_TYPE_ARRAY) { - lower_bounds = g_newa (intptr_t, rank); - memset (lower_bounds, 0, sizeof (intptr_t) * rank); - } else { - lower_bounds = NULL; - } - - arr = mono_array_new_full_checked (domain, cm->klass, lengths, lower_bounds, error); - - if (!mono_error_ok (error)) { - mono_error_set_pending_exception (error); - return NULL; - } - - return arr; + uintptr_t lengths [ ] = {length1, length2, length3}; + intptr_t lower_bounds [G_N_ELEMENTS (lengths)] = {0}; + return mono_array_new_n (cm, G_N_ELEMENTS (lengths), lengths, lower_bounds); } MonoArray * mono_array_new_4 (MonoMethod *cm, guint32 length1, guint32 length2, guint32 length3, guint32 length4) { - ERROR_DECL (error); - MonoArray *arr; - MonoDomain *domain = mono_domain_get (); - uintptr_t lengths [4]; - intptr_t *lower_bounds; - int pcount; - int rank; - - pcount = mono_method_signature_internal (cm)->param_count; - rank = m_class_get_rank (cm->klass); - - lengths [0] = length1; - lengths [1] = length2; - lengths [2] = length3; - lengths [3] = length4; - - g_assert (rank == pcount); - - if (m_class_get_byval_arg (cm->klass)->type == MONO_TYPE_ARRAY) { - lower_bounds = g_newa (intptr_t, rank); - memset (lower_bounds, 0, sizeof (intptr_t) * rank); - } else { - lower_bounds = NULL; - } - - arr = mono_array_new_full_checked (domain, cm->klass, lengths, lower_bounds, error); - - if (!mono_error_ok (error)) { - mono_error_set_pending_exception (error); - return NULL; - } - - return arr; + uintptr_t lengths [ ] = {length1, length2, length3, length4}; + intptr_t lower_bounds [G_N_ELEMENTS (lengths)] = {0}; + return mono_array_new_n (cm, G_N_ELEMENTS (lengths), lengths, lower_bounds); } gpointer @@ -1111,6 +1017,15 @@ mono_lconv_to_r8_un (guint64 a) } #endif +#ifdef MONO_ARCH_EMULATE_FREM +// Wrapper to avoid taking address of overloaded function. +double +mono_fmod (double a, double b) +{ + return fmod (a, b); +} +#endif + gpointer mono_helper_compile_generic_method (MonoObject *obj, MonoMethod *method, gpointer *this_arg) { @@ -1607,6 +1522,14 @@ mono_throw_method_access (MonoMethod *caller, MonoMethod *callee) g_free (caller_name); } +void +mono_throw_bad_image () +{ + ERROR_DECL (error); + mono_error_set_generic_error (error, "System", "BadImageFormatException", "Bad IL format."); + mono_error_set_pending_exception (error); +} + void mono_dummy_jit_icall (void) { diff --git a/mono/mini/jit-icalls.h b/mono/mini/jit-icalls.h index 463bafaa93..b89008b0ca 100644 --- a/mono/mini/jit-icalls.h +++ b/mono/mini/jit-icalls.h @@ -170,6 +170,8 @@ G_EXTERN_C void mono_fstore_r4 (double val, float *ptr); G_EXTERN_C guint32 mono_fload_r4_arg (double val); +G_EXTERN_C double mono_fmod (double a, double b); + G_EXTERN_C void mono_break (void); G_EXTERN_C MonoException *mono_create_corlib_exception_0 (guint32 token); @@ -217,6 +219,8 @@ G_EXTERN_C double mono_ckfinite (double d); G_EXTERN_C void mono_throw_method_access (MonoMethod *caller, MonoMethod *callee); +G_EXTERN_C void mono_throw_bad_image (void); + G_EXTERN_C void mono_dummy_jit_icall (void); #endif /* __MONO_JIT_ICALLS_H__ */ diff --git a/mono/mini/jit.h b/mono/mini/jit.h index a8e3e24a28..2ada49b987 100644 --- a/mono/mini/jit.h +++ b/mono/mini/jit.h @@ -100,6 +100,16 @@ mono_jit_parse_options (int argc, char * argv[]); MONO_API char* mono_get_runtime_build_info (void); +MONO_API MONO_RT_EXTERNAL_ONLY void +mono_set_use_llvm (mono_bool use_llvm); + +MONO_API MONO_RT_EXTERNAL_ONLY void +mono_aot_register_module (void **aot_info); + +MONO_API MONO_RT_EXTERNAL_ONLY +MonoDomain* mono_jit_thread_attach (MonoDomain *domain); + + MONO_END_DECLS #endif diff --git a/mono/mini/lldb.c b/mono/mini/lldb.c index 580a3d7063..4b10681889 100644 --- a/mono/mini/lldb.c +++ b/mono/mini/lldb.c @@ -119,7 +119,7 @@ static GHashTable *codegen_regions; static DebugEntry *last_entry; static mono_mutex_t mutex; static GHashTable *dyn_codegen_regions; -static gdouble register_time; +static gint64 register_time; static int num_entries; #define lldb_lock() mono_os_mutex_lock (&mutex) @@ -308,9 +308,9 @@ add_entry (EntryType type, Buffer *buf) __mono_jit_debug_descriptor.addr = entry->addr; mono_memory_barrier (); - GTimer *timer = mono_time_track_start (); + gint64 start = mono_time_track_start (); __mono_jit_debug_register_code (); - mono_time_track_end (®ister_time, timer); + mono_time_track_end (®ister_time, start); num_entries ++; //printf ("%lf %d %d\n", register_time, num_entries, entry->type); @@ -417,7 +417,7 @@ mono_lldb_init (const char *options) enabled = TRUE; mono_os_mutex_init_recursive (&mutex); - mono_counters_register ("Time spent in LLDB", MONO_COUNTER_JIT | MONO_COUNTER_DOUBLE, ®ister_time); + mono_counters_register ("Time spent in LLDB", MONO_COUNTER_JIT | MONO_COUNTER_LONG | MONO_COUNTER_TIME, ®ister_time); } typedef struct diff --git a/mono/mini/llvm-jit.cpp b/mono/mini/llvm-jit.cpp index 894b0f4785..368c8c4121 100644 --- a/mono/mini/llvm-jit.cpp +++ b/mono/mini/llvm-jit.cpp @@ -18,11 +18,7 @@ #include "mini-llvm-cpp.h" #include "llvm-jit.h" -#if defined(MONO_ARCH_LLVM_JIT_SUPPORTED) && !defined(MONO_CROSS_COMPILE) && LLVM_API_VERSION > 100 - -/* - * LLVM 3.9 uses the OrcJIT APIs - */ +#if defined(MONO_ARCH_LLVM_JIT_SUPPORTED) && !defined(MONO_CROSS_COMPILE) && LLVM_API_VERSION > 600 #include <llvm/Support/raw_ostream.h> #include <llvm/Support/Host.h> @@ -32,13 +28,9 @@ #include "llvm/ExecutionEngine/Orc/CompileUtils.h" #include "llvm/ExecutionEngine/Orc/IRCompileLayer.h" #include "llvm/ExecutionEngine/Orc/LambdaResolver.h" -#if LLVM_API_VERSION >= 500 #include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h" #include "llvm/ExecutionEngine/JITSymbol.h" -#else -#include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" -#endif #include <cstdlib> @@ -125,46 +117,23 @@ MonoJitMemoryManager::finalizeMemory(std::string *ErrMsg) class MonoLLVMJIT { public: /* We use our own trampoline infrastructure instead of the Orc one */ -#if LLVM_API_VERSION >= 500 typedef RTDyldObjectLinkingLayer ObjLayerT; typedef IRCompileLayer<ObjLayerT, SimpleCompiler> CompileLayerT; typedef CompileLayerT::ModuleHandleT ModuleHandleT; -#else - typedef ObjectLinkingLayer<> ObjLayerT; - typedef IRCompileLayer<ObjLayerT> CompileLayerT; - typedef CompileLayerT::ModuleSetHandleT ModuleHandleT; -#endif MonoLLVMJIT (TargetMachine *TM, MonoJitMemoryManager *mm) -#if LLVM_API_VERSION >= 500 : TM(TM), ObjectLayer([=] { return std::shared_ptr<RuntimeDyld::MemoryManager> (mm); }), -#else - : TM(TM), -#endif CompileLayer (ObjectLayer, SimpleCompiler (*TM)), modules() { } -#if LLVM_API_VERSION >= 500 ModuleHandleT addModule(Function *F, std::shared_ptr<Module> M) { -#else - ModuleHandleT addModule(Function *F, Module *M) { -#endif auto Resolver = createLambdaResolver( [&](const std::string &Name) { const char *name = Name.c_str (); -#if LLVM_API_VERSION >= 500 JITSymbolFlags flags = JITSymbolFlags (); -#else - JITSymbolFlags flags = (JITSymbolFlags)0; -#endif - if (!strcmp (name, "___bzero")) { -#if LLVM_API_VERSION >= 500 + if (!strcmp (name, "___bzero")) return JITSymbol((uint64_t)(gssize)(void*)bzero, flags); -#else - return RuntimeDyld::SymbolInfo((uint64_t)(gssize)(void*)bzero, flags); -#endif - } MonoDl *current; char *err; @@ -179,11 +148,7 @@ public: if (!symbol) outs () << "R: " << Name << "\n"; assert (symbol); -#if LLVM_API_VERSION >= 500 return JITSymbol((uint64_t)(gssize)symbol, flags); -#else - return RuntimeDyld::SymbolInfo((uint64_t)(gssize)symbol, flags); -#endif }, [](const std::string &S) { outs () << "R2: " << S << "\n"; @@ -191,15 +156,9 @@ public: return nullptr; } ); -#if LLVM_API_VERSION >= 500 auto m = CompileLayer.addModule(M, std::move(Resolver)); g_assert (!!m); return m.get (); -#else - return CompileLayer.addModuleSet(singletonSet(M), - make_unique<MonoJitMemoryManager>(), - std::move(Resolver)); -#endif } std::string mangle(const std::string &Name) { @@ -225,14 +184,10 @@ public: gpointer compile (Function *F, int nvars, LLVMValueRef *callee_vars, gpointer *callee_addrs, gpointer *eh_frame) { F->getParent ()->setDataLayout (TM->createDataLayout ()); -#if LLVM_API_VERSION >= 500 // Orc uses a shared_ptr to refer to modules so we have to save them ourselves to keep a ref std::shared_ptr<Module> m (F->getParent ()); modules.push_back (m); auto ModuleHandle = addModule (F, m); -#else - auto ModuleHandle = addModule (F, F->getParent ()); -#endif auto BodySym = CompileLayer.findSymbolIn(ModuleHandle, mangle (F), false); auto BodyAddr = BodySym.getAddress(); assert (BodyAddr); @@ -242,26 +197,15 @@ public: auto sym = CompileLayer.findSymbolIn (ModuleHandle, mangle (var->getName ()), true); auto addr = sym.getAddress (); -#if LLVM_API_VERSION >= 500 g_assert ((bool)addr); callee_addrs [i] = (gpointer)addr.get (); -#else - g_assert (addr); - callee_addrs [i] = (gpointer)addr; -#endif } auto ehsym = CompileLayer.findSymbolIn(ModuleHandle, "mono_eh_frame", false); auto ehaddr = ehsym.getAddress (); -#if LLVM_API_VERSION >= 500 g_assert ((bool)ehaddr); *eh_frame = (gpointer)ehaddr.get (); return (gpointer)BodyAddr.get (); -#else - g_assert (ehaddr); - *eh_frame = (gpointer)ehaddr; - return (gpointer)BodyAddr; -#endif } private: @@ -275,7 +219,7 @@ static MonoLLVMJIT *jit; static MonoJitMemoryManager *mono_mm; MonoEERef -mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, DlSymCb *dlsym_cb, LLVMExecutionEngineRef *ee) +mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, LLVMExecutionEngineRef *ee) { alloc_code_mem_cb = alloc_cb; @@ -319,550 +263,7 @@ mono_llvm_dispose_ee (MonoEERef *eeref) { } -void -LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, - void* Addr) -{ - g_assert_not_reached (); -} - -void* -LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global) -{ - g_assert_not_reached (); - return NULL; -} - -#elif defined(MONO_ARCH_LLVM_JIT_SUPPORTED) && !defined(MONO_CROSS_COMPILE) && LLVM_API_VERSION < 100 - -#include <stdint.h> - -#include <llvm/Support/raw_ostream.h> -#include <llvm/Support/Host.h> -#include <llvm/PassManager.h> -#include <llvm/ExecutionEngine/ExecutionEngine.h> -#include <llvm/ExecutionEngine/JITMemoryManager.h> -#include <llvm/ExecutionEngine/JITEventListener.h> -#include <llvm/Target/TargetOptions.h> -#include <llvm/Target/TargetRegisterInfo.h> -#include <llvm/IR/Verifier.h> -#include <llvm/Analysis/Passes.h> -#include <llvm/Transforms/Scalar.h> -#include <llvm/Support/CommandLine.h> -#include <llvm/IR/LegacyPassNameParser.h> -#include <llvm/Support/PrettyStackTrace.h> -#include <llvm/CodeGen/Passes.h> -#include <llvm/CodeGen/MachineFunctionPass.h> -#include <llvm/CodeGen/MachineFunction.h> -#include <llvm/CodeGen/MachineFrameInfo.h> -#include <llvm/IR/Function.h> -#include <llvm/IR/IRBuilder.h> -#include <llvm/IR/Module.h> - -using namespace llvm; - -static void (*unhandled_exception)() = default_mono_llvm_unhandled_exception; - -void -mono_llvm_set_unhandled_exception_handler (void) -{ - std::set_terminate (unhandled_exception); -} - -class MonoJITMemoryManager : public JITMemoryManager -{ -private: - JITMemoryManager *mm; - -public: - /* Callbacks installed by mono */ - AllocCodeMemoryCb *alloc_cb; - DlSymCb *dlsym_cb; - ExceptionTableCb *exception_cb; - - MonoJITMemoryManager (); - ~MonoJITMemoryManager (); - - void setMemoryWritable (void); - - void setMemoryExecutable (void); - - void AllocateGOT(); - - unsigned char *getGOTBase() const { - return mm->getGOTBase (); - } - - void setPoisonMemory(bool) { - } - - unsigned char *startFunctionBody(const Function *F, - uintptr_t &ActualSize); - - unsigned char *allocateStub(const GlobalValue* F, unsigned StubSize, - unsigned Alignment); - - void endFunctionBody(const Function *F, unsigned char *FunctionStart, - unsigned char *FunctionEnd); - - unsigned char *allocateSpace(intptr_t Size, unsigned Alignment); - - uint8_t *allocateGlobal(uintptr_t Size, unsigned Alignment); - - void deallocateMemForFunction(const Function *F); - - unsigned char*startExceptionTable(const Function* F, - uintptr_t &ActualSize); - - void endExceptionTable(const Function *F, unsigned char *TableStart, - unsigned char *TableEnd, - unsigned char* FrameRegister); - - virtual void deallocateFunctionBody(void*) { - } - - virtual void deallocateExceptionTable(void*) { - } - - virtual uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, - StringRef SectionName) { - // FIXME: - assert(0); - return NULL; - } - - virtual uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, - StringRef SectionName, bool IsReadOnly) { - // FIXME: - assert(0); - return NULL; - } - - virtual bool applyPermissions(std::string*) { - // FIXME: - assert(0); - return false; - } - - virtual bool finalizeMemory(std::string *ErrMsg = 0) { - // FIXME: - assert(0); - return false; - } - - virtual void* getPointerToNamedFunction(const std::string &Name, bool AbortOnFailure) { - void *res; - char *err; - - err = dlsym_cb (Name.c_str (), &res); - if (err) { - outs () << "Unable to resolve: " << Name << ": " << err << "\n"; - assert(0); - return NULL; - } - return res; - } -}; - -MonoJITMemoryManager::MonoJITMemoryManager () -{ - mm = JITMemoryManager::CreateDefaultMemManager (); -} - -MonoJITMemoryManager::~MonoJITMemoryManager () -{ - delete mm; -} - -void -MonoJITMemoryManager::setMemoryWritable (void) -{ -} - -void -MonoJITMemoryManager::setMemoryExecutable (void) -{ -} - -void -MonoJITMemoryManager::AllocateGOT() -{ - mm->AllocateGOT (); -} - -unsigned char * -MonoJITMemoryManager::startFunctionBody(const Function *F, - uintptr_t &ActualSize) -{ - // FIXME: This leaks memory - if (ActualSize == 0) - ActualSize = 128; - return alloc_cb (wrap (F), ActualSize); -} - -unsigned char * -MonoJITMemoryManager::allocateStub(const GlobalValue* F, unsigned StubSize, - unsigned Alignment) -{ - return alloc_cb (wrap (F), StubSize); -} - -void -MonoJITMemoryManager::endFunctionBody(const Function *F, unsigned char *FunctionStart, - unsigned char *FunctionEnd) -{ -} - -unsigned char * -MonoJITMemoryManager::allocateSpace(intptr_t Size, unsigned Alignment) -{ - return new unsigned char [Size]; -} - -uint8_t * -MonoJITMemoryManager::allocateGlobal(uintptr_t Size, unsigned Alignment) -{ - return new unsigned char [Size]; -} - -void -MonoJITMemoryManager::deallocateMemForFunction(const Function *F) -{ -} - -unsigned char* -MonoJITMemoryManager::startExceptionTable(const Function* F, - uintptr_t &ActualSize) -{ - return startFunctionBody(F, ActualSize); -} - -void -MonoJITMemoryManager::endExceptionTable(const Function *F, unsigned char *TableStart, - unsigned char *TableEnd, - unsigned char* FrameRegister) -{ - exception_cb (FrameRegister); -} - -class MonoJITEventListener : public JITEventListener { - -public: - FunctionEmittedCb *emitted_cb; - - MonoJITEventListener (FunctionEmittedCb *cb) { - emitted_cb = cb; - } - - virtual void NotifyFunctionEmitted(const Function &F, - void *Code, size_t Size, - const EmittedFunctionDetails &Details) { - emitted_cb (wrap (&F), Code, (char*)Code + Size); - } -}; - -class MonoEE { -public: - ExecutionEngine *EE; - MonoJITMemoryManager *mm; - MonoJITEventListener *listener; - FunctionPassManager *fpm; -}; - -void -mono_llvm_optimize_method (MonoEERef eeref, LLVMValueRef method) -{ - MonoEE *mono_ee = (MonoEE*)eeref; - - /* - * The verifier does some checks on the whole module, leading to quadratic behavior. - */ - //verifyFunction (*(unwrap<Function> (method))); - mono_ee->fpm->run (*unwrap<Function> (method)); -} - -static cl::list<const PassInfo*, bool, PassNameParser> -PassList(cl::desc("Optimizations available:")); - -static void -force_pass_linking (void) -{ - // Make sure the rest is linked in, but never executed - char *foo = g_getenv ("FOO"); - gboolean ret = (foo != (char*)-1); - g_free (foo); - - if (ret) - return; - - // This is a subset of the passes in LinkAllPasses.h - // The utility passes and the interprocedural passes are commented out - - (void) llvm::createAAEvalPass(); - (void) llvm::createAggressiveDCEPass(); - (void) llvm::createAliasAnalysisCounterPass(); - (void) llvm::createAliasDebugger(); - /* - (void) llvm::createArgumentPromotionPass(); - (void) llvm::createStructRetPromotionPass(); - */ - (void) llvm::createBasicAliasAnalysisPass(); - (void) llvm::createLibCallAliasAnalysisPass(0); - (void) llvm::createScalarEvolutionAliasAnalysisPass(); - //(void) llvm::createBlockPlacementPass(); - (void) llvm::createBreakCriticalEdgesPass(); - (void) llvm::createCFGSimplificationPass(); - /* - (void) llvm::createConstantMergePass(); - (void) llvm::createConstantPropagationPass(); - */ - /* - (void) llvm::createDeadArgEliminationPass(); - */ - (void) llvm::createDeadCodeEliminationPass(); - (void) llvm::createDeadInstEliminationPass(); - (void) llvm::createDeadStoreEliminationPass(); - /* - (void) llvm::createDeadTypeEliminationPass(); - (void) llvm::createDomOnlyPrinterPass(); - (void) llvm::createDomPrinterPass(); - (void) llvm::createDomOnlyViewerPass(); - (void) llvm::createDomViewerPass(); - (void) llvm::createEdgeProfilerPass(); - (void) llvm::createOptimalEdgeProfilerPass(); - (void) llvm::createFunctionInliningPass(); - (void) llvm::createAlwaysInlinerPass(); - (void) llvm::createGlobalDCEPass(); - (void) llvm::createGlobalOptimizerPass(); - (void) llvm::createGlobalsModRefPass(); - (void) llvm::createIPConstantPropagationPass(); - (void) llvm::createIPSCCPPass(); - */ - (void) llvm::createIndVarSimplifyPass(); - (void) llvm::createInstructionCombiningPass(); - /* - (void) llvm::createInternalizePass(false); - */ - (void) llvm::createLCSSAPass(); - (void) llvm::createLICMPass(); - (void) llvm::createLazyValueInfoPass(); - //(void) llvm::createLoopDependenceAnalysisPass(); - /* - (void) llvm::createLoopExtractorPass(); - */ - (void) llvm::createLoopSimplifyPass(); - (void) llvm::createLoopStrengthReducePass(); - (void) llvm::createLoopUnrollPass(); - (void) llvm::createLoopUnswitchPass(); - (void) llvm::createLoopRotatePass(); - (void) llvm::createLowerInvokePass(); - /* - (void) llvm::createLowerSetJmpPass(); - */ - (void) llvm::createLowerSwitchPass(); - (void) llvm::createNoAAPass(); - /* - (void) llvm::createNoProfileInfoPass(); - (void) llvm::createProfileEstimatorPass(); - (void) llvm::createProfileVerifierPass(); - (void) llvm::createProfileLoaderPass(); - */ - (void) llvm::createPromoteMemoryToRegisterPass(); - (void) llvm::createDemoteRegisterToMemoryPass(); - /* - (void) llvm::createPruneEHPass(); - (void) llvm::createPostDomOnlyPrinterPass(); - (void) llvm::createPostDomPrinterPass(); - (void) llvm::createPostDomOnlyViewerPass(); - (void) llvm::createPostDomViewerPass(); - */ - (void) llvm::createReassociatePass(); - (void) llvm::createSCCPPass(); - (void) llvm::createScalarReplAggregatesPass(); - //(void) llvm::createSimplifyLibCallsPass(); - /* - (void) llvm::createSingleLoopExtractorPass(); - (void) llvm::createStripSymbolsPass(); - (void) llvm::createStripNonDebugSymbolsPass(); - (void) llvm::createStripDeadDebugInfoPass(); - (void) llvm::createStripDeadPrototypesPass(); - (void) llvm::createTailCallEliminationPass(); - (void) llvm::createTailDuplicationPass(); - (void) llvm::createJumpThreadingPass(); - */ - /* - (void) llvm::createUnifyFunctionExitNodesPass(); - */ - (void) llvm::createInstCountPass(); - (void) llvm::createCodeGenPreparePass(); - (void) llvm::createGVNPass(); - (void) llvm::createMemCpyOptPass(); - (void) llvm::createLoopDeletionPass(); - /* - (void) llvm::createPostDomTree(); - (void) llvm::createPostDomFrontier(); - (void) llvm::createInstructionNamerPass(); - (void) llvm::createPartialSpecializationPass(); - (void) llvm::createFunctionAttrsPass(); - (void) llvm::createMergeFunctionsPass(); - (void) llvm::createPrintModulePass(0); - (void) llvm::createPrintFunctionPass("", 0); - (void) llvm::createDbgInfoPrinterPass(); - (void) llvm::createModuleDebugInfoPrinterPass(); - (void) llvm::createPartialInliningPass(); - (void) llvm::createGEPSplitterPass(); - (void) llvm::createLintPass(); - */ - (void) llvm::createSinkingPass(); -} - -static gboolean inited; - -static void -init_llvm (void) -{ - if (inited) - return; - - force_pass_linking (); - -#ifdef TARGET_ARM - LLVMInitializeARMTarget (); - LLVMInitializeARMTargetInfo (); - LLVMInitializeARMTargetMC (); -#elif defined(TARGET_ARM64) - LLVMInitializeAArch64Target (); - LLVMInitializeAArch64TargetInfo (); - LLVMInitializeAArch64TargetMC (); -#elif defined(TARGET_X86) || defined(TARGET_AMD64) - LLVMInitializeX86Target (); - LLVMInitializeX86TargetInfo (); - LLVMInitializeX86TargetMC (); -#elif defined(TARGET_POWERPC) - LLVMInitializePowerPCTarget (); - LLVMInitializePowerPCTargetInfo (); - LLVMInitializePowerPCTargetMC (); -#else - #error Unsupported mono-llvm target -#endif - - PassRegistry &Registry = *PassRegistry::getPassRegistry(); - initializeCore(Registry); - initializeScalarOpts(Registry); - initializeAnalysis(Registry); - initializeIPA(Registry); - initializeTransformUtils(Registry); - initializeInstCombine(Registry); - initializeTarget(Registry); - - llvm::cl::ParseEnvironmentOptions("mono", "MONO_LLVM", ""); - - inited = true; -} - -MonoEERef -mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, DlSymCb *dlsym_cb, LLVMExecutionEngineRef *ee) -{ - std::string Error; - MonoEE *mono_ee; - - init_llvm (); - - mono_ee = new MonoEE (); - - MonoJITMemoryManager *mono_mm = new MonoJITMemoryManager (); - mono_mm->alloc_cb = alloc_cb; - mono_mm->dlsym_cb = dlsym_cb; - mono_mm->exception_cb = exception_cb; - mono_ee->mm = mono_mm; - - /* - * The Default code model doesn't seem to work on amd64, - * test_0_fields_with_big_offsets (among others) crashes, because LLVM tries to call - * memset using a normal pcrel code which is in 32bit memory, while memset isn't. - */ - - TargetOptions opts; - opts.JITExceptionHandling = 1; - - StringRef cpu_name = sys::getHostCPUName (); - - // EngineBuilder no longer has a copy assignment operator (?) - std::unique_ptr<Module> Owner(unwrap(MP)); - EngineBuilder b (std::move(Owner)); - ExecutionEngine *EE = b.setJITMemoryManager (mono_mm).setTargetOptions (opts).setAllocateGVsWithCode (true).setMCPU (cpu_name).create (); - - g_assert (EE); - mono_ee->EE = EE; - - MonoJITEventListener *listener = new MonoJITEventListener (emitted_cb); - EE->RegisterJITEventListener (listener); - mono_ee->listener = listener; - - FunctionPassManager *fpm = new FunctionPassManager (unwrap (MP)); - mono_ee->fpm = fpm; - - fpm->add(new DataLayoutPass(*EE->getDataLayout())); - - if (PassList.size() > 0) { - /* Use the passes specified by the env variable */ - /* Only the passes in force_pass_linking () can be used */ - for (unsigned i = 0; i < PassList.size(); ++i) { - const PassInfo *PassInf = PassList[i]; - Pass *P = 0; - - if (PassInf->getNormalCtor()) - P = PassInf->getNormalCtor()(); - fpm->add (P); - } - } else { - /* Use the same passes used by 'opt' by default, without the ipo passes */ - const char *opts = "-simplifycfg -domtree -domfrontier -scalarrepl -instcombine -simplifycfg -domtree -domfrontier -scalarrepl -instcombine -simplifycfg -instcombine -simplifycfg -reassociate -domtree -loops -loop-simplify -domfrontier -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -iv-users -indvars -loop-deletion -loop-simplify -lcssa -loop-unroll -instcombine -memdep -gvn -memdep -memcpyopt -sccp -instcombine -domtree -memdep -dse -adce -gvn -simplifycfg"; - char **args; - int i; - - args = g_strsplit (opts, " ", 1000); - for (i = 0; args [i]; i++) - ; - llvm::cl::ParseCommandLineOptions (i, args, ""); - g_strfreev (args); - - for (unsigned i = 0; i < PassList.size(); ++i) { - const PassInfo *PassInf = PassList[i]; - Pass *P = 0; - - if (PassInf->getNormalCtor()) - P = PassInf->getNormalCtor()(); - g_assert (P->getPassKind () == llvm::PT_Function || P->getPassKind () == llvm::PT_Loop); - fpm->add (P); - } - - /* - fpm->add(createInstructionCombiningPass()); - fpm->add(createReassociatePass()); - fpm->add(createGVNPass()); - fpm->add(createCFGSimplificationPass()); - */ - } - - *ee = wrap (EE); - - return mono_ee; -} - -void -mono_llvm_dispose_ee (MonoEERef *eeref) -{ - MonoEE *mono_ee = (MonoEE*)eeref; - - delete mono_ee->EE; - delete mono_ee->fpm; - //delete mono_ee->mm; - delete mono_ee->listener; - delete mono_ee; -} - -#else /* MONO_CROSS_COMPILE */ +#else /* MONO_CROSS_COMPILE or LLVM_API_VERSION < 600 */ void mono_llvm_set_unhandled_exception_handler (void) @@ -870,18 +271,12 @@ mono_llvm_set_unhandled_exception_handler (void) } MonoEERef -mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, DlSymCb *dlsym_cb, LLVMExecutionEngineRef *ee) +mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, LLVMExecutionEngineRef *ee) { g_error ("LLVM JIT not supported on this platform."); return NULL; } -void -mono_llvm_optimize_method (MonoEERef eeref, LLVMValueRef method) -{ - g_assert_not_reached (); -} - gpointer mono_llvm_compile_method (MonoEERef mono_ee, LLVMValueRef method, int nvars, LLVMValueRef *callee_vars, gpointer *callee_addrs, gpointer *eh_frame) { @@ -895,19 +290,4 @@ mono_llvm_dispose_ee (MonoEERef *eeref) g_assert_not_reached (); } -/* Not linked in */ -void -LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, - void* Addr) -{ - g_assert_not_reached (); -} - -void* -LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global) -{ - g_assert_not_reached (); - return NULL; -} - #endif /* !MONO_CROSS_COMPILE */ diff --git a/mono/mini/llvm-jit.h b/mono/mini/llvm-jit.h index 88e44e65bd..ed7ddca919 100644 --- a/mono/mini/llvm-jit.h +++ b/mono/mini/llvm-jit.h @@ -32,12 +32,11 @@ G_BEGIN_DECLS typedef unsigned char * (AllocCodeMemoryCb) (LLVMValueRef function, int size); typedef void (FunctionEmittedCb) (LLVMValueRef function, void *start, void *end); typedef void (ExceptionTableCb) (void *data); -typedef char* (DlSymCb) (const char *name, void **symbol); typedef void* MonoEERef; MonoEERef -mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, DlSymCb *dlsym_cb, LLVMExecutionEngineRef *ee); +mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, LLVMExecutionEngineRef *ee); void mono_llvm_dispose_ee (MonoEERef *mono_ee); @@ -45,9 +44,6 @@ mono_llvm_dispose_ee (MonoEERef *mono_ee); gpointer mono_llvm_compile_method (MonoEERef mono_ee, LLVMValueRef method, int nvars, LLVMValueRef *callee_vars, gpointer *callee_addrs, gpointer *eh_frame); -void -mono_llvm_optimize_method (MonoEERef mono_ee, LLVMValueRef method); - void mono_llvm_set_unhandled_exception_handler (void); diff --git a/mono/mini/llvmonly-runtime.c b/mono/mini/llvmonly-runtime.c index e21a2cb830..f588a2b847 100644 --- a/mono/mini/llvmonly-runtime.c +++ b/mono/mini/llvmonly-runtime.c @@ -769,33 +769,37 @@ mini_llvmonly_resolve_iface_call_gsharedvt (MonoObject *this_obj, int imt_slot, } static void -init_llvmonly_method (MonoAotModule *amodule, guint32 method_index, MonoClass *init_class, MonoGenericContext *context, - gboolean lookup_context) +init_llvmonly_method (MonoAotModule *amodule, guint32 method_index, MonoClass *init_class) { ERROR_DECL (error); gboolean res; - res = mono_aot_init_llvmonly_method (amodule, method_index, init_class, context, lookup_context, error); + res = mono_aot_init_llvmonly_method (amodule, method_index, init_class, error); if (!res || !is_ok (error)) { MonoException *ex = mono_error_convert_to_exception (error); - /* Its okay to raise in llvmonly mode */ - if (ex) - mono_llvm_throw_exception ((MonoObject*)ex); + if (ex) { + /* Its okay to raise in llvmonly mode */ + if (mono_llvm_only) { + mono_llvm_throw_exception ((MonoObject*)ex); + } else { + mono_set_pending_exception (ex); + } + } } } /* Called from generated code to initialize a method */ void -mini_llvmonly_init_method (gpointer aot_module, guint32 method_index) +mini_llvm_init_method (gpointer aot_module, guint32 method_index) { MonoAotModule *amodule = (MonoAotModule *)aot_module; - init_llvmonly_method (amodule, method_index, NULL, NULL, FALSE); + init_llvmonly_method (amodule, method_index, NULL); } /* Same for gshared methods with a this pointer */ void -mini_llvmonly_init_gshared_method_this (gpointer aot_module, guint32 method_index, MonoObject *this_obj) +mini_llvm_init_gshared_method_this (gpointer aot_module, guint32 method_index, MonoObject *this_obj) { MonoAotModule *amodule = (MonoAotModule *)aot_module; MonoClass *klass; @@ -804,39 +808,38 @@ mini_llvmonly_init_gshared_method_this (gpointer aot_module, guint32 method_inde g_assert (this_obj); klass = this_obj->vtable->klass; - /* - * We can't obtain the context from THIS_OBJ since it can point to a child class etc., so - * we depend on these methods to be called indirectly which causes them to be added - * to extra_methods. - */ - init_llvmonly_method (amodule, method_index, klass, NULL, TRUE); + init_llvmonly_method (amodule, method_index, klass); } /* Same for gshared methods with an mrgctx arg */ void -mini_llvmonly_init_gshared_method_mrgctx (gpointer aot_module, guint32 method_index, MonoMethodRuntimeGenericContext *rgctx) +mini_llvm_init_gshared_method_mrgctx (gpointer aot_module, guint32 method_index, MonoMethodRuntimeGenericContext *rgctx) { MonoAotModule *amodule = (MonoAotModule *)aot_module; - MonoGenericContext context = { NULL, NULL }; - MonoClass *klass = rgctx->class_vtable->klass; - if (mono_class_is_ginst (klass)) - context.class_inst = mono_class_get_generic_class (klass)->context.class_inst; - else if (mono_class_is_gtd (klass)) - context.class_inst = mono_class_get_generic_container (klass)->context.class_inst; - context.method_inst = rgctx->method_inst; - - init_llvmonly_method (amodule, method_index, rgctx->class_vtable->klass, &context, FALSE); + init_llvmonly_method (amodule, method_index, rgctx->class_vtable->klass); } /* Same for gshared methods with a vtable arg */ void -mini_llvmonly_init_gshared_method_vtable (gpointer aot_module, guint32 method_index, MonoVTable *vtable) +mini_llvm_init_gshared_method_vtable (gpointer aot_module, guint32 method_index, MonoVTable *vtable) { MonoAotModule *amodule = (MonoAotModule *)aot_module; MonoClass *klass; klass = vtable->klass; - init_llvmonly_method (amodule, method_index, klass, NULL, TRUE); + init_llvmonly_method (amodule, method_index, klass); +} + +static GENERATE_GET_CLASS_WITH_CACHE (nullref, "System", "NullReferenceException") + +void +mini_llvmonly_throw_nullref_exception (void) +{ + MonoClass *klass = mono_class_get_nullref_class (); + + guint32 ex_token_index = m_class_get_type_token (klass) - MONO_TOKEN_TYPE_DEF; + + mono_llvm_throw_corlib_exception (ex_token_index); } diff --git a/mono/mini/llvmonly-runtime.h b/mono/mini/llvmonly-runtime.h index ea4dbf9e13..d6e38cbba7 100644 --- a/mono/mini/llvmonly-runtime.h +++ b/mono/mini/llvmonly-runtime.h @@ -27,9 +27,11 @@ G_EXTERN_C MonoFtnDesc* mini_llvmonly_resolve_generic_virtual_iface_call (MonoVT G_EXTERN_C void mini_llvmonly_init_delegate (MonoDelegate *del); G_EXTERN_C void mini_llvmonly_init_delegate_virtual (MonoDelegate *del, MonoObject *target, MonoMethod *method); -G_EXTERN_C void mini_llvmonly_init_method (gpointer aot_module, guint32 method_index); -G_EXTERN_C void mini_llvmonly_init_gshared_method_this (gpointer aot_module, guint32 method_index, MonoObject *this_ins); -G_EXTERN_C void mini_llvmonly_init_gshared_method_mrgctx (gpointer aot_module, guint32 method_index, MonoMethodRuntimeGenericContext *rgctx); -G_EXTERN_C void mini_llvmonly_init_gshared_method_vtable (gpointer aot_module, guint32 method_index, MonoVTable *vtable); +G_EXTERN_C void mini_llvm_init_method (gpointer aot_module, guint32 method_index); +G_EXTERN_C void mini_llvm_init_gshared_method_this (gpointer aot_module, guint32 method_index, MonoObject *this_ins); +G_EXTERN_C void mini_llvm_init_gshared_method_mrgctx (gpointer aot_module, guint32 method_index, MonoMethodRuntimeGenericContext *rgctx); +G_EXTERN_C void mini_llvm_init_gshared_method_vtable (gpointer aot_module, guint32 method_index, MonoVTable *vtable); + +G_EXTERN_C void mini_llvmonly_throw_nullref_exception (void); #endif diff --git a/mono/mini/local-propagation.c b/mono/mini/local-propagation.c index 77b87fb87b..bfb5556124 100644 --- a/mono/mini/local-propagation.c +++ b/mono/mini/local-propagation.c @@ -780,6 +780,12 @@ mono_local_cprop (MonoCompile *cfg) bb_opt->in_count = bb_opt->out_count = 0; cfg->cbb = bb_opt; + if (!saved_prev) { + /* first instruction of basic block got replaced, so create + * dummy inst that points to start of basic block */ + MONO_INST_NEW (cfg, saved_prev, OP_NOP); + saved_prev = bb->code; + } /* ins is hanging, continue scanning the emitted code */ ins = saved_prev; continue; diff --git a/mono/mini/main-core.c b/mono/mini/main-core.c index 371a67469e..e0f01d3eea 100644 --- a/mono/mini/main-core.c +++ b/mono/mini/main-core.c @@ -1,19 +1,41 @@ #include <config.h> + +#if ENABLE_NETCORE + #include "mini.h" #include "mini-runtime.h" #include <mono/metadata/assembly.h> #include <mono/metadata/assembly-internals.h> +#include <mono/metadata/loader-internals.h> #include <mono/utils/mono-logger-internals.h> -MONO_API int coreclr_initialize (const char* exePath, const char* appDomainFriendlyName, +#ifndef STDAPICALLTYPE +#define STDAPICALLTYPE +#endif + +#if defined(_MSC_VER) && defined(HOST_WIN32) && defined(HOST_X86) +// Ensure that the exported symbols are not decorated and that only one set is exported +#pragma comment(linker, "/export:coreclr_initialize=_coreclr_initialize@28") +#pragma comment(linker, "/export:coreclr_execute_assembly=_coreclr_execute_assembly@24") +#pragma comment(linker, "/export:coreclr_shutdown_2=_coreclr_shutdown_2@12") +#pragma comment(linker, "/export:coreclr_create_delegate=_coreclr_create_delegate@24") +#undef MONO_API +#define MONO_API MONO_EXTERN_C +#endif + +MONO_API int STDAPICALLTYPE coreclr_initialize (const char* exePath, const char* appDomainFriendlyName, int propertyCount, const char** propertyKeys, const char** propertyValues, void** hostHandle, unsigned int* domainId); -MONO_API int coreclr_execute_assembly (void* hostHandle, unsigned int domainId, +MONO_API int STDAPICALLTYPE coreclr_execute_assembly (void* hostHandle, unsigned int domainId, int argc, const char** argv, const char* managedAssemblyPath, unsigned int* exitCode); -MONO_API int coreclr_shutdown_2 (void* hostHandle, unsigned int domainId, int* latchedExitCode); +MONO_API int STDAPICALLTYPE coreclr_shutdown_2 (void* hostHandle, unsigned int domainId, int* latchedExitCode); + +MONO_API int STDAPICALLTYPE coreclr_create_delegate (void* hostHandle, unsigned int domainId, + const char* entryPointAssemblyName, const char* entryPointTypeName, const char* entryPointMethodName, + void** delegate); typedef struct { int assembly_count; @@ -21,7 +43,13 @@ typedef struct { char **assembly_filepaths; /* /blah/blah/blah/Foo.dll */ } MonoCoreTrustedPlatformAssemblies; +typedef struct { + int dir_count; + char **dirs; +} MonoCoreNativeLibPaths; + static MonoCoreTrustedPlatformAssemblies *trusted_platform_assemblies; +static MonoCoreNativeLibPaths *native_lib_paths; static void mono_core_trusted_platform_assemblies_free (MonoCoreTrustedPlatformAssemblies *a) @@ -33,6 +61,15 @@ mono_core_trusted_platform_assemblies_free (MonoCoreTrustedPlatformAssemblies *a g_free (a); } +static void +mono_core_native_lib_paths_free (MonoCoreNativeLibPaths *dl) +{ + if (!dl) + return; + g_strfreev (dl->dirs); + g_free (dl); +} + static gboolean parse_trusted_platform_assemblies (const char *assemblies_paths) { @@ -62,6 +99,27 @@ parse_trusted_platform_assemblies (const char *assemblies_paths) return TRUE; } +static gboolean +parse_native_dll_search_directories (const char *native_dlls_dirs) +{ + char **parts = g_strsplit (native_dlls_dirs, G_SEARCHPATH_SEPARATOR_S, 0); + int dir_count = 0; + for (char **p = parts; *p != NULL && **p != '\0'; p++) { +#if 0 + const char *part = *p; + // can't use logger, it's not initialized yet. + printf ("\t\tnative search dir %d = <%s>\n", dir_count, part); +#endif + dir_count++; + } + MonoCoreNativeLibPaths *dl = g_new0 (MonoCoreNativeLibPaths, 1); + dl->dirs = parts; + dl->dir_count = dir_count; + + native_lib_paths = dl; + return TRUE; +} + static MonoAssembly* mono_core_preload_hook (MonoAssemblyName *aname, char **unused_apaths, void *user_data) { @@ -119,14 +177,17 @@ parse_properties (int propertyCount, const char** propertyKeys, const char** pro { // The a partial list of relevant properties is // https://docs.microsoft.com/en-us/dotnet/core/tutorials/netcore-hosting#step-3---prepare-runtime-properties - // TODO: We should also pick up at least - // APP_PATHS, APP_NI_PATHS and NATIVE_DLL_SEARCH_DIRECTORIES - // - // and PLATFORM_RESOURCE_ROOTS for satellite assemblies in culture-specific subdirectories + // TODO: We should also pick up at least APP_PATHS and APP_NI_PATHS + // and PLATFORM_RESOURCE_ROOTS for satellite assemblies in culture-specific subdirectories for (int i = 0; i < propertyCount; ++i) { if (!strcmp (propertyKeys[i], "TRUSTED_PLATFORM_ASSEMBLIES")) { parse_trusted_platform_assemblies (propertyValues[i]); + } else if (!strcmp (propertyKeys[i], "NATIVE_DLL_SEARCH_DIRECTORIES")) { + parse_native_dll_search_directories (propertyValues[i]); + } else if (!strcmp (propertyKeys[i], "System.Globalization.Invariant")) { + // TODO: Ideally we should propagate this through AppContext options + g_setenv ("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", propertyValues[i], TRUE); } else { #if 0 // can't use mono logger, it's not initialized yet. @@ -152,15 +213,19 @@ parse_properties (int propertyCount, const char** propertyKeys, const char** pro // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // -int coreclr_initialize (const char* exePath, const char* appDomainFriendlyName, +int STDAPICALLTYPE coreclr_initialize (const char* exePath, const char* appDomainFriendlyName, int propertyCount, const char** propertyKeys, const char** propertyValues, void** hostHandle, unsigned int* domainId) { + mono_runtime_register_appctx_properties (propertyCount, propertyKeys, propertyValues); + // TODO: TRUSTED_PLATFORM_ASSEMBLIES is the property key for managed assemblies mapping if (!parse_properties (propertyCount, propertyKeys, propertyValues)) return 0x80004005; /* E_FAIL */ install_assembly_loader_hooks (); + if (native_lib_paths != NULL) + mono_set_pinvoke_search_directories (native_lib_paths->dir_count, native_lib_paths->dirs); return 0; } @@ -180,7 +245,7 @@ int coreclr_initialize (const char* exePath, const char* appDomainFriendlyName, // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // -int coreclr_execute_assembly (void* hostHandle, unsigned int domainId, +int STDAPICALLTYPE coreclr_execute_assembly (void* hostHandle, unsigned int domainId, int argc, const char** argv, const char* managedAssemblyPath, unsigned int* exitCode) { @@ -224,11 +289,40 @@ int coreclr_execute_assembly (void* hostHandle, unsigned int domainId, // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // -int coreclr_shutdown_2 (void* hostHandle, unsigned int domainId, int* latchedExitCode) +int STDAPICALLTYPE coreclr_shutdown_2 (void* hostHandle, unsigned int domainId, int* latchedExitCode) { + mono_set_pinvoke_search_directories (0, NULL); + MonoCoreNativeLibPaths *dl = native_lib_paths; + native_lib_paths = NULL; + mono_core_native_lib_paths_free (dl); + MonoCoreTrustedPlatformAssemblies *a = trusted_platform_assemblies; trusted_platform_assemblies = NULL; mono_core_trusted_platform_assemblies_free (a); return 0; } + +// +// Create a native callable delegate for a managed method. +// +// Parameters: +// hostHandle - Handle of the host +// domainId - Id of the domain +// entryPointAssemblyName - Name of the assembly which holds the custom entry point +// entryPointTypeName - Name of the type which holds the custom entry point +// entryPointMethodName - Name of the method which is the custom entry point +// delegate - Output parameter, the function stores a pointer to the delegate at the specified address +// +// Returns: +// HRESULT indicating status of the operation. S_OK if the assembly was successfully executed +// +int STDAPICALLTYPE coreclr_create_delegate (void* hostHandle, unsigned int domainId, + const char* entryPointAssemblyName, const char* entryPointTypeName, const char* entryPointMethodName, + void** delegate) +{ + g_error ("Not implemented"); + return 0; +} + +#endif // ENABLE_NETCORE diff --git a/mono/mini/memory-access.c b/mono/mini/memory-access.c index e40744f804..0b6c079dec 100644 --- a/mono/mini/memory-access.c +++ b/mono/mini/memory-access.c @@ -424,7 +424,7 @@ mini_emit_memory_copy_internal (MonoCompile *cfg, MonoInst *dest, MonoInst *src, size &= ~(TARGET_SIZEOF_VOID_P - 1); EMIT_NEW_ICONST (cfg, iargs [2], size); - mono_emit_jit_icall (cfg, mono_gc_get_range_copy_func (), iargs); + mono_emit_jit_icall (cfg, mono_gc_wbarrier_range_copy, iargs); } return; } diff --git a/mono/mini/method-to-ir.c.REMOVED.git-id b/mono/mini/method-to-ir.c.REMOVED.git-id index 65d442bdc5..427297641e 100644 --- a/mono/mini/method-to-ir.c.REMOVED.git-id +++ b/mono/mini/method-to-ir.c.REMOVED.git-id @@ -1 +1 @@ -85a888f70ae4668d92fa432249750d2629b8862a \ No newline at end of file +bd2e810fe64d94b51846b2700f64de783d7cefe4 \ No newline at end of file diff --git a/mono/mini/mini-amd64.c.REMOVED.git-id b/mono/mini/mini-amd64.c.REMOVED.git-id index 329a96ce24..f237a0b83f 100644 --- a/mono/mini/mini-amd64.c.REMOVED.git-id +++ b/mono/mini/mini-amd64.c.REMOVED.git-id @@ -1 +1 @@ -0eeef110b40592a6aef5cd426020f8948ee71814 \ No newline at end of file +b5111cc863dc705954e6bd450b390ee3a3f71311 \ No newline at end of file diff --git a/mono/mini/mini-amd64.h b/mono/mini/mini-amd64.h index 23bff2ebe6..d020c16c97 100644 --- a/mono/mini/mini-amd64.h +++ b/mono/mini/mini-amd64.h @@ -428,7 +428,6 @@ typedef struct { #define MONO_ARCH_HAVE_CMOV_OPS 1 #define MONO_ARCH_HAVE_EXCEPTIONS_INIT 1 #define MONO_ARCH_HAVE_GENERALIZED_IMT_TRAMPOLINE 1 -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #define MONO_ARCH_HAVE_GET_TRAMPOLINES 1 #define MONO_ARCH_INTERPRETER_SUPPORTED 1 @@ -461,6 +460,7 @@ typedef struct { #define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1 #define MONO_ARCH_HAVE_GENERAL_RGCTX_LAZY_FETCH_TRAMPOLINE 1 #define MONO_ARCH_FLOAT32_SUPPORTED 1 +#define MONO_ARCH_LLVM_TARGET_LAYOUT "e-i64:64-i128:128-n8:16:32:64-S128" #define MONO_ARCH_HAVE_INTERP_PINVOKE_TRAMP #define MONO_ARCH_HAVE_INTERP_ENTRY_TRAMPOLINE 1 diff --git a/mono/mini/mini-arm.c.REMOVED.git-id b/mono/mini/mini-arm.c.REMOVED.git-id index 7c18ce62e8..cfafade3bb 100644 --- a/mono/mini/mini-arm.c.REMOVED.git-id +++ b/mono/mini/mini-arm.c.REMOVED.git-id @@ -1 +1 @@ -d6c4dd833fb81153435aea1305090e343f90e5ef \ No newline at end of file +f3158f910f60c882089a191f830393eda059b9e2 \ No newline at end of file diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index 0c338fadf8..757c00d0b7 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -352,7 +352,6 @@ typedef struct MonoCompileArch { #define MONO_ARCH_HAVE_EXCEPTIONS_INIT 1 #define MONO_ARCH_HAVE_GET_TRAMPOLINES 1 #define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG 1 -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #define MONO_ARCH_GC_MAPS_SUPPORTED 1 #define MONO_ARCH_HAVE_SETUP_ASYNC_CALLBACK 1 #define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG 1 diff --git a/mono/mini/mini-arm64-gsharedvt.c b/mono/mini/mini-arm64-gsharedvt.c index b10fc3f785..8c0a60d901 100644 --- a/mono/mini/mini-arm64-gsharedvt.c +++ b/mono/mini/mini-arm64-gsharedvt.c @@ -21,7 +21,6 @@ void mono_arm_gsharedvt_init (void) { - mono_aot_register_jit_icall ("mono_arm_start_gsharedvt_call", mono_arm_start_gsharedvt_call); } gboolean diff --git a/mono/mini/mini-arm64.c.REMOVED.git-id b/mono/mini/mini-arm64.c.REMOVED.git-id index ee1b3353a6..c6b77bd759 100644 --- a/mono/mini/mini-arm64.c.REMOVED.git-id +++ b/mono/mini/mini-arm64.c.REMOVED.git-id @@ -1 +1 @@ -73fd1604e259fd6b894ad38c5adca0c27dea9aa8 \ No newline at end of file +1c7ccd6d5e291ec8c7a9cd0a214e221753bc3772 \ No newline at end of file diff --git a/mono/mini/mini-arm64.h b/mono/mini/mini-arm64.h index 38da1e4936..c1522a5a7f 100644 --- a/mono/mini/mini-arm64.h +++ b/mono/mini/mini-arm64.h @@ -139,7 +139,6 @@ typedef struct { #define MONO_ARCH_VTABLE_REG ARMREG_R0 #define MONO_ARCH_HAVE_GENERALIZED_IMT_TRAMPOLINE 1 #define MONO_ARCH_USE_SIGACTION 1 -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #ifdef HOST_TVOS #define MONO_ARCH_HAS_NO_PROPER_MONOCTX 1 #endif @@ -168,6 +167,7 @@ typedef struct { #define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1 #define MONO_ARCH_FLOAT32_SUPPORTED 1 #define MONO_ARCH_HAVE_INTERP_PINVOKE_TRAMP 1 +#define MONO_ARCH_LLVM_TARGET_LAYOUT "e-i64:64-i128:128-n32:64-S128" // Does the ABI have a volatile non-parameter register, so tailcall // can pass context to generics or interfaces? diff --git a/mono/mini/mini-codegen.c b/mono/mini/mini-codegen.c index 116e288824..032d43a72d 100644 --- a/mono/mini/mini-codegen.c +++ b/mono/mini/mini-codegen.c @@ -438,7 +438,7 @@ mono_print_ins_index_strbuf (int i, MonoInst *ins) g_string_append_printf (sbuf, "\t%-2d %s", i, mono_inst_name (ins->opcode)); else g_string_append_printf (sbuf, " %s", mono_inst_name (ins->opcode)); - if (spec == MONO_ARCH_CPU_SPEC) { + if (spec == (gpointer)/*FIXME*/MONO_ARCH_CPU_SPEC) { gboolean dest_base = FALSE; switch (ins->opcode) { case OP_STOREV_MEMBASE: @@ -615,7 +615,7 @@ mono_print_ins_index_strbuf (int i, MonoInst *ins) } if (call->method) { - char *full_name = mono_method_full_name (call->method, TRUE); + char *full_name = mono_method_get_full_name (call->method); g_string_append_printf (sbuf, " [%s]", full_name); g_free (full_name); } else if (call->fptr_is_patch) { @@ -1244,7 +1244,7 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb) spec = ins_get_spec (ins->opcode); spec_dest = spec [MONO_INST_DEST]; - if (G_UNLIKELY (spec == MONO_ARCH_CPU_SPEC)) { + if (G_UNLIKELY (spec == (gpointer)/*FIXME*/MONO_ARCH_CPU_SPEC)) { g_error ("Opcode '%s' missing from machine description file.", mono_inst_name (ins->opcode)); } @@ -2691,6 +2691,8 @@ mono_peephole_ins (MonoBasicBlock *bb, MonoInst *ins) int mini_exception_id_by_name (const char *name) { + if (strcmp (name, "NullReferenceException") == 0) + return MONO_EXC_NULL_REF; if (strcmp (name, "IndexOutOfRangeException") == 0) return MONO_EXC_INDEX_OUT_OF_RANGE; if (strcmp (name, "OverflowException") == 0) @@ -2701,8 +2703,6 @@ mini_exception_id_by_name (const char *name) return MONO_EXC_DIVIDE_BY_ZERO; if (strcmp (name, "InvalidCastException") == 0) return MONO_EXC_INVALID_CAST; - if (strcmp (name, "NullReferenceException") == 0) - return MONO_EXC_NULL_REF; if (strcmp (name, "ArrayTypeMismatchException") == 0) return MONO_EXC_ARRAY_TYPE_MISMATCH; if (strcmp (name, "ArgumentException") == 0) diff --git a/mono/mini/mini-exceptions.c.REMOVED.git-id b/mono/mini/mini-exceptions.c.REMOVED.git-id index 5006685a25..51857dcaac 100644 --- a/mono/mini/mini-exceptions.c.REMOVED.git-id +++ b/mono/mini/mini-exceptions.c.REMOVED.git-id @@ -1 +1 @@ -2134ac3fc3a3086f68d1046341e517909a656fdc \ No newline at end of file +aeb31658070d05922e759a75816017b064c35f33 \ No newline at end of file diff --git a/mono/mini/mini-gc.c b/mono/mini/mini-gc.c index a498b12b0f..de6626a336 100644 --- a/mono/mini/mini-gc.c +++ b/mono/mini/mini-gc.c @@ -655,12 +655,8 @@ thread_suspend_func (gpointer user_data, void *sigctx, MonoContext *ctx) } else { tls->unwind_state.unwind_data [MONO_UNWIND_DATA_LMF] = mono_get_lmf (); if (sigctx) { -#ifdef MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX mono_sigctx_to_monoctx (sigctx, &tls->unwind_state.ctx); tls->unwind_state.valid = TRUE; -#else - tls->unwind_state.valid = FALSE; -#endif } else if (ctx) { memcpy (&tls->unwind_state.ctx, ctx, sizeof (MonoContext)); tls->unwind_state.valid = TRUE; diff --git a/mono/mini/mini-generic-sharing.c.REMOVED.git-id b/mono/mini/mini-generic-sharing.c.REMOVED.git-id index 7699143840..a764837ddf 100644 --- a/mono/mini/mini-generic-sharing.c.REMOVED.git-id +++ b/mono/mini/mini-generic-sharing.c.REMOVED.git-id @@ -1 +1 @@ -3b8bff9c92fb7f1ea907610d814aa92311ae562d \ No newline at end of file +033723abe8293e726e86bf4b9578e36f04621ee7 \ No newline at end of file diff --git a/mono/mini/mini-llvm-cpp.cpp b/mono/mini/mini-llvm-cpp.cpp index 104eb33e68..0b3065e306 100644 --- a/mono/mini/mini-llvm-cpp.cpp +++ b/mono/mini/mini-llvm-cpp.cpp @@ -241,10 +241,133 @@ mono_llvm_set_preserveall_cc (LLVMValueRef func) unwrap<Function>(func)->setCallingConv (CallingConv::PreserveAll); } +// Note that in future versions of LLVM, CallInst and InvokeInst +// share a CallBase parent class that would make the below methods +// look much better + void -mono_llvm_set_call_preserveall_cc (LLVMValueRef func) +mono_llvm_set_call_preserveall_cc (LLVMValueRef wrapped_calli) { - unwrap<CallInst>(func)->setCallingConv (CallingConv::PreserveAll); +#if LLVM_API_VERSION > 100 + Instruction *calli = unwrap<Instruction> (wrapped_calli); + + if (isa<CallInst> (calli)) + dyn_cast<CallInst>(calli)->setCallingConv (CallingConv::PreserveAll); + else + dyn_cast<InvokeInst>(calli)->setCallingConv (CallingConv::PreserveAll); +#else + unwrap<CallInst>(wrapped_calli)->setCallingConv (CallingConv::PreserveAll); +#endif +} + +void +mono_llvm_set_call_nonnull_arg (LLVMValueRef wrapped_calli, int argNo) +{ +#if LLVM_API_VERSION > 100 + Instruction *calli = unwrap<Instruction> (wrapped_calli); + + if (isa<CallInst> (calli)) + dyn_cast<CallInst>(calli)->addParamAttr (argNo, Attribute::NonNull); + else + dyn_cast<InvokeInst>(calli)->addParamAttr (argNo, Attribute::NonNull); +#endif +} + +void +mono_llvm_set_call_nonnull_ret (LLVMValueRef wrapped_calli) +{ +#if LLVM_API_VERSION > 100 + Instruction *calli = unwrap<Instruction> (wrapped_calli); + + if (isa<CallInst> (calli)) + dyn_cast<CallInst>(calli)->addAttribute (AttributeList::ReturnIndex, Attribute::NonNull); + else + dyn_cast<InvokeInst>(calli)->addAttribute (AttributeList::ReturnIndex, Attribute::NonNull); +#endif +} + +void +mono_llvm_set_func_nonnull_arg (LLVMValueRef func, int argNo) +{ +#if LLVM_API_VERSION > 100 + unwrap<Function>(func)->addParamAttr (argNo, Attribute::NonNull); +#endif +} + +gboolean +mono_llvm_is_nonnull (LLVMValueRef wrapped) +{ +#if LLVM_API_VERSION > 100 + // Argument to function + Value *val = unwrap (wrapped); + + while (val) { + if (Argument *arg = dyn_cast<Argument> (val)) { + return arg->hasNonNullAttr (); + } else if (CallInst *calli = dyn_cast<CallInst> (val)) { + return calli->hasRetAttr (Attribute::NonNull); + } else if (InvokeInst *calli = dyn_cast<InvokeInst> (val)) { + return calli->hasRetAttr (Attribute::NonNull); + } else if (LoadInst *loadi = dyn_cast<LoadInst> (val)) { + return loadi->getMetadata("nonnull") != nullptr; // nonnull <index> + } else if (Instruction *inst = dyn_cast<Instruction> (val)) { + // If not a load or a function argument, the only case for us to + // consider is that it's a bitcast. If so, recurse on what was casted. + if (inst->getOpcode () == LLVMBitCast) { + val = inst->getOperand (0); + continue; + } + + return FALSE; + } else { + return FALSE; + } + } + +#endif + return FALSE; +} + +GSList * +mono_llvm_calls_using (LLVMValueRef wrapped_local) +{ + GSList *usages = NULL; + Value *local = unwrap (wrapped_local); + + for (User *user : local->users ()) { + if (isa<CallInst> (user) || isa<InvokeInst> (user)) { + usages = g_slist_prepend (usages, wrap (user)); + } + } + + return usages; +} + +LLVMValueRef * +mono_llvm_call_args (LLVMValueRef wrapped_calli) +{ + Value *calli = unwrap(wrapped_calli); + CallInst *call = dyn_cast <CallInst> (calli); + InvokeInst *invoke = dyn_cast <InvokeInst> (calli); + g_assert (call || invoke); + + unsigned int numOperands = 0; + + if (call) + numOperands = call->getNumArgOperands (); + else + numOperands = invoke->getNumArgOperands (); + + LLVMValueRef *ret = g_malloc (sizeof (LLVMValueRef) * numOperands); + + for (int i=0; i < numOperands; i++) { + if (call) + ret [i] = wrap (call->getArgOperand (i)); + else + ret [i] = wrap (invoke->getArgOperand (i)); + } + + return ret; } void @@ -255,6 +378,19 @@ mono_llvm_set_call_notailcall (LLVMValueRef func) #endif } +void +mono_llvm_set_call_noalias_ret (LLVMValueRef wrapped_calli) +{ +#if LLVM_API_VERSION > 100 + Instruction *calli = unwrap<Instruction> (wrapped_calli); + + if (isa<CallInst> (calli)) + dyn_cast<CallInst>(calli)->addAttribute (AttributeList::ReturnIndex, Attribute::NoAlias); + else + dyn_cast<InvokeInst>(calli)->addAttribute (AttributeList::ReturnIndex, Attribute::NoAlias); +#endif +} + #if LLVM_API_VERSION > 500 static Attribute::AttrKind convert_attr (AttrKind kind) @@ -425,3 +561,19 @@ mono_llvm_di_builder_finalize (void *di_builder) } #endif /* #if LLVM_API_VERSION > 100 */ + +LLVMValueRef +mono_llvm_get_or_insert_gc_safepoint_poll (LLVMModuleRef module) +{ + llvm::Constant *SafepointPollConstant; + llvm::Function *SafepointPoll; + + SafepointPollConstant = unwrap(module)->getOrInsertFunction("gc.safepoint_poll", FunctionType::get(unwrap(LLVMVoidType()), false)); + g_assert (SafepointPollConstant); + + SafepointPoll = dyn_cast<llvm::Function>(SafepointPollConstant); + g_assert (SafepointPoll); + g_assert (SafepointPoll->empty()); + + return wrap(SafepointPoll); +} diff --git a/mono/mini/mini-llvm-cpp.h b/mono/mini/mini-llvm-cpp.h index 72b64bd0b7..8df451273b 100644 --- a/mono/mini/mini-llvm-cpp.h +++ b/mono/mini/mini-llvm-cpp.h @@ -103,9 +103,30 @@ mono_llvm_set_preserveall_cc (LLVMValueRef func); void mono_llvm_set_call_preserveall_cc (LLVMValueRef call); +void +mono_llvm_set_call_nonnull_arg (LLVMValueRef calli, int argNo); + +void +mono_llvm_set_call_nonnull_ret (LLVMValueRef calli); + +void +mono_llvm_set_func_nonnull_arg (LLVMValueRef func, int argNo); + +GSList * +mono_llvm_calls_using (LLVMValueRef wrapped_local); + +LLVMValueRef * +mono_llvm_call_args (LLVMValueRef calli); + +gboolean +mono_llvm_is_nonnull (LLVMValueRef val); + void mono_llvm_set_call_notailcall (LLVMValueRef call); +void +mono_llvm_set_call_noalias_ret (LLVMValueRef wrapped_calli); + void mono_llvm_add_func_attr (LLVMValueRef func, AttrKind kind); @@ -120,9 +141,6 @@ G_EXTERN_C _Unwind_Reason_Code mono_debug_personality (int a, _Unwind_Action b, uint64_t c, struct _Unwind_Exception *d, struct _Unwind_Context *e); #endif -void -default_mono_llvm_unhandled_exception (void); - void* mono_llvm_create_di_builder (LLVMModuleRef module); @@ -144,6 +162,9 @@ mono_llvm_di_builder_finalize (void *di_builder); void mono_llvm_di_set_location (LLVMBuilderRef builder, void *loc_md); +LLVMValueRef +mono_llvm_get_or_insert_gc_safepoint_poll (LLVMModuleRef module); + G_END_DECLS #endif /* __MONO_MINI_LLVM_CPP_H__ */ diff --git a/mono/mini/mini-llvm.c.REMOVED.git-id b/mono/mini/mini-llvm.c.REMOVED.git-id index 87335b1b80..35b010f5a2 100644 --- a/mono/mini/mini-llvm.c.REMOVED.git-id +++ b/mono/mini/mini-llvm.c.REMOVED.git-id @@ -1 +1 @@ -84ce120586ca1b2e14d2c3f31dacb9443cee2aba \ No newline at end of file +f869cf032565800bb9a93e5ae24538bf1f962e38 \ No newline at end of file diff --git a/mono/mini/mini-llvm.h b/mono/mini/mini-llvm.h index 507ea8fb08..703c1b23dd 100644 --- a/mono/mini/mini-llvm.h +++ b/mono/mini/mini-llvm.h @@ -14,7 +14,8 @@ typedef enum { LLVM_MODULE_FLAG_STATIC = (1 << 0), LLVM_MODULE_FLAG_LLVM_ONLY = (1 << 1), LLVM_MODULE_FLAG_DWARF = (1 << 2), - LLVM_MODULE_FLAG_INTERP = (1 << 3) + LLVM_MODULE_FLAG_CODEVIEW = (1 << 3), + LLVM_MODULE_FLAG_INTERP = (1 << 4) } LLVMModuleFlags; /* KEEP THIS IN SYNCH WITH mini-llvm-loaded.c */ diff --git a/mono/mini/mini-mips.c.REMOVED.git-id b/mono/mini/mini-mips.c.REMOVED.git-id index ecc3f86918..586a77f502 100644 --- a/mono/mini/mini-mips.c.REMOVED.git-id +++ b/mono/mini/mini-mips.c.REMOVED.git-id @@ -1 +1 @@ -bfe3aea0f9badb9913d589ba775fab6e8083969a \ No newline at end of file +5d0edd6ed68d4055ae13083d54ef956a2687b0e5 \ No newline at end of file diff --git a/mono/mini/mini-mips.h b/mono/mini/mini-mips.h index 0924edb16c..4071b73891 100644 --- a/mono/mini/mini-mips.h +++ b/mono/mini/mini-mips.h @@ -278,7 +278,6 @@ typedef struct MonoCompileArch { #define MONO_ARCH_HAVE_GENERALIZED_IMT_TRAMPOLINE 1 #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1 -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #define MONO_ARCH_HAVE_SETUP_RESUME_FROM_SIGNAL_HANDLER_CTX 1 #define MONO_ARCH_GSHARED_SUPPORTED 1 diff --git a/mono/mini/mini-ops.h b/mono/mini/mini-ops.h index ba8931b556..339f72f048 100644 --- a/mono/mini/mini-ops.h +++ b/mono/mini/mini-ops.h @@ -1206,7 +1206,10 @@ MINI_OP(OP_AMD64_SAVE_SP_TO_LMF, "amd64_save_sp_to_lmf", NONE, NONE, NON #if defined(TARGET_POWERPC) MINI_OP(OP_PPC_SUBFIC, "ppc_subfic", IREG, IREG, NONE) MINI_OP(OP_PPC_SUBFZE, "ppc_subfze", IREG, IREG, NONE) -MINI_OP(OP_PPC_CHECK_FINITE, "ppc_check_finite", NONE, IREG, NONE) +MINI_OP(OP_PPC_CHECK_FINITE, "ppc_check_finite", NONE, IREG, NONE) +MINI_OP(OP_PPC_CEIL, "ppc_ceil", FREG, FREG, NONE) +MINI_OP(OP_PPC_FLOOR, "ppc_floor", FREG, FREG, NONE) +MINI_OP(OP_PPC_TRUNC, "ppc_trunc", FREG, FREG, NONE) #endif #if defined(TARGET_ARM) || defined(TARGET_ARM64) diff --git a/mono/mini/mini-posix.c b/mono/mini/mini-posix.c index dac76cdd3e..523426c677 100644 --- a/mono/mini/mini-posix.c +++ b/mono/mini/mini-posix.c @@ -221,15 +221,17 @@ MONO_SIG_HANDLER_SIGNATURE (mono_chain_signal) MONO_SIG_HANDLER_FUNC (static, sigabrt_signal_handler) { MonoJitInfo *ji = NULL; + MonoContext mctx; MONO_SIG_HANDLER_INFO_TYPE *info = MONO_SIG_HANDLER_GET_INFO (); MONO_SIG_HANDLER_GET_CONTEXT; if (mono_thread_internal_current ()) ji = mono_jit_info_table_find_internal (mono_domain_get (), mono_arch_ip_from_context (ctx), TRUE, TRUE); if (!ji) { - if (mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) + if (mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; - mono_handle_native_crash ("SIGABRT", ctx, info); + mono_sigctx_to_monoctx (ctx, &mctx); + mono_handle_native_crash ("SIGABRT", &mctx, info); } } @@ -247,7 +249,7 @@ MONO_SIG_HANDLER_FUNC (static, sigterm_signal_handler) // Will return when the dumping is done, so this thread can continue // running. Returns FALSE on unrecoverable error. if (!mono_threads_summarize_execute (&mctx, &output, &hashes, FALSE, NULL, 0)) - g_assert_not_reached (); + g_error ("Crash reporter dumper exited due to fatal error."); #endif mono_chain_signal (MONO_SIG_HANDLER_PARAMS); @@ -885,26 +887,22 @@ mono_runtime_setup_stat_profiler (void) #ifndef MONO_CROSS_COMPILE static void -dump_memory_around_ip (void *ctx) +dump_memory_around_ip (MonoContext *mctx) { -#ifdef MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX - if (!ctx) + if (!mctx) return; g_async_safe_printf ("\n=================================================================\n"); - g_async_safe_printf ("\tBasic Fault Adddress Reporting\n"); + g_async_safe_printf ("\tBasic Fault Address Reporting\n"); g_async_safe_printf ("=================================================================\n"); - MonoContext mctx; - mono_sigctx_to_monoctx (ctx, &mctx); - gpointer native_ip = MONO_CONTEXT_GET_IP (&mctx); + gpointer native_ip = MONO_CONTEXT_GET_IP (mctx); if (native_ip) { g_async_safe_printf ("Memory around native instruction pointer (%p):", native_ip); mono_dump_mem (((guint8 *) native_ip) - 0x10, 0x40); } else { g_async_safe_printf ("instruction pointer is NULL, skip dumping"); } -#endif } static void @@ -945,7 +943,7 @@ assert_printer_callback (void) } static void -dump_native_stacktrace (const char *signal, void *ctx) +dump_native_stacktrace (const char *signal, MonoContext *mctx) { mono_memory_barrier (); static gint32 middle_of_crash = 0x0; @@ -1013,11 +1011,9 @@ dump_native_stacktrace (const char *signal, void *ctx) #endif } - MonoContext mctx; MonoContext *passed_ctx = NULL; - if (!leave && ctx) { - mono_sigctx_to_monoctx (ctx, &mctx); - passed_ctx = &mctx; + if (!leave && mctx) { + passed_ctx = mctx; } g_async_safe_printf ("\n=================================================================\n"); @@ -1110,10 +1106,15 @@ dump_native_stacktrace (const char *signal, void *ctx) g_async_safe_printf ("=================================================================\n"); mono_gdb_render_native_backtraces (crashed_pid); _exit (1); + } else if (pid > 0) { + waitpid (pid, &status, 0); + } else { + // If we can't fork, do as little as possible before exiting +#ifndef DISABLE_CRASH_REPORTING + output = NULL; +#endif } - waitpid (pid, &status, 0); - if (double_faulted) { g_async_safe_printf("\nExiting early due to double fault.\n"); #ifndef DISABLE_CRASH_REPORTING @@ -1150,17 +1151,17 @@ dump_native_stacktrace (const char *signal, void *ctx) } void -mono_dump_native_crash_info (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info) +mono_dump_native_crash_info (const char *signal, MonoContext *mctx, MONO_SIG_HANDLER_INFO_TYPE *info) { print_process_map (); - dump_memory_around_ip (ctx); + dump_native_stacktrace (signal, mctx); - dump_native_stacktrace (signal, ctx); + dump_memory_around_ip (mctx); } void -mono_post_native_crash_handler (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info, gboolean crash_chaining) +mono_post_native_crash_handler (const char *signal, MonoContext *mctx, MONO_SIG_HANDLER_INFO_TYPE *info, gboolean crash_chaining) { if (!crash_chaining) { /*Android abort is a fluke, it doesn't abort, it triggers another segv. */ diff --git a/mono/mini/mini-ppc.c.REMOVED.git-id b/mono/mini/mini-ppc.c.REMOVED.git-id index 17adba27e3..0d10ea1762 100644 --- a/mono/mini/mini-ppc.c.REMOVED.git-id +++ b/mono/mini/mini-ppc.c.REMOVED.git-id @@ -1 +1 @@ -e3f6e838ec37f2d55b3d15b6a177b782ad5c8c67 \ No newline at end of file +fc44ebfa99d8cb8dc88f84023cb04c486889e825 \ No newline at end of file diff --git a/mono/mini/mini-ppc.h b/mono/mini/mini-ppc.h index 1f37f7bece..1f84b29fea 100644 --- a/mono/mini/mini-ppc.h +++ b/mono/mini/mini-ppc.h @@ -240,7 +240,6 @@ typedef struct MonoCompileArch { #define MONO_ARCH_VTABLE_REG ppc_r11 #define MONO_ARCH_RGCTX_REG MONO_ARCH_IMT_REG -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #define MONO_ARCH_HAVE_SETUP_RESUME_FROM_SIGNAL_HANDLER_CTX 1 #define MONO_ARCH_NO_IOV_CHECK 1 diff --git a/mono/mini/mini-profiler.c b/mono/mini/mini-profiler.c index eff957ec85..5886891e80 100644 --- a/mono/mini/mini-profiler.c +++ b/mono/mini/mini-profiler.c @@ -352,10 +352,18 @@ mini_profiler_context_get_local (MonoProfilerCallContext *ctx, guint32 pos) gpointer mini_profiler_context_get_result (MonoProfilerCallContext *ctx) { + MonoType *ret = mono_method_signature_internal (ctx->method)->ret; + + if (ctx->interp_frame) { + int dummy; + // FIXME: + return g_malloc0 (mono_type_size (ret, &dummy)); + } + if (!ctx->return_value) return NULL; - return memdup_with_type (ctx->return_value, mono_method_signature_internal (ctx->method)->ret); + return memdup_with_type (ctx->return_value, ret); } void diff --git a/mono/mini/mini-riscv.c b/mono/mini/mini-riscv.c index db26044593..4924aac9bc 100644 --- a/mono/mini/mini-riscv.c +++ b/mono/mini/mini-riscv.c @@ -688,3 +688,9 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return NULL; } #endif /* MONO_ARCH_SOFT_DEBUG_SUPPORTED */ + +gpointer +mono_arch_load_function (MonoJitICallId jit_icall_id) +{ + return NULL; +} diff --git a/mono/mini/mini-riscv.h b/mono/mini/mini-riscv.h index 651e0a6931..f45ea90f5d 100644 --- a/mono/mini/mini-riscv.h +++ b/mono/mini/mini-riscv.h @@ -134,7 +134,6 @@ #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES (1) #define MONO_ARCH_USE_SIGACTION (1) -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX (1) #define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG (1) #define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS (1) diff --git a/mono/mini/mini-runtime.c.REMOVED.git-id b/mono/mini/mini-runtime.c.REMOVED.git-id index 6262d25e10..d40e00200d 100644 --- a/mono/mini/mini-runtime.c.REMOVED.git-id +++ b/mono/mini/mini-runtime.c.REMOVED.git-id @@ -1 +1 @@ -96954d48f0c1d1576bcc9fedc6b8b03e1ca60999 \ No newline at end of file +c3b11025228f9eef5dd61032d03ffe172193892f \ No newline at end of file diff --git a/mono/mini/mini-runtime.h b/mono/mini/mini-runtime.h index 05df5d71ba..3f70054b8d 100644 --- a/mono/mini/mini-runtime.h +++ b/mono/mini/mini-runtime.h @@ -174,6 +174,18 @@ typedef struct MonoDebugOptions { gboolean dyn_runtime_invoke; gboolean gdb; gboolean lldb; + + /* + * With LLVM codegen, this option will cause methods to be called indirectly through the + * PLT (As they are in other FullAOT modes, without LLVM). + * + * Enable this to debug problems with direct calls in llvm + */ + gboolean llvm_disable_self_init; + /* + * Prevent LLVM from inlining any methods + */ + gboolean llvm_disable_inlining; gboolean use_fallback_tls; /* * Whenever data such as next sequence points and flags is required. @@ -309,13 +321,11 @@ struct MonoJumpInfo { MonoJumpInfoType type; union { + // In order to allow blindly using target in mono_add_patch_info, + // all fields must be pointer-sized. No ints, no untyped enums. gconstpointer target; -#if TARGET_SIZEOF_VOID_P == 8 - gint64 offset; -#else - int offset; -#endif - int index; + gssize index; // only 32 bits used but widened per above + gsize uindex; // only 32 bits used but widened per above MonoBasicBlock *bb; MonoInst *inst; MonoMethod *method; @@ -324,6 +334,11 @@ struct MonoJumpInfo { MonoImage *image; MonoVTable *vtable; const char *name; +#ifdef __cplusplus // MonoJitICallId has base type of gsize to widen per above. + MonoJitICallId jit_icall_id; +#else + gsize jit_icall_id; // only 9 bits used but widened per above +#endif MonoJumpInfoToken *token; MonoJumpInfoBBTable *table; MonoJumpInfoRgctxEntry *rgctx_entry; @@ -433,25 +448,24 @@ void mono_push_lmf (MonoLMFExt *ext); void mono_pop_lmf (MonoLMF *lmf); #define mono_get_jit_tls mono_tls_get_jit_tls MonoJitTlsData* mono_get_jit_tls (void); -MONO_API MONO_RT_EXTERNAL_ONLY -MonoDomain* mono_jit_thread_attach (MonoDomain *domain); MONO_API void mono_jit_set_domain (MonoDomain *domain); gboolean mono_method_same_domain (MonoJitInfo *caller, MonoJitInfo *callee); gpointer mono_create_ftnptr (MonoDomain *domain, gpointer addr); MonoMethod* mono_icall_get_wrapper_method (MonoJitICallInfo* callinfo) MONO_LLVM_INTERNAL; gconstpointer mono_icall_get_wrapper (MonoJitICallInfo* callinfo) MONO_LLVM_INTERNAL; -gconstpointer mono_icall_get_wrapper_full (MonoJitICallInfo* callinfo, gboolean do_compile); +gconstpointer mono_icall_get_wrapper_full (MonoJitICallInfo* callinfo, gboolean do_compile) MONO_LLVM_INTERNAL; MonoJumpInfo* mono_patch_info_dup_mp (MonoMemPool *mp, MonoJumpInfo *patch_info); -guint mono_patch_info_hash (gconstpointer data); -gint mono_patch_info_equal (gconstpointer ka, gconstpointer kb); +guint mono_patch_info_hash (gconstpointer data) MONO_LLVM_INTERNAL; +gint mono_patch_info_equal (gconstpointer ka, gconstpointer kb) MONO_LLVM_INTERNAL; MonoJumpInfo *mono_patch_info_list_prepend (MonoJumpInfo *list, int ip, MonoJumpInfoType type, gconstpointer target); MonoJumpInfoToken* mono_jump_info_token_new (MonoMemPool *mp, MonoImage *image, guint32 token); MonoJumpInfoToken* mono_jump_info_token_new2 (MonoMemPool *mp, MonoImage *image, guint32 token, MonoGenericContext *context); gpointer mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors, MonoError *error) MONO_LLVM_INTERNAL; void mini_register_jump_site (MonoDomain *domain, MonoMethod *method, gpointer ip); void mini_patch_jump_sites (MonoDomain *domain, MonoMethod *method, gpointer addr); +void mini_patch_llvm_jit_callees (MonoDomain *domain, MonoMethod *method, gpointer addr); gpointer mono_jit_search_all_backends_for_jit_info (MonoDomain *domain, MonoMethod *method, MonoJitInfo **ji); gpointer mono_jit_find_compiled_method_with_jit_info (MonoDomain *domain, MonoMethod *method, MonoJitInfo **ji); gpointer mono_jit_find_compiled_method (MonoDomain *domain, MonoMethod *method); @@ -524,10 +538,10 @@ void mono_cleanup_native_crash_info (void); void -mono_dump_native_crash_info (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info); +mono_dump_native_crash_info (const char *signal, MonoContext *mctx, MONO_SIG_HANDLER_INFO_TYPE *info); void -mono_post_native_crash_handler (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info, gboolean crash_chaining); +mono_post_native_crash_handler (const char *signal, MonoContext *mctx, MONO_SIG_HANDLER_INFO_TYPE *info, gboolean crash_chaining); /* * Signal handling diff --git a/mono/mini/mini-s390x.c.REMOVED.git-id b/mono/mini/mini-s390x.c.REMOVED.git-id index 3c6e81db2c..aa5e52146f 100644 --- a/mono/mini/mini-s390x.c.REMOVED.git-id +++ b/mono/mini/mini-s390x.c.REMOVED.git-id @@ -1 +1 @@ -2a59e6ffb4612432184ebbdda9c51e9796784205 \ No newline at end of file +a241e8bb52d4eecd7ff8a13baef47c32f5f01e82 \ No newline at end of file diff --git a/mono/mini/mini-s390x.h b/mono/mini/mini-s390x.h index 9323182c0c..660fb9cf22 100644 --- a/mono/mini/mini-s390x.h +++ b/mono/mini/mini-s390x.h @@ -54,7 +54,6 @@ typedef struct #define MONO_ARCH_IMT_REG s390_r9 #define MONO_ARCH_VTABLE_REG S390_FIRST_ARG_REG #define MONO_ARCH_RGCTX_REG MONO_ARCH_IMT_REG -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1 #define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG 1 #define MONO_ARCH_USE_SIGACTION 1 diff --git a/mono/mini/mini-sparc.c.REMOVED.git-id b/mono/mini/mini-sparc.c.REMOVED.git-id index 7dd968bfad..503604dd48 100644 --- a/mono/mini/mini-sparc.c.REMOVED.git-id +++ b/mono/mini/mini-sparc.c.REMOVED.git-id @@ -1 +1 @@ -8260e60ff94f5d3709c9f178fb233424403a650a \ No newline at end of file +5aa77bb5d4ae70d562aeb0b3ae509f4d5df04047 \ No newline at end of file diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index d59a60155e..36d596b908 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -330,13 +330,9 @@ gpointer mini_add_method_trampoline (MonoMethod *m, gpointer compiled_method, gboolean add_static_rgctx_tramp, gboolean add_unbox_tramp) { gpointer addr = compiled_method; - gboolean callee_gsharedvt, callee_array_helper; + gboolean callee_gsharedvt = FALSE, callee_array_helper; MonoMethod *jmethod = NULL; - MonoJitInfo *ji; - - // FIXME: This loads information from AOT (perf problem) - ji = mini_jit_info_table_find (mono_domain_get (), (char *)mono_get_addr_from_ftnptr (compiled_method), NULL); - callee_gsharedvt = mini_jit_info_is_gsharedvt (ji); + MonoJitInfo *ji = NULL; callee_array_helper = FALSE; if (m->wrapper_type == MONO_WRAPPER_MANAGED_TO_MANAGED) { @@ -359,6 +355,12 @@ mini_add_method_trampoline (MonoMethod *m, gpointer compiled_method, gboolean ad } } + if (m->is_inflated || callee_array_helper) { + // This loads information from AOT so try to avoid it if possible + ji = mini_jit_info_table_find (mono_domain_get (), (char *)mono_get_addr_from_ftnptr (compiled_method), NULL); + callee_gsharedvt = mini_jit_info_is_gsharedvt (ji); + } + if (callee_gsharedvt) g_assert (m->is_inflated); @@ -430,6 +432,10 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa gboolean imt_call, virtual_; gpointer *orig_vtable_slot, *vtable_slot_to_patch = NULL; MonoJitInfo *ji = NULL; + MonoDomain *domain = mono_domain_get (); +#if LLVM_API_VERSION > 100 + MonoMethod *orig_method = m; +#endif error_init (error); @@ -488,7 +494,7 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa if (in_conflict) { char *class_name = mono_class_full_name (vt->klass); char *method_name = mono_method_full_name (decl, TRUE); - mono_error_set_not_supported (error, "Interface method '%s' in class '%s' has multiple candidate implementations.", method_name, class_name); + mono_error_set_ambiguous_implementation (error, "Could not call method '%s' with type '%s' because there are multiple incompatible interface methods overriding this method.", method_name, class_name); g_free (class_name); g_free (method_name); return NULL; @@ -657,8 +663,6 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa /* the method was jumped to */ if (!code) { - MonoDomain *domain = mono_domain_get (); - mini_patch_jump_sites (domain, m, mono_get_addr_from_ftnptr (addr)); /* Patch the got entries pointing to this method */ @@ -739,6 +743,8 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa no_patch = TRUE; } #if LLVM_API_VERSION > 100 + if (!no_patch) + mini_patch_llvm_jit_callees (domain, orig_method, addr); /* LLVM code doesn't make direct calls */ if (ji && ji->from_llvm) no_patch = TRUE; @@ -1589,15 +1595,15 @@ mono_find_rgctx_lazy_fetch_trampoline_by_addr (gconstpointer addr) return offset; } -static const char*tramp_names [MONO_TRAMPOLINE_NUM] = { - "jit", - "jump", - "rgctx_lazy_fetch", - "aot", - "aot_plt", - "delegate", - "generic_virtual_remoting", - "vcall" +static const char* const tramp_names [MONO_TRAMPOLINE_NUM] = { + "generic_trampoline_jit", + "generic_trampoline_jump", + "generic_trampoline_rgctx_lazy_fetch", + "generic_trampoline_aot", + "generic_trampoline_aot_plt", + "generic_trampoline_delegate", + "generic_trampoline_generic_virtual_remoting", + "generic_trampoline_vcall" }; /* @@ -1607,7 +1613,7 @@ static const char*tramp_names [MONO_TRAMPOLINE_NUM] = { const char* mono_get_generic_trampoline_simple_name (MonoTrampolineType tramp_type) { - return tramp_names [tramp_type]; + return tramp_names [tramp_type] + sizeof ("generic_trampoline_") - 1; } /* @@ -1615,10 +1621,10 @@ mono_get_generic_trampoline_simple_name (MonoTrampolineType tramp_type) * * Returns a pointer to malloc-ed memory. */ -char* +const char* mono_get_generic_trampoline_name (MonoTrampolineType tramp_type) { - return g_strdup_printf ("generic_trampoline_%s", tramp_names [tramp_type]); + return tramp_names [tramp_type]; } /* diff --git a/mono/mini/mini-wasm-debugger.c b/mono/mini/mini-wasm-debugger.c index 4905ac6500..5d2dea0335 100644 --- a/mono/mini/mini-wasm-debugger.c +++ b/mono/mini/mini-wasm-debugger.c @@ -584,7 +584,7 @@ typedef struct { int variable; } FrameDescData; -static gboolean decode_value(MonoType * type, gpointer addr) +static gboolean describe_value(MonoType * type, gpointer addr) { ERROR_DECL (error); switch (type->type) { @@ -618,15 +618,17 @@ static gboolean decode_value(MonoType * type, gpointer addr) break; case MONO_TYPE_STRING: { MonoString *str_obj = *(MonoString **)addr; - if (!str_obj) + if (!str_obj) { mono_wasm_add_string_var (NULL); - char *str = mono_string_to_utf8_checked_internal (str_obj, error); - mono_error_assert_ok (error); /* FIXME report error */ - - mono_wasm_add_string_var (str); - g_free (str); + } else { + char *str = mono_string_to_utf8_checked_internal (str_obj, error); + mono_error_assert_ok (error); /* FIXME report error */ + mono_wasm_add_string_var (str); + g_free (str); + } break; } + case MONO_TYPE_GENERICINST: case MONO_TYPE_SZARRAY: case MONO_TYPE_ARRAY: case MONO_TYPE_OBJECT: @@ -665,6 +667,13 @@ static gboolean decode_value(MonoType * type, gpointer addr) static gboolean describe_object_properties (guint64 objectId) { + MonoClassField *f; + MonoProperty *p; + MonoObject *exc; + MonoObject *res; + MonoMethodSignature *sig; + gpointer iter = NULL; + ERROR_DECL (error); DEBUG_PRINTF (2, "describe_object_properties %d\n", objectId); ObjRef *ref = (ObjRef *)g_hash_table_lookup (objrefs, GINT_TO_POINTER (objectId)); if (!ref) { @@ -677,10 +686,9 @@ describe_object_properties (guint64 objectId) DEBUG_PRINTF (2, "describe_object_properties !obj\n"); return FALSE; } - gpointer iter = NULL; - MonoClassField *f; + while (obj && (f = mono_class_get_fields_internal (obj->vtable->klass, &iter))) { - DEBUG_PRINTF (2, "f->name - %s - %x\n", f->name, f->type->type); + DEBUG_PRINTF (2, "mono_class_get_fields_internal - %s - %x\n", f->name, f->type->type); if (f->type->attrs & FIELD_ATTRIBUTE_STATIC) continue; if (mono_field_is_deleted (f)) @@ -688,13 +696,26 @@ describe_object_properties (guint64 objectId) mono_wasm_add_properties_var(f->name); gpointer field_value = (guint8*)obj + f->offset; - decode_value(f->type, field_value); + describe_value(f->type, field_value); } - /*MonoProperty *p; + iter = NULL; while ((p = mono_class_get_properties (obj->vtable->klass, &iter))) { - mono_wasm_add_properties_var(p->name); - }*/ + DEBUG_PRINTF (2, "mono_class_get_properties - %s - %s\n", p->name, p->get->name); + if (p->get->name) { //if get doesn't have name means that doesn't have a getter implemented and we don't want to show value, like VS debug + mono_wasm_add_properties_var(p->name); + sig = mono_method_signature_internal (p->get); + res = mono_runtime_try_invoke (p->get, obj, NULL, &exc, error); + if (!mono_error_ok (error) && exc == NULL) + exc = (MonoObject*) mono_error_convert_to_exception (error); + if (exc) + describe_value (mono_get_object_type (), &exc); + else if (!m_class_is_valuetype (mono_object_class (res))) + describe_value(sig->ret, &res); + else + describe_value(sig->ret, mono_object_unbox_internal (res)); + } + } return TRUE; } @@ -717,7 +738,7 @@ describe_array_values (guint64 objectId) for (int i = 0; i < arr->max_length; i++) { mono_wasm_add_array_item(i); elem = (gpointer*)((char*)arr->vector + (i * esize)); - decode_value(m_class_get_byval_arg (m_class_get_element_class (arr->obj.vtable->klass)), elem); + describe_value(m_class_get_byval_arg (m_class_get_element_class (arr->obj.vtable->klass)), elem); } return TRUE; } @@ -762,7 +783,7 @@ describe_variable (MonoStackFrameInfo *info, MonoContext *ctx, gpointer ud) DEBUG_PRINTF (2, "adding val %p type [%p] %s\n", addr, type, mono_type_full_name (type)); - decode_value(type, addr); + describe_value(type, addr); if (header) mono_metadata_free_mh (header); diff --git a/mono/mini/mini-wasm.c b/mono/mini/mini-wasm.c index 9bb114960f..22e380bb74 100644 --- a/mono/mini/mini-wasm.c +++ b/mono/mini/mini-wasm.c @@ -745,3 +745,9 @@ getpwuid_r (uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize, G_END_DECLS #endif // HOST_WASM + +gpointer +mono_arch_load_function (MonoJitICallId jit_icall_id) +{ + return NULL; +} diff --git a/mono/mini/mini-windows.c b/mono/mini/mini-windows.c index 0acc3f0d75..b295496bea 100644 --- a/mono/mini/mini-windows.c +++ b/mono/mini/mini-windows.c @@ -274,13 +274,13 @@ MONO_SIG_HANDLER_SIGNATURE (mono_chain_signal) #ifndef MONO_CROSS_COMPILE void -mono_dump_native_crash_info (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info) +mono_dump_native_crash_info (const char *signal, MonoContext *mctx, MONO_SIG_HANDLER_INFO_TYPE *info) { //TBD } void -mono_post_native_crash_handler (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info, gboolean crash_chaining) +mono_post_native_crash_handler (const char *signal, MonoContext *mctx, MONO_SIG_HANDLER_INFO_TYPE *info, gboolean crash_chaining) { if (!crash_chaining) abort (); diff --git a/mono/mini/mini-x86.c.REMOVED.git-id b/mono/mini/mini-x86.c.REMOVED.git-id index 4546af1114..95c004cab9 100644 --- a/mono/mini/mini-x86.c.REMOVED.git-id +++ b/mono/mini/mini-x86.c.REMOVED.git-id @@ -1 +1 @@ -f54b73e4204f2f590c49af4be2ecc87cd114e5f1 \ No newline at end of file +27ac56f339fc5e5e6d0c666f52f23adc88ffd0bc \ No newline at end of file diff --git a/mono/mini/mini-x86.h b/mono/mini/mini-x86.h index c482bbfe9b..3d561df857 100644 --- a/mono/mini/mini-x86.h +++ b/mono/mini/mini-x86.h @@ -197,7 +197,6 @@ typedef struct { #define MONO_ARCH_VTABLE_REG X86_EDX #define MONO_ARCH_RGCTX_REG MONO_ARCH_IMT_REG #define MONO_ARCH_HAVE_GENERALIZED_IMT_TRAMPOLINE 1 -#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1 #define MONO_ARCH_GOT_REG X86_EBX #define MONO_ARCH_HAVE_GET_TRAMPOLINES 1 diff --git a/mono/mini/mini.c.REMOVED.git-id b/mono/mini/mini.c.REMOVED.git-id index 19da304996..34b034f1d8 100644 --- a/mono/mini/mini.c.REMOVED.git-id +++ b/mono/mini/mini.c.REMOVED.git-id @@ -1 +1 @@ -e7d1b296bc8b4b676557b3512ca59071cac272cc \ No newline at end of file +8698292994949e27b34afb8d4b2dcd4d970845b1 \ No newline at end of file diff --git a/mono/mini/mini.h.REMOVED.git-id b/mono/mini/mini.h.REMOVED.git-id index ca9a4dfb7b..08abfbe662 100644 --- a/mono/mini/mini.h.REMOVED.git-id +++ b/mono/mini/mini.h.REMOVED.git-id @@ -1 +1 @@ -5139d73aa6c8b6712905c24f6b4b3827f884af80 \ No newline at end of file +56e2378288ebbc253f22b54a86da2cea9a755f36 \ No newline at end of file diff --git a/mono/mini/objects.cs b/mono/mini/objects.cs index ed72ec7fe0..ba7f0d78cf 100644 --- a/mono/mini/objects.cs +++ b/mono/mini/objects.cs @@ -841,6 +841,29 @@ class Tests { return 0; } + public static string[] StringValues = { "Val1", "Val2", "Val3" }; + + public static IEnumerable<string> GetStringValues () + { + foreach (string val in StringValues) + yield return val; + } + + public static int test_0_cast_special_iface () { + try { + IEnumerable<string> strings = GetStringValues (); + IList<string> stringIList = (IList<string>) strings; + + // No exception thrown. Maybe it's an actual IList ? + // Make sure it's not bluffing + if (!"Val2".Equals (stringIList [1])) + return 1; + } catch (InvalidCastException) { + } + + return 0; + } + private static int[] daysmonthleap = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; private static int AbsoluteDays (int year, int month, int day) diff --git a/mono/mini/patch-info.h b/mono/mini/patch-info.h index ad9f1b7940..5b39c2084b 100644 --- a/mono/mini/patch-info.h +++ b/mono/mini/patch-info.h @@ -3,10 +3,9 @@ PATCH_INFO(ABS, "abs") PATCH_INFO(LABEL, "label") PATCH_INFO(METHOD, "method") PATCH_INFO(METHOD_JUMP, "method_jump") -PATCH_INFO(METHOD_REL, "method_rel") PATCH_INFO(METHODCONST, "methodconst") -/* Either the address of a C function implementing a JIT icall, or a wrapper around it */ -PATCH_INFO(JIT_ICALL, "jit_icall") +// Either the address of a C function implementing a JIT icall, or a wrapper around it +PATCH_INFO(JIT_ICALL_ID, "jit_icall_id") // replaced MONO_PATCH_INFO_JIT_ICALL, using enum instead of string PATCH_INFO(SWITCH, "switch") PATCH_INFO(EXC, "exc") PATCH_INFO(EXC_NAME, "exc_name") @@ -70,3 +69,6 @@ PATCH_INFO(PROFILER_CLAUSE_COUNT, "profiler_clause_count") * function. */ PATCH_INFO(METHOD_FTNDESC, "method_ftndesc") + +PATCH_INFO(TRAMPOLINE_FUNC_ADDR, "trampoline_func_addr") +PATCH_INFO(SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, "specific_trampoline_lazy_fetch_addr") diff --git a/mono/mini/tramp-amd64-gsharedvt.c b/mono/mini/tramp-amd64-gsharedvt.c index 79baad7314..476b75512e 100644 --- a/mono/mini/tramp-amd64-gsharedvt.c +++ b/mono/mini/tramp-amd64-gsharedvt.c @@ -283,7 +283,7 @@ mono_arch_get_gsharedvt_trampoline (MonoTrampInfo **info, gboolean aot) amd64_mov_reg_reg (code, MONO_AMD64_ARG_REG4, MONO_ARCH_RGCTX_REG, sizeof (target_mgreg_t)); if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_amd64_start_gsharedvt_call"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_amd64_start_gsharedvt_call)); #ifdef TARGET_WIN32 /* Since we are doing a call as part of setting up stackframe, the reserved shadow stack used by Windows platform is allocated up in the callee stack area but currently the callee reg area is in between. Windows calling convention dictates that room is made on stack where diff --git a/mono/mini/tramp-amd64.c b/mono/mini/tramp-amd64.c index 367111a1df..b942b0a395 100644 --- a/mono/mini/tramp-amd64.c +++ b/mono/mini/tramp-amd64.c @@ -231,7 +231,7 @@ stack_unaligned (MonoTrampolineType tramp_type) guchar* mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInfo **info, gboolean aot) { - char *tramp_name; + const char *tramp_name; guint8 *buf, *code, *tramp, *br [2], *r11_save_code, *after_r11_save_code, *br_ex_check; int i, lmf_offset, offset, res_offset, arg_offset, rax_offset, ex_offset, tramp_offset, ctx_offset, saved_regs_offset; int r11_save_offset, saved_fpregs_offset, rbp_offset, framesize, orig_rsp_to_rbp_offset, cfa_offset; @@ -429,7 +429,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMFTramp, ctx), AMD64_R11, sizeof (target_mgreg_t)); if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_get_lmf_addr)); } else { amd64_mov_reg_imm (code, AMD64_R11, mono_get_lmf_addr); } @@ -464,8 +464,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf amd64_mov_reg_membase (code, AMD64_ARG_REG4, AMD64_RBP, tramp_offset, sizeof (target_mgreg_t)); if (aot) { - char *icall_name = g_strdup_printf ("trampoline_func_%d", tramp_type); - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type)); } else { tramp = (guint8*)mono_get_trampoline_func (tramp_type); amd64_mov_reg_imm (code, AMD64_R11, tramp); @@ -492,7 +491,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf * Have to call the _force_ variant, since there could be a protected wrapper on the top of the stack. */ if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_thread_force_interruption_checkpoint_noraise"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_thread_force_interruption_checkpoint_noraise)); } else { amd64_mov_reg_imm (code, AMD64_R11, (guint8*)mono_thread_force_interruption_checkpoint_noraise); } @@ -521,7 +520,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf */ if (aot) { /* Not really a jit icall */ - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "rethrow_preserve_exception_addr"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_rethrow_preserve_exception)); } else { amd64_mov_reg_imm (code, AMD64_R11, (guint8*)mono_get_rethrow_preserve_exception_addr ()); } @@ -577,7 +576,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, code - buf, ji, unwind_ops); - g_free (tramp_name); return buf; } @@ -715,7 +713,7 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info } if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot)); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, GUINT_TO_POINTER (slot)); amd64_jump_reg (code, AMD64_R11); } else { tramp = (guint8 *)mono_arch_create_specific_trampoline (GUINT_TO_POINTER (slot), MONO_TRAMPOLINE_RGCTX_LAZY_FETCH, mono_get_root_domain (), NULL); @@ -881,9 +879,9 @@ mono_arch_create_sdb_trampoline (gboolean single_step, MonoTrampInfo **info, gbo if (aot) { if (single_step) - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "debugger_agent_single_step_from_context"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_debugger_agent_single_step_from_context)); else - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "debugger_agent_breakpoint_from_context"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_debugger_agent_breakpoint_from_context)); } else { if (single_step) amd64_mov_reg_imm (code, AMD64_R11, mini_get_dbg_callbacks ()->single_step_from_context); @@ -939,13 +937,25 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info) guint8 *label_start_copy, *label_exit_copy; MonoJumpInfo *ji = NULL; GSList *unwind_ops = NULL; - int buf_len, i, off_methodargs, off_targetaddr; + int buf_len, i, cfa_offset, off_methodargs, off_targetaddr; - buf_len = 512 + MONO_TRAMPOLINE_UNWINDINFO_SIZE(0); - start = code = (guint8 *) mono_global_codeman_reserve (buf_len); + buf_len = 512; + start = code = (guint8 *) mono_global_codeman_reserve (buf_len + MONO_MAX_TRAMPOLINE_UNWINDINFO_SIZE); + + // CFA = sp + 8 + cfa_offset = 8; + mono_add_unwind_op_def_cfa (unwind_ops, code, start, AMD64_RSP, cfa_offset); + // IP saved at CFA - 8 + mono_add_unwind_op_offset (unwind_ops, code, start, AMD64_RIP, -cfa_offset); amd64_push_reg (code, AMD64_RBP); + cfa_offset += sizeof (target_mgreg_t); + mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, cfa_offset); + mono_add_unwind_op_offset (unwind_ops, code, start, AMD64_RBP, -cfa_offset); + amd64_mov_reg_reg (code, AMD64_RBP, AMD64_RSP, sizeof (target_mgreg_t)); + mono_add_unwind_op_def_cfa_reg (unwind_ops, code, start, AMD64_RBP); + mono_add_unwind_op_fp_alloc (unwind_ops, code, start, AMD64_RBP, 0); /* allocate space for saving the target addr and the call context */ amd64_alu_reg_imm (code, X86_SUB, AMD64_RSP, 2 * sizeof (target_mgreg_t)); @@ -1004,11 +1014,20 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info) for (i = 0; i < FLOAT_RETURN_REGS; i++) amd64_sse_movsd_membase_reg (code, AMD64_R11, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double), i); - amd64_mov_reg_reg (code, AMD64_RSP, AMD64_RBP, 8); +#if TARGET_WIN32 + amd64_lea_membase (code, AMD64_RSP, AMD64_RBP, 0); +#else + amd64_mov_reg_reg (code, AMD64_RSP, AMD64_RBP, sizeof (target_mgreg_t)); +#endif amd64_pop_reg (code, AMD64_RBP); + mono_add_unwind_op_same_value (unwind_ops, code, start, AMD64_RBP); + + cfa_offset -= sizeof (target_mgreg_t); + mono_add_unwind_op_def_cfa (unwind_ops, code, start, AMD64_RSP, cfa_offset); amd64_ret (code); g_assert (code - start < buf_len); + g_assert_checked (mono_arch_unwindinfo_validate_size (unwind_ops, MONO_MAX_TRAMPOLINE_UNWINDINFO_SIZE)); mono_arch_flush_icache (start, code - start); MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_HELPER, NULL)); @@ -1030,58 +1049,81 @@ mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info) guint8 *start = NULL, *code; MonoJumpInfo *ji = NULL; GSList *unwind_ops = NULL; - int buf_len, i; - int framesize; + int buf_len, i, framesize, cfa_offset, ctx_offset; buf_len = 512; - start = code = (guint8 *) mono_global_codeman_reserve (buf_len); + start = code = (guint8 *) mono_global_codeman_reserve (buf_len + MONO_MAX_TRAMPOLINE_UNWINDINFO_SIZE); - unwind_ops = mono_arch_get_cie_program (); + framesize = 0; +#ifdef TARGET_WIN32 + /* Reserve space where the callee can save the argument registers */ + framesize += 4 * sizeof (target_mgreg_t); +#endif + + ctx_offset = framesize; + framesize += MONO_ABI_SIZEOF (CallContext); + framesize = ALIGN_TO (framesize, MONO_ARCH_FRAME_ALIGNMENT); + + // CFA = sp + 8 + cfa_offset = 8; + mono_add_unwind_op_def_cfa (unwind_ops, code, start, AMD64_RSP, cfa_offset); + // IP saved at CFA - 8 + mono_add_unwind_op_offset (unwind_ops, code, start, AMD64_RIP, -cfa_offset); amd64_push_reg (code, AMD64_RBP); - /* CFA = SP + 8 (RIP) + 8 (RBP) */ - mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 16); - mono_add_unwind_op_offset (unwind_ops, code, start, AMD64_RBP, -16); + cfa_offset += sizeof (target_mgreg_t); + mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, cfa_offset); + mono_add_unwind_op_offset (unwind_ops, code, start, AMD64_RBP, -cfa_offset); amd64_mov_reg_reg (code, AMD64_RBP, AMD64_RSP, sizeof (target_mgreg_t)); - mono_add_unwind_op_def_cfa (unwind_ops, code, start, AMD64_RBP, 16); + mono_add_unwind_op_def_cfa_reg (unwind_ops, code, start, AMD64_RBP); + mono_add_unwind_op_fp_alloc (unwind_ops, code, start, AMD64_RBP, 0); - /* allocate the CallContext on the stack */ - framesize = ALIGN_TO (MONO_ABI_SIZEOF (CallContext), MONO_ARCH_FRAME_ALIGNMENT); amd64_alu_reg_imm (code, X86_SUB, AMD64_RSP, framesize); /* save all general purpose registers into the CallContext */ for (i = 0; i < PARAM_REGS; i++) - amd64_mov_membase_reg (code, AMD64_RSP, MONO_STRUCT_OFFSET (CallContext, gregs) + param_regs [i] * sizeof (target_mgreg_t), param_regs [i], sizeof (target_mgreg_t)); + amd64_mov_membase_reg (code, AMD64_RSP, ctx_offset + MONO_STRUCT_OFFSET (CallContext, gregs) + param_regs [i] * sizeof (target_mgreg_t), param_regs [i], sizeof (target_mgreg_t)); /* save all floating registers into the CallContext */ for (i = 0; i < FLOAT_PARAM_REGS; i++) - amd64_sse_movsd_membase_reg (code, AMD64_RSP, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double), i); + amd64_sse_movsd_membase_reg (code, AMD64_RSP, ctx_offset + MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double), i); /* set the stack pointer to the value at call site */ amd64_mov_reg_reg (code, AMD64_R11, AMD64_RBP, sizeof (target_mgreg_t)); amd64_alu_reg_imm (code, X86_ADD, AMD64_R11, 2 * sizeof (target_mgreg_t)); - amd64_mov_membase_reg (code, AMD64_RSP, MONO_STRUCT_OFFSET (CallContext, stack), AMD64_R11, sizeof (target_mgreg_t)); + amd64_mov_membase_reg (code, AMD64_RSP, ctx_offset + MONO_STRUCT_OFFSET (CallContext, stack), AMD64_R11, sizeof (target_mgreg_t)); /* call interp_entry with the ccontext and rmethod as arguments */ amd64_mov_reg_reg (code, AMD64_ARG_REG1, AMD64_RSP, sizeof (target_mgreg_t)); + if (ctx_offset != 0) + amd64_alu_reg_imm (code, X86_ADD, AMD64_ARG_REG1, ctx_offset); amd64_mov_reg_membase (code, AMD64_ARG_REG2, MONO_ARCH_RGCTX_REG, MONO_STRUCT_OFFSET (MonoFtnDesc, arg), sizeof (target_mgreg_t)); amd64_mov_reg_membase (code, AMD64_R11, MONO_ARCH_RGCTX_REG, MONO_STRUCT_OFFSET (MonoFtnDesc, addr), sizeof (target_mgreg_t)); amd64_call_reg (code, AMD64_R11); /* load the return values from the context */ for (i = 0; i < RETURN_REGS; i++) - amd64_mov_reg_membase (code, return_regs [i], AMD64_RSP, MONO_STRUCT_OFFSET (CallContext, gregs) + return_regs [i] * sizeof (target_mgreg_t), sizeof (target_mgreg_t)); + amd64_mov_reg_membase (code, return_regs [i], AMD64_RSP, ctx_offset + MONO_STRUCT_OFFSET (CallContext, gregs) + return_regs [i] * sizeof (target_mgreg_t), sizeof (target_mgreg_t)); for (i = 0; i < FLOAT_RETURN_REGS; i++) - amd64_sse_movsd_reg_membase (code, i, AMD64_RSP, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double)); + amd64_sse_movsd_reg_membase (code, i, AMD64_RSP, ctx_offset + MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double)); /* reset stack and return */ - amd64_mov_reg_reg (code, AMD64_RSP, AMD64_RBP, 8); +#if TARGET_WIN32 + amd64_lea_membase (code, AMD64_RSP, AMD64_RBP, 0); +#else + amd64_mov_reg_reg (code, AMD64_RSP, AMD64_RBP, sizeof (target_mgreg_t)); +#endif amd64_pop_reg (code, AMD64_RBP); + mono_add_unwind_op_same_value (unwind_ops, code, start, AMD64_RBP); + + cfa_offset -= sizeof (target_mgreg_t); + mono_add_unwind_op_def_cfa (unwind_ops, code, start, AMD64_RSP, cfa_offset); amd64_ret (code); g_assert (code - start < buf_len); + g_assert_checked (mono_arch_unwindinfo_validate_size (unwind_ops, MONO_MAX_TRAMPOLINE_UNWINDINFO_SIZE)); mono_arch_flush_icache (start, code - start); MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL)); diff --git a/mono/mini/tramp-arm-gsharedvt.c b/mono/mini/tramp-arm-gsharedvt.c index a09343896c..f3465c2e9a 100644 --- a/mono/mini/tramp-arm-gsharedvt.c +++ b/mono/mini/tramp-arm-gsharedvt.c @@ -282,7 +282,7 @@ mono_arch_get_gsharedvt_trampoline (MonoTrampInfo **info, gboolean aot) ARM_STR_IMM (code, ARMREG_IP, ARMREG_SP, 4); /* Make the call */ if (aot) { - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_arm_start_gsharedvt_call"); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_arm_start_gsharedvt_call)); ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0); ARM_B (code, 0); *(gpointer*)code = NULL; diff --git a/mono/mini/tramp-arm.c b/mono/mini/tramp-arm.c index a291e08b34..0076a6f63c 100644 --- a/mono/mini/tramp-arm.c +++ b/mono/mini/tramp-arm.c @@ -135,7 +135,7 @@ emit_bx (guint8* code, int reg) guchar* mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInfo **info, gboolean aot) { - char *tramp_name; + const char *tramp_name; guint8 *buf, *code = NULL; guint8 *load_get_lmf_addr = NULL, *load_trampoline = NULL; guint8 *labels [16]; @@ -213,7 +213,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf * This is a synthetized call to mono_get_lmf_addr () */ if (aot) { - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr"); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_get_lmf_addr)); ARM_LDR_IMM (code, ARMREG_R0, ARMREG_PC, 0); ARM_B (code, 0); *(gpointer*)code = NULL; @@ -291,8 +291,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf ARM_MOV_REG_REG (code, ARMREG_R2, ARMREG_V2); if (aot) { - char *icall_name = g_strdup_printf ("trampoline_func_%d", tramp_type); - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type)); ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0); ARM_B (code, 0); *(gpointer*)code = NULL; @@ -328,7 +327,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf /* Check for thread interruption */ /* This is not perf critical code so no need to check the interrupt flag */ if (aot) { - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_thread_force_interruption_checkpoint_noraise"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_thread_force_interruption_checkpoint_noraise)); } else { ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0); ARM_B (code, 0); @@ -416,7 +415,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf */ if (aot) { /* Not really a jit icall */ - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP, MONO_PATCH_INFO_JIT_ICALL_ADDR, "rethrow_preserve_exception_addr"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_rethrow_preserve_exception)); } else { ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0); ARM_B (code, 0); @@ -438,7 +437,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf g_assert (info); tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, code - buf, ji, unwind_ops); - g_free (tramp_name); return buf; } @@ -696,7 +694,7 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info /* The vtable/mrgctx is still in R0 */ if (aot) { - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot)); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, GUINT_TO_POINTER (slot)); ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0); ARM_B (code, 0); *(gpointer*)code = NULL; @@ -802,9 +800,9 @@ mono_arch_create_sdb_trampoline (gboolean single_step, MonoTrampInfo **info, gbo /* call */ if (aot) { if (single_step) - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, "debugger_agent_single_step_from_context"); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_debugger_agent_single_step_from_context)); else - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, "debugger_agent_breakpoint_from_context"); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_debugger_agent_breakpoint_from_context)); ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0); ARM_B (code, 0); *(gpointer*)code = NULL; diff --git a/mono/mini/tramp-arm64-gsharedvt.c b/mono/mini/tramp-arm64-gsharedvt.c index be1adf646d..4f53dd0182 100644 --- a/mono/mini/tramp-arm64-gsharedvt.c +++ b/mono/mini/tramp-arm64-gsharedvt.c @@ -300,7 +300,7 @@ mono_arch_get_gsharedvt_trampoline (MonoTrampInfo **info, gboolean aot) arm_ldrx (code, ARMREG_R3, ARMREG_FP, rgctx_arg_reg_offset); if (aot) - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_arm_start_gsharedvt_call"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_arm_start_gsharedvt_call)); else code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)mono_arm_start_gsharedvt_call); arm_blrx (code, ARMREG_IP0); diff --git a/mono/mini/tramp-arm64.c b/mono/mini/tramp-arm64.c index 52a1593dfd..51ddd7e05a 100644 --- a/mono/mini/tramp-arm64.c +++ b/mono/mini/tramp-arm64.c @@ -107,7 +107,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf guint64 gregs_regset; GSList *unwind_ops = NULL; MonoJumpInfo *ji = NULL; - char *tramp_name; + const char *tramp_name; buf_len = 768; buf = code = mono_global_codeman_reserve (buf_len); @@ -194,7 +194,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf /* Save LMF */ /* Similar to emit_save_lmf () */ if (aot) { - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_get_lmf_addr)); } else { tramp = (guint8*)mono_get_lmf_addr; code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)tramp); @@ -229,8 +229,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf arm_movx (code, ARMREG_R3, ARMREG_RZR); if (aot) { - char *icall_name = g_strdup_printf ("trampoline_func_%d", tramp_type); - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type)); } else { tramp = (guint8*)mono_get_trampoline_func (tramp_type); code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)tramp); @@ -255,7 +254,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf /* Check for thread interruption */ /* This is not perf critical code so no need to check the interrupt flag */ if (aot) { - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_thread_force_interruption_checkpoint_noraise"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_thread_force_interruption_checkpoint_noraise)); } else { code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)mono_thread_force_interruption_checkpoint_noraise); } @@ -303,7 +302,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf */ if (aot) { /* Not really a jit icall */ - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, "rethrow_preserve_exception_addr"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_rethrow_preserve_exception)); } else { code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)mono_get_rethrow_preserve_exception_addr ()); } @@ -318,7 +317,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf if (info) { tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, code - buf, ji, unwind_ops); - g_free (tramp_name); } return buf; @@ -471,7 +469,7 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info /* Call mono_rgctx_lazy_fetch_trampoline (), passing in the slot as argument */ /* The vtable/mrgctx is still in R0 */ if (aot) { - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot)); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, GUINT_TO_POINTER (slot)); } else { tramp = (guint8*)mono_arch_create_specific_trampoline (GUINT_TO_POINTER (slot), MONO_TRAMPOLINE_RGCTX_LAZY_FETCH, mono_get_root_domain (), &code_len); code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)tramp); @@ -592,9 +590,9 @@ mono_arch_create_sdb_trampoline (gboolean single_step, MonoTrampInfo **info, gbo arm_addx_imm (code, ARMREG_R0, ARMREG_FP, ctx_offset); if (aot) { if (single_step) - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, "debugger_agent_single_step_from_context"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_debugger_agent_single_step_from_context)); else - code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, "debugger_agent_breakpoint_from_context"); + code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_debugger_agent_breakpoint_from_context)); } else { void (*addr) (MonoContext *ctx) = single_step ? mini_get_dbg_callbacks ()->single_step_from_context : mini_get_dbg_callbacks ()->breakpoint_from_context; diff --git a/mono/mini/tramp-mips.c b/mono/mini/tramp-mips.c index c8e4325e14..68d52615dc 100644 --- a/mono/mini/tramp-mips.c +++ b/mono/mini/tramp-mips.c @@ -134,7 +134,7 @@ mono_arch_patch_plt_entry (guint8 *code, gpointer *got, host_mgreg_t *regs, guin guchar* mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInfo **info, gboolean aot) { - char *tramp_name; + const char *tramp_name; guint8 *buf, *tramp, *code = NULL; int i, lmf; GSList *unwind_ops = NULL; @@ -273,7 +273,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf g_assert (info); tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, code - buf, ji, unwind_ops); - g_free (tramp_name); return buf; } @@ -426,7 +425,7 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info /* The vtable/mrgctx is still in a0 */ if (aot) { - ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot)); + ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, GUINT_TO_POINTER (slot)); mips_load (code, mips_at, 0); mips_jr (code, mips_at); mips_nop (code); diff --git a/mono/mini/tramp-ppc.c b/mono/mini/tramp-ppc.c index 5a0de0737e..5c56f387e9 100644 --- a/mono/mini/tramp-ppc.c +++ b/mono/mini/tramp-ppc.c @@ -244,7 +244,7 @@ mono_arch_patch_plt_entry (guint8 *code, gpointer *got, host_mgreg_t *regs, guin guchar* mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInfo **info, gboolean aot) { - char *tramp_name; + const char *tramp_name; guint8 *buf, *code = NULL, *exception_branch; int i, offset, offset_r14 = 0; gconstpointer tramp_handler; @@ -300,7 +300,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf * from emit_prolog in mini-ppc.c */ if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_get_lmf_addr)); #ifdef PPC_USES_FUNCTION_DESCRIPTOR ppc_ldptr (code, ppc_r2, sizeof (target_mgreg_t), ppc_r12); ppc_ldptr (code, ppc_r12, 0, ppc_r12); @@ -358,7 +358,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf ppc_ldr (code, ppc_r5, GREGS_OFFSET, ppc_r1); if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("trampoline_func_%d", tramp_type)); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type)); #ifdef PPC_USES_FUNCTION_DESCRIPTOR ppc_ldptr (code, ppc_r2, sizeof (target_mgreg_t), ppc_r12); ppc_ldptr (code, ppc_r12, 0, ppc_r12); @@ -486,7 +486,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf g_assert (info); tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, code - buf, ji, unwind_ops); - g_free (tramp_name); return buf; } @@ -638,7 +637,7 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info ppc_mr (code, MONO_ARCH_VTABLE_REG, ppc_r3); if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot)); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, GUINT_TO_POINTER (slot)); /* Branch to the trampoline */ #ifdef PPC_USES_FUNCTION_DESCRIPTOR ppc_ldptr (code, ppc_r12, 0, ppc_r12); diff --git a/mono/mini/tramp-riscv.c b/mono/mini/tramp-riscv.c index b7937e4a28..7ab9320057 100644 --- a/mono/mini/tramp-riscv.c +++ b/mono/mini/tramp-riscv.c @@ -69,9 +69,8 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf guint8 *buf = mono_global_codeman_reserve (1024), *code = buf; if (info) { - char *name = mono_get_generic_trampoline_name (tramp_type); + const char *name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (name, buf, code - buf, NULL, NULL); - g_free (name); } return buf; diff --git a/mono/mini/tramp-s390x.c b/mono/mini/tramp-s390x.c index 043caf483c..56f586a878 100644 --- a/mono/mini/tramp-s390x.c +++ b/mono/mini/tramp-s390x.c @@ -178,7 +178,7 @@ mono_arch_patch_plt_entry (guint8 *code, gpointer *got, host_mgreg_t *regs, guin guchar* mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInfo **info, gboolean aot) { - char *tramp_name; + const char *tramp_name; guint8 *buf, *tramp, *code; int i, offset, has_caller; short *o[1]; @@ -374,7 +374,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf g_assert (info); tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, buf - code, ji, unwind_ops); - g_free (tramp_name); /* Sanity check */ g_assert ((buf - code) <= 512); diff --git a/mono/mini/tramp-x86-gsharedvt.c b/mono/mini/tramp-x86-gsharedvt.c index 103bb97be1..5291b2ecaf 100644 --- a/mono/mini/tramp-x86-gsharedvt.c +++ b/mono/mini/tramp-x86-gsharedvt.c @@ -157,7 +157,7 @@ mono_arch_get_gsharedvt_trampoline (MonoTrampInfo **info, gboolean aot) /* Arg1 */ x86_push_membase (code, X86_EBP, info_offset); if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_x86_start_gsharedvt_call"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_x86_start_gsharedvt_call)); x86_call_reg (code, X86_EAX); } else { x86_call_code (code, mono_x86_start_gsharedvt_call); diff --git a/mono/mini/tramp-x86.c b/mono/mini/tramp-x86.c index 1d751ae6b4..b81573371c 100644 --- a/mono/mini/tramp-x86.c +++ b/mono/mini/tramp-x86.c @@ -143,7 +143,7 @@ mono_arch_patch_plt_entry (guint8 *code, gpointer *got, host_mgreg_t *regs, guin guchar* mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInfo **info, gboolean aot) { - char *tramp_name; + const char *tramp_name; guint8 *buf, *code, *tramp, *br_ex_check; GSList *unwind_ops = NULL; MonoJumpInfo *ji = NULL; @@ -238,7 +238,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf /* Push LMF */ /* get the address of lmf for the current thread */ if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_get_lmf_addr)); x86_call_reg (code, X86_EAX); } else { x86_call_code (code, mono_get_lmf_addr); @@ -284,8 +284,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf #endif if (aot) { - char *icall_name = g_strdup_printf ("trampoline_func_%d", tramp_type); - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type)); x86_call_reg (code, X86_EAX); } else { tramp = (guint8*)mono_get_trampoline_func (tramp_type); @@ -306,7 +305,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf /* Check for interruptions */ if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_thread_force_interruption_checkpoint_noraise"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_thread_force_interruption_checkpoint_noraise)); x86_call_reg (code, X86_EAX); } else { x86_call_code (code, (guint8*)mono_thread_force_interruption_checkpoint_noraise); @@ -343,7 +342,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf */ if (aot) { /* Not really a jit icall */ - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "rethrow_preserve_exception_addr"); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GUINT_TO_POINTER (MONO_JIT_ICALL_mono_rethrow_preserve_exception)); } else { x86_mov_reg_imm (code, X86_ECX, (guint8*)mono_get_rethrow_preserve_exception_addr ()); } @@ -385,7 +384,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf tramp_name = mono_get_generic_trampoline_name (tramp_type); *info = mono_tramp_info_create (tramp_name, buf, code - buf, ji, unwind_ops); - g_free (tramp_name); return buf; } @@ -490,7 +488,7 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info x86_mov_reg_membase (code, MONO_ARCH_VTABLE_REG, X86_ESP, 4, 4); if (aot) { - code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, g_strdup_printf ("specific_trampoline_lazy_fetch_%u", slot)); + code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, GUINT_TO_POINTER (slot)); x86_jump_reg (code, X86_EAX); } else { tramp = (guint8*)mono_arch_create_specific_trampoline (GUINT_TO_POINTER (slot), MONO_TRAMPOLINE_RGCTX_LAZY_FETCH, mono_get_root_domain (), NULL); diff --git a/mono/mini/type-checking.c b/mono/mini/type-checking.c index e950d573bc..0e336cedbf 100644 --- a/mono/mini/type-checking.c +++ b/mono/mini/type-checking.c @@ -357,9 +357,8 @@ mini_emit_castclass (MonoCompile *cfg, int obj_reg, int klass_reg, MonoClass *kl } static void -emit_special_array_iface_check (MonoCompile *cfg, MonoInst *src, MonoClass* klass, int vtable_reg, MonoBasicBlock *true_bb, int context_used) +emit_special_array_iface_check (MonoCompile *cfg, MonoInst *src, MonoClass* klass, int vtable_reg, MonoBasicBlock *not_an_array, MonoBasicBlock *true_bb, int context_used) { - MonoBasicBlock *not_an_array; int rank_reg; if (!m_class_is_array_special_interface (klass)) @@ -367,16 +366,15 @@ emit_special_array_iface_check (MonoCompile *cfg, MonoInst *src, MonoClass* klas rank_reg = alloc_ireg (cfg); - NEW_BBLOCK (cfg, not_an_array); MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, rank)); MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rank_reg, 1); - MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBNE_UN, not_an_array); + if (not_an_array) + MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBNE_UN, not_an_array); + else + MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException"); emit_castclass_with_cache_no_details (cfg, src, klass, context_used); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, true_bb); - - MONO_START_BB (cfg, not_an_array); - } /* @@ -411,9 +409,11 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, int context int tmp_reg = alloc_preg (cfg); #ifndef DISABLE_REMOTING MonoBasicBlock *interface_fail_bb; + MonoBasicBlock *array_fail_bb; int klass_reg = alloc_preg (cfg); NEW_BBLOCK (cfg, interface_fail_bb); + NEW_BBLOCK (cfg, array_fail_bb); MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable)); mini_emit_iface_cast (cfg, tmp_reg, klass, interface_fail_bb, is_null_bb); @@ -422,7 +422,10 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, int context MONO_START_BB (cfg, interface_fail_bb); //Check if it's a rank zero array and emit fallback casting - emit_special_array_iface_check (cfg, src, klass, tmp_reg, is_null_bb, context_used); + emit_special_array_iface_check (cfg, src, klass, tmp_reg, array_fail_bb, is_null_bb, context_used); + + // array check failed + MONO_START_BB (cfg, array_fail_bb); MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoVTable, klass)); @@ -451,7 +454,7 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, int context MONO_START_BB (cfg, interface_fail_bb); //Check if it's a rank zero array and emit fallback casting - emit_special_array_iface_check (cfg, src, klass, tmp_reg, is_null_bb, context_used); + emit_special_array_iface_check (cfg, src, klass, tmp_reg, NULL, is_null_bb, context_used); } else { mini_emit_iface_cast (cfg, tmp_reg, klass, NULL, NULL); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, is_null_bb); diff --git a/mono/mini/unwind.c b/mono/mini/unwind.c index 22f7057cf9..c9b5c0a349 100644 --- a/mono/mini/unwind.c +++ b/mono/mini/unwind.c @@ -349,10 +349,6 @@ mono_print_unwind_info (guint8 *unwind_info, int unwind_info_len) reg = decode_uleb128 (p, &p); printf ("CFA: [%x] same_value: %s\n", pos, mono_arch_regname (mono_dwarf_reg_to_hw_reg (reg))); break; - case DW_CFA_advance_loc4: - pos += read32 (p); - p += 4; - break; case DW_CFA_remember_state: printf ("CFA: [%x] remember_state\n", pos); break; @@ -362,6 +358,21 @@ mono_print_unwind_info (guint8 *unwind_info, int unwind_info_len) case DW_CFA_mono_advance_loc: printf ("CFA: [%x] mono_advance_loc\n", pos); break; + case DW_CFA_advance_loc1: + printf ("CFA: [%x] advance_loc1\n", pos); + pos += *p; + p += 1; + break; + case DW_CFA_advance_loc2: + printf ("CFA: [%x] advance_loc2\n", pos); + pos += read16 (p); + p += 2; + break; + case DW_CFA_advance_loc4: + printf ("CFA: [%x] advance_loc4\n", pos); + pos += read32 (p); + p += 4; + break; default: g_assert_not_reached (); } diff --git a/mono/mini/version.h b/mono/mini/version.h index dfc8c59f8a..5c54139996 100644 --- a/mono/mini/version.h +++ b/mono/mini/version.h @@ -1 +1 @@ -#define FULL_VERSION "explicit/5e7b960" +#define FULL_VERSION "explicit/761220d" diff --git a/mono/mini/wasm_m2n_invoke.g.h b/mono/mini/wasm_m2n_invoke.g.h index 3dca03991d..cdc46ca49a 100644 --- a/mono/mini/wasm_m2n_invoke.g.h +++ b/mono/mini/wasm_m2n_invoke.g.h @@ -101,6 +101,42 @@ wasm_invoke_viiiiiiiiii (void *target_func, InterpMethodArguments *margs) } +static void +wasm_invoke_viiiiiiiiiii (void *target_func, InterpMethodArguments *margs) +{ + typedef void (*T)(int arg_0, int arg_1, int arg_2, int arg_3, int arg_4, int arg_5, int arg_6, int arg_7, int arg_8, int arg_9, int arg_10); + T func = (T)target_func; + func ((int)margs->iargs [0], (int)margs->iargs [1], (int)margs->iargs [2], (int)margs->iargs [3], (int)margs->iargs [4], (int)margs->iargs [5], (int)margs->iargs [6], (int)margs->iargs [7], (int)margs->iargs [8], (int)margs->iargs [9], (int)margs->iargs [10]); + +} + +static void +wasm_invoke_viiiiiiiiiiii (void *target_func, InterpMethodArguments *margs) +{ + typedef void (*T)(int arg_0, int arg_1, int arg_2, int arg_3, int arg_4, int arg_5, int arg_6, int arg_7, int arg_8, int arg_9, int arg_10, int arg_11); + T func = (T)target_func; + func ((int)margs->iargs [0], (int)margs->iargs [1], (int)margs->iargs [2], (int)margs->iargs [3], (int)margs->iargs [4], (int)margs->iargs [5], (int)margs->iargs [6], (int)margs->iargs [7], (int)margs->iargs [8], (int)margs->iargs [9], (int)margs->iargs [10], (int)margs->iargs [11]); + +} + +static void +wasm_invoke_viiiiiiiiiiiii (void *target_func, InterpMethodArguments *margs) +{ + typedef void (*T)(int arg_0, int arg_1, int arg_2, int arg_3, int arg_4, int arg_5, int arg_6, int arg_7, int arg_8, int arg_9, int arg_10, int arg_11, int arg_12); + T func = (T)target_func; + func ((int)margs->iargs [0], (int)margs->iargs [1], (int)margs->iargs [2], (int)margs->iargs [3], (int)margs->iargs [4], (int)margs->iargs [5], (int)margs->iargs [6], (int)margs->iargs [7], (int)margs->iargs [8], (int)margs->iargs [9], (int)margs->iargs [10], (int)margs->iargs [11], (int)margs->iargs [12]); + +} + +static void +wasm_invoke_viiiiiiiiiiiiii (void *target_func, InterpMethodArguments *margs) +{ + typedef void (*T)(int arg_0, int arg_1, int arg_2, int arg_3, int arg_4, int arg_5, int arg_6, int arg_7, int arg_8, int arg_9, int arg_10, int arg_11, int arg_12, int arg_13); + T func = (T)target_func; + func ((int)margs->iargs [0], (int)margs->iargs [1], (int)margs->iargs [2], (int)margs->iargs [3], (int)margs->iargs [4], (int)margs->iargs [5], (int)margs->iargs [6], (int)margs->iargs [7], (int)margs->iargs [8], (int)margs->iargs [9], (int)margs->iargs [10], (int)margs->iargs [11], (int)margs->iargs [12], (int)margs->iargs [13]); + +} + static void wasm_invoke_i (void *target_func, InterpMethodArguments *margs) { @@ -698,6 +734,24 @@ wasm_invoke_viffff (void *target_func, InterpMethodArguments *margs) } +static void +wasm_invoke_vifffff (void *target_func, InterpMethodArguments *margs) +{ + typedef void (*T)(int arg_0, float arg_1, float arg_2, float arg_3, float arg_4, float arg_5); + T func = (T)target_func; + func ((int)margs->iargs [0], *(float*)&margs->fargs [FIDX (0)], *(float*)&margs->fargs [FIDX (1)], *(float*)&margs->fargs [FIDX (2)], *(float*)&margs->fargs [FIDX (3)], *(float*)&margs->fargs [FIDX (4)]); + +} + +static void +wasm_invoke_viffffff (void *target_func, InterpMethodArguments *margs) +{ + typedef void (*T)(int arg_0, float arg_1, float arg_2, float arg_3, float arg_4, float arg_5, float arg_6); + T func = (T)target_func; + func ((int)margs->iargs [0], *(float*)&margs->fargs [FIDX (0)], *(float*)&margs->fargs [FIDX (1)], *(float*)&margs->fargs [FIDX (2)], *(float*)&margs->fargs [FIDX (3)], *(float*)&margs->fargs [FIDX (4)], *(float*)&margs->fargs [FIDX (5)]); + +} + static void wasm_invoke_vifffffi (void *target_func, InterpMethodArguments *margs) { @@ -886,188 +940,755 @@ wasm_invoke_vil (void *target_func, InterpMethodArguments *margs) static void icall_trampoline_dispatch (const char *cookie, void *target_func, InterpMethodArguments *margs) { - if (!strcmp ("V", cookie)) - wasm_invoke_v (target_func, margs); - else if (!strcmp ("VI", cookie)) - wasm_invoke_vi (target_func, margs); - else if (!strcmp ("VII", cookie)) - wasm_invoke_vii (target_func, margs); - else if (!strcmp ("VIII", cookie)) - wasm_invoke_viii (target_func, margs); - else if (!strcmp ("VIIII", cookie)) - wasm_invoke_viiii (target_func, margs); - else if (!strcmp ("VIIIII", cookie)) - wasm_invoke_viiiii (target_func, margs); - else if (!strcmp ("VIIIIII", cookie)) - wasm_invoke_viiiiii (target_func, margs); - else if (!strcmp ("VIIIIIII", cookie)) - wasm_invoke_viiiiiii (target_func, margs); - else if (!strcmp ("VIIIIIIII", cookie)) - wasm_invoke_viiiiiiii (target_func, margs); - else if (!strcmp ("VIIIIIIIII", cookie)) - wasm_invoke_viiiiiiiii (target_func, margs); - else if (!strcmp ("VIIIIIIIIII", cookie)) - wasm_invoke_viiiiiiiiii (target_func, margs); - else if (!strcmp ("I", cookie)) - wasm_invoke_i (target_func, margs); - else if (!strcmp ("II", cookie)) - wasm_invoke_ii (target_func, margs); - else if (!strcmp ("III", cookie)) - wasm_invoke_iii (target_func, margs); - else if (!strcmp ("IIII", cookie)) - wasm_invoke_iiii (target_func, margs); - else if (!strcmp ("IIIII", cookie)) - wasm_invoke_iiiii (target_func, margs); - else if (!strcmp ("IIIIII", cookie)) - wasm_invoke_iiiiii (target_func, margs); - else if (!strcmp ("IIIIIII", cookie)) - wasm_invoke_iiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIII", cookie)) - wasm_invoke_iiiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIIII", cookie)) - wasm_invoke_iiiiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIIIII", cookie)) - wasm_invoke_iiiiiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIIIIII", cookie)) - wasm_invoke_iiiiiiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIIIIIII", cookie)) - wasm_invoke_iiiiiiiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIIIIIIII", cookie)) - wasm_invoke_iiiiiiiiiiiii (target_func, margs); - else if (!strcmp ("IIIIIIIIIIIIII", cookie)) - wasm_invoke_iiiiiiiiiiiiii (target_func, margs); - else if (!strcmp ("IILIIII", cookie)) - wasm_invoke_iiliiii (target_func, margs); - else if (!strcmp ("IIF", cookie)) - wasm_invoke_iif (target_func, margs); - else if (!strcmp ("IIFI", cookie)) - wasm_invoke_iifi (target_func, margs); - else if (!strcmp ("IIFF", cookie)) - wasm_invoke_iiff (target_func, margs); - else if (!strcmp ("IFFII", cookie)) - wasm_invoke_iffii (target_func, margs); - else if (!strcmp ("IIFII", cookie)) - wasm_invoke_iifii (target_func, margs); - else if (!strcmp ("IIFFI", cookie)) - wasm_invoke_iiffi (target_func, margs); - else if (!strcmp ("IIFFF", cookie)) - wasm_invoke_iifff (target_func, margs); - else if (!strcmp ("IIFFFI", cookie)) - wasm_invoke_iifffi (target_func, margs); - else if (!strcmp ("IIFFII", cookie)) - wasm_invoke_iiffii (target_func, margs); - else if (!strcmp ("IIFIII", cookie)) - wasm_invoke_iifiii (target_func, margs); - else if (!strcmp ("IIFFFFI", cookie)) - wasm_invoke_iiffffi (target_func, margs); - else if (!strcmp ("IIFFFFII", cookie)) - wasm_invoke_iiffffii (target_func, margs); - else if (!strcmp ("IIIF", cookie)) - wasm_invoke_iiif (target_func, margs); - else if (!strcmp ("IIIFI", cookie)) - wasm_invoke_iiifi (target_func, margs); - else if (!strcmp ("IIIFII", cookie)) - wasm_invoke_iiifii (target_func, margs); - else if (!strcmp ("IIIFIII", cookie)) - wasm_invoke_iiifiii (target_func, margs); - else if (!strcmp ("IIIIF", cookie)) - wasm_invoke_iiiif (target_func, margs); - else if (!strcmp ("IIIIFI", cookie)) - wasm_invoke_iiiifi (target_func, margs); - else if (!strcmp ("IIIIFII", cookie)) - wasm_invoke_iiiifii (target_func, margs); - else if (!strcmp ("IIIIFIII", cookie)) - wasm_invoke_iiiifiii (target_func, margs); - else if (!strcmp ("IIIFFFF", cookie)) - wasm_invoke_iiiffff (target_func, margs); - else if (!strcmp ("IIIFFFFF", cookie)) - wasm_invoke_iiifffff (target_func, margs); - else if (!strcmp ("IIFFFFFF", cookie)) - wasm_invoke_iiffffff (target_func, margs); - else if (!strcmp ("IIIFFFFFF", cookie)) - wasm_invoke_iiiffffff (target_func, margs); - else if (!strcmp ("IIIIIIIF", cookie)) - wasm_invoke_iiiiiiif (target_func, margs); - else if (!strcmp ("IIIIIIIFF", cookie)) - wasm_invoke_iiiiiiiff (target_func, margs); - else if (!strcmp ("IIFFFFFFFF", cookie)) - wasm_invoke_iiffffffff (target_func, margs); - else if (!strcmp ("IIIFFFFFFFF", cookie)) - wasm_invoke_iiiffffffff (target_func, margs); - else if (!strcmp ("IIIIIIFII", cookie)) - wasm_invoke_iiiiiifii (target_func, margs); - else if (!strcmp ("IIIFFFFFFFFIII", cookie)) - wasm_invoke_iiiffffffffiii (target_func, margs); - else if (!strcmp ("IIIIIFFFFIIII", cookie)) - wasm_invoke_iiiiiffffiiii (target_func, margs); - else if (!strcmp ("IFFFFFFI", cookie)) - wasm_invoke_iffffffi (target_func, margs); - else if (!strcmp ("IIFFIII", cookie)) - wasm_invoke_iiffiii (target_func, margs); - else if (!strcmp ("ILI", cookie)) - wasm_invoke_ili (target_func, margs); - else if (!strcmp ("L", cookie)) - wasm_invoke_l (target_func, margs); - else if (!strcmp ("LL", cookie)) - wasm_invoke_ll (target_func, margs); - else if (!strcmp ("LI", cookie)) - wasm_invoke_li (target_func, margs); - else if (!strcmp ("LIL", cookie)) - wasm_invoke_lil (target_func, margs); - else if (!strcmp ("LILII", cookie)) - wasm_invoke_lilii (target_func, margs); - else if (!strcmp ("DD", cookie)) - wasm_invoke_dd (target_func, margs); - else if (!strcmp ("DDI", cookie)) - wasm_invoke_ddi (target_func, margs); - else if (!strcmp ("DDD", cookie)) - wasm_invoke_ddd (target_func, margs); - else if (!strcmp ("VIF", cookie)) - wasm_invoke_vif (target_func, margs); - else if (!strcmp ("VIFF", cookie)) - wasm_invoke_viff (target_func, margs); - else if (!strcmp ("VIFFFF", cookie)) - wasm_invoke_viffff (target_func, margs); - else if (!strcmp ("VIFFFFFI", cookie)) - wasm_invoke_vifffffi (target_func, margs); - else if (!strcmp ("VIIFFI", cookie)) - wasm_invoke_viiffi (target_func, margs); - else if (!strcmp ("FF", cookie)) - wasm_invoke_ff (target_func, margs); - else if (!strcmp ("FFF", cookie)) - wasm_invoke_fff (target_func, margs); - else if (!strcmp ("DI", cookie)) - wasm_invoke_di (target_func, margs); - else if (!strcmp ("FI", cookie)) - wasm_invoke_fi (target_func, margs); - else if (!strcmp ("IIL", cookie)) - wasm_invoke_iil (target_func, margs); - else if (!strcmp ("IILI", cookie)) - wasm_invoke_iili (target_func, margs); - else if (!strcmp ("IILLLI", cookie)) - wasm_invoke_iillli (target_func, margs); - else if (!strcmp ("IDIII", cookie)) - wasm_invoke_idiii (target_func, margs); - else if (!strcmp ("LII", cookie)) - wasm_invoke_lii (target_func, margs); - else if (!strcmp ("VID", cookie)) - wasm_invoke_vid (target_func, margs); - else if (!strcmp ("VILLI", cookie)) - wasm_invoke_villi (target_func, margs); - else if (!strcmp ("DID", cookie)) - wasm_invoke_did (target_func, margs); - else if (!strcmp ("DIDD", cookie)) - wasm_invoke_didd (target_func, margs); - else if (!strcmp ("FIF", cookie)) - wasm_invoke_fif (target_func, margs); - else if (!strcmp ("FIFF", cookie)) - wasm_invoke_fiff (target_func, margs); - else if (!strcmp ("LILL", cookie)) - wasm_invoke_lill (target_func, margs); - else if (!strcmp ("VIL", cookie)) - wasm_invoke_vil (target_func, margs); - else { - printf ("CANNOT HANDLE COOKIE %s\n", cookie); - g_assert (0); + if (cookie[0] == 'V') { + if (cookie[1] == 'I') { + if (cookie[2] == 'I') { + if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == 'I') { + if (cookie[6] == 'I') { + if (cookie[7] == 'I') { + if (cookie[8] == 'I') { + if (cookie[9] == 'I') { + if (cookie[10] == 'I') { + if (cookie[11] == 'I') { + if (cookie[12] == 'I') { + if (cookie[13] == 'I') { + if (cookie[14] == 'I') { + if (cookie[15] == '\0') { + // found: VIIIIIIIIIIIIII depth 16 + wasm_invoke_viiiiiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[14] == '\0') { + // found: VIIIIIIIIIIIII depth 16 + wasm_invoke_viiiiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[13] == '\0') { + // found: VIIIIIIIIIIII depth 15 + wasm_invoke_viiiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[12] == '\0') { + // found: VIIIIIIIIIII depth 14 + wasm_invoke_viiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[11] == '\0') { + // found: VIIIIIIIIII depth 13 + wasm_invoke_viiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[10] == '\0') { + // found: VIIIIIIIII depth 12 + wasm_invoke_viiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[9] == '\0') { + // found: VIIIIIIII depth 11 + wasm_invoke_viiiiiiii (target_func, margs); + return; + } + } + else if (cookie[8] == '\0') { + // found: VIIIIIII depth 10 + wasm_invoke_viiiiiii (target_func, margs); + return; + } + } + else if (cookie[7] == '\0') { + // found: VIIIIII depth 9 + wasm_invoke_viiiiii (target_func, margs); + return; + } + } + else if (cookie[6] == '\0') { + // found: VIIIII depth 8 + wasm_invoke_viiiii (target_func, margs); + return; + } + } + else if (cookie[5] == '\0') { + // found: VIIII depth 7 + wasm_invoke_viiii (target_func, margs); + return; + } + } + else if (cookie[4] == '\0') { + // found: VIII depth 6 + wasm_invoke_viii (target_func, margs); + return; + } + } + else if (cookie[3] == 'F') { + if (cookie[4] == 'F') { + if (cookie[5] == 'I') { + if (cookie[6] == '\0') { + // found: VIIFFI depth 8 + wasm_invoke_viiffi (target_func, margs); + return; + } + } + } + } + else if (cookie[3] == '\0') { + // found: VII depth 6 + wasm_invoke_vii (target_func, margs); + return; + } + } + else if (cookie[2] == 'F') { + if (cookie[3] == 'F') { + if (cookie[4] == 'F') { + if (cookie[5] == 'F') { + if (cookie[6] == 'F') { + if (cookie[7] == 'F') { + if (cookie[8] == '\0') { + // found: VIFFFFFF depth 10 + wasm_invoke_viffffff (target_func, margs); + return; + } + } + else if (cookie[7] == 'I') { + if (cookie[8] == '\0') { + // found: VIFFFFFI depth 11 + wasm_invoke_vifffffi (target_func, margs); + return; + } + } + else if (cookie[7] == '\0') { + // found: VIFFFFF depth 11 + wasm_invoke_vifffff (target_func, margs); + return; + } + } + else if (cookie[6] == '\0') { + // found: VIFFFF depth 9 + wasm_invoke_viffff (target_func, margs); + return; + } + } + } + else if (cookie[4] == '\0') { + // found: VIFF depth 7 + wasm_invoke_viff (target_func, margs); + return; + } + } + else if (cookie[3] == '\0') { + // found: VIF depth 6 + wasm_invoke_vif (target_func, margs); + return; + } + } + else if (cookie[2] == 'L') { + if (cookie[3] == 'L') { + if (cookie[4] == 'I') { + if (cookie[5] == '\0') { + // found: VILLI depth 8 + wasm_invoke_villi (target_func, margs); + return; + } + } + } + else if (cookie[3] == '\0') { + // found: VIL depth 7 + wasm_invoke_vil (target_func, margs); + return; + } + } + else if (cookie[2] == 'D') { + if (cookie[3] == '\0') { + // found: VID depth 7 + wasm_invoke_vid (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: VI depth 7 + wasm_invoke_vi (target_func, margs); + return; + } + } + else if (cookie[1] == '\0') { + // found: V depth 3 + wasm_invoke_v (target_func, margs); + return; + } } + else if (cookie[0] == 'I') { + if (cookie[1] == 'I') { + if (cookie[2] == 'I') { + if (cookie[3] == 'F') { + if (cookie[4] == 'F') { + if (cookie[5] == 'F') { + if (cookie[6] == 'F') { + if (cookie[7] == 'F') { + if (cookie[8] == 'F') { + if (cookie[9] == 'F') { + if (cookie[10] == 'F') { + if (cookie[11] == 'I') { + if (cookie[12] == 'I') { + if (cookie[13] == 'I') { + if (cookie[14] == '\0') { + // found: IIIFFFFFFFFIII depth 16 + wasm_invoke_iiiffffffffiii (target_func, margs); + return; + } + } + } + } + else if (cookie[11] == '\0') { + // found: IIIFFFFFFFF depth 14 + wasm_invoke_iiiffffffff (target_func, margs); + return; + } + } + } + else if (cookie[9] == '\0') { + // found: IIIFFFFFF depth 12 + wasm_invoke_iiiffffff (target_func, margs); + return; + } + } + else if (cookie[8] == '\0') { + // found: IIIFFFFF depth 11 + wasm_invoke_iiifffff (target_func, margs); + return; + } + } + else if (cookie[7] == '\0') { + // found: IIIFFFF depth 10 + wasm_invoke_iiiffff (target_func, margs); + return; + } + } + } + } + else if (cookie[4] == 'I') { + if (cookie[5] == 'I') { + if (cookie[6] == 'I') { + if (cookie[7] == '\0') { + // found: IIIFIII depth 10 + wasm_invoke_iiifiii (target_func, margs); + return; + } + } + else if (cookie[6] == '\0') { + // found: IIIFII depth 10 + wasm_invoke_iiifii (target_func, margs); + return; + } + } + else if (cookie[5] == '\0') { + // found: IIIFI depth 9 + wasm_invoke_iiifi (target_func, margs); + return; + } + } + else if (cookie[4] == '\0') { + // found: IIIF depth 8 + wasm_invoke_iiif (target_func, margs); + return; + } + } + else if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == 'I') { + if (cookie[6] == 'I') { + if (cookie[7] == 'I') { + if (cookie[8] == 'I') { + if (cookie[9] == 'I') { + if (cookie[10] == 'I') { + if (cookie[11] == 'I') { + if (cookie[12] == 'I') { + if (cookie[13] == 'I') { + if (cookie[14] == '\0') { + // found: IIIIIIIIIIIIII depth 17 + wasm_invoke_iiiiiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[13] == '\0') { + // found: IIIIIIIIIIIII depth 17 + wasm_invoke_iiiiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[12] == '\0') { + // found: IIIIIIIIIIII depth 16 + wasm_invoke_iiiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[11] == '\0') { + // found: IIIIIIIIIII depth 15 + wasm_invoke_iiiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[10] == '\0') { + // found: IIIIIIIIII depth 14 + wasm_invoke_iiiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[9] == '\0') { + // found: IIIIIIIII depth 13 + wasm_invoke_iiiiiiiii (target_func, margs); + return; + } + } + else if (cookie[8] == '\0') { + // found: IIIIIIII depth 12 + wasm_invoke_iiiiiiii (target_func, margs); + return; + } + } + else if (cookie[7] == 'F') { + if (cookie[8] == 'F') { + if (cookie[9] == '\0') { + // found: IIIIIIIFF depth 13 + wasm_invoke_iiiiiiiff (target_func, margs); + return; + } + } + else if (cookie[8] == '\0') { + // found: IIIIIIIF depth 13 + wasm_invoke_iiiiiiif (target_func, margs); + return; + } + } + else if (cookie[7] == '\0') { + // found: IIIIIII depth 12 + wasm_invoke_iiiiiii (target_func, margs); + return; + } + } + else if (cookie[6] == 'F') { + if (cookie[7] == 'I') { + if (cookie[8] == 'I') { + if (cookie[9] == '\0') { + // found: IIIIIIFII depth 13 + wasm_invoke_iiiiiifii (target_func, margs); + return; + } + } + } + } + else if (cookie[6] == '\0') { + // found: IIIIII depth 11 + wasm_invoke_iiiiii (target_func, margs); + return; + } + } + else if (cookie[5] == 'F') { + if (cookie[6] == 'F') { + if (cookie[7] == 'F') { + if (cookie[8] == 'F') { + if (cookie[9] == 'I') { + if (cookie[10] == 'I') { + if (cookie[11] == 'I') { + if (cookie[12] == 'I') { + if (cookie[13] == '\0') { + // found: IIIIIFFFFIIII depth 17 + wasm_invoke_iiiiiffffiiii (target_func, margs); + return; + } + } + } + } + } + } + } + } + } + else if (cookie[5] == '\0') { + // found: IIIII depth 10 + wasm_invoke_iiiii (target_func, margs); + return; + } + } + else if (cookie[4] == 'F') { + if (cookie[5] == 'I') { + if (cookie[6] == 'I') { + if (cookie[7] == 'I') { + if (cookie[8] == '\0') { + // found: IIIIFIII depth 12 + wasm_invoke_iiiifiii (target_func, margs); + return; + } + } + else if (cookie[7] == '\0') { + // found: IIIIFII depth 12 + wasm_invoke_iiiifii (target_func, margs); + return; + } + } + else if (cookie[6] == '\0') { + // found: IIIIFI depth 11 + wasm_invoke_iiiifi (target_func, margs); + return; + } + } + else if (cookie[5] == '\0') { + // found: IIIIF depth 10 + wasm_invoke_iiiif (target_func, margs); + return; + } + } + else if (cookie[4] == '\0') { + // found: IIII depth 9 + wasm_invoke_iiii (target_func, margs); + return; + } + } + else if (cookie[3] == '\0') { + // found: III depth 7 + wasm_invoke_iii (target_func, margs); + return; + } + } + else if (cookie[2] == 'F') { + if (cookie[3] == 'F') { + if (cookie[4] == 'F') { + if (cookie[5] == 'F') { + if (cookie[6] == 'F') { + if (cookie[7] == 'F') { + if (cookie[8] == 'F') { + if (cookie[9] == 'F') { + if (cookie[10] == '\0') { + // found: IIFFFFFFFF depth 13 + wasm_invoke_iiffffffff (target_func, margs); + return; + } + } + } + else if (cookie[8] == '\0') { + // found: IIFFFFFF depth 12 + wasm_invoke_iiffffff (target_func, margs); + return; + } + } + } + else if (cookie[6] == 'I') { + if (cookie[7] == 'I') { + if (cookie[8] == '\0') { + // found: IIFFFFII depth 12 + wasm_invoke_iiffffii (target_func, margs); + return; + } + } + else if (cookie[7] == '\0') { + // found: IIFFFFI depth 12 + wasm_invoke_iiffffi (target_func, margs); + return; + } + } + } + else if (cookie[5] == 'I') { + if (cookie[6] == '\0') { + // found: IIFFFI depth 10 + wasm_invoke_iifffi (target_func, margs); + return; + } + } + else if (cookie[5] == '\0') { + // found: IIFFF depth 10 + wasm_invoke_iifff (target_func, margs); + return; + } + } + else if (cookie[4] == 'I') { + if (cookie[5] == 'I') { + if (cookie[6] == 'I') { + if (cookie[7] == '\0') { + // found: IIFFIII depth 11 + wasm_invoke_iiffiii (target_func, margs); + return; + } + } + else if (cookie[6] == '\0') { + // found: IIFFII depth 11 + wasm_invoke_iiffii (target_func, margs); + return; + } + } + else if (cookie[5] == '\0') { + // found: IIFFI depth 10 + wasm_invoke_iiffi (target_func, margs); + return; + } + } + else if (cookie[4] == '\0') { + // found: IIFF depth 9 + wasm_invoke_iiff (target_func, margs); + return; + } + } + else if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == 'I') { + if (cookie[6] == '\0') { + // found: IIFIII depth 10 + wasm_invoke_iifiii (target_func, margs); + return; + } + } + else if (cookie[5] == '\0') { + // found: IIFII depth 10 + wasm_invoke_iifii (target_func, margs); + return; + } + } + else if (cookie[4] == '\0') { + // found: IIFI depth 9 + wasm_invoke_iifi (target_func, margs); + return; + } + } + else if (cookie[3] == '\0') { + // found: IIF depth 8 + wasm_invoke_iif (target_func, margs); + return; + } + } + else if (cookie[2] == 'L') { + if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == 'I') { + if (cookie[6] == 'I') { + if (cookie[7] == '\0') { + // found: IILIIII depth 11 + wasm_invoke_iiliiii (target_func, margs); + return; + } + } + } + } + else if (cookie[4] == '\0') { + // found: IILI depth 9 + wasm_invoke_iili (target_func, margs); + return; + } + } + else if (cookie[3] == 'L') { + if (cookie[4] == 'L') { + if (cookie[5] == 'I') { + if (cookie[6] == '\0') { + // found: IILLLI depth 11 + wasm_invoke_iillli (target_func, margs); + return; + } + } + } + } + else if (cookie[3] == '\0') { + // found: IIL depth 9 + wasm_invoke_iil (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: II depth 7 + wasm_invoke_ii (target_func, margs); + return; + } + } + else if (cookie[1] == 'F') { + if (cookie[2] == 'F') { + if (cookie[3] == 'F') { + if (cookie[4] == 'F') { + if (cookie[5] == 'F') { + if (cookie[6] == 'F') { + if (cookie[7] == 'I') { + if (cookie[8] == '\0') { + // found: IFFFFFFI depth 11 + wasm_invoke_iffffffi (target_func, margs); + return; + } + } + } + } + } + } + else if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == '\0') { + // found: IFFII depth 9 + wasm_invoke_iffii (target_func, margs); + return; + } + } + } + } + } + else if (cookie[1] == 'D') { + if (cookie[2] == 'I') { + if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == '\0') { + // found: IDIII depth 9 + wasm_invoke_idiii (target_func, margs); + return; + } + } + } + } + } + else if (cookie[1] == 'L') { + if (cookie[2] == 'I') { + if (cookie[3] == '\0') { + // found: ILI depth 8 + wasm_invoke_ili (target_func, margs); + return; + } + } + } + else if (cookie[1] == '\0') { + // found: I depth 7 + wasm_invoke_i (target_func, margs); + return; + } + } + else if (cookie[0] == 'L') { + if (cookie[1] == 'I') { + if (cookie[2] == 'L') { + if (cookie[3] == 'I') { + if (cookie[4] == 'I') { + if (cookie[5] == '\0') { + // found: LILII depth 8 + wasm_invoke_lilii (target_func, margs); + return; + } + } + } + else if (cookie[3] == 'L') { + if (cookie[4] == '\0') { + // found: LILL depth 8 + wasm_invoke_lill (target_func, margs); + return; + } + } + else if (cookie[3] == '\0') { + // found: LIL depth 8 + wasm_invoke_lil (target_func, margs); + return; + } + } + else if (cookie[2] == 'I') { + if (cookie[3] == '\0') { + // found: LII depth 7 + wasm_invoke_lii (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: LI depth 7 + wasm_invoke_li (target_func, margs); + return; + } + } + else if (cookie[1] == 'L') { + if (cookie[2] == '\0') { + // found: LL depth 6 + wasm_invoke_ll (target_func, margs); + return; + } + } + else if (cookie[1] == '\0') { + // found: L depth 6 + wasm_invoke_l (target_func, margs); + return; + } + } + else if (cookie[0] == 'D') { + if (cookie[1] == 'I') { + if (cookie[2] == 'D') { + if (cookie[3] == 'D') { + if (cookie[4] == '\0') { + // found: DIDD depth 8 + wasm_invoke_didd (target_func, margs); + return; + } + } + else if (cookie[3] == '\0') { + // found: DID depth 8 + wasm_invoke_did (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: DI depth 7 + wasm_invoke_di (target_func, margs); + return; + } + } + else if (cookie[1] == 'D') { + if (cookie[2] == 'D') { + if (cookie[3] == '\0') { + // found: DDD depth 8 + wasm_invoke_ddd (target_func, margs); + return; + } + } + else if (cookie[2] == 'I') { + if (cookie[3] == '\0') { + // found: DDI depth 9 + wasm_invoke_ddi (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: DD depth 9 + wasm_invoke_dd (target_func, margs); + return; + } + } + } + else if (cookie[0] == 'F') { + if (cookie[1] == 'I') { + if (cookie[2] == 'F') { + if (cookie[3] == 'F') { + if (cookie[4] == '\0') { + // found: FIFF depth 9 + wasm_invoke_fiff (target_func, margs); + return; + } + } + else if (cookie[3] == '\0') { + // found: FIF depth 9 + wasm_invoke_fif (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: FI depth 8 + wasm_invoke_fi (target_func, margs); + return; + } + } + else if (cookie[1] == 'F') { + if (cookie[2] == 'F') { + if (cookie[3] == '\0') { + // found: FFF depth 9 + wasm_invoke_fff (target_func, margs); + return; + } + } + else if (cookie[2] == '\0') { + // found: FF depth 9 + wasm_invoke_ff (target_func, margs); + return; + } + } + } + g_error ("CANNOT HANDLE COOKIE %s\n", cookie); } diff --git a/mono/mini/xdebug.c b/mono/mini/xdebug.c index aeed67a164..607db2e1e9 100644 --- a/mono/mini/xdebug.c +++ b/mono/mini/xdebug.c @@ -300,7 +300,7 @@ mono_save_xdebug_info (MonoCompile *cfg) xdebug_method_count ++; - dmji = mono_debug_find_method (jinfo_get_method (cfg->jit_info), mono_domain_get ());; + dmji = mono_debug_find_method (jinfo_get_method (cfg->jit_info), mono_domain_get ()); mono_dwarf_writer_emit_method (xdebug_writer, cfg, jinfo_get_method (cfg->jit_info), NULL, NULL, NULL, (guint8*)cfg->jit_info->code_start, cfg->jit_info->code_size, cfg->args, cfg->locals, cfg->unwind_ops, dmji); mono_debug_free_method_jit_info (dmji); diff --git a/mono/native/Makefile.am b/mono/native/Makefile.am index 69af4780a5..3ade3d2db5 100644 --- a/mono/native/Makefile.am +++ b/mono/native/Makefile.am @@ -29,7 +29,29 @@ common_sources = \ ../../external/corefx/src/Native/Unix/System.Native/pal_uid.c \ ../../external/corefx/src/Native/Unix/System.Native/pal_uid.h \ ../../external/corefx/src/Native/Unix/System.Native/pal_time.c \ - ../../external/corefx/src/Native/Unix/System.Native/pal_time.h + ../../external/corefx/src/Native/Unix/System.Native/pal_time.h \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/dictionary_hash.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/backward_references_hq.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/histogram.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/memory.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/entropy_encode.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/compress_fragment_two_pass.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/block_splitter.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/encode.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/cluster.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/backward_references.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/utf8_util.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/compress_fragment.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/brotli_bit_stream.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/bit_cost.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/static_dict.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/literal_cost.c \ + ../../external/corefx/src/Native/AnyOS/brotli/enc/metablock.c \ + ../../external/corefx/src/Native/AnyOS/brotli/dec/state.c \ + ../../external/corefx/src/Native/AnyOS/brotli/dec/decode.c \ + ../../external/corefx/src/Native/AnyOS/brotli/dec/huffman.c \ + ../../external/corefx/src/Native/AnyOS/brotli/dec/bit_reader.c \ + ../../external/corefx/src/Native/AnyOS/brotli/common/dictionary.c macos_sources = $(unix_sources) @@ -49,6 +71,8 @@ linux_sources = $(unix_sources) aix_sources = $(unix_sources) +freebsd_sources = $(unix_sources) + android_sources = \ pal-android.h \ pal-android.c \ @@ -86,7 +110,7 @@ macos_sources += $(gss_sources) ios_sources += $(gss_sources) endif -EXTRA_libmono_native_la_SOURCES = $(common_sources) $(macos_sources) $(ios_sources) $(linux_sources) $(aix_sources) $(unix_sources) $(gss_sources) +EXTRA_libmono_native_la_SOURCES = $(common_sources) $(macos_sources) $(ios_sources) $(linux_sources) $(aix_sources) $(freebsd) $(unix_sources) $(gss_sources) if MONO_NATIVE_PLATFORM_MACOS platform_sources = $(macos_sources) @@ -102,6 +126,10 @@ platform_sources = $(aix_sources) else if MONO_NATIVE_PLATFORM_ANDROID platform_sources = $(android_sources) +else +if MONO_NATIVE_PLATFORM_FREEBSD +platform_sources = $(freebsd_sources) +endif endif endif endif @@ -113,8 +141,10 @@ common_cppflags = -I$(top_srcdir) -I$(top_srcdir)/mono common_cflags = \ -I$(abs_top_srcdir)/external/corefx/src/Native/Unix/Common \ -I$(abs_top_srcdir)/external/corefx/src/Native/Unix/System.Native \ + -I$(abs_top_srcdir)/external/corefx/src/Native/AnyOS/brotli/include \ $(GLIB_CFLAGS) \ $(SHARED_CFLAGS) \ + -DBROTLI_BUILD_NO_RBIT \ -Wno-typedef-redefinition # clear these flags as we set values for each target separately and automake always appends CFLAGS diff --git a/mono/native/Makefile.in.REMOVED.git-id b/mono/native/Makefile.in.REMOVED.git-id index 89223806da..3f74b93bd9 100644 --- a/mono/native/Makefile.in.REMOVED.git-id +++ b/mono/native/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -b978f311d185469091c959d3d8cad6dd237ede00 \ No newline at end of file +5b96a815d1ba72b07fe42840340c323ed900d802 \ No newline at end of file diff --git a/mono/native/mono-native-platform.h b/mono/native/mono-native-platform.h index 64d31800bb..970f4d96ec 100644 --- a/mono/native/mono-native-platform.h +++ b/mono/native/mono-native-platform.h @@ -11,6 +11,7 @@ typedef enum { MONO_NATIVE_PLATFORM_TYPE_LINUX = 3, MONO_NATIVE_PLATFORM_TYPE_AIX = 4, MONO_NATIVE_PLATFORM_TYPE_ANDROID = 5, + MONO_NATIVE_PLATFORM_TYPE_FREEBSD = 6, MONO_NATIVE_PLATFORM_TYPE_IPHONE = 0x100, MONO_NATIVE_PLATFORM_TYPE_TV = 0x200, diff --git a/mono/profiler/Makefile.in b/mono/profiler/Makefile.in index e6e7a04cb6..5509a4787c 100644 --- a/mono/profiler/Makefile.in +++ b/mono/profiler/Makefile.in @@ -352,6 +352,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -482,8 +484,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/profiler/log.c.REMOVED.git-id b/mono/profiler/log.c.REMOVED.git-id index 53fb50897d..03b7d3ec58 100644 --- a/mono/profiler/log.c.REMOVED.git-id +++ b/mono/profiler/log.c.REMOVED.git-id @@ -1 +1 @@ -300d3839a9130f1dac2a73e34a2a704a1540a0bd \ No newline at end of file +fb8eb1cfc1a4b188b939ec3c3722a21d9d6182a7 \ No newline at end of file diff --git a/mono/profiler/mprof-report.c.REMOVED.git-id b/mono/profiler/mprof-report.c.REMOVED.git-id index 845d76e5e6..98703befd2 100644 --- a/mono/profiler/mprof-report.c.REMOVED.git-id +++ b/mono/profiler/mprof-report.c.REMOVED.git-id @@ -1 +1 @@ -c597ca305b05835db5799881eb43764c4a6d0ef2 \ No newline at end of file +8e689f171d17222547a469d02aae677ab47bf5d4 \ No newline at end of file diff --git a/mono/profiler/vtune.c b/mono/profiler/vtune.c index ba318a2489..87c69ced42 100644 --- a/mono/profiler/vtune.c +++ b/mono/profiler/vtune.c @@ -32,6 +32,7 @@ #include <mono/metadata/assembly.h> #include <mono/metadata/mono-debug.h> #include <mono/metadata/debug-internals.h> +#include <mono/metadata/class-internals.h> #include <string.h> #include <glib.h> diff --git a/mono/sgen/Makefile.in b/mono/sgen/Makefile.in index 3b7a68370c..859f4f0b8f 100644 --- a/mono/sgen/Makefile.in +++ b/mono/sgen/Makefile.in @@ -227,6 +227,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS := $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) @CXX_ADD_CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -357,8 +359,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/sgen/sgen-debug.c b/mono/sgen/sgen-debug.c index a4b9fb5604..9dbe89d58b 100644 --- a/mono/sgen/sgen-debug.c +++ b/mono/sgen/sgen-debug.c @@ -953,32 +953,18 @@ is_xdomain_ref_allowed (GCObject **ptr, GCObject *obj, MonoDomain *domain) MonoObject *ref = *ptr; size_t offset = (char*)(ptr) - (char*)o; +#ifndef ENABLE_NETCORE if (o->vtable->klass == mono_defaults.thread_class && offset == G_STRUCT_OFFSET (MonoThread, internal_thread)) return TRUE; if (o->vtable->klass == mono_defaults.internal_thread_class && offset == G_STRUCT_OFFSET (MonoInternalThread, current_appcontext)) return TRUE; +#endif #ifndef DISABLE_REMOTING if (m_class_get_supertypes (mono_defaults.real_proxy_class) && mono_class_has_parent_fast (o->vtable->klass, mono_defaults.real_proxy_class) && offset == G_STRUCT_OFFSET (MonoRealProxy, unwrapped_server)) return TRUE; #endif - /* - * at System.IO.MemoryStream.InternalConstructor (byte[],int,int,bool,bool) [0x0004d] in /home/schani/Work/novell/trunk/mcs/class/corlib/System.IO/MemoryStream.cs:121 - * at System.IO.MemoryStream..ctor (byte[]) [0x00017] in /home/schani/Work/novell/trunk/mcs/class/corlib/System.IO/MemoryStream.cs:81 - * at (wrapper remoting-invoke-with-check) System.IO.MemoryStream..ctor (byte[]) <IL 0x00020, 0xffffffff> - * at System.Runtime.Remoting.Messaging.CADMethodCallMessage.GetArguments () [0x0000d] in /home/schani/Work/novell/trunk/mcs/class/corlib/System.Runtime.Remoting.Messaging/CADMessages.cs:327 - * at System.Runtime.Remoting.Messaging.MethodCall..ctor (System.Runtime.Remoting.Messaging.CADMethodCallMessage) [0x00017] in /home/schani/Work/novell/trunk/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs:87 - * at System.AppDomain.ProcessMessageInDomain (byte[],System.Runtime.Remoting.Messaging.CADMethodCallMessage,byte[]&,System.Runtime.Remoting.Messaging.CADMethodReturnMessage&) [0x00018] in /home/schani/Work/novell/trunk/mcs/class/corlib/System/AppDomain.cs:1213 - * at (wrapper remoting-invoke-with-check) System.AppDomain.ProcessMessageInDomain (byte[],System.Runtime.Remoting.Messaging.CADMethodCallMessage,byte[]&,System.Runtime.Remoting.Messaging.CADMethodReturnMessage&) <IL 0x0003d, 0xffffffff> - * at System.Runtime.Remoting.Channels.CrossAppDomainSink.ProcessMessageInDomain (byte[],System.Runtime.Remoting.Messaging.CADMethodCallMessage) [0x00008] in /home/schani/Work/novell/trunk/mcs/class/corlib/System.Runtime.Remoting.Channels/CrossAppDomainChannel.cs:198 - * at (wrapper runtime-invoke) object.runtime_invoke_CrossAppDomainSink/ProcessMessageRes_object_object (object,intptr,intptr,intptr) <IL 0x0004c, 0xffffffff> - */ - if (!strcmp (m_class_get_name_space (ref->vtable->klass), "System") && - !strcmp (m_class_get_name (ref->vtable->klass), "Byte[]") && - !strcmp (m_class_get_name_space (o->vtable->klass), "System.IO") && - !strcmp (m_class_get_name (o->vtable->klass), "MemoryStream")) - return TRUE; return FALSE; } diff --git a/mono/tests/Makefile.am.REMOVED.git-id b/mono/tests/Makefile.am.REMOVED.git-id index 8175159bec..4232190374 100644 --- a/mono/tests/Makefile.am.REMOVED.git-id +++ b/mono/tests/Makefile.am.REMOVED.git-id @@ -1 +1 @@ -80f3a88f8f5ff3a7d3065061ef4cabd02df5d11f \ No newline at end of file +0613d795f16b8d0fa5fd8621b0f09f4d5f0dd468 \ No newline at end of file diff --git a/mono/tests/Makefile.in.REMOVED.git-id b/mono/tests/Makefile.in.REMOVED.git-id index 878ad31548..ea94ff89ab 100644 --- a/mono/tests/Makefile.in.REMOVED.git-id +++ b/mono/tests/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -648a0cb62b5aca0ac3ef25c70d99cc6361d042e6 \ No newline at end of file +fd7461f02d6a50d216fec620d5910a9edf755676 \ No newline at end of file diff --git a/mono/tests/assembly-load-reference/Makefile.am b/mono/tests/assembly-load-reference/Makefile.am index 510da5da0b..8cbd257e73 100644 --- a/mono/tests/assembly-load-reference/Makefile.am +++ b/mono/tests/assembly-load-reference/Makefile.am @@ -33,7 +33,12 @@ endif TEST_RUNNER = ../test-runner.exe if HOST_WIN32 -TEST_RUNNER += --config tests-config --runtime "$(if $(MONO_EXECUTABLE),$(shell cygpath -w -a $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),$(top_builddir)/runtime/mono-wrapper)" +if ENABLE_MSVC + DEFAULT_WIN32_RUNTIME=$(shell cygpath -w -a $(top_builddir)/@mono_runtime@ | sed 's/\\/\\\\/g') +else + DEFAULT_WIN32_RUNTIME=$(top_builddir)/runtime/mono-wrapper) +endif +TEST_RUNNER += --config tests-config --runtime "$(if $(MONO_EXECUTABLE),$(shell cygpath -w -a $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),$(DEFAULT_WIN32_RUNTIME))" else TEST_RUNNER += --config tests-config --runtime "$(if $(MONO_EXECUTABLE),$(MONO_EXECUTABLE),$(top_builddir)/runtime/mono-wrapper)" endif @@ -123,6 +128,7 @@ test-local: compile-samedir compile-separatedir compile-mainanddep compile-samedir: samedir/LoadFromMain.exe samedir/LoadFileMain.exe samedir/Dep.dll samedir/Mid.dll samedir/%.dll: src/%.dll + mkdir -p $(@D) cp $< $@ compile-separatedir: separatedir/LoadFromMain.exe separatedir/LoadFileMain.exe separatedir/middle/Dep.dll separatedir/middle/Mid.dll @@ -134,6 +140,7 @@ separatedir/middle/%.dll: src/%.dll compile-mainanddep: mainanddep/LoadFromMain.exe mainanddep/LoadFileMain.exe mainanddep/Dep.dll mainanddep/middle/Mid.dll mainanddep/Dep.dll: src/Dep.dll + mkdir -p $(@D) cp $< $@ mainanddep/middle/Mid.dll: src/Mid.dll @@ -141,15 +148,18 @@ mainanddep/middle/Mid.dll: src/Mid.dll cp $< $@ src/Dep.dll: src/Dep.cs + mkdir -p $(@D) $(MCS) -out:$@ $< -target:library src/Mid.dll: src/Mid.cs src/Dep.dll $(MCS) -out:$@ $< -r:src/Dep.dll -target:library %/LoadFromMain.exe: %/LoadFromMain.cs + mkdir -p $(@D) $(MCS) -out:$@ $< -target:exe %/LoadFileMain.exe: %/LoadFileMain.cs + mkdir -p $(@D) $(MCS) -out:$@ $< -target:exe %/LoadFromMain.exe$(PLATFORM_AOT_SUFFIX): %/LoadFromMain.exe diff --git a/mono/tests/assembly-load-reference/Makefile.in b/mono/tests/assembly-load-reference/Makefile.in index b4aa018da1..6ec8cafe58 100644 --- a/mono/tests/assembly-load-reference/Makefile.in +++ b/mono/tests/assembly-load-reference/Makefile.in @@ -88,7 +88,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -@HOST_WIN32_TRUE@am__append_1 = --config tests-config --runtime "$(if $(MONO_EXECUTABLE),$(shell cygpath -w -a $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),$(top_builddir)/runtime/mono-wrapper)" +@HOST_WIN32_TRUE@am__append_1 = --config tests-config --runtime "$(if $(MONO_EXECUTABLE),$(shell cygpath -w -a $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),$(DEFAULT_WIN32_RUNTIME))" @HOST_WIN32_FALSE@am__append_2 = --config tests-config --runtime "$(if $(MONO_EXECUTABLE),$(MONO_EXECUTABLE),$(top_builddir)/runtime/mono-wrapper)" @FULL_AOT_TESTS_TRUE@am__append_3 = --runtime-args "$(TEST_AOT_RUN_FLAGS)" @HYBRID_AOT_TESTS_TRUE@am__append_4 = --runtime-args "$(TEST_AOT_RUN_FLAGS)" @@ -168,6 +168,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -298,8 +300,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -663,6 +667,9 @@ TEST_RUNTIME_ARGS ?= $(RUNTIME_ARGS) TEST_AOT_BUILD_FLAGS ?= $(AOT_BUILD_FLAGS) TEST_AOT_RUN_FLAGS ?= $(AOT_RUN_FLAGS) +@ENABLE_MSVC_TRUE@@HOST_WIN32_TRUE@ DEFAULT_WIN32_RUNTIME=$(shell cygpath -w -a $(top_builddir)/@mono_runtime@ | sed 's/\\/\\\\/g') +@ENABLE_MSVC_FALSE@@HOST_WIN32_TRUE@ DEFAULT_WIN32_RUNTIME=$(top_builddir)/runtime/mono-wrapper) + ### Test cases .PHONY: run-test test-local @@ -676,6 +683,7 @@ test-local: compile-samedir compile-separatedir compile-mainanddep compile-samedir: samedir/LoadFromMain.exe samedir/LoadFileMain.exe samedir/Dep.dll samedir/Mid.dll samedir/%.dll: src/%.dll + mkdir -p $(@D) cp $< $@ compile-separatedir: separatedir/LoadFromMain.exe separatedir/LoadFileMain.exe separatedir/middle/Dep.dll separatedir/middle/Mid.dll @@ -687,6 +695,7 @@ separatedir/middle/%.dll: src/%.dll compile-mainanddep: mainanddep/LoadFromMain.exe mainanddep/LoadFileMain.exe mainanddep/Dep.dll mainanddep/middle/Mid.dll mainanddep/Dep.dll: src/Dep.dll + mkdir -p $(@D) cp $< $@ mainanddep/middle/Mid.dll: src/Mid.dll @@ -694,15 +703,18 @@ mainanddep/middle/Mid.dll: src/Mid.dll cp $< $@ src/Dep.dll: src/Dep.cs + mkdir -p $(@D) $(MCS) -out:$@ $< -target:library src/Mid.dll: src/Mid.cs src/Dep.dll $(MCS) -out:$@ $< -r:src/Dep.dll -target:library %/LoadFromMain.exe: %/LoadFromMain.cs + mkdir -p $(@D) $(MCS) -out:$@ $< -target:exe %/LoadFileMain.exe: %/LoadFileMain.cs + mkdir -p $(@D) $(MCS) -out:$@ $< -target:exe %/LoadFromMain.exe$(PLATFORM_AOT_SUFFIX): %/LoadFromMain.exe diff --git a/mono/tests/common_mixed.mk b/mono/tests/common_mixed.mk new file mode 100644 index 0000000000..01d73b5c59 --- /dev/null +++ b/mono/tests/common_mixed.mk @@ -0,0 +1,24 @@ +CLASS=$(mcs_topdir)/class/lib/$(DEFAULT_PROFILE) + +with_mono_path = MONO_PATH=$(CLASS) + +MONO_EXE = $(top_builddir)/runtime/mono-wrapper +RUNTIME = $(with_mono_path) $(MONO_EXE) +TOOLS_RUNTIME = MONO_PATH=$(mcs_topdir)/class/lib/build $(MONO_EXE) --aot-path=$(mcs_topdir)/class/lib/build + +MCS_NO_UNSAFE = $(TOOLS_RUNTIME) $(CSC) -debug:portable \ + -noconfig -nologo \ + -nowarn:0162 -nowarn:0168 -nowarn:0219 -nowarn:0414 -nowarn:0618 \ + -nowarn:0169 -nowarn:1690 -nowarn:0649 -nowarn:0612 -nowarn:3021 \ + -nowarn:0197 -langversion:latest $(PROFILE_MCS_FLAGS) +MCS_NO_LIB = $(MCS_NO_UNSAFE) -unsafe + +MCS = $(MCS_NO_LIB) + +ILASM = $(TOOLS_RUNTIME) $(mcs_topdir)/class/lib/build/ilasm.exe + + +CLEANFILES=*.dll *.exe *.pdb + +clean-local: + $(RM) -rf $(AOTDIR) $(AOT_TMPDIR) diff --git a/mono/tests/console-output.cs b/mono/tests/console-output.cs index efe863886d..dc6b301fb9 100644 --- a/mono/tests/console-output.cs +++ b/mono/tests/console-output.cs @@ -5,7 +5,7 @@ class Driver { public static void Main () { - Console.Out.WriteLine ("Out"); - Console.Error.WriteLine ("Error"); + Console.Out.WriteLine ("Testing Console.Out"); + Console.Error.WriteLine ("Testing Console.Error"); } } diff --git a/mono/tests/console-output.exe.stderr.expected b/mono/tests/console-output.exe.stderr.expected index 59fd4d68ea..9bfd7e391e 100644 --- a/mono/tests/console-output.exe.stderr.expected +++ b/mono/tests/console-output.exe.stderr.expected @@ -1 +1 @@ -Error +Testing Console.Error diff --git a/mono/tests/console-output.exe.stdout.expected b/mono/tests/console-output.exe.stdout.expected index 748eb3a9be..4a31d8ef38 100644 --- a/mono/tests/console-output.exe.stdout.expected +++ b/mono/tests/console-output.exe.stdout.expected @@ -1 +1 @@ -Out +Testing Console.Out diff --git a/mono/tests/custom-modifiers-append.1.il b/mono/tests/custom-modifiers-append.1.il new file mode 100644 index 0000000000..13d0ce2d42 --- /dev/null +++ b/mono/tests/custom-modifiers-append.1.il @@ -0,0 +1,148 @@ +// Test runtime custom modifier behavior. +// +// Roslyn expects custom modifiers to append together when a generic type is +// instantiated. +// +// For example, if a method has the signature +// .method public hidebysig virtual instance void Method (!0 modopt(Foo)) +// and the type is instantiated with int32 modopt (Bar) +// the result should be a method with a signature +// .method public hidebysig virtual instance void Method (int32 modopt(Foo) modopt(Bar)) + +.assembly extern mscorlib { } +.assembly 'custom-modifiers-append.1' { } + +.class public Foo +{ + .method public hidebysig specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void object::.ctor() + ret + } +} + +.class public Bar +{ + .method public hidebysig specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void object::.ctor() + ret + } +} + + +.class public BaseClass`1<T1> extends [mscorlib]System.Object +{ + .method public hidebysig specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void object::.ctor() + ret + } + + .method public newslot virtual instance int32 TestMethod(!T1 modopt(Foo)) + { + ldstr "In BaseClass::TestMethod (T1 modopt(Foo))" + call void class [mscorlib]System.Console::WriteLine(string) + ldc.i4.1 + ret + } + + .method public newslot virtual instance int32 TestMethod(!T1) + { + ldstr "In BaseClass::TestMethod (T1)" + call void class [mscorlib]System.Console::WriteLine(string) + ldc.i4.2 + ret + } +} + +.class public MidClass extends class BaseClass`1<int32 modopt(Bar)> +{ + .method public hidebysig specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void class BaseClass`1<int32 modopt(Bar)>::.ctor() + ret + } + + .method public hidebysig virtual instance int32 TestMethod(int32 modopt(Bar)) + { + ldstr "In MidClass::TestMethod (int32 modopt(Bar))" + call void class [mscorlib]System.Console::WriteLine(string) + ldc.i4.s 21 + ret + } +} + +.class public LeafClass extends class MidClass +{ + .method public hidebysig specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void class MidClass::.ctor() + ret + } + + .method public hidebysig virtual instance int32 TestMethod(int32 modopt(Bar) modopt(Foo)) + { + ldstr "In LeafClass::TestMethod (int32 modopt(Bar) modopt(Foo))" + call void class [mscorlib]System.Console::WriteLine(string) + ldc.i4 32 + ret + } +} + +.class public MainClass +{ + .method public static hidebysig int32 Main() + { + .entrypoint + .locals init (class BaseClass`1<int32> c) + ldstr "HelloWorld" + call void class [mscorlib]System.Console::WriteLine(string) + newobj instance void class MidClass::.ctor() + stloc.0 + ldloc.0 + ldc.i4.0 + // expect the call to BaseClass::TestMethod (T1 modopt(Foo)) + callvirt instance int32 class BaseClass`1<int32>::TestMethod(!0 modopt(Foo)) + ldc.i4.1 + bne.un bad1 + br after1 + bad1: + ldc.i4.1 + ret + after1: + newobj instance void class MidClass::.ctor() + stloc.0 + ldloc.0 + ldc.i4.0 + // expect the call to MidClass::TestMethod (int32 modopt(Bar)) + callvirt instance int32 class BaseClass`1<int32>::TestMethod(!0) + ldc.i4.s 21 + bne.un bad2 + br after2 + bad2: + ldc.i4.2 + ret + after2: + newobj instance void class LeafClass::.ctor() + stloc.0 + ldloc.0 + ldc.i4.0 + // expect the call to LeafClass::TestMethod (int32 modopt(Bar) modopt(Foo)) + callvirt instance int32 class BaseClass`1<int32>::TestMethod(!0 modopt(Foo)) + ldc.i4.s 32 + bne.un bad3 + br after3 + bad3: + ldc.i4.2 + ret + after3: + ldc.i4.0 + ret + } +} diff --git a/mono/tests/custom-modifiers-lib.il b/mono/tests/custom-modifiers-lib.il index 1f7902ad0c..9b0d5c5f74 100644 --- a/mono/tests/custom-modifiers-lib.il +++ b/mono/tests/custom-modifiers-lib.il @@ -20,6 +20,7 @@ extends [mscorlib]System.Object { .field public int32 modreq([mscorlib]System.Runtime.CompilerServices.IsBoxed) field_1 .field public int32 modopt([mscorlib]System.Runtime.CompilerServices.IsVolatile) field_2 + .field public int32 modopt([mscorlib]System.Runtime.CompilerServices.IsLong) modopt([mscorlib]System.Runtime.CompilerServices.IsConst) field_3 } // end of class CustomModifiers diff --git a/mono/tests/custom-modifiers.2.cs b/mono/tests/custom-modifiers.2.cs index 0fb34654d8..d708817a7b 100644 --- a/mono/tests/custom-modifiers.2.cs +++ b/mono/tests/custom-modifiers.2.cs @@ -30,6 +30,16 @@ public class Tests { if (arr [0] != typeof (System.Runtime.CompilerServices.IsVolatile)) return 6; + + /* Check that if there's more than one modifier, we get them in the expected order. */ + arr = typeof (CustomModifiers).GetField ("field_3").GetOptionalCustomModifiers (); + if (arr.Length != 2) + return 7; + if (arr [0] != typeof (System.Runtime.CompilerServices.IsLong)) + return 8; + if (arr [1] != typeof (System.Runtime.CompilerServices.IsConst)) + return 9; + return 0; } } diff --git a/mono/tests/delegate.cs b/mono/tests/delegate.cs index fda09b6ccf..4da5db391f 100644 --- a/mono/tests/delegate.cs +++ b/mono/tests/delegate.cs @@ -77,17 +77,17 @@ class Tests { test.H (3); if (d.Method.Name != "F") - return 1; + return 2; if (d3.Method == null) - return 1; + return 3; object [] args = {3}; Console.WriteLine (d3.DynamicInvoke (args)); AnotherDelegate d4 = new AnotherDelegate (puts); if (d4.Method == null) - return 1; + return 4; Console.WriteLine (d4.Method); Console.WriteLine (d4.Method.Name); diff --git a/mono/tests/dim-abstractcall.il b/mono/tests/dim-abstractcall.il new file mode 100644 index 0000000000..986027a671 --- /dev/null +++ b/mono/tests/dim-abstractcall.il @@ -0,0 +1,115 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319.assembly extern mscorlib { } +.assembly abstractcalls { } + +.class interface public abstract auto ansi I1 +{ + .method public hidebysig newslot virtual abstract + instance int32 Add(int32 x) cil managed + { + } +} + +.class public abstract auto ansi C1 + extends [mscorlib]System.Object + implements I1 +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + + .method public hidebysig newslot virtual abstract + instance int32 Remove(int32 x) cil managed + { + } +} + +.class public auto ansi C2 + extends [mscorlib]System.Object + implements I1 +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + ldarg.0 + call instance void C1::.ctor() + ret + } + + .method public hidebysig virtual + instance int32 Remove(int32 x) cil managed + { + ldc.i4.0 + ret + } + + .method public hidebysig newslot virtual + instance int32 Add(int32 x) cil managed + { + ldc.i4.5 + ret + } +} + +.method private hidebysig static void CallClass() cil managed +{ + newobj instance void C2::.ctor() + ldc.i4.0 + call instance int32 C1::Remove(int32) + pop + ret +} + +.method private hidebysig static void CallInterface() cil managed +{ + newobj instance void C2::.ctor() + ldc.i4.0 + call instance int32 I1::Add(int32) + pop + ret +} + +.method private hidebysig static int32 Main() cil managed +{ + .entrypoint + + .try + { + call void CallClass() + leave Fail + } + catch [System.Runtime]System.BadImageFormatException + { + leave AbstractClassOK + } + +AbstractClassOK: + + .try + { + call void CallInterface() + leave Fail + } + catch [System.Runtime]System.BadImageFormatException + { + leave AbstractInterfaceOK + } + +AbstractInterfaceOK: + ldc.i4 0 + ret + +Fail: + ldc.i4 155 + ret +} + diff --git a/mono/tests/dim-constrained3.il b/mono/tests/dim-constrained3.il new file mode 100644 index 0000000000..a3f653af2f --- /dev/null +++ b/mono/tests/dim-constrained3.il @@ -0,0 +1,68 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern mscorlib { } +.assembly constrained3 { } + +.class interface private abstract auto ansi IFrobber`1<T> +{ + .method public hidebysig newslot virtual instance int32 Frob() + { + ldstr "IFrobber<T>:Frob" + call void [mscorlib]System.Console::WriteLine(string) + + ldc.i4 34 + ret + } +} + +.class interface private abstract auto ansi IRobber`1<T> implements class IFrobber`1<!T> +{ + .method public hidebysig final newslot virtual instance int32 Frob() + { + .override class IFrobber`1<!T>::Frob + ldstr "IRobber<T>:Frob" + call void [mscorlib]System.Console::WriteLine(string) + ldc.i4 66 + ret + } +} + +.class interface private abstract auto ansi IGrabber`1<T> implements class IFrobber`1<!T> +{ + .method public hidebysig final newslot virtual instance int32 Frob() + { + .override class IFrobber`1<!T>::Frob + ldstr "IGrabber<T>:Frob" + call void [mscorlib]System.Console::WriteLine(string) + ldc.i4.3 + ret + } +} + +.class value Adder`1<T, U> implements class IFrobber`1<!T>, class IRobber`1<!U>, class IGrabber`1<!U[]> +{ +} + +.method public hidebysig static int32 Main() +{ + .entrypoint + + .locals init ( + valuetype Adder`1<object, string> + ) + + ldloca.s 0 + constrained. valuetype Adder`1<object, string> + callvirt instance int32 class IFrobber`1<object>::Frob() + + ldloca.s 0 + constrained. valuetype Adder`1<object, string> + callvirt instance int32 class IFrobber`1<string>::Frob() + add + ldc.i4 100 + sub + + ret +} diff --git a/mono/tests/dim-constrained3_gm.il b/mono/tests/dim-constrained3_gm.il new file mode 100644 index 0000000000..9245f48724 --- /dev/null +++ b/mono/tests/dim-constrained3_gm.il @@ -0,0 +1,68 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern mscorlib { } +.assembly constrained3_gm { } + +.class interface private abstract auto ansi IFrobber`1<T> +{ + .method public hidebysig newslot virtual instance int32 Frob<U>() + { + ldstr "IFrobber<T>:Frob" + call void [mscorlib]System.Console::WriteLine(string) + + ldc.i4 34 + ret + } +} + +.class interface private abstract auto ansi IRobber`1<T> implements class IFrobber`1<!T> +{ + .method public hidebysig final newslot virtual instance int32 Frob<U>() + { + .override class IFrobber`1<!T>::Frob + ldstr "IRobber<T>:Frob" + call void [mscorlib]System.Console::WriteLine(string) + ldc.i4 66 + ret + } +} + +.class interface private abstract auto ansi IGrabber`1<T> implements class IFrobber`1<!T> +{ + .method public hidebysig final newslot virtual instance int32 Frob<U>() + { + .override class IFrobber`1<!T>::Frob + ldstr "IGrabber<T>:Frob" + call void [mscorlib]System.Console::WriteLine(string) + ldc.i4.3 + ret + } +} + +.class value Adder`1<T, U> implements class IFrobber`1<!T>, class IRobber`1<!U>, class IGrabber`1<!U[]> +{ +} + +.method public hidebysig static int32 Main() +{ + .entrypoint + + .locals init ( + valuetype Adder`1<object, string> + ) + + ldloca.s 0 + constrained. valuetype Adder`1<object, string> + callvirt instance int32 class IFrobber`1<object>::Frob<object>() + + ldloca.s 0 + constrained. valuetype Adder`1<object, string> + callvirt instance int32 class IFrobber`1<string>::Frob<object>() + add + ldc.i4 100 + sub + + ret +} diff --git a/mono/tests/dim-constrainedcall.il b/mono/tests/dim-constrainedcall.il index 0408c75f26..6db938f806 100644 --- a/mono/tests/dim-constrainedcall.il +++ b/mono/tests/dim-constrainedcall.il @@ -1,456 +1,186 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. +.assembly extern mscorlib { } +.assembly constrainedcall { } - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib +.class interface private abstract auto ansi IAdder`1<T> { - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 + .method public hidebysig newslot abstract virtual instance int32 Add(int32) + { + } + + .method public hidebysig newslot virtual instance int32 PlusPlus() + { + ldarg.0 + ldc.i4.1 + callvirt instance int32 class IAdder`1<!0>::Add(int32) + ret + } } -.assembly constrainedcall + +.class interface IGen1`1<T> { } +.class interface IGen2`1<T> { } +.class interface IGen3`1<T> { } +.class value Atom { } + +.class value Adder`1<T> implements class IAdder`1<class IGen1`1<!T>>, class IAdder`1<class IGen2`1<!T>>, class IAdder`1<class IGen3`1<!T>>, class IAdder`1<valuetype Atom> { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx - 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .field private int32 _field - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 ) + .method public hidebysig newslot virtual instance int32 Add(int32) cil managed + { + ldarg.0 + dup + ldfld int32 valuetype Adder`1<!T>::_field + ldarg.1 + add + stfld int32 valuetype Adder`1<!T>::_field + ldarg.0 + ldfld int32 valuetype Adder`1<!T>::_field + ret + } - .hash algorithm 0x00008004 - .ver 0:0:0:0 + .method private hidebysig newslot virtual instance int32 'IAdder<IGen1<T>>.PlusPlus'() + { + .override method instance int32 class IAdder`1<class IGen1`1<!T>>::PlusPlus() + ldarg.0 + ldc.i4.2 + call instance int32 valuetype Adder`1<!T>::Add(int32) + ret + } + + .method private hidebysig newslot virtual instance int32 'IAdder<IGen2<T>>.PlusPlus'() + { + .override method instance int32 class IAdder`1<class IGen2`1<!T>>::PlusPlus() + ldarg.0 + ldc.i4.3 + call instance int32 valuetype Adder`1<!T>::Add(int32) + ret + } } -.module constrainedcall.exe -// MVID: {6171EA0F-1009-482D-8EF6-C944886D5D66} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x01860000 - -// =============== CLASS MEMBERS DECLARATION =================== - -.class interface private abstract auto ansi IFoo +.method public hidebysig static int32 Check<(class IAdder`1<!!U>) T,U>(!!T t) { - .method public hidebysig newslot virtual - instance int32 Foo(int32 c) cil managed - { - // Code size 20 (0x14) - .maxstack 2 - .locals init (class IAdd V_0, - int32 V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: castclass IAdd - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: ldarg.1 - IL_000a: callvirt instance int32 IAdd::Add(int32) - IL_000f: stloc.1 - IL_0010: br.s IL_0012 + // The constrained calls below may or may not box for a valuetype T + // depending on whether IAdder`1<!!U>::PlusPlus() ends up calling + // the default implementation of the interface method. - IL_0012: ldloc.1 - IL_0013: ret - } // end of method IFoo::Foo + ldarga.s 0 + constrained. !!T + callvirt instance int32 class IAdder`1<!!U>::PlusPlus() + ldarga.s 0 + constrained. !!T + callvirt instance int32 class IAdder`1<!!U>::PlusPlus() + add + ret +} -} // end of class IFoo - -.class interface private abstract auto ansi IAdd +.method public hidebysig static int32 Main() { - .method public hidebysig newslot abstract virtual - instance int32 Add(int32 c) cil managed - { - } // end of method IAdd::Add - -} // end of class IAdd - -.class private sequential ansi sealed beforefieldinit FooValue - extends [mscorlib]System.ValueType - implements IFoo, - IAdd -{ - .field public int32 val - - .method public hidebysig newslot virtual final - instance int32 Add(int32 c) cil managed - { - // Code size 26 (0x1a) - .maxstack 3 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.0 - IL_0003: ldfld int32 FooValue::val - IL_0008: ldarg.1 - IL_0009: add - IL_000a: stfld int32 FooValue::val - IL_000f: ldarg.0 - IL_0010: ldfld int32 FooValue::val - IL_0015: stloc.0 - IL_0016: br.s IL_0018 - - IL_0018: ldloc.0 - IL_0019: ret - } // end of method FooValue::Add - -} // end of class FooValue - -.class interface private abstract auto ansi IHorrible`1<T> -{ - .method public hidebysig newslot abstract virtual - instance int32 GetLocalVal() cil managed - { - } // end of method IHorrible`1::GetLocalVal - - .method public hidebysig newslot abstract virtual - instance void SetLocalVal(int32 val) cil managed - { - } // end of method IHorrible`1::SetLocalVal - - .method public hidebysig newslot virtual - instance int32 Horrible() cil managed - { - // Code size 26 (0x1a) - .maxstack 2 - .locals init (int32 V_0, - int32 V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: callvirt instance int32 class IHorrible`1<!T>::GetLocalVal() - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: ldc.i4.1 - IL_000a: add - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: ldloc.0 - IL_000e: callvirt instance void class IHorrible`1<!T>::SetLocalVal(int32) - IL_0013: nop - IL_0014: ldloc.0 - IL_0015: stloc.1 - IL_0016: br.s IL_0018 - - IL_0018: ldloc.1 - IL_0019: ret - } // end of method IHorrible`1::Horrible - -} // end of class IHorrible`1 - -.class private sequential ansi sealed beforefieldinit HorribleCase`1<Z> - extends [mscorlib]System.ValueType - implements class IHorrible`1<class [mscorlib]System.Collections.Generic.IList`1<!Z>>, - class IHorrible`1<class [mscorlib]System.Collections.Generic.IEnumerable`1<!Z>> -{ - .field private int32 localVal - .method public hidebysig newslot virtual final - instance int32 GetLocalVal() cil managed - { - // Code size 12 (0xc) - .maxstack 1 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 valuetype HorribleCase`1<!Z>::localVal - IL_0007: stloc.0 - IL_0008: br.s IL_000a - - IL_000a: ldloc.0 - IL_000b: ret - } // end of method HorribleCase`1::GetLocalVal - - .method public hidebysig newslot virtual final - instance void SetLocalVal(int32 val) cil managed - { - // Code size 9 (0x9) - .maxstack 8 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: stfld int32 valuetype HorribleCase`1<!Z>::localVal - IL_0008: ret - } // end of method HorribleCase`1::SetLocalVal - - .method private hidebysig newslot virtual final - instance int32 'IHorrible<System.Collections.Generic.IList<Z>>.Horrible'() cil managed - { - .override method instance int32 class IHorrible`1<class [mscorlib]System.Collections.Generic.IList`1<!Z>>::Horrible() - // Code size 23 (0x17) - .maxstack 3 - .locals init (int32 V_0, - int32 V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.0 - IL_0003: ldfld int32 valuetype HorribleCase`1<!Z>::localVal - IL_0008: ldc.i4.1 - IL_0009: add - IL_000a: stloc.0 - IL_000b: ldloc.0 - IL_000c: stfld int32 valuetype HorribleCase`1<!Z>::localVal - IL_0011: ldloc.0 - IL_0012: stloc.1 - IL_0013: br.s IL_0015 - - IL_0015: ldloc.1 - IL_0016: ret - } // end of method HorribleCase`1::'IHorrible<System.Collections.Generic.IList<Z>>.Horrible' -} // end of class HorribleCase`1 - -.class private auto ansi beforefieldinit HorribleTest - extends [mscorlib]System.Object -{ - .method public hidebysig static int32 Horror<(class IHorrible`1<!!U>) T,U>(!!T t) cil managed - { - // Code size 33 (0x21) - .maxstack 2 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarga.s t - IL_0003: constrained. !!T - IL_0009: callvirt instance int32 class IHorrible`1<!!U>::Horrible() - IL_000e: ldarga.s t - IL_0010: constrained. !!T - IL_0016: callvirt instance int32 class IHorrible`1<!!U>::Horrible() - IL_001b: add - IL_001c: stloc.0 - IL_001d: br.s IL_001f - - IL_001f: ldloc.0 - IL_0020: ret - } // end of method HorribleTest::Horror - - .method public hidebysig static void RunTest() cil managed - { - // Code size 58 (0x3a) - .maxstack 2 - .locals init (valuetype HorribleCase`1<object> V_0) - IL_0000: nop - IL_0001: ldloca.s V_0 - IL_0003: initobj valuetype HorribleCase`1<object> - IL_0009: ldloc.0 - IL_000a: call int32 HorribleTest::Horror<valuetype HorribleCase`1<object>,class [mscorlib]System.Collections.Generic.IEnumerable`1<object>>(!!0) - IL_000f: ldc.i4.3 - IL_0010: ceq - IL_0012: ldstr "Fail" - IL_0017: call void Test::Assert(bool, - string) - IL_001c: nop - IL_001d: ldloca.s V_0 - IL_001f: initobj valuetype HorribleCase`1<object> - IL_0025: ldloc.0 - IL_0026: call int32 HorribleTest::Horror<valuetype HorribleCase`1<object>,class [mscorlib]System.Collections.Generic.IList`1<object>>(!!0) - IL_002b: ldc.i4.0 - IL_002c: ceq - IL_002e: ldstr "Fail" - IL_0033: call void Test::Assert(bool, - string) - IL_0038: nop - IL_0039: ret - } // end of method HorribleTest::RunTest - - .method public hidebysig specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: nop - IL_0007: ret - } // end of method HorribleTest::.ctor - -} // end of class HorribleTest - -.class private auto ansi beforefieldinit SimpleConstraintTest - extends [mscorlib]System.Object -{ - .method public hidebysig static int32 CallFoo_WithConstraints<(IFoo) T>(!!T& foo, - int32 val) cil managed - { - // Code size 19 (0x13) - .maxstack 2 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: constrained. !!T - IL_0009: callvirt instance int32 IFoo::Foo(int32) - IL_000e: stloc.0 - IL_000f: br.s IL_0011 - - IL_0011: ldloc.0 - IL_0012: ret - } // end of method SimpleConstraintTest::CallFoo_WithConstraints - - .method public hidebysig static void RunTest() cil managed - { - // Code size 75 (0x4b) - .maxstack 2 - .locals init (valuetype FooValue V_0) - IL_0000: nop - IL_0001: ldloca.s V_0 - IL_0003: initobj FooValue - IL_0009: ldloca.s V_0 - IL_000b: ldc.i4.s 10 - IL_000d: stfld int32 FooValue::val - IL_0012: ldstr "Calling CallFoo_WithConstraints on FooValue - expe" - + "cting IFoo::Foo" - IL_0017: call void [mscorlib]System.Console::WriteLine(string) - IL_001c: nop - IL_001d: ldloca.s V_0 - IL_001f: ldc.i4.s 10 - IL_0021: call int32 SimpleConstraintTest::CallFoo_WithConstraints<valuetype FooValue>(!!0&, - int32) - IL_0026: ldc.i4.s 20 - IL_0028: ceq - IL_002a: ldstr "Calling CallFoo_WithConstraints on FooValue" - IL_002f: call void Test::Assert(bool, - string) - IL_0034: nop - IL_0035: ldloc.0 - IL_0036: ldfld int32 FooValue::val - IL_003b: ldc.i4.s 10 - IL_003d: ceq - IL_003f: ldstr "Expecting boxing on CallFoo_WithConstraints" - IL_0044: call void Test::Assert(bool, - string) - IL_0049: nop - IL_004a: ret - } // end of method SimpleConstraintTest::RunTest - - .method public hidebysig specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: nop - IL_0007: ret - } // end of method SimpleConstraintTest::.ctor - -} // end of class SimpleConstraintTest - -.class private auto ansi beforefieldinit Program - extends [mscorlib]System.Object -{ - .method public hidebysig static int32 Main() cil managed - { .entrypoint - // Code size 23 (0x17) - .maxstack 1 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: call void HorribleTest::RunTest() - IL_0006: nop - IL_0007: call void SimpleConstraintTest::RunTest() - IL_000c: nop - IL_000d: call int32 Test::Ret() - IL_0012: stloc.0 - IL_0013: br.s IL_0015 - IL_0015: ldloc.0 - IL_0016: ret - } // end of method Program::Main + .locals init ( + valuetype Adder`1<object>, + int32, + valuetype Adder`1<valuetype Atom> + ) - .method public hidebysig specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: nop - IL_0007: ret - } // end of method Program::.ctor + // This will end up calling the implementation of IAdder<IGen1<object>>.PlusPlus + // provided by the Adder valuetype. + // The sum returned by the Check method will be 2+4 = 6. + ldloc.0 + call int32 Check<valuetype Adder`1<object>,class IGen1`1<object>>(!!0) + ldc.i4.6 + ceq + brtrue IGen1_OK -} // end of class Program + ldc.i4.1 + ret -.class private auto ansi beforefieldinit Test - extends [mscorlib]System.Object -{ - .field private static bool Pass - .method public hidebysig static int32 Ret() cil managed - { - // Code size 19 (0x13) - .maxstack 1 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldsfld bool Test::Pass - IL_0006: brtrue.s IL_000c +IGen1_OK: - IL_0008: ldc.i4.s 101 - IL_000a: br.s IL_000e + // This will end up calling the implementation of IAdder<IGen2<object>>.PlusPlus + // provided by the Adder valuetype. + // The sum returned by the Check method will be 3+6 = 9. + ldloca 0 + initobj valuetype Adder`1<object> + ldloc.0 + call int32 Check<valuetype Adder`1<object>,class IGen2`1<object>>(!!0) + ldc.i4 9 + ceq + brtrue IGen2_OK - IL_000c: ldc.i4.s 0 - IL_000e: stloc.0 - IL_000f: br.s IL_0011 + ldc.i4.2 + ret - IL_0011: ldloc.0 - IL_0012: ret - } // end of method Test::Ret +IGen2_OK: - .method public hidebysig static void Assert(bool cond, - string msg) cil managed - { - // Code size 47 (0x2f) - .maxstack 2 - .locals init (bool V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: stloc.0 - IL_0003: ldloc.0 - IL_0004: brfalse.s IL_0015 - - IL_0006: nop - IL_0007: ldstr "PASS" - IL_000c: call void [mscorlib]System.Console::WriteLine(string) - IL_0011: nop - IL_0012: nop - IL_0013: br.s IL_002e - - IL_0015: nop - IL_0016: ldstr "FAIL: " - IL_001b: ldarg.1 - IL_001c: call string [mscorlib]System.String::Concat(string, - string) - IL_0021: call void [mscorlib]System.Console::WriteLine(string) - IL_0026: nop - IL_0027: ldc.i4.0 - IL_0028: stsfld bool Test::Pass - IL_002d: nop - IL_002e: ret - } // end of method Test::Assert - - .method public hidebysig specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: nop - IL_0007: ret - } // end of method Test::.ctor - - .method private hidebysig specialname rtspecialname static - void .cctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldc.i4.1 - IL_0001: stsfld bool Test::Pass - IL_0006: ret - } // end of method Test::.cctor - -} // end of class Test + ldstr "Constrained calls that require runtime lookup are OK" + call void [mscorlib]System.Console::WriteLine(string) -// ============================================================= + // Store a successful result in case the implementation throws. + // We consider both a throw and a successful dispatch a success. + // The throwing behavior is an implementation limitation. + // Successful dispatch is what the spec mandates. + ldc.i4.2 + stloc.1 -// *********** DISASSEMBLY COMPLETE *********************** -// WARNING: Created Win32 resource file constrainedcall.res + ldloca 0 + initobj valuetype Adder`1<object> + + // This will end up calling the default implementation of IAdder<IGen3<object>>.PlusPlus + // Since each constrained call in Check is going to box, the sum will end up 1+1 = 2. + .try + { + ldloc.0 + call int32 Check<valuetype Adder`1<object>,class IGen3`1<object>>(!!0) + stloc.1 + + ldstr "Runtime supports lookups with runtime determined boxing" + call void [mscorlib]System.Console::WriteLine(string) + + leave AfterBoxingCall + } + catch [mscorlib]System.Exception + { + pop + leave AfterFailedBoxingCall + } + +AfterFailedBoxingCall: + ldstr "Runtime does not support lookups with runtime determined boxing" + call void [mscorlib]System.Console::WriteLine(string) + +AfterBoxingCall: + ldloc.1 + ldc.i4.2 + ceq + brtrue IGen3_OK + + ldc.i4.3 + ret + +IGen3_OK: + + ldloca 0 + initobj valuetype Adder`1<valuetype Atom> + + ldloc.0 + call int32 Check<valuetype Adder`1<valuetype Atom>,valuetype Atom>(!!0) + ldc.i4 2 + ceq + brtrue AllOK + + ldc.i4.4 + ret + +AllOK: + ldstr "Compile time constraint resolution to default interface method OK" + call void [mscorlib]System.Console::WriteLine(string) + + ldc.i4 0 + ret +} diff --git a/mono/tests/dim-generic-interface.il b/mono/tests/dim-generic-interface.il new file mode 100644 index 0000000000..cca7adf1ac --- /dev/null +++ b/mono/tests/dim-generic-interface.il @@ -0,0 +1,105 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'dim-generic-interface' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module 'dim-generic-interface.exe' // GUID = {BFA2CAE9-8DDD-4024-A7A0-D89DB8546814} + + + .class interface private auto ansi abstract I1`1<T> + { + + // method line 1 + .method family hidebysig + instance default void M1 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "M1" + IL_0006: call void class [mscorlib]System.Console::WriteLine(string) + IL_000b: nop + IL_000c: ret + } // end of method I1`1::M1 + + } // end of class I1`1 + + .class interface private auto ansi abstract I3`1<T> + implements class I1`1<!0> { + + } // end of class I3`1 + + .class interface private auto ansi abstract I2`1<T> + implements class I3`1<!0>, class I1`1<!0> { + + // method line 2 + .method public static hidebysig + default void Test (class I2`1<int32> x) cil managed + { + // Method begins at RVA 0x205e + // Code size 9 (0x9) + .maxstack 8 + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: callvirt instance void class I1`1<int32>::M1() + IL_0007: nop + IL_0008: ret + } // end of method I2`1::Test + + } // end of class I2`1 + + .class private auto ansi beforefieldinit A + extends [mscorlib]System.Object + implements class I2`1<int32>, class I3`1<int32>, class I1`1<int32> { + + // method line 3 + .method private static hidebysig + default void Main () cil managed + { + // Method begins at RVA 0x2068 + .entrypoint + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: newobj instance void class A::'.ctor'() + IL_0006: call void class I2`1<unsigned int8>::Test(class I2`1<int32>) + IL_000b: nop + IL_000c: ret + } // end of method A::Main + + // method line 4 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2076 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method A::.ctor + + } // end of class A + diff --git a/mono/tests/dim-implements-multiple-interfaces.il b/mono/tests/dim-implements-multiple-interfaces.il new file mode 100644 index 0000000000..866f21cdcc --- /dev/null +++ b/mono/tests/dim-implements-multiple-interfaces.il @@ -0,0 +1,192 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'dim-implements-multiple-interfaces' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module 'dim-implements-multiple-interfaces.exe' // GUID = {07D2CB79-FB07-4F86-A98B-DDB6DB7760DE} + + +.namespace Application +{ + .class interface public auto ansi abstract I1 + { + + // method line 1 + .method public virtual hidebysig newslot + instance default void M1 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 12 (0xc) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "Shoud not be called" + IL_0006: newobj instance void class [mscorlib]System.Exception::'.ctor'(string) + IL_000b: throw + } // end of method I1::M1 + + } // end of class Application.I1 +} + +.namespace Application +{ + .class interface public auto ansi abstract I2 + implements Application.I1 { + + // method line 2 + .method public final virtual hidebysig + instance default void Application.I1.M1 () cil managed + { + // Method begins at RVA 0x2050 + .override class Application.I1::M1 + // Code size 12 (0xc) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "Shoud not be called" + IL_0006: newobj instance void class [mscorlib]System.Exception::'.ctor'(string) + IL_000b: throw + } // end of method I2::Application.I1.M1 + + } // end of class Application.I2 +} + +.namespace Application +{ + .class interface public auto ansi abstract I3 + implements Application.I1 { + + // method line 3 + .method public final virtual hidebysig + instance default void Application.I1.M1 () cil managed + { + // Method begins at RVA 0x2050 + .override class Application.I1::M1 + // Code size 12 (0xc) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "Shoud not be called" + IL_0006: newobj instance void class [mscorlib]System.Exception::'.ctor'(string) + IL_000b: throw + } // end of method I3::Application.I1.M1 + + } // end of class Application.I3 +} + +.namespace Application +{ + .class interface public auto ansi abstract I4 + implements Application.I1 { + + // method line 4 + .method public final virtual hidebysig + instance default void Application.I1.M1 () cil managed + { + // Method begins at RVA 0x2050 + .override class Application.I1::M1 + // Code size 12 (0xc) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "Shoud not be called" + IL_0006: newobj instance void class [mscorlib]System.Exception::'.ctor'(string) + IL_000b: throw + } // end of method I4::Application.I1.M1 + + } // end of class Application.I4 +} + +.namespace Application +{ + .class private auto ansi beforefieldinit Test10 + extends [mscorlib]System.Object + implements Application.I1, Application.I2, Application.I3, Application.I4 { + + // method line 5 + .method public final virtual hidebysig newslot + instance default void M1 () cil managed + { + // Method begins at RVA 0x205d + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "Test10.M1" + IL_0006: call void class [mscorlib]System.Console::WriteLine(string) + IL_000b: nop + IL_000c: ret + } // end of method Test10::M1 + + // method line 6 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x206b + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method Test10::.ctor + + } // end of class Application.Test10 +} + +.namespace Application +{ + .class private auto ansi beforefieldinit MainClass + extends [mscorlib]System.Object + { + + // method line 7 + .method public static hidebysig + default void Main (string[] args) cil managed + { + // Method begins at RVA 0x2074 + .entrypoint + // Code size 15 (0xf) + .maxstack 1 + .locals init ( + class Application.I1 V_0) + IL_0000: nop + IL_0001: newobj instance void class Application.Test10::'.ctor'() + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: callvirt instance void class Application.I1::M1() + IL_000d: nop + IL_000e: ret + } // end of method MainClass::Main + + // method line 8 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x206b + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method MainClass::.ctor + + } // end of class Application.MainClass +} + diff --git a/mono/tests/dim-nested-types.il b/mono/tests/dim-nested-types.il new file mode 100644 index 0000000000..f7c9008908 --- /dev/null +++ b/mono/tests/dim-nested-types.il @@ -0,0 +1,165 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'NestedTypes_04' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module NestedTypes_04.exe // GUID = {E85D011D-AA7F-4680-92B5-99EEA4960461} + + + .class interface public auto ansi abstract I1 + { + + .class interface nested family auto ansi abstract T1 + { + + // method line 3 + .method public virtual hidebysig newslot abstract + instance default void M1 () cil managed + { + // Method begins at RVA 0x0 + } // end of method T1::M1 + + } // end of class T1 + + .class nested family auto ansi beforefieldinit T2 + extends [mscorlib]System.Object + { + + // method line 4 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2096 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method T2::.ctor + + } // end of class T2 + + .class nested family sequential ansi sealed beforefieldinit T3 + extends [mscorlib]System.ValueType + { + .pack 0 + .size 1 + + } // end of class T3 + + .class nested family auto ansi sealed T4 + extends [mscorlib]System.Enum + { + .field public specialname rtspecialname int32 value__ + .field public static literal valuetype I1/T4 B = int32(0x00000000) + + } // end of class T4 + + } // end of class I1 + + .class private auto ansi beforefieldinit Test1 + extends [mscorlib]System.Object + implements I1 { + + // method line 1 + .method private static hidebysig + default void Main () cil managed + { + // Method begins at RVA 0x2050 + .entrypoint + // Code size 58 (0x3a) + .maxstack 1 + .locals init ( + class I1/T1 V_0, + valuetype I1/T3 V_1) + IL_0000: nop + IL_0001: newobj instance void class Test1/Test2::'.ctor'() + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: callvirt instance void class I1/T1::M1() + IL_000d: nop + IL_000e: newobj instance void class I1/T2::'.ctor'() + IL_0013: call void class [mscorlib]System.Console::WriteLine(object) + IL_0018: nop + IL_0019: ldloca.s 1 + IL_001b: initobj I1/T3 + IL_0021: ldloc.1 + IL_0022: box I1/T3 + IL_0027: call void class [mscorlib]System.Console::WriteLine(object) + IL_002c: nop + IL_002d: ldc.i4.0 + IL_002e: box I1/T4 + IL_0033: call void class [mscorlib]System.Console::WriteLine(object) + IL_0038: nop + IL_0039: ret + } // end of method Test1::Main + + // method line 2 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2096 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method Test1::.ctor + + .class nested private auto ansi beforefieldinit Test2 + extends [mscorlib]System.Object + implements I1/T1 { + + // method line 5 + .method public final virtual hidebysig newslot + instance default void M1 () cil managed + { + // Method begins at RVA 0x209f + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "M1" + IL_0006: call void class [mscorlib]System.Console::WriteLine(string) + IL_000b: nop + IL_000c: ret + } // end of method Test2::M1 + + // method line 6 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2096 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method Test2::.ctor + + } // end of class Test2 + + } // end of class Test1 + diff --git a/mono/tests/dim-protected-accessibility1.il b/mono/tests/dim-protected-accessibility1.il new file mode 100644 index 0000000000..2c795328a4 --- /dev/null +++ b/mono/tests/dim-protected-accessibility1.il @@ -0,0 +1,117 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'ProtectedAccessibility_06' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module ProtectedAccessibility_06.exe // GUID = {24CF3754-A8FA-4649-80B0-27730325026B} + + + .class interface private auto ansi abstract I1`1<T> + { + + // method line 1 + .method family static hidebysig + default void M1 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "M1" + IL_0006: call void class [mscorlib]System.Console::WriteLine(string) + IL_000b: nop + IL_000c: ret + } // end of method I1`1::M1 + + } // end of class I1`1 + + .class interface private auto ansi abstract I3`1<T> + implements class I1`1<!0> { + + } // end of class I3`1 + + .class private auto ansi beforefieldinit I2`1<T> + extends [mscorlib]System.Object + implements class I3`1<!0>, class I1`1<!0> { + + // method line 2 + .method public static hidebysig + default void Test () cil managed + { + // Method begins at RVA 0x205e + // Code size 8 (0x8) + .maxstack 8 + IL_0000: nop + IL_0001: call void class I1`1<int32>::M1() + IL_0006: nop + IL_0007: ret + } // end of method I2`1::Test + + // method line 3 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2067 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method I2`1::.ctor + + } // end of class I2`1 + + .class private auto ansi beforefieldinit A + extends [mscorlib]System.Object + { + + // method line 4 + .method private static hidebysig + default void Main () cil managed + { + // Method begins at RVA 0x2070 + .entrypoint + // Code size 8 (0x8) + .maxstack 8 + IL_0000: nop + IL_0001: call void class I2`1<unsigned int8>::Test() + IL_0006: nop + IL_0007: ret + } // end of method A::Main + + // method line 5 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2067 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method A::.ctor + + } // end of class A + diff --git a/mono/tests/dim-protected-accessibility2.il b/mono/tests/dim-protected-accessibility2.il new file mode 100644 index 0000000000..74d895c08f --- /dev/null +++ b/mono/tests/dim-protected-accessibility2.il @@ -0,0 +1,131 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'ProtectedAccessibility_07' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module ProtectedAccessibility_07.exe // GUID = {4DA4F172-A1C5-4ACE-B38C-B0705C3B61F5} + + + .class interface private auto ansi abstract I1`1<T> + { + + // method line 1 + .method family static hidebysig + default void M1 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "M1" + IL_0006: call void class [mscorlib]System.Console::WriteLine(string) + IL_000b: nop + IL_000c: ret + } // end of method I1`1::M1 + + } // end of class I1`1 + + .class private auto ansi beforefieldinit I3`1<T> + extends [mscorlib]System.Object + implements class I1`1<!0> { + + // method line 2 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x205e + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method I3`1::.ctor + + } // end of class I3`1 + + .class private auto ansi beforefieldinit I2`1<T> + extends class I3`1<!0> + { + + // method line 3 + .method public static hidebysig + default void Test () cil managed + { + // Method begins at RVA 0x2067 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: nop + IL_0001: call void class I1`1<int32>::M1() + IL_0006: nop + IL_0007: ret + } // end of method I2`1::Test + + // method line 4 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x2070 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void class I3`1<!T>::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method I2`1::.ctor + + } // end of class I2`1 + + .class private auto ansi beforefieldinit A + extends [mscorlib]System.Object + { + + // method line 5 + .method private static hidebysig + default void Main () cil managed + { + // Method begins at RVA 0x2079 + .entrypoint + // Code size 8 (0x8) + .maxstack 8 + IL_0000: nop + IL_0001: call void class I2`1<unsigned int8>::Test() + IL_0006: nop + IL_0007: ret + } // end of method A::Main + + // method line 6 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x205e + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method A::.ctor + + } // end of class A + diff --git a/mono/tests/dim-reabstraction-generics.il b/mono/tests/dim-reabstraction-generics.il new file mode 100644 index 0000000000..3342fce37e --- /dev/null +++ b/mono/tests/dim-reabstraction-generics.il @@ -0,0 +1,178 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'dim-reabstraction-generics' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module 'dim-reabstraction-generics.exe' // GUID = {198880C7-E25B-497F-AE09-6C555BBBAB42} + + + .class interface public auto ansi abstract I1`1<T> + { + + // method line 1 + .method public virtual hidebysig newslot abstract + instance default int32 M1 () cil managed + { + // Method begins at RVA 0x0 + } // end of method I1`1::M1 + + // method line 2 + .method public virtual hidebysig newslot + instance default int32 M2 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 7 (0x7) + .maxstack 1 + .locals init ( + int32 V_0) + IL_0000: nop + IL_0001: ldc.i4.0 + IL_0002: stloc.0 + IL_0003: br.s IL_0005 + + IL_0005: ldloc.0 + IL_0006: ret + } // end of method I1`1::M2 + + } // end of class I1`1 + + .class interface public auto ansi abstract I2`1<T> + implements class I1`1<!0> { + + // method line 3 + .method private final virtual hidebysig abstract + instance default int32 'I1<T>.M1' () cil managed + { + // Method begins at RVA 0x0 + } // end of method I2`1::I1<T>.M1 + + // method line 4 + .method public virtual hidebysig newslot + instance default int32 M2 () cil managed + { + // Method begins at RVA 0x2064 + // Code size 11 (0xb) + .maxstack 1 + .locals init ( + int32 V_0) + IL_0000: nop + IL_0001: ldc.i4 200 + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method I2`1::M2 + + } // end of class I2`1 + + .class private auto ansi beforefieldinit Test1 + extends [mscorlib]System.Object + implements class I2`1<int32>, class I1`1<int32> { + + // method line 5 + .method private static hidebysig + default int32 Main () cil managed + { + // Method begins at RVA 0x207c + .entrypoint + // Code size 54 (0x36) + .maxstack 2 + .locals init ( + class I1`1<int32> V_0, + bool V_1, + int32 V_2, + bool V_3) + IL_0000: nop + IL_0001: newobj instance void class Test1::'.ctor'() + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: callvirt instance int32 class I1`1<int32>::M1() + IL_000d: ldc.i4.s 0x64 + IL_000f: ceq + IL_0011: ldc.i4.0 + IL_0012: ceq + IL_0014: stloc.1 + IL_0015: ldloc.1 + IL_0016: brfalse.s IL_001d + + IL_0018: nop + IL_0019: ldc.i4.m1 + IL_001a: stloc.2 + IL_001b: br.s IL_0034 + + IL_001d: ldloc.0 + IL_001e: callvirt instance int32 class I1`1<int32>::M2() + IL_0023: ldc.i4.0 + IL_0024: cgt.un + IL_0026: stloc.3 + IL_0027: ldloc.3 + IL_0028: brfalse.s IL_0030 + + IL_002a: nop + IL_002b: ldc.i4.s 0xfffffffe + IL_002d: stloc.2 + IL_002e: br.s IL_0034 + + IL_0030: ldc.i4.0 + IL_0031: stloc.2 + IL_0032: br.s IL_0034 + + IL_0034: ldloc.2 + IL_0035: ret + } // end of method Test1::Main + + // method line 6 + .method private final virtual hidebysig newslot + instance default int32 'I1<System.Int32>.M1' () cil managed + { + // Method begins at RVA 0x20c0 + .override method instance int32 class I1`1<int32>::M1() + // Code size 8 (0x8) + .maxstack 1 + .locals init ( + int32 V_0) + IL_0000: nop + IL_0001: ldc.i4.s 0x64 + IL_0003: stloc.0 + IL_0004: br.s IL_0006 + + IL_0006: ldloc.0 + IL_0007: ret + } // end of method Test1::I1<System.Int32>.M1 + + // method line 7 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x20d4 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method Test1::.ctor + + } // end of class Test1 + diff --git a/mono/tests/dim-reabstraction.il b/mono/tests/dim-reabstraction.il new file mode 100644 index 0000000000..d104945a4c --- /dev/null +++ b/mono/tests/dim-reabstraction.il @@ -0,0 +1,178 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'reabstraction' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module reabstraction.exe // GUID = {874DD85D-9771-40F1-A6BB-D80FDAA9CF69} + + + .class interface public auto ansi abstract I1 + { + + // method line 1 + .method public virtual hidebysig newslot abstract + instance default int32 M1 () cil managed + { + // Method begins at RVA 0x0 + } // end of method I1::M1 + + // method line 2 + .method public virtual hidebysig newslot + instance default int32 M2 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 7 (0x7) + .maxstack 1 + .locals init ( + int32 V_0) + IL_0000: nop + IL_0001: ldc.i4.0 + IL_0002: stloc.0 + IL_0003: br.s IL_0005 + + IL_0005: ldloc.0 + IL_0006: ret + } // end of method I1::M2 + + } // end of class I1 + + .class interface public auto ansi abstract I2 + implements I1 { + + // method line 3 + .method private final virtual hidebysig abstract + instance default int32 I1.M1 () cil managed + { + // Method begins at RVA 0x0 + } // end of method I2::I1.M1 + + // method line 4 + .method public virtual hidebysig newslot + instance default int32 M2 () cil managed + { + // Method begins at RVA 0x2064 + // Code size 11 (0xb) + .maxstack 1 + .locals init ( + int32 V_0) + IL_0000: nop + IL_0001: ldc.i4 200 + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method I2::M2 + + } // end of class I2 + + .class private auto ansi beforefieldinit Test1 + extends [mscorlib]System.Object + implements I2, I1 { + + // method line 5 + .method private static hidebysig + default int32 Main () cil managed + { + // Method begins at RVA 0x207c + .entrypoint + // Code size 59 (0x3b) + .maxstack 2 + .locals init ( + class I1 V_0, + bool V_1, + int32 V_2, + bool V_3) + IL_0000: nop + IL_0001: newobj instance void class Test1::'.ctor'() + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: callvirt instance int32 class I1::M1() + IL_000d: ldc.i4.s 0x64 + IL_000f: ceq + IL_0011: ldc.i4.0 + IL_0012: ceq + IL_0014: stloc.1 + IL_0015: ldloc.1 + IL_0016: brfalse.s IL_001c + + IL_0018: ldc.i4.m1 + IL_0019: stloc.2 + IL_001a: br.s IL_0039 + + IL_001c: ldloc.0 + IL_001d: callvirt instance int32 class I1::M2() + IL_0022: ldc.i4 0 + IL_0027: ceq + IL_0029: ldc.i4.0 + IL_002a: ceq + IL_002c: stloc.3 + IL_002d: ldloc.3 + IL_002e: brfalse.s IL_0035 + + IL_0030: ldc.i4.s 0xfffffffe + IL_0032: stloc.2 + IL_0033: br.s IL_0039 + + IL_0035: ldc.i4.0 + IL_0036: stloc.2 + IL_0037: br.s IL_0039 + + IL_0039: ldloc.2 + IL_003a: ret + } // end of method Test1::Main + + // method line 6 + .method private final virtual hidebysig newslot + instance default int32 I1.M1 () cil managed + { + // Method begins at RVA 0x20c4 + .override class I1::M1 + // Code size 8 (0x8) + .maxstack 1 + .locals init ( + int32 V_0) + IL_0000: nop + IL_0001: ldc.i4.s 0x64 + IL_0003: stloc.0 + IL_0004: br.s IL_0006 + + IL_0006: ldloc.0 + IL_0007: ret + } // end of method Test1::I1.M1 + + // method line 7 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x20d8 + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method Test1::.ctor + + } // end of class Test1 + diff --git a/mono/tests/dim-sealed.il b/mono/tests/dim-sealed.il new file mode 100644 index 0000000000..c2287219a9 --- /dev/null +++ b/mono/tests/dim-sealed.il @@ -0,0 +1,101 @@ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .ver 4:0:0:0 + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. +} +.assembly 'sealed' +{ + .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........ + + .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = ( + 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00 ) // ........ + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module sealed.exe // GUID = {A4E97AD7-126F-4034-838B-627DE47F9E63} + + + .class interface private auto ansi abstract I1 + { + + // method line 1 + .method public hidebysig + instance default void M1 () cil managed + { + // Method begins at RVA 0x2050 + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: ldstr "M1" + IL_0006: call void class [mscorlib]System.Console::WriteLine(string) + IL_000b: nop + IL_000c: ret + } // end of method I1::M1 + + } // end of class I1 + + .class interface private auto ansi abstract I2 + implements I1 { + + // method line 2 + .method public static hidebysig + default void Test<(class I2) T> (!!T x) cil managed + { + // Method begins at RVA 0x205e + // Code size 16 (0x10) + .maxstack 8 + IL_0000: nop + IL_0001: ldarga.s 0 + IL_0003: constrained. !!0 + IL_0009: callvirt instance void class I1::M1() + IL_000e: nop + IL_000f: ret + } // end of method I2::Test + + } // end of class I2 + + .class private auto ansi beforefieldinit A + extends [mscorlib]System.Object + implements I2, I1 { + + // method line 3 + .method private static hidebysig + default void Main () cil managed + { + // Method begins at RVA 0x206f + .entrypoint + // Code size 13 (0xd) + .maxstack 8 + IL_0000: nop + IL_0001: newobj instance void class A::'.ctor'() + IL_0006: call void class I2::Test<class A> (!!0) + IL_000b: nop + IL_000c: ret + } // end of method A::Main + + // method line 4 + .method public hidebysig specialname rtspecialname + instance default void '.ctor' () cil managed + { + // Method begins at RVA 0x207d + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void object::'.ctor'() + IL_0006: nop + IL_0007: ret + } // end of method A::.ctor + + } // end of class A + diff --git a/mono/tests/exception.cs b/mono/tests/exception.cs index c60e9a3b50..775deb8fac 100644 --- a/mono/tests/exception.cs +++ b/mono/tests/exception.cs @@ -1,9 +1,42 @@ using System; +using System.Reflection; +public static class Test +{ + static Test () + { + throw new ApplicationException (); + } + public static void Foo () + { + + } +} public class Ex { int p; - + public static int test2 () { + var m = typeof (Test).GetMethod ("Foo"); + int lenStackTrace = 0; + try + { + m.Invoke (null, null); + } + catch (Exception e) + { + lenStackTrace = e.ToString().Length; + } + try + { + m.Invoke (null, null); + } + catch (Exception e) + { + if (lenStackTrace == e.ToString().Length) + return 0; + } + return 1; + } public static int test1 () { Ex x = null; @@ -42,7 +75,8 @@ public class Ex { return 2; if (test1() != 0) return 3; - + if (test2() != 0) + return 4; return 0; } } diff --git a/mono/tests/fullaot-mixed/Makefile.am b/mono/tests/fullaot-mixed/Makefile.am new file mode 100644 index 0000000000..6656e4681e --- /dev/null +++ b/mono/tests/fullaot-mixed/Makefile.am @@ -0,0 +1,53 @@ +include ../common_mixed.mk + +lambda.exe: $(srcdir)/lambda.cs + $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Core.dll -target:exe -out:$@ $< + +AOTDIR=linker-output +AOT_TMPDIR=aot-tmp + +$(AOTDIR)/lambda.exe$(PLATFORM_AOT_SUFFIX): $(AOTDIR)/lambda.exe $(LINKED_ASSEMBLIES) + mkdir -p $(AOT_TMPDIR)/lambda.exe + MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot=full,interp,temp-path=$(AOT_TMPDIR)/lambda.exe $(AOTDIR)/lambda.exe + +$(AOTDIR)/%.dll$(PLATFORM_AOT_SUFFIX): $(AOTDIR)/%.dll $(LINKED_ASSEMBLIES) + mkdir -p $(AOT_TMPDIR)/$*.dll + MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot=full,interp,temp-path=$(AOT_TMPDIR)/$*.dll $(AOTDIR)/$*.dll + +SOURCES = \ + lambda.cs + +ASSEMBLIES = \ + mscorlib.dll \ + System.Core.dll \ + System.dll \ + System.Security.dll \ + Mono.Simd.dll \ + Mono.Security.dll \ + System.Numerics.dll \ + System.Numerics.Vectors.dll \ + Mono.Posix.dll \ + System.Xml.dll \ + System.Configuration.dll + +LINKED_ASSEMBLIES = $(addprefix $(AOTDIR)/,$(ASSEMBLIES)) + +AOT_IMAGES = $(patsubst %,$(AOTDIR)/%$(PLATFORM_AOT_SUFFIX),$(ASSEMBLIES)) +TEST_IMAGES = $(patsubst %,$(AOTDIR)/%$(PLATFORM_AOT_SUFFIX),$(SOURCES:.cs=.exe)) + +$(AOTDIR)/%.dll: + mkdir -p $(AOTDIR) + cp $(CLASS)/$*.dll $(AOTDIR)/ + +$(AOTDIR)/%.exe: %.exe + mkdir -p $(AOTDIR) + cp $< $@ + +if !X86 +if !DISABLE_INTERPRETER +if !ENABLE_COOP_SUSPEND +check: $(AOT_IMAGES) $(TEST_IMAGES) + MONO_PATH=$(AOTDIR):$(CLASS) $(MONO_EXE) --aot-path=$(AOTDIR) --full-aot-interp $(AOTDIR)/lambda.exe +endif +endif +endif diff --git a/mono/tests/fullaot-mixed/Makefile.in b/mono/tests/fullaot-mixed/Makefile.in new file mode 100644 index 0000000000..6495159f19 --- /dev/null +++ b/mono/tests/fullaot-mixed/Makefile.in @@ -0,0 +1,733 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = mono/tests/fullaot-mixed +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/apple-target.m4 \ + $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__extra_recursive_targets = test-recursive test-bundle-recursive +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/../common_mixed.mk $(srcdir)/Makefile.in \ + $(top_srcdir)/mkinstalldirs +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AOT_BUILD_FLAGS = @AOT_BUILD_FLAGS@ +AOT_RUN_FLAGS = @AOT_RUN_FLAGS@ +API_VER = @API_VER@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOEHM_DEFINES = @BOEHM_DEFINES@ +BREAKPOINT = @BREAKPOINT@ +BTLS_ARCH = @BTLS_ARCH@ +BTLS_CFLAGS = @BTLS_CFLAGS@ +BTLS_CMAKE_ARGS = @BTLS_CMAKE_ARGS@ +BTLS_PLATFORM = @BTLS_PLATFORM@ +BTLS_ROOT = @BTLS_ROOT@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CSC = @CSC@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXXFLAGS_COMMON = @CXXFLAGS_COMMON@ +CXX_ADD_CFLAGS = @CXX_ADD_CFLAGS@ +CXX_REMOVE_CFLAGS = @CXX_REMOVE_CFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOLT_BASH = @DOLT_BASH@ +DSYMUTIL = @DSYMUTIL@ +DTRACE = @DTRACE@ +DTRACEFLAGS = @DTRACEFLAGS@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTERNAL_LLVM_CONFIG = @EXTERNAL_LLVM_CONFIG@ +EXTERNAL_LLVM_CONFIG_WIN32 = @EXTERNAL_LLVM_CONFIG_WIN32@ +FGREP = @FGREP@ +GDKX11 = @GDKX11@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNUC_NORETURN = @GNUC_NORETURN@ +GNUC_PRETTY = @GNUC_PRETTY@ +GNUC_UNUSED = @GNUC_UNUSED@ +GREP = @GREP@ +GSIZE = @GSIZE@ +GSIZE_FORMAT = @GSIZE_FORMAT@ +GSSIZE = @GSSIZE@ +GTKX11 = @GTKX11@ +HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ +HAVE_MSGFMT = @HAVE_MSGFMT@ +HAVE_NINJA = @HAVE_NINJA@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_YASM = @HAVE_YASM@ +HOST_CC = @HOST_CC@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL = @INTL@ +INVARIANT_AOT_OPTIONS = @INVARIANT_AOT_OPTIONS@ +JEMALLOC_AUTOCONF_FLAGS = @JEMALLOC_AUTOCONF_FLAGS@ +JEMALLOC_CFLAGS = @JEMALLOC_CFLAGS@ +JEMALLOC_CPPFLAGS = @JEMALLOC_CPPFLAGS@ +JEMALLOC_LDFLAGS = @JEMALLOC_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBC = @LIBC@ +LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@ +LIBGC_LIBS = @LIBGC_LIBS@ +LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@ +LIBMONO_LA = @LIBMONO_LA@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LLVM_CODEGEN_LIBS = @LLVM_CODEGEN_LIBS@ +LN_S = @LN_S@ +LTCOMPILE = @LTCOMPILE@ +LTCXXCOMPILE = @LTCXXCOMPILE@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ +MONO_CXXLD = @MONO_CXXLD@ +MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ +MONO_JEMALLOC_ASSERT = @MONO_JEMALLOC_ASSERT@ +MONO_JEMALLOC_DEFAULT = @MONO_JEMALLOC_DEFAULT@ +MONO_JEMALLOC_ENABLED = @MONO_JEMALLOC_ENABLED@ +MONO_NATIVE_CC = @MONO_NATIVE_CC@ +MONO_NATIVE_CCASFLAGS = @MONO_NATIVE_CCASFLAGS@ +MONO_NATIVE_CFLAGS = @MONO_NATIVE_CFLAGS@ +MONO_NATIVE_COMPAT_CCASFLAGS = @MONO_NATIVE_COMPAT_CCASFLAGS@ +MONO_NATIVE_COMPAT_CFLAGS = @MONO_NATIVE_COMPAT_CFLAGS@ +MONO_NATIVE_COMPAT_CPPFLAGS = @MONO_NATIVE_COMPAT_CPPFLAGS@ +MONO_NATIVE_COMPAT_CXXFLAGS = @MONO_NATIVE_COMPAT_CXXFLAGS@ +MONO_NATIVE_COMPAT_LDFLAGS = @MONO_NATIVE_COMPAT_LDFLAGS@ +MONO_NATIVE_CPPFLAGS = @MONO_NATIVE_CPPFLAGS@ +MONO_NATIVE_CXX = @MONO_NATIVE_CXX@ +MONO_NATIVE_CXXFLAGS = @MONO_NATIVE_CXXFLAGS@ +MONO_NATIVE_LDFLAGS = @MONO_NATIVE_LDFLAGS@ +MONO_NATIVE_LIBADD = @MONO_NATIVE_LIBADD@ +MONO_NATIVE_LIBRARY_NAME = @MONO_NATIVE_LIBRARY_NAME@ +MONO_NATIVE_PLATFORM = @MONO_NATIVE_PLATFORM@ +MONO_NATIVE_PLATFORM_TYPE = @MONO_NATIVE_PLATFORM_TYPE@ +MONO_NATIVE_PLATFORM_TYPE_COMPAT = @MONO_NATIVE_PLATFORM_TYPE_COMPAT@ +MONO_NATIVE_PLATFORM_TYPE_UNIFIED = @MONO_NATIVE_PLATFORM_TYPE_UNIFIED@ +MONO_NATIVE_UNIFIED_CCASFLAGS = @MONO_NATIVE_UNIFIED_CCASFLAGS@ +MONO_NATIVE_UNIFIED_CFLAGS = @MONO_NATIVE_UNIFIED_CFLAGS@ +MONO_NATIVE_UNIFIED_CPPFLAGS = @MONO_NATIVE_UNIFIED_CPPFLAGS@ +MONO_NATIVE_UNIFIED_CXXFLAGS = @MONO_NATIVE_UNIFIED_CXXFLAGS@ +MONO_NATIVE_UNIFIED_LDFLAGS = @MONO_NATIVE_UNIFIED_LDFLAGS@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +ORDER = @ORDER@ +OS = @OS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATHSEP = @PATHSEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIDTYPE = @PIDTYPE@ +PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ +PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ +RANLIB = @RANLIB@ +RID = @RID@ +SEARCHSEP = @SEARCHSEP@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SGEN_DEFINES = @SGEN_DEFINES@ +SHARED_CFLAGS = @SHARED_CFLAGS@ +SHELL = @SHELL@ +SIZEOF_VOID_P = @SIZEOF_VOID_P@ +SQLITE = @SQLITE@ +SQLITE3 = @SQLITE3@ +STATIC_GCC_LIBS = @STATIC_GCC_LIBS@ +STATIC_ZLIB_PATH = @STATIC_ZLIB_PATH@ +STRIP = @STRIP@ +TEST_PROFILE = @TEST_PROFILE@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +VTUNE_CFLAGS = @VTUNE_CFLAGS@ +VTUNE_LIBS = @VTUNE_LIBS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +X11 = @X11@ +XATTR_LIB = @XATTR_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XINERAMA = @XINERAMA@ +XMKMF = @XMKMF@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +arch_target = @arch_target@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_dir = @docs_dir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +export_ldflags = @export_ldflags@ +extra_runtime_ldflags = @extra_runtime_ldflags@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ikvm_native_dir = @ikvm_native_dir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libgc_dir = @libgc_dir@ +libgdiplus_install_loc = @libgdiplus_install_loc@ +libgdiplus_loc = @libgdiplus_loc@ +libmono_cflags = @libmono_cflags@ +libmono_ldflags = @libmono_ldflags@ +libsuffix = @libsuffix@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mcs_topdir = @mcs_topdir@ +mcs_topdir_from_srcdir = @mcs_topdir_from_srcdir@ +mkdir_p = @mkdir_p@ +mono_build_root = @mono_build_root@ +mono_cfg_dir = @mono_cfg_dir@ +mono_msvc_build_bin_dir = @mono_msvc_build_bin_dir@ +mono_msvc_build_dir = @mono_msvc_build_dir@ +mono_msvc_build_lib_dir = @mono_msvc_build_lib_dir@ +mono_runtime = @mono_runtime@ +mono_runtime_wrapper = @mono_runtime_wrapper@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +reloc_libdir = @reloc_libdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +CLASS = $(mcs_topdir)/class/lib/$(DEFAULT_PROFILE) +with_mono_path = MONO_PATH=$(CLASS) +MONO_EXE = $(top_builddir)/runtime/mono-wrapper +RUNTIME = $(with_mono_path) $(MONO_EXE) +TOOLS_RUNTIME = MONO_PATH=$(mcs_topdir)/class/lib/build $(MONO_EXE) --aot-path=$(mcs_topdir)/class/lib/build +MCS_NO_UNSAFE = $(TOOLS_RUNTIME) $(CSC) -debug:portable \ + -noconfig -nologo \ + -nowarn:0162 -nowarn:0168 -nowarn:0219 -nowarn:0414 -nowarn:0618 \ + -nowarn:0169 -nowarn:1690 -nowarn:0649 -nowarn:0612 -nowarn:3021 \ + -nowarn:0197 -langversion:latest $(PROFILE_MCS_FLAGS) + +MCS_NO_LIB = $(MCS_NO_UNSAFE) -unsafe +MCS = $(MCS_NO_LIB) +ILASM = $(TOOLS_RUNTIME) $(mcs_topdir)/class/lib/build/ilasm.exe +CLEANFILES = *.dll *.exe *.pdb +AOTDIR = linker-output +AOT_TMPDIR = aot-tmp +SOURCES = \ + lambda.cs + +ASSEMBLIES = \ + mscorlib.dll \ + System.Core.dll \ + System.dll \ + System.Security.dll \ + Mono.Simd.dll \ + Mono.Security.dll \ + System.Numerics.dll \ + System.Numerics.Vectors.dll \ + Mono.Posix.dll \ + System.Xml.dll \ + System.Configuration.dll + +LINKED_ASSEMBLIES = $(addprefix $(AOTDIR)/,$(ASSEMBLIES)) +AOT_IMAGES = $(patsubst %,$(AOTDIR)/%$(PLATFORM_AOT_SUFFIX),$(ASSEMBLIES)) +TEST_IMAGES = $(patsubst %,$(AOTDIR)/%$(PLATFORM_AOT_SUFFIX),$(SOURCES:.cs=.exe)) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../common_mixed.mk $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mono/tests/fullaot-mixed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign mono/tests/fullaot-mixed/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/../common_mixed.mk $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +test-local: +test-bundle-local: + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +test: test-am + +test-am: test-local + +test-bundle: test-bundle-am + +test-bundle-am: test-bundle-local + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-local cscopelist-am ctags ctags-am \ + distclean distclean-generic distclean-libtool distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am test-am test-bundle-am test-bundle-local \ + test-local uninstall uninstall-am + +.PRECIOUS: Makefile + + +clean-local: + $(RM) -rf $(AOTDIR) $(AOT_TMPDIR) + +lambda.exe: $(srcdir)/lambda.cs + $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Core.dll -target:exe -out:$@ $< + +$(AOTDIR)/lambda.exe$(PLATFORM_AOT_SUFFIX): $(AOTDIR)/lambda.exe $(LINKED_ASSEMBLIES) + mkdir -p $(AOT_TMPDIR)/lambda.exe + MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot=full,interp,temp-path=$(AOT_TMPDIR)/lambda.exe $(AOTDIR)/lambda.exe + +$(AOTDIR)/%.dll$(PLATFORM_AOT_SUFFIX): $(AOTDIR)/%.dll $(LINKED_ASSEMBLIES) + mkdir -p $(AOT_TMPDIR)/$*.dll + MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot=full,interp,temp-path=$(AOT_TMPDIR)/$*.dll $(AOTDIR)/$*.dll + +$(AOTDIR)/%.dll: + mkdir -p $(AOTDIR) + cp $(CLASS)/$*.dll $(AOTDIR)/ + +$(AOTDIR)/%.exe: %.exe + mkdir -p $(AOTDIR) + cp $< $@ + +@DISABLE_INTERPRETER_FALSE@@ENABLE_COOP_SUSPEND_FALSE@@X86_FALSE@check: $(AOT_IMAGES) $(TEST_IMAGES) +@DISABLE_INTERPRETER_FALSE@@ENABLE_COOP_SUSPEND_FALSE@@X86_FALSE@ MONO_PATH=$(AOTDIR):$(CLASS) $(MONO_EXE) --aot-path=$(AOTDIR) --full-aot-interp $(AOTDIR)/lambda.exe + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mono/tests/gc-descriptors/Makefile.in b/mono/tests/gc-descriptors/Makefile.in index adbbfb30aa..6eeff37c1e 100644 --- a/mono/tests/gc-descriptors/Makefile.in +++ b/mono/tests/gc-descriptors/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/tests/gh-13056_mono_local_cprop_av.il b/mono/tests/gh-13056_mono_local_cprop_av.il new file mode 100644 index 0000000000..ec19ff6728 --- /dev/null +++ b/mono/tests/gh-13056_mono_local_cprop_av.il @@ -0,0 +1,15 @@ +.assembly mono_local_cprop_av {} +.assembly extern mscorlib{auto} +.class mono_local_cprop_av { +.method static int32 Main() { + .entrypoint + .maxstack 12 + + ldc.i8 4 + ldc.i8 2 + cgt + ldc.i4 2 + div + ret +} +} diff --git a/mono/tests/gh-13057_mono_local_emulate_ops_av.il b/mono/tests/gh-13057_mono_local_emulate_ops_av.il new file mode 100644 index 0000000000..bddeefbb6e --- /dev/null +++ b/mono/tests/gh-13057_mono_local_emulate_ops_av.il @@ -0,0 +1,23 @@ +.assembly mono_local_emulate_ops_av{} +.assembly extern mscorlib{auto} +.class mono_local_emulate_ops_av{ +.method static int32 Main() { +.entrypoint +.maxstack 32 + + ldc.r8 42.58279566 + +Start_Orphan: + ldc.i8 33 + ldc.i8 32 + cgt + pop +End_Orphan: + + conv.ovf.i4 + ldc.i4 42 + sub + /* should be return code 0 */ + ret + } +} diff --git a/mono/tests/internalsvisibleto-2048.snk b/mono/tests/internalsvisibleto-2048.snk new file mode 100644 index 0000000000000000000000000000000000000000..37a8f263fee9441b5f66202aff47cfefdf236bca GIT binary patch literal 1172 zcmV;F1Z(>T0ssI2Bme+XQ$aES2mk;90096iQclxgSmZ>|^06xJ>e{yXrWD%bGXT_y zbZrzd1ExFyc+le(%zA?rW;f6)m9`hdOZsScyg`8&&TVBbb0HtwfaSaxc*gG=NR6%% zl2ef9lP#{BBCV!g$7YnLJC2kMwOG(U^`pMxfEUX|NX<dqlx)IC<1sWB^^lUewkek0 zP;8V&$K3D!*yvQxqtq_$FwM-o=`=BmWbPnHk$AulrHAzDW^P0w?yePo-Sy6V{P%7< zi#Y%VDSsP&P%IB29E?9`h5;<Z7dr0SP01D3*z<xM8Nl)G+|2BbgPasYtd`qyG2QF4 zk)^34bE=1?^0LUO)q2td<`@&qC=H{NntYH(Sx{D_L&o^!B@MpT5-lR%_!{`F<|A^S z!nw!?)MDv(*e4PDGKIe9D%3$gVyMUU&oNTmOMthY^7NmGEc9O>casHG?5gWmT)UyW zo)s<Yh5@#U9w(6GJSpJ{IW;&{Id;3XxfaVb(EDvZcmI1i3G^ij=OVs(i|)+{amK6V zx*t;4CHl4sxi3%DPwnUa4tpb0$Ve#q&MU#76%?u)wjqxo<aN+CEVfK~jX0@y(^S*9 z89mz2>o)S&<$E(uFts*3j>{jpX&Qu8Q85eU(Tp6liz$mP=L}U_D~1+I{mE?lJnOU? z1I;Q&kK-jN##;TTdVJOjud&MIVs0X;Q{d5=f#nIj|0S0>LZ6D<q@jWj@4cNZDFvgP zTGVPNCWg7|nY8!@&q<oAQ%I1gW_eRu27<AK>Aej%GLo>Fp>|Ng!FJL6Oi@Js+JzIl zen(RHAzD!S_}h`Z=gw?g#mMc0n;N4AkDh6bZ}Fi~W&kcmTk45TELxhuuHMyj70N!a zl{+smW)>2N&#)n6s6}DlKAS8++6S};Wc&4xg_GFTQ>2v``G0>nU?B%w(GqRQQV<7R zy$$z8T%gzbo&$pQ0|stG*>QC8rPsAS9x)b9==(|-el>IUGIXree|4;_VC&;v%?=d9 z_e+ma8=^_wjPs;#nVO(4jA_H?VsajeFb+TsyN;K8-gVC8G}0>e*MsJ_v?bspwf}HO zH%<Aa#8>^*%!qtF@^Or@$#%ebIld1%Uu-5IJhVxug9_(~?7lY@c!5Pjqsm4A46+d# zg>JqNFJQbo*dh~(K_wWYBlc)hzZnO{Hp)M8_(A$92Dh=J!O2*m9{3Yv0Yf}e$a^nK z9iZ-|s3u^{lZDfXNq*uK6xXarm+CNZBRHQb?78cqwRV=cJE1cHIo|&K)c>sg@L|;G zhk~?Uc&S!SPhn4S0p%eqTyEg)`ZLE122YgWrKp8;q9zqxKJ?sn8BiZH8{6&zmk!dZ z#$>1KgN=py2YL)rsUqH()M>L>Ggm!jtKJIXuL#?{=f#}~OibbhWh4?&u2qm3`57^E zoQ;nFdghrafxeh_@mLCeG99Wla-95y>GM;_%al4_WUqED&fxn@1v8pul|nI*NVj8- m$U;)jo4r$M$WVTt7lg8=ycyxT>{O&gCy95TCb66S-gG-1szvMo literal 0 HcmV?d00001 diff --git a/mono/tests/last-error.cs b/mono/tests/last-error.cs new file mode 100644 index 0000000000..788f932d88 --- /dev/null +++ b/mono/tests/last-error.cs @@ -0,0 +1,16 @@ +using System; +using System.Runtime.InteropServices; + +public unsafe class Tests { + [DllImport ("libtest", EntryPoint="mono_test_last_error", SetLastError=true)] + public static extern void mono_test_last_error (int err); + + public static int Main () { + mono_test_last_error (5); + if (Marshal.GetLastWin32Error () == 5) + return 0; + else + return 1; + } +} + diff --git a/mono/tests/libtest.c.REMOVED.git-id b/mono/tests/libtest.c.REMOVED.git-id index 87cabc8ba0..1389d7c4c4 100644 --- a/mono/tests/libtest.c.REMOVED.git-id +++ b/mono/tests/libtest.c.REMOVED.git-id @@ -1 +1 @@ -027a669c9983ce4e44536aad82ca2775f10ab158 \ No newline at end of file +ce0834b0f243599a0e9400c71aabb3b00ef22ae8 \ No newline at end of file diff --git a/mono/tests/llvmonly-mixed/Makefile.am b/mono/tests/llvmonly-mixed/Makefile.am index 23d36b6354..1af1bf87d8 100644 --- a/mono/tests/llvmonly-mixed/Makefile.am +++ b/mono/tests/llvmonly-mixed/Makefile.am @@ -1,27 +1,12 @@ - -CLASS=$(mcs_topdir)/class/lib/$(DEFAULT_PROFILE) - -with_mono_path = MONO_PATH=$(CLASS) - -MONO_EXE = $(top_builddir)/runtime/mono-wrapper -RUNTIME = $(with_mono_path) $(MONO_EXE) -TOOLS_RUNTIME = MONO_PATH=$(mcs_topdir)/class/lib/build $(MONO_EXE) --aot-path=$(mcs_topdir)/class/lib/build - -MCS_NO_UNSAFE = $(TOOLS_RUNTIME) $(CSC) -debug:portable \ - -noconfig -nologo \ - -nowarn:0162 -nowarn:0168 -nowarn:0219 -nowarn:0414 -nowarn:0618 \ - -nowarn:0169 -nowarn:1690 -nowarn:0649 -nowarn:0612 -nowarn:3021 \ - -nowarn:0197 -langversion:latest $(PROFILE_MCS_FLAGS) -MCS_NO_LIB = $(MCS_NO_UNSAFE) -unsafe - -MCS = $(MCS_NO_LIB) - -ILASM = $(TOOLS_RUNTIME) $(mcs_topdir)/class/lib/build/ilasm.exe +include ../common_mixed.mk tests.exe: $(srcdir)/tests.cs TestDriver.dll interponly.dll $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Xml.dll -r:$(CLASS)/System.Core.dll -r:TestDriver.dll -r:interponly.dll -target:exe -out:$@ $< -interponly.dll: $(srcdir)/interponly.cs TestDriver.dll +interponly.dll: $(srcdir)/interponly.cs TestDriver.dll jitonly.dll + $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Xml.dll -r:$(CLASS)/System.Core.dll -r:TestDriver.dll -r:jitonly.dll -target:library -out:$@ $< + +jitonly.dll: $(srcdir)/jitonly.cs TestDriver.dll $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Xml.dll -r:$(CLASS)/System.Core.dll -r:TestDriver.dll -target:library -out:$@ $< TestDriver.dll: @@ -43,7 +28,7 @@ SOURCES = \ interponly.cs # interponly.dll is not AOT-ed -ASSEMBLIES = mscorlib.dll tests.exe TestDriver.dll +ASSEMBLIES = mscorlib.dll tests.exe jitonly.dll TestDriver.dll AOT_IMAGES = $(patsubst %,$(AOTDIR)/%$(PLATFORM_AOT_SUFFIX),$(ASSEMBLIES)) @@ -59,12 +44,10 @@ $(AOTDIR)/%.exe: %.exe mkdir -p $(AOTDIR) cp $< $@ -$(AOTDIR)/tests.exe: $(AOTDIR)/TestDriver.dll $(AOTDIR)/interponly.dll +$(AOTDIR)/tests.exe: $(AOTDIR)/TestDriver.dll $(AOTDIR)/jitonly.dll $(AOTDIR)/interponly.dll +if ENABLE_LLVM check: $(AOT_IMAGES) MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot-path=$(AOTDIR) --llvmonly-interp $(AOTDIR)/tests.exe +endif -CLEANFILES=*.dll *.exe *.pdb - -clean-local: - $(RM) -rf $(AOTDIR) $(AOT_TMPDIR) diff --git a/mono/tests/llvmonly-mixed/Makefile.in b/mono/tests/llvmonly-mixed/Makefile.in index b8017bb447..3bda26367d 100644 --- a/mono/tests/llvmonly-mixed/Makefile.in +++ b/mono/tests/llvmonly-mixed/Makefile.in @@ -142,7 +142,8 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs +am__DIST_COMMON = $(srcdir)/../common_mixed.mk $(srcdir)/Makefile.in \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -173,6 +174,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -303,8 +306,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -424,6 +429,7 @@ MCS_NO_UNSAFE = $(TOOLS_RUNTIME) $(CSC) -debug:portable \ MCS_NO_LIB = $(MCS_NO_UNSAFE) -unsafe MCS = $(MCS_NO_LIB) ILASM = $(TOOLS_RUNTIME) $(mcs_topdir)/class/lib/build/ilasm.exe +CLEANFILES = *.dll *.exe *.pdb AOTDIR = linker-output AOT_TMPDIR = aot-tmp SOURCES = \ @@ -432,13 +438,12 @@ SOURCES = \ # interponly.dll is not AOT-ed -ASSEMBLIES = mscorlib.dll tests.exe TestDriver.dll +ASSEMBLIES = mscorlib.dll tests.exe jitonly.dll TestDriver.dll AOT_IMAGES = $(patsubst %,$(AOTDIR)/%$(PLATFORM_AOT_SUFFIX),$(ASSEMBLIES)) -CLEANFILES = *.dll *.exe *.pdb all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../common_mixed.mk $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -458,6 +463,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; +$(srcdir)/../common_mixed.mk $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -686,10 +692,16 @@ uninstall-am: .PRECIOUS: Makefile +clean-local: + $(RM) -rf $(AOTDIR) $(AOT_TMPDIR) + tests.exe: $(srcdir)/tests.cs TestDriver.dll interponly.dll $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Xml.dll -r:$(CLASS)/System.Core.dll -r:TestDriver.dll -r:interponly.dll -target:exe -out:$@ $< -interponly.dll: $(srcdir)/interponly.cs TestDriver.dll +interponly.dll: $(srcdir)/interponly.cs TestDriver.dll jitonly.dll + $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Xml.dll -r:$(CLASS)/System.Core.dll -r:TestDriver.dll -r:jitonly.dll -target:library -out:$@ $< + +jitonly.dll: $(srcdir)/jitonly.cs TestDriver.dll $(MCS) -r:$(CLASS)/System.dll -r:$(CLASS)/System.Xml.dll -r:$(CLASS)/System.Core.dll -r:TestDriver.dll -target:library -out:$@ $< TestDriver.dll: @@ -715,13 +727,10 @@ $(AOTDIR)/%.exe: %.exe mkdir -p $(AOTDIR) cp $< $@ -$(AOTDIR)/tests.exe: $(AOTDIR)/TestDriver.dll $(AOTDIR)/interponly.dll +$(AOTDIR)/tests.exe: $(AOTDIR)/TestDriver.dll $(AOTDIR)/jitonly.dll $(AOTDIR)/interponly.dll -check: $(AOT_IMAGES) - MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot-path=$(AOTDIR) --llvmonly-interp $(AOTDIR)/tests.exe - -clean-local: - $(RM) -rf $(AOTDIR) $(AOT_TMPDIR) +@ENABLE_LLVM_TRUE@check: $(AOT_IMAGES) +@ENABLE_LLVM_TRUE@ MONO_PATH=$(AOTDIR) $(MONO_EXE) --aot-path=$(AOTDIR) --llvmonly-interp $(AOTDIR)/tests.exe # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/mono/tests/pinvoke2.cs b/mono/tests/pinvoke2.cs index 69d36c2122..1528dd57c7 100644 --- a/mono/tests/pinvoke2.cs +++ b/mono/tests/pinvoke2.cs @@ -335,8 +335,11 @@ public unsafe class Tests { [DllImport ("libtest", EntryPoint="mono_test_marshal_stringbuilder_out_unicode", CharSet=CharSet.Unicode)] public static extern void mono_test_marshal_stringbuilder_out_unicode (out StringBuilder sb); - [DllImport ("libtest", EntryPoint="mono_test_last_error", SetLastError=true)] - public static extern void mono_test_last_error (int err); + [DllImport ("libtest", EntryPoint="mono_test_marshal_stringbuilder_utf16_tolower", CharSet=CharSet.Unicode)] + public static extern void mono_test_marshal_stringbuilder_utf16_tolower (StringBuilder sb, int len); + + [DllImport ("libtest", EntryPoint="mono_test_marshal_stringbuilder_utf16_tolower", CharSet=CharSet.Unicode)] + public static extern void mono_test_marshal_stringbuilder_utf16_tolower_in ([In] StringBuilder sb, int len); [DllImport ("libtest", EntryPoint="mono_test_asany")] public static extern int mono_test_asany ([MarshalAs (UnmanagedType.AsAny)] object o, int what); @@ -942,6 +945,28 @@ public unsafe class Tests { return 0; } + public static int test_0_marshal_stringbuilder_utf16_tolower () { + StringBuilder sb = new StringBuilder (3); + sb.Append ("ABC").Append ("DEF"); + + mono_test_marshal_stringbuilder_utf16_tolower (sb, sb.Length); + if (sb.ToString () != "abcdef") + return 1; + + return 0; + } + + public static int test_0_marshal_stringbuilder_utf16_tolower_in () { + StringBuilder sb = new StringBuilder (3); + sb.Append ("ABC").Append ("DEF"); + + mono_test_marshal_stringbuilder_utf16_tolower_in (sb, sb.Length); + if (sb.ToString () != "ABCDEF") + return 1; + + return 0; + } + public static int test_0_marshal_empty_string_array () { return mono_test_marshal_empty_string_array (null); } @@ -968,14 +993,6 @@ public unsafe class Tests { return 0; } - public static int test_0_last_error () { - mono_test_last_error (5); - if (Marshal.GetLastWin32Error () == 5) - return 0; - else - return 1; - } - public static int test_0_entry_point_not_found () { try { diff --git a/mono/tests/process-unref-race.cs b/mono/tests/process-unref-race.cs index 589257f40c..46ef4b2a9c 100644 --- a/mono/tests/process-unref-race.cs +++ b/mono/tests/process-unref-race.cs @@ -24,8 +24,16 @@ class Driver }; Thread t1 = new Thread (() => { + ProcessStartInfo psi = new ProcessStartInfo () { + FileName = "echo", + Arguments = "hello", + RedirectStandardOutput = true, + UseShellExecute = false + }; + Parallel.ForEach (UntilTimeout (15 * 1000), options, _ => { - using (Process p = Process.Start ("cat", "/dev/null")) { + using (Process p = Process.Start (psi)) { + p.BeginOutputReadLine (); p.WaitForExit (); } diff --git a/mono/tests/testing_gac/Makefile.am b/mono/tests/testing_gac/Makefile.am index 021eed01ce..588ab6d1a2 100644 --- a/mono/tests/testing_gac/Makefile.am +++ b/mono/tests/testing_gac/Makefile.am @@ -28,7 +28,12 @@ TOOLS_RUNTIME= MONO_PATH=$(mcs_topdir)/class/lib/build $(RUNTIME) TEST_RUNNER = ../test-runner.exe --runtime $(RUNTIME) --runtime-args "--assembly-loader=strict" if HOST_WIN32 -TEST_RUNNER_ARGS=--runtime $(if $(MONO_EXECUTABLE),$(shell cygpath -w -a $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),mono) +if ENABLE_MSVC + DEFAULT_WIN32_RUNTIME=$(shell cygpath -w -a $(top_builddir)/@mono_runtime@ | sed 's/\\/\\\\/g') +else + DEFAULT_WIN32_RUNTIME=$(top_builddir)/runtime/mono-wrapper) +endif +TEST_RUNNER_ARGS=--runtime $(if $(MONO_EXECUTABLE),$(shell cygpath -w -a $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),$(DEFAULT_WIN32_RUNTIME)) else TEST_RUNNER_ARGS=--runtime $(if $(MONO_EXECUTABLE),$(MONO_EXECUTABLE),mono) endif diff --git a/mono/tests/testing_gac/Makefile.in b/mono/tests/testing_gac/Makefile.in index ff70907776..43ca83a696 100644 --- a/mono/tests/testing_gac/Makefile.in +++ b/mono/tests/testing_gac/Makefile.in @@ -159,6 +159,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -289,8 +291,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -418,8 +422,9 @@ TEST_RUNNER = ../test-runner.exe --runtime $(RUNTIME) --runtime-args \ @HOST_WIN32_FALSE@ $(if $(V), --verbose,) @HOST_WIN32_TRUE@TEST_RUNNER_ARGS = --runtime $(if \ @HOST_WIN32_TRUE@ $(MONO_EXECUTABLE),$(shell cygpath -w -a \ -@HOST_WIN32_TRUE@ $(MONO_EXECUTABLE) | sed 's/\\/\\\\/g'),mono) \ -@HOST_WIN32_TRUE@ $(if $(V), --verbose,) +@HOST_WIN32_TRUE@ $(MONO_EXECUTABLE) | sed \ +@HOST_WIN32_TRUE@ 's/\\/\\\\/g'),$(DEFAULT_WIN32_RUNTIME)) $(if \ +@HOST_WIN32_TRUE@ $(V), --verbose,) ### tools GACUTIL = $(mcs_topdir)/class/lib/build/gacutil.exe @@ -662,6 +667,9 @@ uninstall-am: .PRECIOUS: Makefile +@ENABLE_MSVC_TRUE@@HOST_WIN32_TRUE@ DEFAULT_WIN32_RUNTIME=$(shell cygpath -w -a $(top_builddir)/@mono_runtime@ | sed 's/\\/\\\\/g') +@ENABLE_MSVC_FALSE@@HOST_WIN32_TRUE@ DEFAULT_WIN32_RUNTIME=$(top_builddir)/runtime/mono-wrapper) + ### Test cases .PHONY: run-test test-local prereqs diff --git a/mono/tests/twopassvariance.il b/mono/tests/twopassvariance.il new file mode 100644 index 0000000000..1bc29f421b --- /dev/null +++ b/mono/tests/twopassvariance.il @@ -0,0 +1,407 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern mscorlib { } + +.assembly twopassvariance { } + +.class Base { } + +.class Derived extends Base { } + +.class SuperDerived extends Derived { } + +.class MegaSuperDerived extends SuperDerived { } + +.class interface IFoo<-T> +{ + .method public newslot virtual instance class [mscorlib]System.Type Gimme() + { + ldtoken class IFoo<!0> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ret + } +} + +.class interface IBar<T> implements class IFoo<!T> +{ + .method public virtual final instance class [mscorlib]System.Type Gimme() + { + .override method instance class [mscorlib]System.Type class IFoo<!T>::Gimme() + ldtoken class IBar<!0> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ret + } +} + +.class interface IBaz<T> implements class IFoo<!T> +{ + .method public virtual final instance class [mscorlib]System.Type Gimme() + { + .override method instance class [mscorlib]System.Type class IFoo<!T>::Gimme() + ldtoken class IBar<!0> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ret + } +} + +.class interface IQux implements class IFoo<class Base>, class IFoo<class Derived> +{ + .method public virtual final instance class [mscorlib]System.Type Gimme() + { + .override method instance class [mscorlib]System.Type class IFoo<class Base>::Gimme() + ldtoken IQux + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ret + } +} + +.class Fooer1 + implements class IFoo<class Base>, class IFoo<class Derived> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer2 + implements class IFoo<class Derived>, class IFoo<class Base> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer3 + implements class IBaz<class Base>, class IBar<class Derived>, class IFoo<object> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer4 + implements IQux, class IBar<class Derived> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer5 + implements class IBar<class Derived>, IQux +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer6 + implements class IFoo<class Base>, class IBar<class Base> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer7 + implements class IBar<class Base>, class IFoo<class Base> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer8<T> + implements class IFoo<class Base>, class IFoo<class Derived> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class Fooer9<T> + implements class IFoo<class Derived>, class IFoo<class Base> +{ + .method public specialname rtspecialname instance void .ctor() + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.method static int32 main() +{ + .entrypoint + + newobj instance void Fooer1::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IFoo<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer1_IFoo_SuperDerivedOK + ldc.i4.1 + ret + +Fooer1_IFoo_SuperDerivedOK: + ldstr "Fooer1_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer2::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IFoo<class Derived> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer2_IFoo_SuperDerivedOK + ldc.i4.2 + ret + +Fooer2_IFoo_SuperDerivedOK: + ldstr "Fooer2_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer3::.ctor() + castclass class IFoo<class Base> + callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer3_IFoo_BaseOK + ldc.i4.3 + ret + +Fooer3_IFoo_BaseOK: + ldstr "Fooer3_IFoo_BaseOK" + call void [mscorlib]System.Console::WriteLine(string) + + newobj instance void Fooer3::.ctor() + castclass class IFoo<class Derived> + callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Derived> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer3_IFoo_DerivedOK + ldc.i4.4 + ret + +Fooer3_IFoo_DerivedOK: + ldstr "Fooer3_IFoo_DerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer3::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer3_IFoo_SuperDerivedOK + ldc.i4.5 + ret + +Fooer3_IFoo_SuperDerivedOK: + ldstr "Fooer3_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer4::.ctor() + castclass class IFoo<class Base> + callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken IQux + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer4_IFoo_BaseOK + ldc.i4.6 + ret + +Fooer4_IFoo_BaseOK: + ldstr "Fooer4_IFoo_BaseOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer4::.ctor() + castclass class IFoo<class Derived> + callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Derived> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer4_IFoo_DerivedOK + ldc.i4.7 + ret + +Fooer4_IFoo_DerivedOK: + ldstr "Fooer4_IFoo_DerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + + newobj instance void Fooer4::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken IQux + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer4_IFoo_SuperDerivedOK + ldc.i4.8 + ret + +Fooer4_IFoo_SuperDerivedOK: + ldstr "Fooer4_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer5::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Derived> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer5_IFoo_SuperDerivedOK + ldc.i4 9 + ret + +Fooer5_IFoo_SuperDerivedOK: + ldstr "Fooer5_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer6::.ctor() + castclass class IFoo<class Base> + callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer6_IFoo_BaseOK + ldc.i4 10 + ret + +Fooer6_IFoo_BaseOK: + ldstr "Fooer6_IFoo_BaseOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer6::.ctor() + castclass class IFoo<class Derived> + callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer6_IFoo_DerivedOK + ldc.i4 11 + ret + +Fooer6_IFoo_DerivedOK: + ldstr "Fooer6_IFoo_DerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer7::.ctor() + castclass class IFoo<class Base> + callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer7_IFoo_BaseOK + ldc.i4 12 + ret + +Fooer7_IFoo_BaseOK: + ldstr "Fooer7_IFoo_BaseOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void Fooer7::.ctor() + castclass class IFoo<class Derived> + callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IBar<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer7_IFoo_DerivedOK + ldc.i4 13 + ret + +Fooer7_IFoo_DerivedOK: + ldstr "Fooer7_IFoo_DerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void class Fooer8<class Base>::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IFoo<class Base> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer8_IFoo_SuperDerivedOK + ldc.i4.1 + ret + +Fooer8_IFoo_SuperDerivedOK: + ldstr "Fooer8_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + newobj instance void class Fooer9<class Base>::.ctor() + castclass class IFoo<class SuperDerived> + callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme() + dup + callvirt instance string [mscorlib]System.Object::ToString() + call void [mscorlib]System.Console::WriteLine(string) + ldtoken class IFoo<class Derived> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ceq + brtrue Fooer9_IFoo_SuperDerivedOK + ldc.i4.2 + ret + +Fooer9_IFoo_SuperDerivedOK: + ldstr "Fooer9_IFoo_SuperDerivedOK" + call void [mscorlib]System.Console::WriteLine(string) + ldc.i4 0 + ret +} diff --git a/mono/unit-tests/Makefile.am b/mono/unit-tests/Makefile.am index a1b0ed1051..a142dbf006 100644 --- a/mono/unit-tests/Makefile.am +++ b/mono/unit-tests/Makefile.am @@ -101,10 +101,17 @@ test_mono_string_CFLAGS = $(test-cflags) -DMAIN=test_mono_string_main test_mono_string_LDADD = $(test_ldadd) $(mini_libs) $(sgen_libs) libtestlib_la-test-mono-string.lo test_mono_string_LDFLAGS = $(test_ldflags) +test_path_SOURCES = test-path.c +test_path_CFLAGS = $(test-cflags) +test_path_LDADD = $(test_ldadd) $(mini_libs) $(sgen_libs) +test_path_LDFLAGS = $(test_ldflags) + check_PROGRAMS = test-sgen-qsort test-memfuncs test-mono-linked-list-set test-conc-hashtable test-mono-handle \ + test-path \ test-mono-callspec test-mono-string TESTS = test-sgen-qsort test-memfuncs test-mono-linked-list-set test-conc-hashtable test-mono-handle \ + test-path \ test-mono-callspec test-mono-string AM_TESTS_ENVIRONMENT = export MONO_PATH=$(mcs_topdir)/class/lib/build; diff --git a/mono/unit-tests/Makefile.in b/mono/unit-tests/Makefile.in index c76614316c..3dd91b5c86 100644 --- a/mono/unit-tests/Makefile.in +++ b/mono/unit-tests/Makefile.in @@ -96,6 +96,7 @@ target_triplet = @target@ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-linked-list-set$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-conc-hashtable$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-handle$(EXEEXT) \ +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-path$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-callspec$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-string$(EXEEXT) @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@TESTS = test-sgen-qsort$(EXEEXT) \ @@ -103,6 +104,7 @@ target_triplet = @target@ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-linked-list-set$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-conc-hashtable$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-handle$(EXEEXT) \ +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-path$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-callspec$(EXEEXT) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ test-mono-string$(EXEEXT) subdir = mono/unit-tests @@ -206,6 +208,16 @@ test_mono_string_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_mono_string_CFLAGS) $(CFLAGS) \ $(test_mono_string_LDFLAGS) $(LDFLAGS) -o $@ +am__test_path_SOURCES_DIST = test-path.c +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@am_test_path_OBJECTS = test_path-test-path.$(OBJEXT) +test_path_OBJECTS = $(am_test_path_OBJECTS) +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_path_DEPENDENCIES = \ +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ $(am__DEPENDENCIES_2) \ +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ $(mini_libs) \ +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@ $(sgen_libs) +test_path_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_path_CFLAGS) \ + $(CFLAGS) $(test_path_LDFLAGS) $(LDFLAGS) -o $@ am__test_sgen_qsort_SOURCES_DIST = main.c @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@am_test_sgen_qsort_OBJECTS = test_sgen_qsort-main.$(OBJEXT) test_sgen_qsort_OBJECTS = $(am_test_sgen_qsort_OBJECTS) @@ -250,7 +262,8 @@ SOURCES = $(libtestlib_la_SOURCES) $(test_conc_hashtable_SOURCES) \ $(test_memfuncs_SOURCES) $(test_mono_callspec_SOURCES) \ $(test_mono_handle_SOURCES) \ $(test_mono_linked_list_set_SOURCES) \ - $(test_mono_string_SOURCES) $(test_sgen_qsort_SOURCES) + $(test_mono_string_SOURCES) $(test_path_SOURCES) \ + $(test_sgen_qsort_SOURCES) DIST_SOURCES = $(am__libtestlib_la_SOURCES_DIST) \ $(am__test_conc_hashtable_SOURCES_DIST) \ $(am__test_memfuncs_SOURCES_DIST) \ @@ -258,6 +271,7 @@ DIST_SOURCES = $(am__libtestlib_la_SOURCES_DIST) \ $(am__test_mono_handle_SOURCES_DIST) \ $(am__test_mono_linked_list_set_SOURCES_DIST) \ $(am__test_mono_string_SOURCES_DIST) \ + $(am__test_path_SOURCES_DIST) \ $(am__test_sgen_qsort_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ @@ -521,6 +535,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -651,8 +667,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -828,6 +846,10 @@ mini_libs = $(monodir)/mono/mini/libmini.la $(am__append_1) \ @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_mono_string_CFLAGS = $(test-cflags) -DMAIN=test_mono_string_main @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_mono_string_LDADD = $(test_ldadd) $(mini_libs) $(sgen_libs) libtestlib_la-test-mono-string.lo @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_mono_string_LDFLAGS = $(test_ldflags) +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_path_SOURCES = test-path.c +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_path_CFLAGS = $(test-cflags) +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_path_LDADD = $(test_ldadd) $(mini_libs) $(sgen_libs) +@CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@test_path_LDFLAGS = $(test_ldflags) @CROSS_COMPILE_FALSE@@HOST_WIN32_FALSE@AM_TESTS_ENVIRONMENT = export MONO_PATH=$(mcs_topdir)/class/lib/build; all: all-am @@ -911,6 +933,10 @@ test-mono-string$(EXEEXT): $(test_mono_string_OBJECTS) $(test_mono_string_DEPEND @rm -f test-mono-string$(EXEEXT) $(AM_V_CCLD)$(test_mono_string_LINK) $(test_mono_string_OBJECTS) $(test_mono_string_LDADD) $(LIBS) +test-path$(EXEEXT): $(test_path_OBJECTS) $(test_path_DEPENDENCIES) $(EXTRA_test_path_DEPENDENCIES) + @rm -f test-path$(EXEEXT) + $(AM_V_CCLD)$(test_path_LINK) $(test_path_OBJECTS) $(test_path_LDADD) $(LIBS) + test-sgen-qsort$(EXEEXT): $(test_sgen_qsort_OBJECTS) $(test_sgen_qsort_DEPENDENCIES) $(EXTRA_test_sgen_qsort_DEPENDENCIES) @rm -f test-sgen-qsort$(EXEEXT) $(AM_V_CCLD)$(test_sgen_qsort_LINK) $(test_sgen_qsort_OBJECTS) $(test_sgen_qsort_LDADD) $(LIBS) @@ -934,6 +960,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mono_handle-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mono_linked_list_set-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mono_string-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_path-test-path.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sgen_qsort-main.Po@am__quote@ .c.o: @@ -1093,6 +1120,20 @@ test_mono_string-main.obj: main.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mono_string_CFLAGS) $(CFLAGS) -c -o test_mono_string-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` +test_path-test-path.o: test-path.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_path_CFLAGS) $(CFLAGS) -MT test_path-test-path.o -MD -MP -MF $(DEPDIR)/test_path-test-path.Tpo -c -o test_path-test-path.o `test -f 'test-path.c' || echo '$(srcdir)/'`test-path.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_path-test-path.Tpo $(DEPDIR)/test_path-test-path.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-path.c' object='test_path-test-path.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_path_CFLAGS) $(CFLAGS) -c -o test_path-test-path.o `test -f 'test-path.c' || echo '$(srcdir)/'`test-path.c + +test_path-test-path.obj: test-path.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_path_CFLAGS) $(CFLAGS) -MT test_path-test-path.obj -MD -MP -MF $(DEPDIR)/test_path-test-path.Tpo -c -o test_path-test-path.obj `if test -f 'test-path.c'; then $(CYGPATH_W) 'test-path.c'; else $(CYGPATH_W) '$(srcdir)/test-path.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_path-test-path.Tpo $(DEPDIR)/test_path-test-path.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-path.c' object='test_path-test-path.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_path_CFLAGS) $(CFLAGS) -c -o test_path-test-path.obj `if test -f 'test-path.c'; then $(CYGPATH_W) 'test-path.c'; else $(CYGPATH_W) '$(srcdir)/test-path.c'; fi` + test_sgen_qsort-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sgen_qsort_CFLAGS) $(CFLAGS) -MT test_sgen_qsort-main.o -MD -MP -MF $(DEPDIR)/test_sgen_qsort-main.Tpo -c -o test_sgen_qsort-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_sgen_qsort-main.Tpo $(DEPDIR)/test_sgen_qsort-main.Po @@ -1343,6 +1384,13 @@ test-mono-handle.log: test-mono-handle$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-path.log: test-path$(EXEEXT) + @p='test-path$(EXEEXT)'; \ + b='test-path'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-mono-callspec.log: test-mono-callspec$(EXEEXT) @p='test-mono-callspec$(EXEEXT)'; \ b='test-mono-callspec'; \ @@ -1443,10 +1491,10 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -@CROSS_COMPILE_TRUE@clean-local: -@HOST_WIN32_TRUE@clean-local: @CROSS_COMPILE_TRUE@test-local: @HOST_WIN32_TRUE@test-local: +@CROSS_COMPILE_TRUE@clean-local: +@HOST_WIN32_TRUE@clean-local: clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ diff --git a/mono/unit-tests/test-path.c b/mono/unit-tests/test-path.c new file mode 100644 index 0000000000..a5f56e02cb --- /dev/null +++ b/mono/unit-tests/test-path.c @@ -0,0 +1,85 @@ +/* + * test-path.c + */ + +#include "config.h" +#include <stdio.h> +#include <stdlib.h> +#include "glib.h" + +#include "mono/utils/mono-path.c" + +static char* +make_path (const char *a, int itrail, int slash, int upcase) +{ + // Append 0, 1, or 2 trailing slashes to a. + g_assert (itrail >= 0 && itrail <= 2); + char trail [] = "//"; + trail [itrail] = 0; + char *b = g_strdup_printf ("%s%s", a, trail); + +#ifdef HOST_WIN32 + if (slash) + g_strdelimit (b, '/', '\\'); + if (upcase) + g_strdelimit (b, 'a', 'A'); +#endif + return b; +} + +int +main (void) +{ + // Use letters not numbers in this data to exercise case insensitivity. + static const char * const bases [2] = {"/", "/a"}; + static const char * const files [6] = {"/a", "/a/b", "/a/b/c", "/ab", "/b", "/b/b/"}; + + static const gboolean result [2][6] = { + { TRUE, FALSE, FALSE, TRUE, TRUE, FALSE }, + { FALSE, TRUE, FALSE, FALSE, FALSE, FALSE } + }; + + int i = 0; + gboolean const verbose = !!getenv("V"); + +#ifdef HOST_WIN32 + const int win32 = 1; +#else + const int win32 = 0; +#endif + + // Iterate a cross product. + for (int upcase_file = 0; upcase_file <= win32; ++upcase_file) { + for (int upcase_base = 0; upcase_base <= win32; ++upcase_base) { + for (int itrail_base = 0; itrail_base <= 2; ++itrail_base) { + for (int itrail_file = 0; itrail_file <= 2; ++itrail_file) { + for (int ibase = 0; ibase < G_N_ELEMENTS (bases); ++ibase) { + for (int ifile = 0; ifile < G_N_ELEMENTS (files); ++ifile) { + for (int islash_base = 0; islash_base <= win32; ++islash_base) { + for (int islash_file = 0; islash_file <= win32; ++islash_file) { + + char *base = make_path (bases [ibase], itrail_base, islash_base, upcase_base); + char *file = make_path (files [ifile], itrail_file, islash_file, upcase_file); + //verbose && printf ("mono_path_filename_in_basedir (%s, %s)\n", file, base); + gboolean r = mono_path_filename_in_basedir (file, base); + verbose && printf ("mono_path_filename_in_basedir (%s, %s):%d\n", file, base, r); + g_assertf (result [ibase][ifile] == r, + "mono_path_filename_in_basedir (%s, %s):%d\n", file, base, r); + if (strcmp (base, file) == 0) + g_assertf (!r, + "mono_path_filename_in_basedir (%s, %s):%d\n", file, base, r); + g_free (base); + g_free (file); + ++i; + } + } + } + } + } + } + } + } + printf ("%d tests\n", i); + + return 0; +} diff --git a/mono/utils/Makefile.am b/mono/utils/Makefile.am index 51231d3341..19a65eb161 100644 --- a/mono/utils/Makefile.am +++ b/mono/utils/Makefile.am @@ -42,7 +42,8 @@ endif if HOST_WIN32 win32_sources = \ os-event-win32.c \ - mono-os-wait-win32.c + mono-os-wait-win32.c \ + mono-os-semaphore-win32.c platform_sources = $(win32_sources) else @@ -114,6 +115,7 @@ monoutils_sources = \ mono-string.h \ mono-time.c \ mono-time.h \ + strenc-internals.h \ strenc.h \ strenc.c \ mono-uri.c \ diff --git a/mono/utils/Makefile.in.REMOVED.git-id b/mono/utils/Makefile.in.REMOVED.git-id index 0462223945..f8db0a1470 100644 --- a/mono/utils/Makefile.in.REMOVED.git-id +++ b/mono/utils/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -2a29180fb4cce814ba561150914c7bfea124ad8e \ No newline at end of file +0dfe14da2a862da3d318162d5ee19ffaf9b2f106 \ No newline at end of file diff --git a/mono/utils/jemalloc/Makefile.in b/mono/utils/jemalloc/Makefile.in index c3f8b797cc..d9b97b0c1d 100644 --- a/mono/utils/jemalloc/Makefile.in +++ b/mono/utils/jemalloc/Makefile.in @@ -163,6 +163,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -293,8 +295,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/mono/utils/mono-compiler.h b/mono/utils/mono-compiler.h index 2c507776c5..970b85ed07 100644 --- a/mono/utils/mono-compiler.h +++ b/mono/utils/mono-compiler.h @@ -76,6 +76,7 @@ typedef ptrdiff_t ssize_t; #define MONO_RESTORE_WARNING #endif +// If MONO_LLVM_INTERNAL changes, update mono_debug_method_lookup_location declaration. #if !defined(_MSC_VER) && !defined(HOST_SOLARIS) && !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MONOTOUCH) && HAVE_VISIBILITY_HIDDEN #if MONO_LLVM_LOADED #define MONO_LLVM_INTERNAL MONO_API_NO_EXTERN_C diff --git a/mono/utils/mono-complex.h b/mono/utils/mono-complex.h index ebc679c296..e817ac5e47 100644 --- a/mono/utils/mono-complex.h +++ b/mono/utils/mono-complex.h @@ -14,29 +14,13 @@ #define _USE_MATH_DEFINES // needed by MSVC to define math constants #include <math.h> -#undef cabs -#undef cimag -#undef creal -#define cabs mono_cabs -#define cimag mono_cimag -#define creal mono_creal - typedef struct double_complex { double real; double imag; } double_complex; -static inline double -creal (double_complex c) -{ - return c.real; -} - -static inline double -cimag (double_complex c) -{ - return c.imag; -} +#define mono_creal(c) ((c).real) +#define mono_cimag(c) ((c).imag) static inline double_complex mono_double_complex_make(gdouble re, gdouble im) @@ -48,30 +32,30 @@ double_complex mono_double_complex_make(gdouble re, gdouble im) static inline double_complex mono_double_complex_scalar_div(double_complex c, gdouble s) { - return mono_double_complex_make(creal(c) / s, cimag(c) / s); + return mono_double_complex_make (mono_creal (c) / s, mono_cimag (c) / s); } static inline double_complex mono_double_complex_scalar_mul(double_complex c, gdouble s) { - return mono_double_complex_make(creal(c) * s, cimag(c) * s); + return mono_double_complex_make (mono_creal (c) * s, mono_cimag (c) * s); } static inline double_complex mono_double_complex_div(double_complex left, double_complex right) { - double denom = creal(right) * creal(right) + cimag(right) * cimag(right); + double denom = mono_creal (right) * mono_creal (right) + mono_cimag (right) * mono_cimag (right); return mono_double_complex_make( - (creal(left) * creal(right) + cimag(left) * cimag(right)) / denom, - (-creal(left) * cimag(right) + cimag(left) * creal(right)) / denom); + (mono_creal (left) * mono_creal (right) + mono_cimag (left) * mono_cimag (right)) / denom, + (-mono_creal (left) * mono_cimag (right) + mono_cimag (left) * mono_creal (right)) / denom); } static inline double_complex mono_double_complex_sub(double_complex left, double_complex right) { - return mono_double_complex_make(creal(left) - creal(right), cimag(left) - - cimag(right)); + return mono_double_complex_make (mono_creal (left) - mono_creal (right), mono_cimag (left) + - mono_cimag (right)); } #include "../../support/libm/complex.c" diff --git a/mono/utils/mono-context.h b/mono/utils/mono-context.h index d268424c18..77be2785bf 100644 --- a/mono/utils/mono-context.h +++ b/mono/utils/mono-context.h @@ -48,19 +48,8 @@ typedef __m128d MonoContextSimdReg; #endif #elif defined(TARGET_ARM64) #define MONO_HAVE_SIMD_REG -#if defined(MONO_ARCH_ILP32) && defined(MONO_CPPSHARP_HACK) -/* We lie to the MonoAotOffsetsDumper tool and claim we targeting armv7k. This - * is because aarch64_ilp32 isn't available (yet). Unfortunately __uint128_t - * isn't defined for this target by the compiler, so we define a struct with - * the same size here in order to get the right offset */ -typedef struct -{ - guint8 v[16]; -} MonoContextSimdReg; -#else typedef __uint128_t MonoContextSimdReg; #endif -#endif /* * General notes about mono-context. diff --git a/mono/utils/mono-counters.c b/mono/utils/mono-counters.c index cd901a1198..012aa16a45 100644 --- a/mono/utils/mono-counters.c +++ b/mono/utils/mono-counters.c @@ -571,6 +571,7 @@ section_names [][12] = { "System", "", // MONO_COUNTER_PERFCOUNTERS - not used. "Profiler", + "Interp", }; static void diff --git a/mono/utils/mono-counters.h b/mono/utils/mono-counters.h index 991a4d9bd0..eb261d6299 100644 --- a/mono/utils/mono-counters.h +++ b/mono/utils/mono-counters.h @@ -31,6 +31,7 @@ enum { MONO_COUNTER_SYSTEM = 1 << 14, MONO_COUNTER_PERFCOUNTERS = 1 << 15, MONO_COUNTER_PROFILER = 1 << 16, + MONO_COUNTER_INTERP = 1 << 17, MONO_COUNTER_LAST_SECTION, /* Unit, bits 24-27 (4 bits) */ diff --git a/mono/utils/mono-dl-wasm.c b/mono/utils/mono-dl-wasm.c index 1d0dd98fda..c855716955 100644 --- a/mono/utils/mono-dl-wasm.c +++ b/mono/utils/mono-dl-wasm.c @@ -11,6 +11,7 @@ #include <ctype.h> #include <string.h> #include <glib.h> +#include <dlfcn.h> const char * mono_dl_get_so_prefix (void) @@ -58,19 +59,25 @@ mono_dl_current_error_string (void) int mono_dl_convert_flags (int flags) { - return flags; + int lflags = flags & MONO_DL_LOCAL ? 0 : RTLD_GLOBAL; + + if (flags & MONO_DL_LAZY) + lflags |= RTLD_LAZY; + else + lflags |= RTLD_NOW; + return lflags; } void * mono_dl_open_file (const char *file, int flags) { + // Actual dlopen is done in driver.c:wasm_dl_load() return NULL; } void mono_dl_close_handle (MonoDl *module) { - //nothing to do } #endif diff --git a/mono/utils/mono-error-internals.h b/mono/utils/mono-error-internals.h index 69b8898466..eb4355c3de 100644 --- a/mono/utils/mono-error-internals.h +++ b/mono/utils/mono-error-internals.h @@ -169,6 +169,9 @@ mono_error_set_argument (MonoError *error, const char *argument, const char *msg void mono_error_set_argument_null (MonoError *oerror, const char *argument, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); +void +mono_error_set_argument_out_of_range (MonoError *error, const char *name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); + void mono_error_set_not_verifiable (MonoError *oerror, MonoMethod *method, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); @@ -184,6 +187,9 @@ mono_error_set_not_implemented (MonoError *error, const char *msg_format, ...) M void mono_error_set_not_supported (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); +void +mono_error_set_ambiguous_implementation (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); + void mono_error_set_invalid_operation (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); @@ -208,19 +214,19 @@ mono_error_set_remoting (MonoError *error, const char *message) static inline void mono_error_set_divide_by_zero (MonoError *error) { - mono_error_set_generic_error (error, "System", "DivideByZeroException", ""); + mono_error_set_generic_error (error, "System", "DivideByZeroException", NULL); } static inline void mono_error_set_index_out_of_range (MonoError *error) { - mono_error_set_generic_error (error, "System", "IndexOutOfRangeException", ""); + mono_error_set_generic_error (error, "System", "IndexOutOfRangeException", NULL); } static inline void mono_error_set_overflow (MonoError *error) { - mono_error_set_generic_error (error, "System", "OverflowException", ""); + mono_error_set_generic_error (error, "System", "OverflowException", NULL); } static inline void @@ -232,13 +238,13 @@ mono_error_set_synchronization_lock (MonoError *error, const char *message) static inline void mono_error_set_thread_interrupted (MonoError *error) { - mono_error_set_generic_error (error, "System.Threading", "ThreadInterruptedException", ""); + mono_error_set_generic_error (error, "System.Threading", "ThreadInterruptedException", NULL); } static inline void mono_error_set_null_reference (MonoError *error) { - mono_error_set_generic_error (error, "System", "NullReferenceException", ""); + mono_error_set_generic_error (error, "System", "NullReferenceException", NULL); } static inline void @@ -253,8 +259,6 @@ mono_error_set_cannot_unload_appdomain (MonoError *error, const char *message) mono_error_set_generic_error (error, "System", "CannotUnloadAppDomainException", "%s", message); } -void -mono_error_set_argument_out_of_range (MonoError *error, const char *name); MonoException* mono_error_prepare_exception (MonoError *error, MonoError *error_out); diff --git a/mono/utils/mono-error.c b/mono/utils/mono-error.c index d79d479104..16dbe1ecfe 100644 --- a/mono/utils/mono-error.c +++ b/mono/utils/mono-error.c @@ -437,6 +437,21 @@ mono_error_set_not_supported (MonoError *oerror, const char *msg_format, ...) va_end (args); } + +/** + * mono_error_set_ambiguous_implementation: + * + * System.Runtime.AmbiguousImplementationException + */ +void +mono_error_set_ambiguous_implementation (MonoError *oerror, const char *msg_format, ...) +{ + va_list args; + va_start (args, msg_format); + mono_error_set_generic_errorv (oerror, "System.Runtime", "AmbiguousImplementationException", msg_format, args); + va_end (args); +} + /** * mono_error_set_invalid_operation: * @@ -701,6 +716,10 @@ mono_error_prepare_exception (MonoError *oerror, MonoError *error_out) case MONO_ERROR_ARGUMENT_NULL: exception = mono_exception_new_argument_null (error->first_argument, error_out); break; + + case MONO_ERROR_ARGUMENT_OUT_OF_RANGE: + exception = mono_exception_new_argument_out_of_range(error->first_argument, error->full_message, error_out); + break; case MONO_ERROR_NOT_VERIFIABLE: if (error->exn.klass) { diff --git a/mono/utils/mono-error.h b/mono/utils/mono-error.h index ffcaba5f3c..c1000e30da 100644 --- a/mono/utils/mono-error.h +++ b/mono/utils/mono-error.h @@ -33,6 +33,7 @@ enum { MONO_ERROR_OUT_OF_MEMORY = 6, MONO_ERROR_ARGUMENT = 7, MONO_ERROR_ARGUMENT_NULL = 11, + MONO_ERROR_ARGUMENT_OUT_OF_RANGE = 14, MONO_ERROR_NOT_VERIFIABLE = 8, MONO_ERROR_INVALID_PROGRAM = 12, MONO_ERROR_MEMBER_ACCESS = 13, @@ -49,6 +50,11 @@ enum { MONO_ERROR_CLEANUP_CALLED_SENTINEL = 0xffff }; +#ifdef _MSC_VER +__pragma(warning (push)) +__pragma(warning (disable:4201)) +#endif + /*Keep in sync with MonoErrorInternal*/ typedef union _MonoError { // Merge two uint16 into one uint32 so it can be initialized @@ -61,6 +67,10 @@ typedef union _MonoError { }; } MonoError; +#ifdef _MSC_VER +__pragma(warning (pop)) +#endif + /* Mempool-allocated MonoError.*/ typedef struct _MonoErrorBoxed MonoErrorBoxed; diff --git a/mono/utils/mono-forward-internal.h b/mono/utils/mono-forward-internal.h index d5057c1f4f..269f396bd7 100644 --- a/mono/utils/mono-forward-internal.h +++ b/mono/utils/mono-forward-internal.h @@ -14,7 +14,11 @@ typedef struct MonoHandleStack MonoHandleStack; typedef struct MonoJitTlsData MonoJitTlsData; typedef struct MonoLMF MonoLMF; typedef struct MonoTrampInfo MonoTrampInfo; +#ifdef ENABLE_NETCORE +typedef struct _MonoThread MonoInternalThread; +#else typedef struct _MonoInternalThread MonoInternalThread; +#endif typedef struct _SgenThreadInfo SgenThreadInfo; #endif diff --git a/mono/utils/mono-hwcap-ppc.c b/mono/utils/mono-hwcap-ppc.c index 2c1cb15431..0680ee37e2 100644 --- a/mono/utils/mono-hwcap-ppc.c +++ b/mono/utils/mono-hwcap-ppc.c @@ -60,6 +60,16 @@ mono_hwcap_arch_init (void) if (hwcap & (0x00080000 | 0x00040000 | 0x00020000 | 0x00010000 | 0x00000800 | 0x00001000)) mono_hwcap_ppc_is_isa_2x = TRUE; + /* PPC_FEATURE_POWER4, PPC_FEATURE_POWER5, PPC_FEATURE_POWER5_PLUS, + PPC_FEATURE_CELL_BE, PPC_FEATURE_PA6T, PPC_FEATURE_ARCH_2_05 */ + if (hwcap & (0x00080000 | 0x00040000 | 0x00020000 | 0x00010000 | 0x00000800 | 0x00001000)) + mono_hwcap_ppc_is_isa_2x = TRUE; + + /* PPC_FEATURE_POWER5, PPC_FEATURE_POWER5_PLUS, + PPC_FEATURE_CELL_BE, PPC_FEATURE_PA6T, PPC_FEATURE_ARCH_2_05 */ + if (hwcap & (0x00040000 | 0x00020000 | 0x00010000 | 0x00000800 | 0x00001000)) + mono_hwcap_ppc_is_isa_2_03 = TRUE; + /* PPC_FEATURE_64 */ if (hwcap & 0x40000000) mono_hwcap_ppc_is_isa_64 = TRUE; @@ -76,26 +86,22 @@ mono_hwcap_arch_init (void) mono_hwcap_ppc_has_multiple_ls_units = TRUE; } #elif defined(_AIX) - if (__cpu64()) - mono_hwcap_ppc_is_isa_64 = TRUE; - if (__power_4_andup()) - mono_hwcap_ppc_is_isa_2x = TRUE; - if (__power_5_andup()) + /* Compatible platforms for Mono (V7R1, 6.1.9) require at least P4. */ + mono_hwcap_ppc_is_isa_64 = TRUE; + mono_hwcap_ppc_is_isa_2x = TRUE; + if (__power_5_andup()) { + mono_hwcap_ppc_is_isa_2_03 = TRUE; mono_hwcap_ppc_has_icache_snoop = TRUE; + } /* not on POWER8 */ if (__power_4() || __power_5() || __power_6() || __power_7()) mono_hwcap_ppc_has_multiple_ls_units = TRUE; /* - * I dont see a way to get extended POWER6 and the PV_6_1 - * def seems to be trigged on the POWER6 here despite not - * having these extended instructions, so POWER7 it is + * This instruction is only available in POWER6 "raw mode" and unlikely + * to work; I couldn't get it to work on the POWER6s I tried. */ /* - * WARNING: reports that this doesn't actually work, try - * to re-enable after more investigation - */ - /* - if (__power_7_andup()) + if (__power_6()) mono_hwcap_ppc_has_move_fpr_gpr = TRUE; */ #endif diff --git a/mono/utils/mono-hwcap-vars.h b/mono/utils/mono-hwcap-vars.h index 5fefe5ca5e..1596ca48d7 100644 --- a/mono/utils/mono-hwcap-vars.h +++ b/mono/utils/mono-hwcap-vars.h @@ -27,6 +27,7 @@ MONO_HWCAP_VAR(arm_has_thumb2) MONO_HWCAP_VAR(ppc_has_icache_snoop) MONO_HWCAP_VAR(ppc_is_isa_2x) +MONO_HWCAP_VAR(ppc_is_isa_2_03) MONO_HWCAP_VAR(ppc_is_isa_64) MONO_HWCAP_VAR(ppc_has_move_fpr_gpr) MONO_HWCAP_VAR(ppc_has_multiple_ls_units) diff --git a/mono/utils/mono-membar.h b/mono/utils/mono-membar.h index 7abf273a65..5aa985ac69 100644 --- a/mono/utils/mono-membar.h +++ b/mono/utils/mono-membar.h @@ -80,4 +80,6 @@ static inline void mono_memory_write_barrier (void) #error "Don't know how to do memory barriers!" #endif +void mono_memory_barrier_process_wide (void); + #endif /* _MONO_UTILS_MONO_MEMBAR_H_ */ diff --git a/mono/utils/mono-mmap-windows.c b/mono/utils/mono-mmap-windows.c index 9c421a38f6..1b3a139969 100644 --- a/mono/utils/mono-mmap-windows.c +++ b/mono/utils/mono-mmap-windows.c @@ -171,10 +171,21 @@ mono_file_map_error (size_t length, int flags, int fd, guint64 offset, void **re HANDLE const file = (HANDLE)_get_osfhandle (fd); const char *failed_function = NULL; + // The size of the mapping is the maximum file offset to map. + // + // It is not, as you might expect, the maximum view size to be mapped from it. + // + // If it were the maximum view size, the size parameter would have just + // been one DWORD in 32bit Windows, expanded to SIZE_T in 64bit Windows. + // It is 64bits even on 32bit Windows to allow large files. + // + // See https://docs.microsoft.com/en-us/windows/desktop/Memory/creating-a-file-mapping-object. + const guint64 mapping_length = offset + length; + #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) failed_function = "CreateFileMapping"; - mapping = CreateFileMappingW (file, NULL, prot, (DWORD)(length >> 31 >> 1), (DWORD)length, NULL); + mapping = CreateFileMappingW (file, NULL, prot, (DWORD)(mapping_length >> 32), (DWORD)mapping_length, NULL); if (mapping == NULL) goto exit; @@ -186,7 +197,7 @@ mono_file_map_error (size_t length, int flags, int fd, guint64 offset, void **re #elif G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) failed_function = "CreateFileMappingFromApp"; - mapping = CreateFileMappingFromApp (file, NULL, prot, length, NULL); + mapping = CreateFileMappingFromApp (file, NULL, prot, mapping_length, NULL); if (mapping == NULL) goto exit; diff --git a/mono/utils/mono-mmap.c b/mono/utils/mono-mmap.c index 29782d6a6f..0b4765fc10 100644 --- a/mono/utils/mono-mmap.c +++ b/mono/utils/mono-mmap.c @@ -181,6 +181,15 @@ mono_pagesize (void) saved_pagesize = getpagesize (); #endif + + // While this could not happen in any of the Mono supported + // systems, this ensures this function never returns -1, and + // reduces the number of false positives + // that Coverity finds in consumer code. + + if (saved_pagesize == -1) + return 64*1024; + return saved_pagesize; } diff --git a/mono/utils/mono-mmap.h b/mono/utils/mono-mmap.h index 8cf629a758..25ce4ecafc 100644 --- a/mono/utils/mono-mmap.h +++ b/mono/utils/mono-mmap.h @@ -64,11 +64,7 @@ MONO_API void* mono_file_map (size_t length, int flags, int fd, guint64 offset // Last two parameters are optional. // This is mono_file_map but with optionally returning an error message. // See https://github.com/mono/mono/issues/8225. -#if defined (HOST_WIN32) MONO_API -#elif defined (__cplusplus) -G_EXTERN_C -#endif void* mono_file_map_error (size_t length, int flags, int fd, guint64 offset, void **ret_handle, const char *filepath, char **error_message); MONO_API int mono_file_unmap (void *addr, void *handle); diff --git a/mono/utils/mono-os-mutex.h b/mono/utils/mono-os-mutex.h index 1ba6669616..9b9f827247 100644 --- a/mono/utils/mono-os-mutex.h +++ b/mono/utils/mono-os-mutex.h @@ -44,17 +44,7 @@ typedef pthread_mutex_t mono_mutex_t; typedef pthread_cond_t mono_cond_t; static inline void -mono_os_mutex_init (mono_mutex_t *mutex) -{ - int res; - - res = pthread_mutex_init (mutex, NULL); - if (G_UNLIKELY (res != 0)) - g_error ("%s: pthread_mutex_init failed with \"%s\" (%d)", __func__, g_strerror (res), res); -} - -static inline void -mono_os_mutex_init_recursive (mono_mutex_t *mutex) +mono_os_mutex_init_type (mono_mutex_t *mutex, int type) { int res; pthread_mutexattr_t attr; @@ -63,10 +53,17 @@ mono_os_mutex_init_recursive (mono_mutex_t *mutex) if (G_UNLIKELY (res != 0)) g_error ("%s: pthread_mutexattr_init failed with \"%s\" (%d)", __func__, g_strerror (res), res); - res = pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); + res = pthread_mutexattr_settype (&attr, type); if (G_UNLIKELY (res != 0)) g_error ("%s: pthread_mutexattr_settype failed with \"%s\" (%d)", __func__, g_strerror (res), res); +#if defined (PTHREAD_PRIO_INHERIT) && HAVE_DECL_PTHREAD_MUTEXATTR_SETPROTOCOL + /* use PTHREAD_PRIO_INHERIT if possible */ + res = pthread_mutexattr_setprotocol (&attr, PTHREAD_PRIO_INHERIT); + if (G_UNLIKELY (res != 0 && res != ENOTSUP)) + g_error ("%s: pthread_mutexattr_setprotocol failed with \"%s\" (%d)", __func__, g_strerror (res), res); +#endif + res = pthread_mutex_init (mutex, &attr); if (G_UNLIKELY (res != 0)) g_error ("%s: pthread_mutex_init failed with \"%s\" (%d)", __func__, g_strerror (res), res); @@ -76,6 +73,18 @@ mono_os_mutex_init_recursive (mono_mutex_t *mutex) g_error ("%s: pthread_mutexattr_destroy failed with \"%s\" (%d)", __func__, g_strerror (res), res); } +static inline void +mono_os_mutex_init (mono_mutex_t *mutex) +{ + mono_os_mutex_init_type(mutex, PTHREAD_MUTEX_DEFAULT); +} + +static inline void +mono_os_mutex_init_recursive (mono_mutex_t *mutex) +{ + mono_os_mutex_init_type(mutex, PTHREAD_MUTEX_RECURSIVE); +} + static inline void mono_os_mutex_destroy (mono_mutex_t *mutex) { diff --git a/mono/utils/mono-os-semaphore-win32.c b/mono/utils/mono-os-semaphore-win32.c new file mode 100644 index 0000000000..648e6b06cf --- /dev/null +++ b/mono/utils/mono-os-semaphore-win32.c @@ -0,0 +1,37 @@ +/** + * \file + * MonoOSSemaphore on Win32 + * + * Author: + * Ludovic Henry (luhenry@microsoft.com) + * + * Licensed under the MIT license. See LICENSE file in the project root for full license information. + */ + +#include "mono-os-semaphore.h" + +MonoSemTimedwaitRet +mono_os_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, MonoSemFlags flags) +{ + BOOL res; + +retry: + res = mono_win32_wait_for_single_object_ex (*sem, timeout_ms, flags & MONO_SEM_FLAGS_ALERTABLE); + if (G_UNLIKELY (res != WAIT_OBJECT_0 && res != WAIT_IO_COMPLETION && res != WAIT_TIMEOUT)) + g_error ("%s: mono_win32_wait_for_single_object_ex failed with error %d", __func__, GetLastError ()); + + if (res == WAIT_IO_COMPLETION && !(flags & MONO_SEM_FLAGS_ALERTABLE)) + goto retry; + + switch (res) { + case WAIT_OBJECT_0: + return MONO_SEM_TIMEDWAIT_RET_SUCCESS; + case WAIT_IO_COMPLETION: + return MONO_SEM_TIMEDWAIT_RET_ALERTED; + case WAIT_TIMEOUT: + return MONO_SEM_TIMEDWAIT_RET_TIMEDOUT; + default: + g_assert_not_reached (); + } +} + diff --git a/mono/utils/mono-os-semaphore.h b/mono/utils/mono-os-semaphore.h index cae25f94fe..a2962c187a 100644 --- a/mono/utils/mono-os-semaphore.h +++ b/mono/utils/mono-os-semaphore.h @@ -280,6 +280,8 @@ mono_os_sem_post (MonoSemType *sem) #else +#include <mono/utils/mono-compiler.h> + typedef HANDLE MonoSemType; static inline void @@ -305,30 +307,8 @@ mono_os_sem_destroy (MonoSemType *sem) g_error ("%s: CloseHandle failed with error %d", __func__, GetLastError ()); } -static inline MonoSemTimedwaitRet -mono_os_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, MonoSemFlags flags) -{ - BOOL res; - -retry: - res = mono_win32_wait_for_single_object_ex (*sem, timeout_ms, flags & MONO_SEM_FLAGS_ALERTABLE); - if (G_UNLIKELY (res != WAIT_OBJECT_0 && res != WAIT_IO_COMPLETION && res != WAIT_TIMEOUT)) - g_error ("%s: mono_win32_wait_for_single_object_ex failed with error %d", __func__, GetLastError ()); - - if (res == WAIT_IO_COMPLETION && !(flags & MONO_SEM_FLAGS_ALERTABLE)) - goto retry; - - switch (res) { - case WAIT_OBJECT_0: - return MONO_SEM_TIMEDWAIT_RET_SUCCESS; - case WAIT_IO_COMPLETION: - return MONO_SEM_TIMEDWAIT_RET_ALERTED; - case WAIT_TIMEOUT: - return MONO_SEM_TIMEDWAIT_RET_TIMEDOUT; - default: - g_assert_not_reached (); - } -} +MONO_PROFILER_API MonoSemTimedwaitRet +mono_os_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, MonoSemFlags flags); static inline int mono_os_sem_wait (MonoSemType *sem, MonoSemFlags flags) diff --git a/mono/utils/mono-os-wait-win32.c b/mono/utils/mono-os-wait-win32.c index 72f5e9a937..a855cd8c47 100644 --- a/mono/utils/mono-os-wait-win32.c +++ b/mono/utils/mono-os-wait-win32.c @@ -14,20 +14,136 @@ #include "mono-logger-internals.h" #include "mono-error-internals.h" #include <mono/metadata/w32subset.h> +#include <mono/utils/checked-build.h> -DWORD -mono_win32_sleep_ex (DWORD timeout, BOOL alertable) +/* Empty handler only used to detect interrupt state of current thread. */ +/* Needed in order to correctly avoid entering wait methods under */ +/* cooperative suspend of a thread. Under preemptive suspend a thread gets */ +/* a queued APC as part of an alertable suspend request. The APC will break any wait's */ +/* done by any of below methods. In hybrid suspend, if a thread gets into a GC safe area */ +/* thread will be preemptive suspend as above and an APC will be queued, breaking any wait. */ +/* If the thread is not within a GC safe area, a cooperative suspend will be used, but that */ +/* won't queue an APC to the thread, so in cases where we enter a GC safe area and a wait */ +/* using below functions, that wait won't be alerted. This could be solved using */ +/* interrupt handlers. Problem with interrupt handlers on Windows together with APC is race */ +/* between thread executing interrupt handler and current thread. We will need the thread */ +/* alive when posting the APC, but since there is no synchronization between waiting thread */ +/* and thread running interrupt handler, waiting thread could already be terminated when executing */ +/* interrupt handler. There are ways to mitigate this, but using below schema is more lightweight and */ +/* solves the same problem + gives some additional benefits on preemptive suspend. Wait methods */ +/* will register a empty interrupt handler. This is needed in order to correctly get current alertable */ +/* state of the thread when register/unregister handler. If thread is already interrupted, we can */ +/* ignore call to wait method and return alertable error code. This solves the cooperative suspend */ +/* scenario since we evaluate the current interrupt state inside GC safe block. If not yet interrupted, */ +/* cooperative suspend will detect that thread is inside a GC safe block so it will interrupt kernel */ +/* as part of suspend request (similar to preemptive suspend) queuing APC, breaking any waits. */ +static void +win32_wait_interrupt_handler (gpointer ignored) +{ +} + +/* Evaluate if we have a pending interrupt on current thread before */ +/* entering wait. If thread has been cooperative suspended, it won't */ +/* always queue an APC (only when already in a GC safe block), but since */ +/* we should be inside a GC safe block at this point, checking current */ +/* thread's interrupt state will tell us if we have a pending interrupt. */ +/* If not, we will get an APC queued to break any waits if interrupted */ +/* after this check (both in cooperative and preemptive suspend modes). */ +#define WIN32_CHECK_INTERRUPT(info, alertable) \ + do { \ + MONO_REQ_GC_SAFE_MODE; \ + if (alertable && info && mono_thread_info_is_interrupt_state (info)) { \ + SetLastError (WAIT_IO_COMPLETION); \ + return WAIT_IO_COMPLETION; \ + } \ + } while (0) + +#define WIN32_ENTER_ALERTABLE_WAIT(info) \ + do { \ + if (info) { \ + gboolean alerted = FALSE; \ + mono_thread_info_install_interrupt (win32_wait_interrupt_handler, NULL, &alerted); \ + if (alerted) { \ + SetLastError (WAIT_IO_COMPLETION); \ + return WAIT_IO_COMPLETION; \ + } \ + mono_win32_enter_alertable_wait (info); \ + } \ + } while (0) + +#define WIN32_LEAVE_ALERTABLE_WAIT(info) \ + do { \ + if (info) { \ + gboolean alerted = FALSE; \ + mono_win32_leave_alertable_wait (info); \ + mono_thread_info_uninstall_interrupt (&alerted); \ + } \ + } while (0) + +static DWORD +win32_sleep_ex_interrupt_checked (MonoThreadInfo *info, DWORD timeout, BOOL alertable) +{ + WIN32_CHECK_INTERRUPT (info, alertable); + return SleepEx (timeout, alertable); +} + +static DWORD +win32_sleep_ex (DWORD timeout, BOOL alertable, BOOL cooperative) { DWORD result = WAIT_FAILED; MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; - if (info) - mono_win32_enter_alertable_wait (info); + WIN32_ENTER_ALERTABLE_WAIT (info); - result = SleepEx (timeout, alertable); + if (cooperative) { + MONO_ENTER_GC_SAFE; + result = win32_sleep_ex_interrupt_checked (info, timeout, alertable); + MONO_EXIT_GC_SAFE; + } else { + result = win32_sleep_ex_interrupt_checked (info, timeout, alertable); + } - if (info) - mono_win32_leave_alertable_wait (info); + WIN32_LEAVE_ALERTABLE_WAIT (info); + + return result; +} + +DWORD +mono_win32_sleep_ex (DWORD timeout, BOOL alertable) +{ + return win32_sleep_ex (timeout, alertable, FALSE); +} + +DWORD +mono_coop_win32_sleep_ex (DWORD timeout, BOOL alertable) +{ + return win32_sleep_ex (timeout, alertable, TRUE); +} + +static DWORD +win32_wait_for_single_object_ex_interrupt_checked (MonoThreadInfo *info, HANDLE handle, DWORD timeout, BOOL alertable) +{ + WIN32_CHECK_INTERRUPT (info, alertable); + return WaitForSingleObjectEx (handle, timeout, alertable); +} + +static DWORD +win32_wait_for_single_object_ex (HANDLE handle, DWORD timeout, BOOL alertable, BOOL cooperative) +{ + DWORD result = WAIT_FAILED; + MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; + + WIN32_ENTER_ALERTABLE_WAIT (info); + + if (cooperative) { + MONO_ENTER_GC_SAFE; + result = win32_wait_for_single_object_ex_interrupt_checked (info, handle, timeout, alertable); + MONO_EXIT_GC_SAFE; + } else { + result = win32_wait_for_single_object_ex_interrupt_checked (info, handle, timeout, alertable); + } + + WIN32_LEAVE_ALERTABLE_WAIT (info); return result; } @@ -35,32 +151,39 @@ mono_win32_sleep_ex (DWORD timeout, BOOL alertable) DWORD mono_win32_wait_for_single_object_ex (HANDLE handle, DWORD timeout, BOOL alertable) { - DWORD result = WAIT_FAILED; - MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; - - if (info) - mono_win32_enter_alertable_wait (info); - - result = WaitForSingleObjectEx (handle, timeout, alertable); - - if (info) - mono_win32_leave_alertable_wait (info); - - return result; + return win32_wait_for_single_object_ex (handle, timeout, alertable, FALSE); } DWORD -mono_win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable, MonoError *error) +mono_coop_win32_wait_for_single_object_ex (HANDLE handle, DWORD timeout, BOOL alertable) { + return win32_wait_for_single_object_ex (handle, timeout, alertable, TRUE); +} + +static DWORD +win32_wait_for_multiple_objects_ex_interrupt_checked (MonoThreadInfo *info, DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable) +{ + WIN32_CHECK_INTERRUPT (info, alertable); + return WaitForMultipleObjectsEx (count, handles, waitAll, timeout, alertable); +} + +static DWORD +win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable, MonoError *error, BOOL cooperative) +{ + DWORD result = WAIT_FAILED; MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; - if (info) - mono_win32_enter_alertable_wait (info); + WIN32_ENTER_ALERTABLE_WAIT (info); - DWORD const result = WaitForMultipleObjectsEx (count, handles, waitAll, timeout, alertable); + if (cooperative) { + MONO_ENTER_GC_SAFE; + result = win32_wait_for_multiple_objects_ex_interrupt_checked (info, count, handles, waitAll, timeout, alertable); + MONO_EXIT_GC_SAFE; + } else { + result = win32_wait_for_multiple_objects_ex_interrupt_checked (info, count, handles, waitAll, timeout, alertable); + } - if (info) - mono_win32_leave_alertable_wait (info); + WIN32_LEAVE_ALERTABLE_WAIT (info); // This is not perfect, but it is the best you can do in usermode and matches CoreCLR. // i.e. handle-based instead of object-based. @@ -86,59 +209,141 @@ mono_win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOO return result; } -#if HAVE_API_SUPPORT_WIN32_SIGNAL_OBJECT_AND_WAIT DWORD -mono_win32_signal_object_and_wait (HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable) +mono_win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable, MonoError *error) +{ + return win32_wait_for_multiple_objects_ex (count, handles, waitAll, timeout, alertable, error, FALSE); +} + +DWORD +mono_coop_win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable, MonoError *error) +{ + return win32_wait_for_multiple_objects_ex (count, handles, waitAll, timeout, alertable, error, TRUE); +} + +#if HAVE_API_SUPPORT_WIN32_SIGNAL_OBJECT_AND_WAIT + +static DWORD +win32_signal_object_and_wait_interrupt_checked (MonoThreadInfo *info, HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable) +{ + WIN32_CHECK_INTERRUPT (info, alertable); + return SignalObjectAndWait (toSignal, toWait, timeout, alertable); +} + +static DWORD +win32_signal_object_and_wait (HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable, BOOL cooperative) { DWORD result = WAIT_FAILED; MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; - if (info) - mono_win32_enter_alertable_wait (info); + WIN32_ENTER_ALERTABLE_WAIT (info); - result = SignalObjectAndWait (toSignal, toWait, timeout, alertable); + if (cooperative) { + MONO_ENTER_GC_SAFE; + result = win32_signal_object_and_wait_interrupt_checked (info, toSignal, toWait, timeout, alertable); + MONO_EXIT_GC_SAFE; + } else { + result = win32_signal_object_and_wait_interrupt_checked (info, toSignal, toWait, timeout, alertable); + } - if (info) - mono_win32_leave_alertable_wait (info); + WIN32_LEAVE_ALERTABLE_WAIT (info); return result; } +DWORD +mono_win32_signal_object_and_wait (HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable) +{ + return win32_signal_object_and_wait (toSignal, toWait, timeout, alertable, FALSE); +} + +DWORD +mono_coop_win32_signal_object_and_wait (HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable) +{ + return win32_signal_object_and_wait (toSignal, toWait, timeout, alertable, TRUE); +} + #endif /* HAVE_API_SUPPORT_WIN32_SIGNAL_OBJECT_AND_WAIT */ #if HAVE_API_SUPPORT_WIN32_MSG_WAIT_FOR_MULTIPLE_OBJECTS -DWORD -mono_win32_msg_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags) +static DWORD +win32_msg_wait_for_multiple_objects_ex_interrupt_checked (MonoThreadInfo *info, DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags, BOOL alertable) +{ + WIN32_CHECK_INTERRUPT (info, alertable); + return MsgWaitForMultipleObjectsEx (count, handles, timeout, wakeMask, flags); +} + +static DWORD +win32_msg_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags, BOOL cooperative) { DWORD result = WAIT_FAILED; BOOL alertable = flags & MWMO_ALERTABLE; MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; - if (info) - mono_win32_enter_alertable_wait (info); + WIN32_ENTER_ALERTABLE_WAIT (info); - result = MsgWaitForMultipleObjectsEx (count, handles, timeout, wakeMask, flags); + if (cooperative) { + MONO_ENTER_GC_SAFE; + result = win32_msg_wait_for_multiple_objects_ex_interrupt_checked (info, count, handles, timeout, wakeMask, flags, alertable); + MONO_EXIT_GC_SAFE; + } else { + result = win32_msg_wait_for_multiple_objects_ex_interrupt_checked (info, count, handles, timeout, wakeMask, flags, alertable); + } - if (info) - mono_win32_leave_alertable_wait (info); + WIN32_LEAVE_ALERTABLE_WAIT (info); return result; } -#endif /* HAVE_API_SUPPORT_WIN32_MSG_WAIT_FOR_MULTIPLE_OBJECTS */ DWORD -mono_win32_wsa_wait_for_multiple_events (DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable) +mono_win32_msg_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags) +{ + return win32_msg_wait_for_multiple_objects_ex (count, handles, timeout, wakeMask, flags, FALSE); +} + +DWORD +mono_coop_win32_msg_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags) +{ + return win32_msg_wait_for_multiple_objects_ex (count, handles, timeout, wakeMask, flags, TRUE); +} +#endif /* HAVE_API_SUPPORT_WIN32_MSG_WAIT_FOR_MULTIPLE_OBJECTS */ + +static DWORD +win32_wsa_wait_for_multiple_events_interrupt_checked (MonoThreadInfo *info, DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable) +{ + WIN32_CHECK_INTERRUPT (info, alertable); + return WSAWaitForMultipleEvents (count, handles, waitAll, timeout, alertable); +} + +static DWORD +win32_wsa_wait_for_multiple_events (DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable, BOOL cooperative) { DWORD result = WAIT_FAILED; MonoThreadInfo * const info = alertable ? mono_thread_info_current_unchecked () : NULL; - if (info) - mono_win32_enter_alertable_wait (info); + WIN32_ENTER_ALERTABLE_WAIT (info); - result = WSAWaitForMultipleEvents (count, handles, waitAll, timeout, alertable); + if (cooperative) { + MONO_ENTER_GC_SAFE; + result = win32_wsa_wait_for_multiple_events_interrupt_checked (info, count, handles, waitAll, timeout, alertable); + MONO_EXIT_GC_SAFE; + } else { + result = win32_wsa_wait_for_multiple_events_interrupt_checked (info, count, handles, waitAll, timeout, alertable); + } - if (info) - mono_win32_leave_alertable_wait (info); + WIN32_LEAVE_ALERTABLE_WAIT (info); return result; } + +DWORD +mono_win32_wsa_wait_for_multiple_events (DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable) +{ + return win32_wsa_wait_for_multiple_events (count, handles, waitAll, timeout, alertable, FALSE); +} + +DWORD +mono_coop_win32_wsa_wait_for_multiple_events (DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable) +{ + return win32_wsa_wait_for_multiple_events (count, handles, waitAll, timeout, alertable, TRUE); +} diff --git a/mono/utils/mono-os-wait.h b/mono/utils/mono-os-wait.h index 7ff0a7b442..3d321d17f0 100644 --- a/mono/utils/mono-os-wait.h +++ b/mono/utils/mono-os-wait.h @@ -15,21 +15,39 @@ DWORD mono_win32_sleep_ex (DWORD timeout, BOOL alertable); +DWORD +mono_coop_win32_sleep_ex (DWORD timeout, BOOL alertable); + DWORD mono_win32_wait_for_single_object_ex (HANDLE handle, DWORD timeout, BOOL alertable); +DWORD +mono_coop_win32_wait_for_single_object_ex (HANDLE handle, DWORD timeout, BOOL alertable); + DWORD mono_win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable, MonoError *error); +DWORD +mono_coop_win32_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, BOOL waitAll, DWORD timeout, BOOL alertable, MonoError *error); + DWORD mono_win32_signal_object_and_wait (HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable); +DWORD +mono_coop_win32_signal_object_and_wait (HANDLE toSignal, HANDLE toWait, DWORD timeout, BOOL alertable); + DWORD mono_win32_msg_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags); +DWORD +mono_coop_win32_msg_wait_for_multiple_objects_ex (DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD wakeMask, DWORD flags); + DWORD mono_win32_wsa_wait_for_multiple_events (DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable); +DWORD +mono_coop_win32_wsa_wait_for_multiple_events (DWORD count, const WSAEVENT FAR *handles, BOOL waitAll, DWORD timeout, BOOL alertable); + #endif #endif /* _MONO_UTILS_OS_WAIT_H_ */ diff --git a/mono/utils/mono-path.c b/mono/utils/mono-path.c index dc222ac12b..d21d6d5626 100644 --- a/mono/utils/mono-path.c +++ b/mono/utils/mono-path.c @@ -177,27 +177,160 @@ mono_path_resolve_symlinks (const char *path) #endif } +static gboolean +mono_path_char_is_separator (char ch) +{ +#ifdef HOST_WIN32 + return ch == '/' || ch == '\\'; +#else + return ch == '/'; +#endif +} + +static gboolean +mono_path_contains_separator (const char *path, size_t length) +{ + for (size_t i = 0; i < length; ++i) { + if (mono_path_char_is_separator (path [i])) + return TRUE; + } + return FALSE; +} + +static void +mono_path_remove_trailing_path_separators (const char *path, size_t *length) +{ + size_t i = *length; + while (i > 0 && mono_path_char_is_separator (path [i - 1])) + i -= 1; + *length = i; +} + +#ifdef HOST_WIN32 + +static gboolean +mono_path_char_is_lowercase (char ch) +{ + return ch >= 'a' && ch <= 'z'; +} + +// Version-specific unichar2 upcase tables are stored per-volume at NTFS format-time. +// This is just a subset. +static char +mono_path_char_upcase (char a) +{ + return mono_path_char_is_lowercase (a) ? (char)(a - 'a' + 'A') : a; +} + +static gboolean +mono_path_char_equal (char a, char b) +{ + return a == b + || mono_path_char_upcase (a) == mono_path_char_upcase (b) + || (mono_path_char_is_separator (a) && mono_path_char_is_separator (b)); +} + +#endif + +static gboolean +mono_path_equal (const char *a, const char *b, size_t length) +{ +#ifdef HOST_WIN32 + size_t i = 0; + for (i = 0; i < length && mono_path_char_equal (a [i], b [i]); ++i) { + // nothing + } + return i == length; +#else + return memcmp (a, b, length) == 0; +#endif +} + +static size_t +mono_path_path_separator_length (const char *a, size_t length) +{ + size_t i = 0; + while (i < length && mono_path_char_is_separator (a [i])) + ++i; + return i; +} + /** * mono_path_filename_in_basedir: * - * Return \c TRUE if \p filename is in \p basedir + * Return \c TRUE if \p filename is "immediately" in \p basedir * - * Both paths must be absolute and using \c G_DIR_SEPARATOR for directory separators. + * Both paths should be absolute and be mostly normalized. * If the file is in a subdirectory of \p basedir, returns \c FALSE. * This function doesn't touch a filesystem, it looks solely at path names. + * + * In fact, filename might not be absolute, in which case, FALSE. + * Ditto basedir. + * + * To belabor the intent: + * /1/2/3 is considered to be in /1/2 + * /1/2/3/4 is not considered be in /1/2 + * + * Besides a "slash sensitive" prefix match, also check for + * additional slashes. + * + * "Slash sensitive" prefix match means: + * /a/b is a prefix of /a/b/ + * /a/b is not a prefix of /a/bc + * /a/b is maybe a prefix of /a/b + * The string being checked against must either end, or continue with a path separator. + * "Normal" prefix matching would be true for both. + * + * This function also considers runs of slashes to be equivalent to single slashes, + * which is generally Windows behavior, except at the start of a path. */ gboolean mono_path_filename_in_basedir (const char *filename, const char *basedir) { - const char *p = NULL; - if ((p = strstr (filename, basedir))) { - p += strlen (basedir); - if (*p != G_DIR_SEPARATOR) - return FALSE; - /* if it's in a subdir of the basedir, it doesn't count. */ - if (strchr (p, G_DIR_SEPARATOR)) - return FALSE; - return TRUE; - } - return FALSE; + g_assert (filename); + g_assert (basedir); + + size_t filename_length = strlen (filename); + size_t basedir_length = strlen (basedir); + + if (!mono_path_contains_separator (filename, filename_length)) + return FALSE; + if (!mono_path_contains_separator (basedir, basedir_length)) + return FALSE; + //g_assertf (mono_path_contains_separator (filename, filename_length), "filename:%s basedir:%s", filename, basedir); + //g_assertf (mono_path_contains_separator (basedir, basedir_length), "filename:%s basedir:%s", filename, basedir); + + mono_path_remove_trailing_path_separators (filename, &filename_length); + mono_path_remove_trailing_path_separators (basedir, &basedir_length); + + // basedir_length can be 0 at this point and that is ok. + + if (!filename_length + || filename_length <= basedir_length + || (basedir_length && !mono_path_equal (filename, basedir, basedir_length))) + return FALSE; + + // /foo/1 is in /foo. + // /foo//1 is in /foo. + // /foo/1/ is in /foo. + // /foo//1/ is in /foo. + // /foo//1// is in /foo. + + // /foo is not in /foo. + // /foo/ is not in /foo. + // /foob is not in /foo. + // /foo/1/2 is not in /foo. + + // Skip basedir's length within filename. + const char *after_base = &filename [basedir_length]; + size_t after_base_length = filename_length - basedir_length; + + // Skip any number of slashes. + size_t skip_separators = mono_path_path_separator_length (after_base, after_base_length); + after_base += skip_separators; + after_base_length -= skip_separators; + + // There must been at least one slash, and then after any non-slashes, + // there must not be any more slashes. + return skip_separators && !mono_path_contains_separator (after_base, after_base_length); } diff --git a/mono/utils/mono-proclib.c b/mono/utils/mono-proclib.c index bf838a12e2..f3d8df9dea 100644 --- a/mono/utils/mono-proclib.c +++ b/mono/utils/mono-proclib.c @@ -22,7 +22,9 @@ #endif #include <utils/mono-mmap.h> +#include <utils/strenc-internals.h> #include <utils/strenc.h> +#include <utils/mono-error-internals.h> #include <utils/mono-io-portability.h> #include <utils/mono-logger-internals.h> @@ -1017,16 +1019,26 @@ mono_pe_file_map (gunichar2 *filename, gint32 *map_size, void **handle) int fd = -1; struct stat statbuf; gpointer file_map = NULL; + ERROR_DECL (error); /* According to the MSDN docs, a search path is applied to * filename. FIXME: implement this, for now just pass it * straight to open */ - filename_ext = mono_unicode_to_external (filename); + filename_ext = mono_unicode_to_external_checked (filename, error); + // This block was added to diagnose https://github.com/mono/mono/issues/14730, remove after resolved + if (G_UNLIKELY (filename_ext == NULL)) { + GString *raw_bytes = g_string_new (NULL); + const gunichar2 *p = filename; + while (*p) + g_string_append_printf (raw_bytes, "%04X ", *p++); + g_assertf (filename_ext != NULL, "%s: unicode conversion returned NULL; %s; input was: %s", __func__, mono_error_get_message (error), raw_bytes->str); + g_string_free (raw_bytes, TRUE); + } if (filename_ext == NULL) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: unicode conversion returned NULL", __func__); - + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: unicode conversion returned NULL; %s", __func__, mono_error_get_message (error)); + mono_error_cleanup (error); goto exit; } @@ -1039,23 +1051,23 @@ mono_pe_file_map (gunichar2 *filename, gint32 *map_size, void **handle) mono_set_errno (saved_errno); mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: Error opening file %s (3): %s", __func__, filename_ext, strerror (errno)); - goto error; + goto exit; } fd = open (located_filename, O_RDONLY, 0); if (fd == -1) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: Error opening file %s (3): %s", __func__, filename_ext, strerror (errno)); - goto error; + goto exit; } } else if (fd == -1) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: Error opening file %s (3): %s", __func__, filename_ext, strerror (errno)); - goto error; + goto exit; } if (fstat (fd, &statbuf) == -1) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: Error stat()ing file %s: %s", __func__, filename_ext, strerror (errno)); - goto error; + goto exit; } *map_size = statbuf.st_size; @@ -1069,7 +1081,7 @@ mono_pe_file_map (gunichar2 *filename, gint32 *map_size, void **handle) file_map = mono_file_map (statbuf.st_size, MONO_MMAP_READ | MONO_MMAP_PRIVATE, fd, 0, handle); if (file_map == NULL) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_LAYER_PROCESS, "%s: Error mmap()int file %s: %s", __func__, filename_ext, strerror (errno)); - goto error; + goto exit; } exit: if (fd != -1) @@ -1077,8 +1089,6 @@ exit: g_free (located_filename); g_free (filename_ext); return file_map; -error: - goto exit; } void diff --git a/mono/utils/mono-rand.c b/mono/utils/mono-rand.c index 1961be2358..d8863d19c8 100644 --- a/mono/utils/mono-rand.c +++ b/mono/utils/mono-rand.c @@ -326,7 +326,7 @@ mono_rand_try_get_bytes (gpointer *handle, guchar *buffer, gssize buffer_size, M error_init (error); - g_assert (RAND_MAX >= 0xFF); // FIXME static_assert when compilers catch up. + g_static_assert (RAND_MAX >= 0xFF); while (buffer_size > 0) { int const i = rand (); diff --git a/mono/utils/mono-sha1.c b/mono/utils/mono-sha1.c index 4a6415f3fd..bfcf6cf403 100644 --- a/mono/utils/mono-sha1.c +++ b/mono/utils/mono-sha1.c @@ -150,7 +150,11 @@ static void SHAPrintContext(MonoSHA1Context *context, char *msg){ static void SHA1Transform(guint32 state[5], const guchar buffer[64]) { +#ifdef HOST_WASM +volatile guint32 a, b, c, d, e; +#else guint32 a, b, c, d, e; +#endif typedef union { unsigned char c[64]; guint32 l[16]; diff --git a/mono/utils/mono-state.c b/mono/utils/mono-state.c index a2945d6841..6493925e6d 100644 --- a/mono/utils/mono-state.c +++ b/mono/utils/mono-state.c @@ -18,6 +18,9 @@ #include <sys/param.h> #include <fcntl.h> +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif #include <utils/mono-threads-debug.h> extern GCStats mono_gc_stats; @@ -44,6 +47,7 @@ extern GCStats mono_gc_stats; #include <execinfo.h> #endif +#if defined(ENABLE_CHECKED_BUILD_CRASH_REPORTING) && defined (ENABLE_OVERRIDABLE_ALLOCATORS) // Fixme: put behind preprocessor symbol? static void assert_not_reached_mem (const char *msg) @@ -93,6 +97,7 @@ assert_not_reached_fn_ptr_calloc (gsize n, gsize x) assert_not_reached_mem ("Attempted to call calloc during merp dump"); return NULL; } +#endif /* defined(ENABLE_CHECKED_BUILD_CRASH_REPORTING) && defined (ENABLE_OVERRIDABLE_ALLOCATORS) */ void mono_summarize_toggle_assertions (gboolean enable) @@ -257,8 +262,11 @@ mono_state_alloc_mem (MonoStateMem *mem, long tag, size_t size) memset (mem, 0, sizeof (*mem)); mem->tag = tag; mem->size = size; + mem->handle = 0; + + if (!g_hasenv ("MONO_CRASH_NOFILE")) + mem->handle = g_open (name, O_RDWR | O_CREAT | O_EXCL, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); - mem->handle = g_open (name, O_RDWR | O_CREAT | O_EXCL, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); if (mem->handle < 1) { mem->mem = (gpointer *) mmap (0, mem->size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); } else { @@ -685,6 +693,7 @@ mono_native_state_add_thread (MonoStateWriter *writer, MonoThreadSummary *thread static void mono_native_state_add_ee_info (MonoStateWriter *writer) { +#ifndef MONO_PRIVATE_CRASHES // FIXME: setup callbacks to enable /*const char *aot_mode;*/ /*MonoAotMode mono_aot_mode = mono_jit_get_aot_mode ();*/ @@ -736,6 +745,7 @@ mono_native_state_add_ee_info (MonoStateWriter *writer) writer->indent--; mono_state_writer_indent (writer); mono_state_writer_printf(writer, "},\n"); +#endif } // Taken from driver.c @@ -930,9 +940,7 @@ mono_native_state_add_prologue (MonoStateWriter *writer) mono_native_state_add_version (writer); -#ifndef MONO_PRIVATE_CRASHES mono_native_state_add_ee_info (writer); -#endif mono_native_state_add_memory (writer); @@ -1036,6 +1044,9 @@ mono_summarize_native_state_add_thread (MonoStateWriter *writer, MonoThreadSumma void mono_crash_dump (const char *jsonFile, MonoStackHash *hashes) { + if (g_hasenv ("MONO_CRASH_NOFILE")) + return; + size_t size = strlen (jsonFile); gboolean success = FALSE; diff --git a/mono/utils/mono-threads-coop.c b/mono/utils/mono-threads-coop.c index e675e37a75..3c8c9d31bd 100644 --- a/mono/utils/mono-threads-coop.c +++ b/mono/utils/mono-threads-coop.c @@ -35,8 +35,9 @@ #endif #ifdef _MSC_VER -// TODO: Find MSVC replacement for __builtin_unwind_init -#define SAVE_REGS_ON_STACK g_assert_not_reached (); +// __builtin_unwind_init not available under MSVC but equivalent implementation is done using +// copy_stack_data_internal_win32_wrapper. +#define SAVE_REGS_ON_STACK do {} while (0) #elif defined (HOST_WASM) //TODO: figure out wasm stack scanning #define SAVE_REGS_ON_STACK do {} while (0) @@ -167,7 +168,7 @@ return_stack_ptr (gpointer *i) } static void -copy_stack_data (MonoThreadInfo *info, MonoStackData *stackdata_begin) +copy_stack_data_internal (MonoThreadInfo *info, MonoStackData *stackdata_begin, gconstpointer wrapper_data1, gconstpointer wrapper_data2) { MonoThreadUnwindState *state; int stackdata_size; @@ -197,6 +198,57 @@ copy_stack_data (MonoThreadInfo *info, MonoStackData *stackdata_begin) state->gc_stackdata_size = stackdata_size; } +#ifdef _MSC_VER +typedef void (*CopyStackDataFunc)(MonoThreadInfo *, MonoStackData *, gconstpointer, gconstpointer); + +#ifdef TARGET_AMD64 +// Implementation of __builtin_unwind_init under MSVC, dumping nonvolatile registers into MonoBuiltinUnwindInfo. +typedef struct { + __m128d fregs [10]; + host_mgreg_t gregs [8]; +} MonoBuiltinUnwindInfo; + +// Defined in win64.asm +G_EXTERN_C void +copy_stack_data_internal_win32_wrapper (MonoThreadInfo *, MonoStackData *, MonoBuiltinUnwindInfo *, CopyStackDataFunc); +#else +// Implementation of __builtin_unwind_init under MSVC, dumping nonvolatile registers into MonoBuiltinUnwindInfo. +typedef struct { + host_mgreg_t gregs [4]; +} MonoBuiltinUnwindInfo; + +// Implementation of __builtin_unwind_init under MSVC, dumping nonvolatile registers into MonoBuiltinUnwindInfo *. +__declspec(naked) void __cdecl +copy_stack_data_internal_win32_wrapper (MonoThreadInfo *info, MonoStackData *stackdata_begin, MonoBuiltinUnwindInfo *unwind_info_data, CopyStackDataFunc func) +{ + __asm { + mov edx, dword ptr [esp + 0Ch] + mov dword ptr [edx + 00h], ebx + mov dword ptr [edx + 04h], esi + mov dword ptr [edx + 08h], edi + mov dword ptr [edx + 0Ch], ebp + + // tailcall, all parameters passed through to CopyStackDataFunc. + mov edx, dword ptr [esp + 10h] + jmp edx + }; +} +#endif + +static void +copy_stack_data (MonoThreadInfo *info, MonoStackData *stackdata_begin) +{ + MonoBuiltinUnwindInfo unwind_info_data; + copy_stack_data_internal_win32_wrapper (info, stackdata_begin, &unwind_info_data, copy_stack_data_internal); +} +#else +static void +copy_stack_data (MonoThreadInfo *info, MonoStackData *stackdata_begin) +{ + copy_stack_data_internal (info, stackdata_begin, NULL, NULL); +} +#endif + static gpointer mono_threads_enter_gc_safe_region_unbalanced_with_info (MonoThreadInfo *info, MonoStackData *stackdata); @@ -282,8 +334,10 @@ mono_threads_exit_gc_safe_region_internal (gpointer cookie, MonoStackData *stack return; #ifdef ENABLE_CHECKED_BUILD_GC + W32_DEFINE_LAST_ERROR_RESTORE_POINT; if (mono_check_mode_enabled (MONO_CHECK_MODE_GC)) coop_tls_pop (cookie); + W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; #endif mono_threads_exit_gc_safe_region_unbalanced_internal (cookie, stackdata); @@ -305,6 +359,11 @@ mono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStack if (!mono_threads_is_blocking_transition_enabled ()) return; + /* Common to use enter/exit gc safe around OS API's affecting last error. */ + /* This method can call OS API's that will reset last error on some platforms. */ + /* To reduce errors, we need to restore last error before exit gc safe. */ + W32_DEFINE_LAST_ERROR_RESTORE_POINT; + info = (MonoThreadInfo *)cookie; const char *function_name = mono_stackdata_get_function_name (stackdata); @@ -335,6 +394,8 @@ mono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStack info->async_target = NULL; info->user_data = NULL; } + + W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; } void diff --git a/mono/utils/mono-threads-coop.h b/mono/utils/mono-threads-coop.h index 4a15830f9a..c4fbde79b9 100644 --- a/mono/utils/mono-threads-coop.h +++ b/mono/utils/mono-threads-coop.h @@ -70,7 +70,7 @@ gboolean mono_threads_suspend_policy_is_blocking_transition_enabled (MonoThreadsSuspendPolicy p); MonoThreadsSuspendPolicy -mono_threads_suspend_policy (void); +mono_threads_suspend_policy (void) MONO_LLVM_INTERNAL; const char* mono_threads_suspend_policy_name (MonoThreadsSuspendPolicy p); diff --git a/mono/utils/mono-threads-posix.c b/mono/utils/mono-threads-posix.c index 9d32910814..3e4bf93de5 100644 --- a/mono/utils/mono-threads-posix.c +++ b/mono/utils/mono-threads-posix.c @@ -15,6 +15,10 @@ #define _DARWIN_C_SOURCE 1 #endif +#if defined (HOST_FUCHSIA) +#include <zircon/syscalls.h> +#endif + #if defined (__HAIKU__) #include <os/kernel/OS.h> #endif @@ -39,10 +43,19 @@ extern int tkill (pid_t tid, int signal); #include <pthread.h> +#include <sys/mman.h> +#include <limits.h> /* for PAGESIZE */ +#ifndef PAGESIZE +#define PAGESIZE 4096 +#endif + #ifdef HAVE_SYS_RESOURCE_H #include <sys/resource.h> #endif +static pthread_mutex_t memory_barrier_process_wide_mutex = PTHREAD_MUTEX_INITIALIZER; +static void *memory_barrier_process_wide_helper_page; + gboolean mono_thread_platform_create_thread (MonoThreadStart thread_fn, gpointer thread_data, gsize* const stack_size, MonoNativeThreadId *tid) { @@ -114,7 +127,7 @@ mono_threads_platform_init (void) } gboolean -mono_threads_platform_in_critical_region (MonoNativeThreadId tid) +mono_threads_platform_in_critical_region (THREAD_INFO_TYPE *info) { return FALSE; } @@ -131,6 +144,15 @@ mono_threads_platform_exit (gsize exit_code) pthread_exit ((gpointer) exit_code); } +#if HOST_FUCHSIA +int +mono_thread_info_get_system_max_stack_size (void) +{ + /* For now, we do not enforce any limits */ + return INT_MAX; +} + +#else int mono_thread_info_get_system_max_stack_size (void) { @@ -144,6 +166,7 @@ mono_thread_info_get_system_max_stack_size (void) return INT_MAX; return (int)lim.rlim_max; } +#endif int mono_threads_pthread_kill (MonoThreadInfo *info, int signum) @@ -286,6 +309,36 @@ mono_native_thread_join (MonoNativeThreadId tid) return !pthread_join (tid, &res); } +void +mono_memory_barrier_process_wide (void) +{ + int status; + + status = pthread_mutex_lock (&memory_barrier_process_wide_mutex); + g_assert (status == 0); + + if (memory_barrier_process_wide_helper_page == NULL) { + status = posix_memalign(&memory_barrier_process_wide_helper_page, PAGESIZE, PAGESIZE); + g_assert (status == 0); + } + + // Changing a helper memory page protection from read / write to no access + // causes the OS to issue IPI to flush TLBs on all processors. This also + // results in flushing the processor buffers. + status = mprotect (memory_barrier_process_wide_helper_page, PAGESIZE, PROT_READ | PROT_WRITE); + g_assert (status == 0); + + // Ensure that the page is dirty before we change the protection so that + // we prevent the OS from skipping the global TLB flush. + __sync_add_and_fetch ((size_t*)memory_barrier_process_wide_helper_page, 1); + + status = mprotect (memory_barrier_process_wide_helper_page, PAGESIZE, PROT_NONE); + g_assert (status == 0); + + status = pthread_mutex_unlock (&memory_barrier_process_wide_mutex); + g_assert (status == 0); +} + #endif /* defined(_POSIX_VERSION) */ #if defined(USE_POSIX_BACKEND) diff --git a/mono/utils/mono-threads-wasm.c b/mono/utils/mono-threads-wasm.c index dbc53ca66e..c27aea8e17 100644 --- a/mono/utils/mono-threads-wasm.c +++ b/mono/utils/mono-threads-wasm.c @@ -153,7 +153,7 @@ mono_threads_platform_exit (gsize exit_code) } gboolean -mono_threads_platform_in_critical_region (MonoNativeThreadId tid) +mono_threads_platform_in_critical_region (THREAD_INFO_TYPE *info) { return FALSE; } @@ -187,4 +187,9 @@ mono_background_exec (void) g_slist_free (j); } +void +mono_memory_barrier_process_wide (void) +{ +} + #endif diff --git a/mono/utils/mono-threads-windows.c b/mono/utils/mono-threads-windows.c index 8c421db3ed..70b15dd372 100644 --- a/mono/utils/mono-threads-windows.c +++ b/mono/utils/mono-threads-windows.c @@ -16,13 +16,15 @@ #include <mono/utils/mono-threads-coop.h> #include <mono/utils/mono-threads-debug.h> #include <mono/utils/mono-os-wait.h> +#include <mono/metadata/w32subset.h> #include <limits.h> enum Win32APCInfo { WIN32_APC_INFO_CLEARED = 0, WIN32_APC_INFO_ALERTABLE_WAIT_SLOT = 1 << 0, - WIN32_APC_INFO_PENDING_INTERRUPT_SLOT = 1 << 1, - WIN32_APC_INFO_PENDING_ABORT_SLOT = 1 << 2 + WIN32_APC_INFO_BLOCKING_IO_SLOT = 1 << 1, + WIN32_APC_INFO_PENDING_INTERRUPT_SLOT = 1 << 2, + WIN32_APC_INFO_PENDING_ABORT_SLOT = 1 << 3 }; static inline void @@ -78,7 +80,7 @@ abort_apc (ULONG_PTR param) // Check if pending interrupt is still relevant and current thread has not left alertable wait region. // NOTE, can only be reset by current thread, currently running this APC. gint32 win32_apc_info = mono_atomic_load_i32 (&info->win32_apc_info); - if (win32_apc_info & WIN32_APC_INFO_PENDING_ABORT_SLOT) { + if (win32_apc_info & WIN32_APC_INFO_BLOCKING_IO_SLOT) { // Check if current thread registered an IO handle when entering alertable wait (blocking IO call). // No need for CAS on win32_apc_info_io_handle since its only loaded/stored by current thread // currently running APC. @@ -108,14 +110,6 @@ static void suspend_abort_syscall (PVOID thread_info, HANDLE native_thread_handle, DWORD tid) { request_interrupt (thread_info, native_thread_handle, WIN32_APC_INFO_PENDING_ABORT_SLOT, abort_apc, tid); - -#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) - // In case thread is blocked on sync IO preventing it from running above queued APC, cancel - // all outputstanding sync IO for target thread. If its not blocked on a sync IO request, below - // call will just fail and nothing will be canceled. If thread is waiting on overlapped IO, - // the queued APC will take care of cancel specific outstanding IO requests. - CancelSynchronousIo (native_thread_handle); -#endif } static inline void @@ -126,7 +120,7 @@ enter_alertable_wait_ex (MonoThreadInfo *info, HANDLE io_handle) info->win32_apc_info_io_handle = io_handle; //Set alertable wait flag. - mono_atomic_xchg_i32 (&info->win32_apc_info, WIN32_APC_INFO_ALERTABLE_WAIT_SLOT); + mono_atomic_xchg_i32 (&info->win32_apc_info, (io_handle == INVALID_HANDLE_VALUE) ? WIN32_APC_INFO_ALERTABLE_WAIT_SLOT : WIN32_APC_INFO_BLOCKING_IO_SLOT); } static inline void @@ -241,6 +235,21 @@ mono_threads_suspend_abort_syscall (MonoThreadInfo *info) suspend_abort_syscall (info, info->native_handle, id); } +void +mono_win32_abort_blocking_io_call (MonoThreadInfo *info) +{ +#if HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO + // In case thread is blocked on sync IO preventing it from running above queued APC, cancel + // all outputstanding sync IO for target thread. If its not blocked on a sync IO request, below + // call will just fail and nothing will be canceled. If thread is waiting on overlapped IO, + // the queued APC will take care of cancel specific outstanding IO requests. + gint32 win32_apc_info = mono_atomic_load_i32 (&info->win32_apc_info); + if (win32_apc_info & WIN32_APC_INFO_BLOCKING_IO_SLOT) { + CancelSynchronousIo (info->native_handle); + } +#endif +} + gboolean mono_threads_suspend_begin_async_resume (MonoThreadInfo *info) { @@ -250,9 +259,9 @@ mono_threads_suspend_begin_async_resume (MonoThreadInfo *info) handle = info->native_handle; g_assert (handle); - -#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) + if (info->async_target) { +#if HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT MonoContext ctx; CONTEXT context; gboolean res; @@ -278,10 +287,10 @@ mono_threads_suspend_begin_async_resume (MonoThreadInfo *info) if (!res) { return FALSE; } - } #else - g_error ("Not implemented due to lack of SetThreadContext"); + g_error ("Not implemented due to lack of SetThreadContext"); #endif + } result = ResumeThread (handle); @@ -401,8 +410,7 @@ mono_native_thread_join_handle (HANDLE thread_handle, gboolean close_handle) * Can't OpenThread on UWP until SDK 15063 (our minspec today is 10240), * but this function doesn't seem to be used on Windows anyway */ -#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) - +#if HAVE_API_SUPPORT_WIN32_OPEN_THREAD gboolean mono_native_thread_join (MonoNativeThreadId tid) { @@ -413,7 +421,6 @@ mono_native_thread_join (MonoNativeThreadId tid) return mono_native_thread_join_handle (handle, TRUE); } - #endif #if HAVE_DECL___READFSDWORD==0 @@ -456,7 +463,7 @@ mono_threads_platform_get_stack_bounds (guint8 **staddr, size_t *stsize) } -#if SIZEOF_VOID_P == 4 && G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#if SIZEOF_VOID_P == 4 && HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); static gboolean is_wow64 = FALSE; #endif @@ -465,7 +472,7 @@ static gboolean is_wow64 = FALSE; void mono_threads_platform_init (void) { -#if SIZEOF_VOID_P == 4 && G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#if SIZEOF_VOID_P == 4 && HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS LPFN_ISWOW64PROCESS is_wow64_func = (LPFN_ISWOW64PROCESS) GetProcAddress (GetModuleHandle (TEXT ("kernel32")), "IsWow64Process"); if (is_wow64_func) is_wow64_func (GetCurrentProcess (), &is_wow64); @@ -481,14 +488,28 @@ mono_threads_platform_init (void) * We check CONTEXT_EXCEPTION_ACTIVE for this, which is highly undocumented. */ gboolean -mono_threads_platform_in_critical_region (MonoNativeThreadId tid) +mono_threads_platform_in_critical_region (THREAD_INFO_TYPE *info) { gboolean ret = FALSE; -#if SIZEOF_VOID_P == 4 && G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) +#if SIZEOF_VOID_P == 4 && HAVE_API_SUPPORT_WIN32_OPEN_THREAD /* FIXME On cygwin these are not defined */ #if defined(CONTEXT_EXCEPTION_REQUEST) && defined(CONTEXT_EXCEPTION_REPORTING) && defined(CONTEXT_EXCEPTION_ACTIVE) + if (is_wow64 && mono_threads_is_cooperative_suspension_enabled ()) { + /* Cooperative suspended threads will block at well-defined locations. */ + return FALSE; + } else if (is_wow64 && mono_threads_is_hybrid_suspension_enabled ()) { + /* If thread is cooperative suspended, we shouldn't validate context */ + /* since thread could still be running towards it's wait state. Calling */ + /* GetThreadContext on a running thread (before calling SuspendThread) */ + /* could return incorrect results and since cooperative suspended threads */ + /* will block at well defined-locations, no need to do so. */ + int thread_state = mono_thread_info_current_state (info); + if (thread_state == STATE_SELF_SUSPENDED || thread_state == STATE_BLOCKING_SELF_SUSPENDED) + return FALSE; + } + if (is_wow64) { - HANDLE handle = OpenThread (THREAD_ALL_ACCESS, FALSE, tid); + HANDLE handle = OpenThread (THREAD_ALL_ACCESS, FALSE, mono_thread_info_get_tid (info)); if (handle) { CONTEXT context; ZeroMemory (&context, sizeof (CONTEXT)); @@ -557,4 +578,10 @@ mono_native_thread_set_name (MonoNativeThreadId tid, const char *name) #endif } +void +mono_memory_barrier_process_wide (void) +{ + FlushProcessWriteBuffers (); +} + #endif diff --git a/mono/utils/mono-threads.c b/mono/utils/mono-threads.c index 878f35ab72..a19976055c 100644 --- a/mono/utils/mono-threads.c +++ b/mono/utils/mono-threads.c @@ -1167,7 +1167,7 @@ is_thread_in_critical_region (MonoThreadInfo *info) gpointer stack_start; MonoThreadUnwindState *state; - if (mono_threads_platform_in_critical_region (mono_thread_info_get_tid (info))) + if (mono_threads_platform_in_critical_region (info)) return TRUE; /* Are we inside a system critical region? */ @@ -1342,6 +1342,13 @@ mono_thread_info_safe_suspend_and_run (MonoNativeThreadId id, gboolean interrupt mono_hazard_pointer_set (hp, 1, info); mono_thread_info_core_resume (info); mono_threads_wait_pending_operations (); +#ifdef USE_WINDOWS_BACKEND + // If we interrupt kernel but have blocking sync IO requests preventing the thread from running APC's + // try to abort all sync blocking IO request. This must be done after thread has been resumed, but before releasing + // global suspend lock (preventing other threads from supsending the thread). + if (interrupt_kernel) + mono_win32_abort_blocking_io_call (info); +#endif break; case KeepSuspended: THREADS_SUSPEND_DEBUG ("CALLBACK tid %p (%s): KeepSuspended\n", (void*)id, interrupt_kernel ? "int" : ""); @@ -1821,6 +1828,11 @@ mono_thread_info_uninstall_interrupt (gboolean *interrupted) MonoThreadInfo *info; MonoThreadInfoInterruptToken *previous_token; + /* Common to uninstall interrupt handler around OS API's affecting last error. */ + /* This method could call OS API's on some platforms that will reset last error so make sure to restore */ + /* last error before exit. */ + W32_DEFINE_LAST_ERROR_RESTORE_POINT; + g_assert (interrupted); *interrupted = FALSE; @@ -1841,6 +1853,8 @@ mono_thread_info_uninstall_interrupt (gboolean *interrupted) THREADS_INTERRUPT_DEBUG ("interrupt uninstall tid %p previous_token %p interrupted %s\n", mono_thread_info_get_tid (info), previous_token, *interrupted ? "TRUE" : "FALSE"); + + W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; } static MonoThreadInfoInterruptToken* diff --git a/mono/utils/mono-threads.h b/mono/utils/mono-threads.h index 0e08256d01..1b24fa2617 100644 --- a/mono/utils/mono-threads.h +++ b/mono/utils/mono-threads.h @@ -590,7 +590,7 @@ mono_thread_platform_create_thread (MonoThreadStart thread_fn, gpointer thread_d void mono_threads_platform_get_stack_bounds (guint8 **staddr, size_t *stsize); gboolean mono_threads_platform_is_main_thread (void); void mono_threads_platform_init (void); -gboolean mono_threads_platform_in_critical_region (MonoNativeThreadId tid); +gboolean mono_threads_platform_in_critical_region (THREAD_INFO_TYPE *info); gboolean mono_threads_platform_yield (void); void mono_threads_platform_exit (gsize exit_code); @@ -811,6 +811,27 @@ mono_win32_leave_blocking_io_call (THREAD_INFO_TYPE *info, HANDLE io_handle); void mono_win32_interrupt_wait (PVOID thread_info, HANDLE native_thread_handle, DWORD tid); + +void +mono_win32_abort_blocking_io_call (THREAD_INFO_TYPE *info); + +#define W32_DEFINE_LAST_ERROR_RESTORE_POINT \ + DWORD _last_error_restore_point = GetLastError (); + +#define W32_UPDATE_LAST_ERROR_RESTORE_POINT \ + _last_error_restore_point = GetLastError (); + +#define W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \ + /* Only restore if changed to prevent unecessary writes. */ \ + if (GetLastError () != _last_error_restore_point) \ + SetLastError (_last_error_restore_point); + +#else + +#define W32_DEFINE_LAST_ERROR_RESTORE_POINT /* nothing */ +#define W32_UPDATE_LAST_ERROR_RESTORE_POINT /* nothing */ +#define W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT /* nothing */ + #endif #endif /* __MONO_THREADS_H__ */ diff --git a/mono/utils/mono-tls.c b/mono/utils/mono-tls.c index 6c5100ec3c..a4cee82566 100644 --- a/mono/utils/mono-tls.c +++ b/mono/utils/mono-tls.c @@ -276,40 +276,40 @@ mono_tls_get_tls_offset (MonoTlsKey key) * Returns the getter (gpointer (*)(void)) for the mono tls key. * Managed code will always get the value by calling this getter. */ -gpointer -mono_tls_get_tls_getter (MonoTlsKey key, gboolean name) +MonoTlsGetter +mono_tls_get_tls_getter (MonoTlsKey key) { switch (key) { case TLS_KEY_THREAD: - return name ? (gpointer)"mono_tls_get_thread" : (gpointer)mono_tls_get_thread; + return (MonoTlsGetter)mono_tls_get_thread; case TLS_KEY_JIT_TLS: - return name ? (gpointer)"mono_tls_get_jit_tls" : (gpointer)mono_tls_get_jit_tls; + return (MonoTlsGetter)mono_tls_get_jit_tls; case TLS_KEY_DOMAIN: - return name ? (gpointer)"mono_tls_get_domain" : (gpointer)mono_tls_get_domain; + return (MonoTlsGetter)mono_tls_get_domain; case TLS_KEY_SGEN_THREAD_INFO: - return name ? (gpointer)"mono_tls_get_sgen_thread_info" : (gpointer)mono_tls_get_sgen_thread_info; + return (MonoTlsGetter)mono_tls_get_sgen_thread_info; case TLS_KEY_LMF_ADDR: - return name ? (gpointer)"mono_tls_get_lmf_addr" : (gpointer)mono_tls_get_lmf_addr; + return (MonoTlsGetter)mono_tls_get_lmf_addr; } g_assert_not_reached (); return NULL; } /* Returns the setter (void (*)(gpointer)) for the mono tls key */ -gpointer -mono_tls_get_tls_setter (MonoTlsKey key, gboolean name) +MonoTlsSetter +mono_tls_get_tls_setter (MonoTlsKey key) { switch (key) { case TLS_KEY_THREAD: - return name ? (gpointer)"mono_tls_set_thread" : (gpointer)mono_tls_set_thread; + return (MonoTlsSetter)mono_tls_set_thread; case TLS_KEY_JIT_TLS: - return name ? (gpointer)"mono_tls_set_jit_tls" : (gpointer)mono_tls_set_jit_tls; + return (MonoTlsSetter)mono_tls_set_jit_tls; case TLS_KEY_DOMAIN: - return name ? (gpointer)"mono_tls_set_domain" : (gpointer)mono_tls_set_domain; + return (MonoTlsSetter)mono_tls_set_domain; case TLS_KEY_SGEN_THREAD_INFO: - return name ? (gpointer)"mono_tls_set_sgen_thread_info" : (gpointer)mono_tls_set_sgen_thread_info; + return (MonoTlsSetter)mono_tls_set_sgen_thread_info; case TLS_KEY_LMF_ADDR: - return name ? (gpointer)"mono_tls_set_lmf_addr" : (gpointer)mono_tls_set_lmf_addr; + return (MonoTlsSetter)mono_tls_set_lmf_addr; } g_assert_not_reached (); return NULL; diff --git a/mono/utils/mono-tls.h b/mono/utils/mono-tls.h index 255aa34cd9..9437262f32 100644 --- a/mono/utils/mono-tls.h +++ b/mono/utils/mono-tls.h @@ -18,6 +18,7 @@ #include <mono/utils/mono-forward-internal.h> /* TLS entries used by the runtime */ +// This ordering is mimiced in MONO_JIT_ICALLS and will be in mono_create_tls_get. typedef enum { /* mono_thread_internal_current () */ TLS_KEY_THREAD = 0, @@ -83,8 +84,12 @@ void mono_tls_init_gc_keys (void); void mono_tls_init_runtime_keys (void); void mono_tls_free_keys (void); gint32 mono_tls_get_tls_offset (MonoTlsKey key); -gpointer mono_tls_get_tls_getter (MonoTlsKey key, gboolean name); -gpointer mono_tls_get_tls_setter (MonoTlsKey key, gboolean name); + +typedef gpointer (*MonoTlsGetter)(void); +typedef void (*MonoTlsSetter)(gpointer); + +MonoTlsGetter mono_tls_get_tls_getter (MonoTlsKey key); +MonoTlsSetter mono_tls_get_tls_setter (MonoTlsKey key); G_EXTERN_C MonoInternalThread *mono_tls_get_thread (void); G_EXTERN_C MonoJitTlsData *mono_tls_get_jit_tls (void); diff --git a/mono/utils/strenc-internals.h b/mono/utils/strenc-internals.h new file mode 100644 index 0000000000..c15990c07c --- /dev/null +++ b/mono/utils/strenc-internals.h @@ -0,0 +1,9 @@ +#ifndef _MONO_STRENC_INTERNALS_H_ +#define _MONO_STRENC_INTERNALS_H_ + +#include <glib.h> +#include <mono/utils/mono-error.h> + +gchar *mono_unicode_to_external_checked (const gunichar2 *uni, MonoError *err); + +#endif /* _MONO_STRENC_INTERNALS_H_ */ diff --git a/mono/utils/strenc.c b/mono/utils/strenc.c index 81b0ade26b..7be37a8de1 100644 --- a/mono/utils/strenc.c +++ b/mono/utils/strenc.c @@ -13,6 +13,9 @@ #include <string.h> #include "strenc.h" +#include "strenc-internals.h" +#include "mono-error.h" +#include "mono-error-internals.h" static const char trailingBytesForUTF8[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -40,8 +43,7 @@ static const char trailingBytesForUTF8[256] = { * Callers must free the returned string if not NULL. \p bytes holds the number * of bytes in the returned string, not including the terminator. */ -gunichar2 * -mono_unicode_from_external (const gchar *in, gsize *bytes) +gunichar2 *mono_unicode_from_external (const gchar *in, gsize *bytes) { gchar *res=NULL; gchar **encodings; @@ -173,15 +175,25 @@ gchar *mono_utf8_from_external (const gchar *in) * Callers must free the returned string. */ gchar *mono_unicode_to_external (const gunichar2 *uni) +{ + return mono_unicode_to_external_checked (uni, NULL); +} + +gchar *mono_unicode_to_external_checked (const gunichar2 *uni, MonoError *err) { gchar *utf8; gchar *encoding_list; + GError *gerr = NULL; /* Turn the unicode into utf8 to start with, because its * easier to work with gchar * than gunichar2 * */ - utf8=g_utf16_to_utf8 (uni, -1, NULL, NULL, NULL); - g_assert (utf8!=NULL); + utf8=g_utf16_to_utf8 (uni, -1, NULL, NULL, &gerr); + if (utf8 == NULL) { + mono_error_set_argument (err, "uni", gerr->message); + g_error_free (gerr); + return utf8; + } encoding_list=g_getenv ("MONO_EXTERNAL_ENCODINGS"); if(encoding_list==NULL) { diff --git a/mono/utils/w32api.h b/mono/utils/w32api.h index e7a0ce4c4c..25fb3ac980 100644 --- a/mono/utils/w32api.h +++ b/mono/utils/w32api.h @@ -7,6 +7,9 @@ #include <glib.h> +#define WAIT_TOO_MANY_POSTS ((gint) 0x0000012A) +#define WAIT_NOT_OWNED_BY_CALLER ((gint) 0x0000012B) + #ifndef HOST_WIN32 #define WAIT_FAILED ((gint) 0xFFFFFFFF) diff --git a/msvc/Makefile.in b/msvc/Makefile.in index d089466949..6f7912324c 100644 --- a/msvc/Makefile.in +++ b/msvc/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/msvc/build-all.vcxproj b/msvc/build-all.vcxproj index 0626d25ff5..92ef7d329a 100644 --- a/msvc/build-all.vcxproj +++ b/msvc/build-all.vcxproj @@ -1,155 +1,155 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{5362490B-8516-44EE-9987-014C015A080A}</ProjectGuid> - <RootNamespace>buildall</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{5362490B-8516-44EE-9987-014C015A080A}</ProjectGuid> + <RootNamespace>buildall</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/build-external-btls.vcxproj b/msvc/build-external-btls.vcxproj index a07b4bb6d6..16e553512f 100644 --- a/msvc/build-external-btls.vcxproj +++ b/msvc/build-external-btls.vcxproj @@ -1,174 +1,174 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{E41DDF41-0916-454B-A7C2-6E410E45CAFD}</ProjectGuid> - <RootNamespace>buildexternalbtls</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="mono.external.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> - <PropertyGroup> - <_BtlsCFlags Condition="'$(MONO_PREPROCESSOR_DEFINITIONS)' != ''">$(MONO_PREPROCESSOR_DEFINITIONS.Replace(";"," "))</_BtlsCFlags> - <_BtlsCFlags>$(_BtlsCFlags.Trim())</_BtlsCFlags> - <_BtlsCFlags Condition="'$(_BtlsCFlags)' != ''">-D$(_BtlsCFlags.Replace(" "," -D"))</_BtlsCFlags> - <_BtlsBuildCommand>build-external-btls.bat "$(_MonoBtlsSourceDir)" "$(_BtlsSourceDir)" "$(_BtlsBuildDir)" "$(_MonoOutputDir)" "$(_BtlsCFlags)" "$(Platform)" "$(Configuration)"</_BtlsBuildCommand> - </PropertyGroup> - <Target Name="_AfterBuildExternalBtls" Condition="'$(MONO_ENABLE_BTLS)' == 'true'"> - <Exec Command="$(_BtlsBuildCommand) "Build" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> - <Output TaskParameter="ExitCode" PropertyName="_BuildExternalBtlsExitCode" /> - </Exec> - </Target> - <Target Name="_AfterCleanExternalBtls" Condition="'$(MONO_ENABLE_BTLS)' == 'true'"> - <Exec Command="$(_BtlsBuildCommand) "Clean" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> - <Output TaskParameter="ExitCode" PropertyName="_CleanExternalBtlsExitCode" /> - </Exec> - </Target> - <Target Name="AfterBuild" DependsOnTargets="_ConfigureExternalMonoBTLSBuildEnvironment;_AfterBuildExternalBtls" /> - <Target Name="AfterClean" DependsOnTargets="_ConfigureExternalMonoBTLSBuildEnvironment;_AfterCleanExternalBtls" /> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{E41DDF41-0916-454B-A7C2-6E410E45CAFD}</ProjectGuid> + <RootNamespace>buildexternalbtls</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <Import Project="mono.external.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + <PropertyGroup> + <_BtlsCFlags Condition="'$(MONO_PREPROCESSOR_DEFINITIONS)' != ''">$(MONO_PREPROCESSOR_DEFINITIONS.Replace(";"," "))</_BtlsCFlags> + <_BtlsCFlags>$(_BtlsCFlags.Trim())</_BtlsCFlags> + <_BtlsCFlags Condition="'$(_BtlsCFlags)' != ''">-D$(_BtlsCFlags.Replace(" "," -D"))</_BtlsCFlags> + <_BtlsBuildCommand>build-external-btls.bat "$(_MonoBtlsSourceDir)" "$(_BtlsSourceDir)" "$(_BtlsBuildDir)" "$(_MonoOutputDir)" "$(_BtlsCFlags)" "$(Platform)" "$(Configuration)"</_BtlsBuildCommand> + </PropertyGroup> + <Target Name="_AfterBuildExternalBtls" Condition="'$(MONO_ENABLE_BTLS)' == 'true'"> + <Exec Command="$(_BtlsBuildCommand) "Build" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> + <Output TaskParameter="ExitCode" PropertyName="_BuildExternalBtlsExitCode" /> + </Exec> + </Target> + <Target Name="_AfterCleanExternalBtls" Condition="'$(MONO_ENABLE_BTLS)' == 'true'"> + <Exec Command="$(_BtlsBuildCommand) "Clean" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> + <Output TaskParameter="ExitCode" PropertyName="_CleanExternalBtlsExitCode" /> + </Exec> + </Target> + <Target Name="AfterBuild" DependsOnTargets="_ConfigureExternalMonoBTLSBuildEnvironment;_AfterBuildExternalBtls" /> + <Target Name="AfterClean" DependsOnTargets="_ConfigureExternalMonoBTLSBuildEnvironment;_AfterCleanExternalBtls" /> </Project> \ No newline at end of file diff --git a/msvc/build-external-llvm.vcxproj b/msvc/build-external-llvm.vcxproj index 92ccd49fe1..9b06ed7f69 100644 --- a/msvc/build-external-llvm.vcxproj +++ b/msvc/build-external-llvm.vcxproj @@ -1,184 +1,191 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{C3D4C623-55F8-4653-980D-61AA629B4E1D}</ProjectGuid> - <RootNamespace>buildexternalllvm</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="mono.external.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> - <PropertyGroup> - <_LLVMCFlags Condition="'$(MONO_PREPROCESSOR_DEFINITIONS)' != ''">$(MONO_PREPROCESSOR_DEFINITIONS.Replace(";"," "))</_LLVMCFlags> - <_LLVMCFlags>$(_LLVMCFlags.Trim())</_LLVMCFlags> - <_LLVMCFlags Condition="'$(_LLVMCFlags)' != ''">-D$(_LLVMCFlags.Replace(" "," -D"))</_LLVMCFlags> - <_LLVMEnableAsserts>-DLLVM_ENABLE_ASSERTIONS=Off</_LLVMEnableAsserts> - <_LLVMEnableAsserts Condition="'$(MONO_ENABLE_LLVM_ASSERTS)' == 'true'">-DLLVM_ENABLE_ASSERTIONS=On</_LLVMEnableAsserts> - <_LLVMAdditionalCMakeArgs>$(_LLVMEnableAsserts)</_LLVMAdditionalCMakeArgs> - <_LLVMBuildCommand>build-external-llvm.bat "$(_LLVMSourceDir)" "$(_LLVMBuildDir)" "$(_LLVMInstallDir)" "$(_MonoOutputDir)" "$(_LLVMCFlags)" "$(_LLVMAdditionalCMakeArgs)" "$(Platform)" "$(Configuration)"</_LLVMBuildCommand> - </PropertyGroup> - <Target Name="_AfterBuildExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> - <Exec Command="$(_LLVMBuildCommand) "Build" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> - <Output TaskParameter="ExitCode" PropertyName="_BuildExternalLLVMExitCode" /> - </Exec> - </Target> - <Target Name="_AfterCleanExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> - <Exec Command="$(_LLVMBuildCommand) "Clean" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> - <Output TaskParameter="ExitCode" PropertyName="_CleanExternalLLVMExitCode" /> - </Exec> - </Target> - <Target Name="AfterBuild" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_AfterBuildExternalLLVM" /> - <Target Name="AfterClean" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_AfterCleanExternalLLVM" /> - - <Target Name="_GetLLVMConfig" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment" Returns="@(_GetLLVMConfigOutputItems)"> - <ItemGroup> - <_GetLLVMConfigOutputItems Include="$(_MonoLLVMConfig)" /> - </ItemGroup> - </Target> - +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{C3D4C623-55F8-4653-980D-61AA629B4E1D}</ProjectGuid> + <RootNamespace>buildexternalllvm</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <Import Project="mono.external.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + <PropertyGroup> + <_LLVMCFlags Condition="'$(MONO_PREPROCESSOR_DEFINITIONS)' != ''">$(MONO_PREPROCESSOR_DEFINITIONS.Replace(";"," "))</_LLVMCFlags> + <_LLVMCFlags>$(_LLVMCFlags.Trim())</_LLVMCFlags> + <_LLVMCFlags Condition="'$(_LLVMCFlags)' != ''">-D$(_LLVMCFlags.Replace(" "," -D"))</_LLVMCFlags> + <_LLVMEnableAsserts>-DLLVM_ENABLE_ASSERTIONS=Off</_LLVMEnableAsserts> + <_LLVMEnableAsserts Condition="'$(MONO_ENABLE_LLVM_ASSERTS)' == 'true'">-DLLVM_ENABLE_ASSERTIONS=On</_LLVMEnableAsserts> + <_LLVMAdditionalCMakeArgs>$(_LLVMEnableAsserts)</_LLVMAdditionalCMakeArgs> + <_LLVMBuildCommand>build-external-llvm.bat "$(_LLVMSourceDir)" "$(_LLVMBuildDir)" "$(_LLVMInstallDir)" "$(_MonoOutputDir)" "$(_LLVMCFlags)" "$(_LLVMAdditionalCMakeArgs)" "$(Platform)" "$(Configuration)"</_LLVMBuildCommand> + </PropertyGroup> + <Target Name="_LLVMBuild" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> + <Exec Command="$(_LLVMBuildCommand) "Build" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)"" Condition="'$(_MonoEnableInternalLLVM)' == 'true'"> + <Output TaskParameter="ExitCode" PropertyName="_BuildExternalLLVMExitCode" /> + </Exec> + </Target> + <Target Name="_LLVMInstallBuild" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableExternalLLVM)' == 'true'" DependsOnTargets="_SetupMonoLLVMBuildProperties"> + <Exec Command="install-llvm-mono-build.bat "$(MONO_LLVM_BIN_DIR)\.." "$(_MonoOutputDir)""> + <Output TaskParameter="ExitCode" PropertyName="_BuildExternalLLVMExitCode" /> + </Exec> + </Target> + <Target Name="_LLVMCleanBuild" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> + <Exec Command="$(_LLVMBuildCommand) "Clean" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> + <Output TaskParameter="ExitCode" PropertyName="_CleanExternalLLVMExitCode" /> + </Exec> + </Target> + <Target Name="_AfterBuildExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true'" DependsOnTargets="_LLVMBuild;_LLVMInstallBuild" /> + <Target Name="_AfterCleanExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true'" DependsOnTargets="_LLVMCleanBuild" /> + <Target Name="AfterBuild" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_AfterBuildExternalLLVM" /> + <Target Name="AfterClean" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_AfterCleanExternalLLVM" /> + + <Target Name="_GetLLVMConfig" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment" Returns="@(_GetLLVMConfigOutputItems)"> + <ItemGroup> + <_GetLLVMConfigOutputItems Include="$(_MonoLLVMConfig)" /> + </ItemGroup> + </Target> + </Project> \ No newline at end of file diff --git a/msvc/build-init.vcxproj b/msvc/build-init.vcxproj index 2b6f883483..3ae06c6936 100644 --- a/msvc/build-init.vcxproj +++ b/msvc/build-init.vcxproj @@ -1,188 +1,191 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\config.h" /> - <ClInclude Include="..\winconfig.h" /> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{92AE7622-5F58-4234-9A26-9EC71876B3F4}</ProjectGuid> - <RootNamespace>buildinit</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="mono.external.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> - - <Target Name="AfterBuildWinSetup"> - <PropertyGroup> - <_OptionalDefines Condition="'$(MONO_ENABLE_BTLS)' == 'true'">$(_OptionalDefines);HAVE_BTLS</_OptionalDefines> - <_OptionalDefines Condition="'$(MONO_ENABLE_LLVM)' == 'true'">$(_OptionalDefines);ENABLE_LLVM;ENABLE_LLVM_RUNTIME</_OptionalDefines> - <_OptionalDefines>$(_OptionalDefines.Trim(';'))</_OptionalDefines> - </PropertyGroup> - <Exec Command="winsetup.bat "$(_OptionalDefines)""> - <Output TaskParameter="ExitCode" PropertyName="WinSetupExitCode" /> - </Exec> - <Error Text="Failed running winsetup.bat" Condition="$(WinSetupExitCode) != 0" /> - </Target> - - <Target Name="AfterBuild" DependsOnTargets="AfterBuildWinSetup" /> - - <Target Name="_BackupConfigFile" Condition="'$(_MonoConfigFileBackupExists)' != 'true' and Exists('$(MONO_DIR)/config.h')"> - <Copy SourceFiles="$(MONO_DIR)/config.h" DestinationFiles="$(MONO_DIR)/cygconfig.h" /> - </Target> - - <Target Name="_CheckConfigFile"> - <_CheckConfigurationProperty ConfFile="$(MONO_DIR)/config.h" ConfRegEx="#include.*cygconfig.h.*"> - <Output TaskParameter="ConfPropertyFoundMatch" PropertyName="_MonoConfigFileBackupExists" /> - </_CheckConfigurationProperty> - </Target> - - <PropertyGroup> - <PrepareForBuildDependsOn> - _CheckConfigFile; - _BackupConfigFile; - $(PrepareForBuildDependsOn); - </PrepareForBuildDependsOn> - </PropertyGroup> - +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\config.h" /> + <ClInclude Include="..\winconfig.h" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{92AE7622-5F58-4234-9A26-9EC71876B3F4}</ProjectGuid> + <RootNamespace>buildinit</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <Import Project="mono.external.targets" /> + <Import Project="mono.winconfig.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + + <Target Name="AfterBuildWinSetup"> + <PropertyGroup> + <_EnableDefines Condition="'$(MONO_ENABLE_LLVM)' == 'true'">$(_EnableDefines);ENABLE_LLVM;ENABLE_LLVM_RUNTIME</_EnableDefines> + <_EnableDefines Condition="'$(MONO_ENABLE_NETCORE)' == 'true'">$(_EnableDefines);ENABLE_NETCORE</_EnableDefines> + <_HaveDefines Condition="'$(MONO_ENABLE_BTLS)' == 'true'">$(_HaveDefines);HAVE_BTLS</_HaveDefines> + <_EnableDefines>$(_EnableDefines.Trim(';'))</_EnableDefines> + <_HaveDefines>$(_HaveDefines.Trim(';'))</_HaveDefines> + </PropertyGroup> + <WinConfigSetup ConfigFileRoot="$(MSBuildThisFileDirectory)..\" + DisableDefines="" + EnableDefines="$(_EnableDefines)" + HaveDefines="$(_HaveDefines)"/> + </Target> + + <Target Name="AfterBuild" DependsOnTargets="AfterBuildWinSetup" /> + + <Target Name="_BackupConfigFile" Condition="'$(_MonoConfigFileBackupExists)' != 'true' and Exists('$(MONO_DIR)/config.h')"> + <Copy SourceFiles="$(MONO_DIR)/config.h" DestinationFiles="$(MONO_DIR)/cygconfig.h" /> + </Target> + + <Target Name="_CheckConfigFile"> + <_CheckConfigurationProperty ConfFile="$(MONO_DIR)/config.h" ConfRegEx="#include.*cygconfig.h.*"> + <Output TaskParameter="ConfPropertyFoundMatch" PropertyName="_MonoConfigFileBackupExists" /> + </_CheckConfigurationProperty> + </Target> + + <PropertyGroup> + <PrepareForBuildDependsOn> + _CheckConfigFile; + _BackupConfigFile; + $(PrepareForBuildDependsOn); + </PrepareForBuildDependsOn> + </PropertyGroup> + </Project> \ No newline at end of file diff --git a/msvc/build-install.vcxproj b/msvc/build-install.vcxproj index a50201f207..3482ba3301 100644 --- a/msvc/build-install.vcxproj +++ b/msvc/build-install.vcxproj @@ -1,151 +1,151 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{A9DC644B-9171-4FCD-BF21-2CC6D055FC40}</ProjectGuid> - <RootNamespace>buildinstall</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="build-package.vcxproj"> - <Project>{b6e563b8-7f57-4f7f-9439-f2405d4e2522}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{A9DC644B-9171-4FCD-BF21-2CC6D055FC40}</ProjectGuid> + <RootNamespace>buildinstall</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command>.\install.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" "$(MONO_INSTALL_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="build-package.vcxproj"> + <Project>{b6e563b8-7f57-4f7f-9439-f2405d4e2522}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/build-package.vcxproj b/msvc/build-package.vcxproj index b4f6dab414..a4ae5ede4d 100644 --- a/msvc/build-package.vcxproj +++ b/msvc/build-package.vcxproj @@ -1,151 +1,151 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{B6E563B8-7F57-4F7F-9439-F2405D4E2522}</ProjectGuid> - <RootNamespace>buildpackage</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PostBuildEvent> - <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="build-all.vcxproj"> - <Project>{5362490b-8516-44ee-9987-014c015a080a}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{B6E563B8-7F57-4F7F-9439-F2405D4E2522}</ProjectGuid> + <RootNamespace>buildpackage</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PostBuildEvent> + <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent> + <Command>.\package.bat $(Platform) $(Configuration) "$(MONO_BUILD_DIR_PREFIX)" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="build-all.vcxproj"> + <Project>{5362490b-8516-44ee-9987-014c015a080a}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/eglib.vcxproj b/msvc/eglib.vcxproj index d8d275a00f..6d0657fd73 100644 --- a/msvc/eglib.vcxproj +++ b/msvc/eglib.vcxproj @@ -1,163 +1,163 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{158073ED-99AE-4196-9EDC-DDB2344F8466}</ProjectGuid> - <RootNamespace>eglib</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <Import Project="eglib.targets" /> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{158073ED-99AE-4196-9EDC-DDB2344F8466}</ProjectGuid> + <RootNamespace>eglib</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_EGLIB_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <Import Project="eglib.targets" /> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/genmdesc.vcxproj b/msvc/genmdesc.vcxproj index e6aa957065..bd3244b915 100644 --- a/msvc/genmdesc.vcxproj +++ b/msvc/genmdesc.vcxproj @@ -1,351 +1,351 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{B7098DFA-31E6-4006-8A15-1C9A4E925149}</ProjectGuid> - <RootNamespace>genmdesc</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TypeLibraryName>.\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb</TypeLibraryName> - <HeaderFileName> - </HeaderFileName> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <SuppressStartupBanner>true</SuppressStartupBanner> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent /> - <CustomBuildStep> - <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> - <Message>genmdesc.exe Custom Build Step.</Message> - <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.h</Outputs> - <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.md</Inputs> - </CustomBuildStep> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - <TypeLibraryName>.\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb</TypeLibraryName> - <HeaderFileName> - </HeaderFileName> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent /> - <CustomBuildStep> - <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> - </CustomBuildStep> - <CustomBuildStep> - <Message>genmdesc.exe Custom Build Step.</Message> - </CustomBuildStep> - <CustomBuildStep> - <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.h</Outputs> - </CustomBuildStep> - <CustomBuildStep> - <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.md</Inputs> - </CustomBuildStep> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TypeLibraryName>.\Release/genmdesc.tlb</TypeLibraryName> - <HeaderFileName> - </HeaderFileName> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent /> - <CustomBuildStep> - <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> - <Message>genmdesc.exe Custom Build Step.</Message> - <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.h</Outputs> - <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.md</Inputs> - </CustomBuildStep> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - <TypeLibraryName>.\Release/genmdesc.tlb</TypeLibraryName> - <HeaderFileName> - </HeaderFileName> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent /> - <CustomBuildStep> - <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> - <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.h</Outputs> - <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.md</Inputs> - <Message>genmdesc.exe Custom Build Step.</Message> - </CustomBuildStep> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\mini\genmdesc.c"> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - </PrecompiledHeader> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </PrecompiledHeader> - </ClCompile> - <ClCompile Include="..\mono\mini\helpers.c"> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - </PrecompiledHeader> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </PrecompiledHeader> - </ClCompile> - <ClCompile Include="..\mono\utils\monobitset.c"> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - </PrecompiledHeader> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </PrecompiledHeader> - </ClCompile> - <ClCompile Include="..\mono\metadata\opcodes.c"> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - </PrecompiledHeader> - <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - </PrecompiledHeader> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </PrecompiledHeader> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{B7098DFA-31E6-4006-8A15-1C9A4E925149}</ProjectGuid> + <RootNamespace>genmdesc</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TypeLibraryName>.\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb</TypeLibraryName> + <HeaderFileName> + </HeaderFileName> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent /> + <CustomBuildStep> + <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> + <Message>genmdesc.exe Custom Build Step.</Message> + <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.h</Outputs> + <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.md</Inputs> + </CustomBuildStep> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + <TypeLibraryName>.\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb</TypeLibraryName> + <HeaderFileName> + </HeaderFileName> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_DEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent /> + <CustomBuildStep> + <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> + </CustomBuildStep> + <CustomBuildStep> + <Message>genmdesc.exe Custom Build Step.</Message> + </CustomBuildStep> + <CustomBuildStep> + <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.h</Outputs> + </CustomBuildStep> + <CustomBuildStep> + <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.md</Inputs> + </CustomBuildStep> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TypeLibraryName>.\Release/genmdesc.tlb</TypeLibraryName> + <HeaderFileName> + </HeaderFileName> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent /> + <CustomBuildStep> + <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> + <Message>genmdesc.exe Custom Build Step.</Message> + <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.h</Outputs> + <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-x86.md</Inputs> + </CustomBuildStep> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + <TypeLibraryName>.\Release/genmdesc.tlb</TypeLibraryName> + <HeaderFileName> + </HeaderFileName> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>NDEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent /> + <CustomBuildStep> + <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command> + <Outputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.h</Outputs> + <Inputs>$(MONO_INCLUDE_DIR)\mini\cpu-amd64.md</Inputs> + <Message>genmdesc.exe Custom Build Step.</Message> + </CustomBuildStep> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\mini\genmdesc.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + </PrecompiledHeader> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + </PrecompiledHeader> + </ClCompile> + <ClCompile Include="..\mono\mini\helpers.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + </PrecompiledHeader> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + </PrecompiledHeader> + </ClCompile> + <ClCompile Include="..\mono\utils\monobitset.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + </PrecompiledHeader> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + </PrecompiledHeader> + </ClCompile> + <ClCompile Include="..\mono\metadata\opcodes.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + </PrecompiledHeader> + <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + </PrecompiledHeader> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + </PrecompiledHeader> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/libgc.vcxproj b/msvc/libgc.vcxproj index abfef90a3a..62040607eb 100644 --- a/msvc/libgc.vcxproj +++ b/msvc/libgc.vcxproj @@ -1,148 +1,148 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{EB56000B-C80B-4E8B-908D-D84D31B517D3}</ProjectGuid> - <RootNamespace>libgc</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4311;4312;4996;4005;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <WarningLevel>Level3</WarningLevel> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4311;4312;4996;4005;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <Import Project="libgc.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{EB56000B-C80B-4E8B-908D-D84D31B517D3}</ProjectGuid> + <RootNamespace>libgc</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4311;4312;4996;4005;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <WarningLevel>Level3</WarningLevel> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_DEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4311;4312;4996;4005;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_LIBGC_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME="libgc-mono";PACKAGE_TARNAME="libgc-mono";PACKAGE_VERSION="6.6";PACKAGE_STRING="libgc-mono 6.6";PACKAGE_BUGREPORT="Hans_Boehm%40hp.com";GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <Lib /> + </ItemDefinitionGroup> + <Import Project="libgc.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/libgcmonosgen.vcxproj b/msvc/libgcmonosgen.vcxproj index 0266b75c65..de84e3aa8d 100644 --- a/msvc/libgcmonosgen.vcxproj +++ b/msvc/libgcmonosgen.vcxproj @@ -1,175 +1,175 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{C36612BD-22D3-4B95-85E2-7FDC4FC5D740}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>libmonosgen</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - <ProjectName>libgcmonosgen</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;_DEBUG;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;NDEBUG;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <Import Project="libgcmonosgen.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{C36612BD-22D3-4B95-85E2-7FDC4FC5D740}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>libmonosgen</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <ProjectName>libgcmonosgen</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;_DEBUG;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(SGEN_DEFINES);_LIB;NDEBUG;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <Import Project="libgcmonosgen.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/libmini.vcxproj b/msvc/libmini.vcxproj index e5c24e1a67..a8aea54d51 100644 --- a/msvc/libmini.vcxproj +++ b/msvc/libmini.vcxproj @@ -1,232 +1,232 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - <ProjectReference Include="genmdesc.vcxproj"> - <Project>{b7098dfa-31e6-4006-8a15-1c9a4e925149}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{88D2EB79-592D-45F8-B849-AE021C1D983A}</ProjectGuid> - <RootNamespace>libmini</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - </Link> - <PostBuildEvent /> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - </Link> - <PostBuildEvent /> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent /> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent /> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <Import Project="libmini.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="mono.external.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> - <Target Name="_SetupMonoLLVMCompileItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> - <ItemGroup> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>LLVM_API_VERSION=$(MONO_LLVM_API_VERSION);%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClCompile Condition="'%(ClCompile._MonoLLVMSourceFile)' == 'true'"> - <ExcludedFromBuild>false</ExcludedFromBuild> - </ClCompile> - </ItemGroup> - </Target> - <Target Name="_SetupMonoLLVMLinkItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> - <ItemGroup> - <Lib> - <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(Lib.AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>$(MONO_LLVM_LIBS);%(Lib.AdditionalDependencies)</AdditionalDependencies> - </Lib> - </ItemGroup> - </Target> - <Target Name="_ConfigureExternalCompileDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMCompileItems" /> - <Target Name="_ConfigureExternalLinkDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMLinkItems" /> - <PropertyGroup> - <PrepareForBuildDependsOn> - _ConfigureExternalCompileDependency; - $(PrepareForBuildDependsOn); - </PrepareForBuildDependsOn> - <ComputeLibInputsTargets> - $(ComputeLibInputsTargets); - _ConfigureExternalLinkDependency; - </ComputeLibInputsTargets> - </PropertyGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + <ProjectReference Include="genmdesc.vcxproj"> + <Project>{b7098dfa-31e6-4006-8a15-1c9a4e925149}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{88D2EB79-592D-45F8-B849-AE021C1D983A}</ProjectGuid> + <RootNamespace>libmini</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <PostBuildEvent /> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <PostBuildEvent /> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent /> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent /> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <Import Project="libmini.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <Import Project="mono.external.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + <Target Name="_SetupMonoLLVMCompileItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> + <ItemGroup> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>LLVM_API_VERSION=$(MONO_LLVM_API_VERSION);%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClCompile Condition="'%(ClCompile._MonoLLVMSourceFile)' == 'true'"> + <ExcludedFromBuild>false</ExcludedFromBuild> + </ClCompile> + </ItemGroup> + </Target> + <Target Name="_SetupMonoLLVMLinkItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> + <ItemGroup> + <Lib> + <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(Lib.AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>$(MONO_LLVM_LIBS);%(Lib.AdditionalDependencies)</AdditionalDependencies> + </Lib> + </ItemGroup> + </Target> + <Target Name="_ConfigureExternalCompileDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMCompileItems" /> + <Target Name="_ConfigureExternalLinkDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMLinkItems" /> + <PropertyGroup> + <PrepareForBuildDependsOn> + _ConfigureExternalCompileDependency; + $(PrepareForBuildDependsOn); + </PrepareForBuildDependsOn> + <ComputeLibInputsTargets> + $(ComputeLibInputsTargets); + _ConfigureExternalLinkDependency; + </ComputeLibInputsTargets> + </PropertyGroup> </Project> \ No newline at end of file diff --git a/msvc/libmono-dynamic.vcxproj b/msvc/libmono-dynamic.vcxproj index 5fe31adc64..76d231aef5 100644 --- a/msvc/libmono-dynamic.vcxproj +++ b/msvc/libmono-dynamic.vcxproj @@ -1,292 +1,292 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{675F4175-FFB1-480D-AD36-F397578844D4}</ProjectGuid> - <RootNamespace>libmono-dynamic</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <ModuleDefinitionFile> - </ModuleDefinitionFile> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <ModuleDefinitionFile> - </ModuleDefinitionFile> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference /> - <Link> - <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <ModuleDefinitionFile> - </ModuleDefinitionFile> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> - </PostBuildEvent> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference /> - <Link> - <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <ModuleDefinitionFile> - </ModuleDefinitionFile> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> - </PostBuildEvent> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="genmdesc.vcxproj"> - <Project>{b7098dfa-31e6-4006-8a15-1c9a4e925149}</Project> - </ProjectReference> - <ProjectReference Include="libgc.vcxproj"> - <Project>{eb56000b-c80b-4e8b-908d-d84d31b517d3}</Project> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <ClCompile Include="$(MonoSourceLocation)\mono\mini\mini-windows-dllmain.c" /> - </ItemGroup> - <Import Project="eglib.targets" /> - <Import Project="libmonoutils.targets" /> - <Import Project="libmonoruntime.targets" /> - <Import Project="libmini.targets" /> - <Import Project="libgcmonosgen.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="mono.external.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> - <Target Name="_SetupMonoLLVMCompileItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> - <ItemGroup> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>LLVM_API_VERSION=$(MONO_LLVM_API_VERSION);%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClCompile Condition="'%(ClCompile._MonoLLVMSourceFile)' == 'true'"> - <ExcludedFromBuild>false</ExcludedFromBuild> - </ClCompile> - </ItemGroup> - </Target> - <Target Name="_SetupMonoLLVMLinkItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> - <ItemGroup> - <Link> - <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(Link.AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>$(MONO_LLVM_LIBS);%(Link.AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemGroup> - </Target> - <Target Name="_ConfigureExternalCompileDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMCompileItems" /> - <Target Name="_ConfigureExternalLinkDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMLinkItems" /> - <PropertyGroup> - <PrepareForBuildDependsOn> - _ConfigureExternalCompileDependency; - $(PrepareForBuildDependsOn); - </PrepareForBuildDependsOn> - <ComputeLinkInputsTargets> - $(ComputeLinkInputsTargets); - _ConfigureExternalLinkDependency; - </ComputeLinkInputsTargets> - </PropertyGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{675F4175-FFB1-480D-AD36-F397578844D4}</ProjectGuid> + <RootNamespace>libmono-dynamic</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-2.0$(MONO_TARGET_SUFFIX)</TargetName> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <ModuleDefinitionFile> + </ModuleDefinitionFile> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + <PostBuildEvent> + <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <ModuleDefinitionFile> + </ModuleDefinitionFile> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + <PostBuildEvent> + <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference /> + <Link> + <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <ModuleDefinitionFile> + </ModuleDefinitionFile> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + <PostBuildEvent> + <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> + </PostBuildEvent> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference /> + <Link> + <AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <ModuleDefinitionFile> + </ModuleDefinitionFile> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + <PostBuildEvent> + <Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command> + </PostBuildEvent> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="genmdesc.vcxproj"> + <Project>{b7098dfa-31e6-4006-8a15-1c9a4e925149}</Project> + </ProjectReference> + <ProjectReference Include="libgc.vcxproj"> + <Project>{eb56000b-c80b-4e8b-908d-d84d31b517d3}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ClCompile Include="$(MonoSourceLocation)\mono\mini\mini-windows-dllmain.c" /> + </ItemGroup> + <Import Project="eglib.targets" /> + <Import Project="libmonoutils.targets" /> + <Import Project="libmonoruntime.targets" /> + <Import Project="libmini.targets" /> + <Import Project="libgcmonosgen.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <Import Project="mono.external.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + <Target Name="_SetupMonoLLVMCompileItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> + <ItemGroup> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>LLVM_API_VERSION=$(MONO_LLVM_API_VERSION);%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClCompile Condition="'%(ClCompile._MonoLLVMSourceFile)' == 'true'"> + <ExcludedFromBuild>false</ExcludedFromBuild> + </ClCompile> + </ItemGroup> + </Target> + <Target Name="_SetupMonoLLVMLinkItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> + <ItemGroup> + <Link> + <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(Link.AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>$(MONO_LLVM_LIBS);%(Link.AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemGroup> + </Target> + <Target Name="_ConfigureExternalCompileDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMCompileItems" /> + <Target Name="_ConfigureExternalLinkDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMLinkItems" /> + <PropertyGroup> + <PrepareForBuildDependsOn> + _ConfigureExternalCompileDependency; + $(PrepareForBuildDependsOn); + </PrepareForBuildDependsOn> + <ComputeLinkInputsTargets> + $(ComputeLinkInputsTargets); + _ConfigureExternalLinkDependency; + </ComputeLinkInputsTargets> + </PropertyGroup> </Project> \ No newline at end of file diff --git a/msvc/libmono-static.vcxproj b/msvc/libmono-static.vcxproj index 19e7071fc1..a9d6f6377f 100644 --- a/msvc/libmono-static.vcxproj +++ b/msvc/libmono-static.vcxproj @@ -1,225 +1,225 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{CB0D9E92-293C-439C-9AC7-C5F59B6E0772}</ProjectGuid> - <RootNamespace>libmono-static</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - </Link> - <PostBuildEvent /> - <Lib /> - <ProjectReference /> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - </Link> - <PostBuildEvent /> - <Lib /> - <ProjectReference /> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent /> - <Lib /> - <ProjectReference /> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <WarningLevel>Level3</WarningLevel> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent /> - <Lib /> - <ProjectReference /> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - <ProjectReference Condition="'$(MONO_TARGET_GC)'=='boehm'" Include="libgc.vcxproj"> - <Project>{eb56000b-c80b-4e8b-908d-d84d31b517d3}</Project> - </ProjectReference> - <ProjectReference Condition="'$(MONO_TARGET_GC)'=='sgen'" Include="libgcmonosgen.vcxproj"> - <Project>{c36612bd-22d3-4b95-85e2-7fdc4fc5d740}</Project> - </ProjectReference> - <ProjectReference Include="libmini.vcxproj"> - <Project>{88d2eb79-592d-45f8-b849-ae021c1d983a}</Project> - </ProjectReference> - <ProjectReference Include="libmonoruntime.vcxproj"> - <Project>{c36612bd-22d3-4b95-85e2-7fdc4fc5d739}</Project> - </ProjectReference> - <ProjectReference Include="libmonoutils.vcxproj"> - <Project>{8fc2b0c8-51ad-49df-851f-5d01a77a75e4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{CB0D9E92-293C-439C-9AC7-C5F59B6E0772}</ProjectGuid> + <RootNamespace>libmono-static</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <PostBuildEvent /> + <Lib /> + <ProjectReference /> + <ProjectReference> + <LinkLibraryDependencies>true</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <PostBuildEvent /> + <Lib /> + <ProjectReference /> + <ProjectReference> + <LinkLibraryDependencies>true</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent /> + <Lib /> + <ProjectReference /> + <ProjectReference> + <LinkLibraryDependencies>true</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level3</WarningLevel> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PostBuildEvent /> + <Lib /> + <ProjectReference /> + <ProjectReference> + <LinkLibraryDependencies>true</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + <ProjectReference Condition="'$(MONO_TARGET_GC)'=='boehm'" Include="libgc.vcxproj"> + <Project>{eb56000b-c80b-4e8b-908d-d84d31b517d3}</Project> + </ProjectReference> + <ProjectReference Condition="'$(MONO_TARGET_GC)'=='sgen'" Include="libgcmonosgen.vcxproj"> + <Project>{c36612bd-22d3-4b95-85e2-7fdc4fc5d740}</Project> + </ProjectReference> + <ProjectReference Include="libmini.vcxproj"> + <Project>{88d2eb79-592d-45f8-b849-ae021c1d983a}</Project> + </ProjectReference> + <ProjectReference Include="libmonoruntime.vcxproj"> + <Project>{c36612bd-22d3-4b95-85e2-7fdc4fc5d739}</Project> + </ProjectReference> + <ProjectReference Include="libmonoutils.vcxproj"> + <Project>{8fc2b0c8-51ad-49df-851f-5d01a77a75e4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/libmonodac.vcxproj b/msvc/libmonodac.vcxproj index a66edd90ea..4af5b0c589 100644 --- a/msvc/libmonodac.vcxproj +++ b/msvc/libmonodac.vcxproj @@ -1,148 +1,148 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}</ProjectGuid> - <RootNamespace>libmonodac</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-2.0-dac$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-2.0-dac$(MONO_TARGET_SUFFIX)</TargetName> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <PrecompiledHeaderOutputFile> - </PrecompiledHeaderOutputFile> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <WarningLevel>Level3</WarningLevel> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <ModuleDefinitionFile> - </ModuleDefinitionFile> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <PrecompiledHeader> - </PrecompiledHeader> - <PrecompiledHeaderOutputFile> - </PrecompiledHeaderOutputFile> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0409</Culture> - </ResourceCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <ModuleDefinitionFile> - </ModuleDefinitionFile> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\mini\mini-windows-dlldac.c" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="build-init.vcxproj"> - <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}</ProjectGuid> + <RootNamespace>libmonodac</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-2.0-dac$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-2.0-dac$(MONO_TARGET_SUFFIX)</TargetName> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <PrecompiledHeaderOutputFile> + </PrecompiledHeaderOutputFile> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <WarningLevel>Level3</WarningLevel> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ModuleDefinitionFile> + </ModuleDefinitionFile> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <PrecompiledHeader> + </PrecompiledHeader> + <PrecompiledHeaderOutputFile> + </PrecompiledHeaderOutputFile> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0409</Culture> + </ResourceCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ModuleDefinitionFile> + </ModuleDefinitionFile> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\mini\mini-windows-dlldac.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="build-init.vcxproj"> + <Project>{92ae7622-5f58-4234-9a26-9ec71876b3f4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/libmonoruntime.vcxproj b/msvc/libmonoruntime.vcxproj index 0694b198a7..b899fb9c76 100644 --- a/msvc/libmonoruntime.vcxproj +++ b/msvc/libmonoruntime.vcxproj @@ -1,178 +1,178 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{C36612BD-22D3-4B95-85E2-7FDC4FC5D739}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>libmonoruntime</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <Import Project="libmonoruntime.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{C36612BD-22D3-4B95-85E2-7FDC4FC5D739}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>libmonoruntime</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_LIB;$(GC_DEFINES);WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <Import Project="libmonoruntime.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/libmonoutils.vcxproj b/msvc/libmonoutils.vcxproj index e49c85fdbc..dfd623c5a5 100644 --- a/msvc/libmonoutils.vcxproj +++ b/msvc/libmonoutils.vcxproj @@ -1,182 +1,182 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>libmonoutils</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <Import Project="libmonoutils.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>libmonoutils</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <Import Project="libmonoutils.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> </Project> \ No newline at end of file diff --git a/msvc/libtest.vcxproj b/msvc/libtest.vcxproj index 852369615b..fac5b99199 100644 --- a/msvc/libtest.vcxproj +++ b/msvc/libtest.vcxproj @@ -1,178 +1,178 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}</ProjectGuid> - <RootNamespace>libtest</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\tests\libtest.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}</ProjectGuid> + <RootNamespace>libtest</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\tests\libtest.cpp" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/mono-full-aot-compile-test.vcxproj b/msvc/mono-full-aot-compile-test.vcxproj index 1ccf4e7563..b5a9255891 100644 --- a/msvc/mono-full-aot-compile-test.vcxproj +++ b/msvc/mono-full-aot-compile-test.vcxproj @@ -1,203 +1,203 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{C7D83158-4EB6-4409-8730-612AD45FAF6A}</ProjectGuid> - <RootNamespace>monofullaotcompiletest</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="mono.vcxproj"> - <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{C7D83158-4EB6-4409-8730-612AD45FAF6A}</ProjectGuid> + <RootNamespace>monofullaotcompiletest</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_COMPILE_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="mono.vcxproj"> + <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/mono-full-aot-run-test.vcxproj b/msvc/mono-full-aot-run-test.vcxproj index e16fcf235f..60b065c00c 100644 --- a/msvc/mono-full-aot-run-test.vcxproj +++ b/msvc/mono-full-aot-run-test.vcxproj @@ -1,203 +1,203 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{6C64262B-077B-4E12-AF91-9409ECCB75F6}</ProjectGuid> - <RootNamespace>monofullaotruntest</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-full-aot-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="mono.vcxproj"> - <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{6C64262B-077B-4E12-AF91-9409ECCB75F6}</ProjectGuid> + <RootNamespace>monofullaotruntest</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-full-aot-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_FULL_AOT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_FULL_AOT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="mono.vcxproj"> + <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/mono-mini-regression-test.vcxproj b/msvc/mono-mini-regression-test.vcxproj index 3b853a182a..a9a6d5fe5c 100644 --- a/msvc/mono-mini-regression-test.vcxproj +++ b/msvc/mono-mini-regression-test.vcxproj @@ -1,204 +1,204 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="mono.vcxproj"> - <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}</ProjectGuid> - <RootNamespace>monoregressiontest</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - <ProjectName>mono-mini-regression-test</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-mini-regression-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-mini-regression-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-mini-regression-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-mini-regression-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="mono.vcxproj"> + <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}</ProjectGuid> + <RootNamespace>monoregressiontest</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <ProjectName>mono-mini-regression-test</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-mini-regression-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-mini-regression-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-mini-regression-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-mini-regression-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_MINI_REGRESSION_TEST_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_MINI_REGRESSION_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/mono-nunit-test.vcxproj b/msvc/mono-nunit-test.vcxproj index 0e9d6f8e6d..8b41fc6318 100644 --- a/msvc/mono-nunit-test.vcxproj +++ b/msvc/mono-nunit-test.vcxproj @@ -1,224 +1,224 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="mono.vcxproj"> - <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{0046B994-40A8-4C64-AC9D-429DC9177B54}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>mononunittest</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-nunit-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-nunit-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-nunit-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-nunit-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="mono.vcxproj"> + <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{0046B994-40A8-4C64-AC9D-429DC9177B54}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>mononunittest</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-nunit-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-nunit-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-nunit-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-nunit-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_NUNIT_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_NUNIT_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/mono-profiler-log.vcxproj b/msvc/mono-profiler-log.vcxproj new file mode 100644 index 0000000000..f745c7381e --- /dev/null +++ b/msvc/mono-profiler-log.vcxproj @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{8C02A728-7A50-43CE-B507-BDFC05B7EA94}</ProjectGuid> + <RootNamespace>mono-profiler-log</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mono-profiler-log</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-profiler-log</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mono-profiler-log</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-profiler-log</TargetName> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;MONO_DLL_EXPORT;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;MONO_DLL_EXPORT;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;MONO_DLL_EXPORT;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;MONO_DLL_EXPORT;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\profiler\log-args.c" /> + <ClCompile Include="..\mono\profiler\log.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + <ProjectReference Include="libmono-dynamic.vcxproj"> + <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\mono\profiler\log.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/msvc/mono-testdriver-test.vcxproj b/msvc/mono-testdriver-test.vcxproj index fce7b4dfa2..794ed37c8c 100644 --- a/msvc/mono-testdriver-test.vcxproj +++ b/msvc/mono-testdriver-test.vcxproj @@ -1,220 +1,220 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="mono.vcxproj"> - <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> - </ProjectReference> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{7BECCFA0-28A0-4995-9856-558560F720E6}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>monotestdrivertest</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Utility</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-testdriver-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-Win32.props" /> - <Import Project="mono-testdriver-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-testdriver-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - <Import Project="mono-test.props" /> - <Import Project="mono-test-x64.props" /> - <Import Project="mono-testdriver-test.props" /> - <Import Project="mono-test-env.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> - <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> - <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> - <LocalDebuggerEnvironment>$(MONO_PATH_ENV) -$(MONO_CFG_DIR_ENV) -$(MONO_TOOLCHAIN_PATH_ENV) -$(MONO_LOG_LEVEL_ENV) -$(MONO_LOG_MASK_ENV) -$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PreBuildEvent> - <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86</Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - </ClCompile> - <PreBuildEvent> - <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86-64</Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86</Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PreBuildEvent> - <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86-64</Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="mono.vcxproj"> + <Project>{a0eddcd9-940f-432c-a28f-7ef322437d79}</Project> + </ProjectReference> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{7BECCFA0-28A0-4995-9856-558560F720E6}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>monotestdrivertest</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Utility</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-testdriver-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-Win32.props" /> + <Import Project="mono-testdriver-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-testdriver-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + <Import Project="mono-test.props" /> + <Import Project="mono-test-x64.props" /> + <Import Project="mono-testdriver-test.props" /> + <Import Project="mono-test-env.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\</OutDir> + <IntDir>$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LocalDebuggerCommand>$(MONO_EXECUTABLE)</LocalDebuggerCommand> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + <LocalDebuggerCommandArguments>$(MONO_TESTDRIVER_RUN_ARGS)</LocalDebuggerCommandArguments> + <LocalDebuggerWorkingDirectory>$(MONO_TESTDRIVER_TEST_DIR)</LocalDebuggerWorkingDirectory> + <LocalDebuggerEnvironment>$(MONO_PATH_ENV) +$(MONO_CFG_DIR_ENV) +$(MONO_TOOLCHAIN_PATH_ENV) +$(MONO_LOG_LEVEL_ENV) +$(MONO_LOG_MASK_ENV) +$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PreBuildEvent> + <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86</Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + </ClCompile> + <PreBuildEvent> + <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86-64</Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86</Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <PreBuildEvent> + <Command>test-config-setup.bat "$(MONO_CONFIG_PATH)" "$(MONO_EXECUTABLE_DIR)" x86-64</Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/mono.props b/msvc/mono.props index bee40b1dda..559401bcb3 100644 --- a/msvc/mono.props +++ b/msvc/mono.props @@ -27,6 +27,8 @@ <MONO_COMPILE_AS_CPP>false</MONO_COMPILE_AS_CPP> <!-- When true, mono binaries will link and include BTLS. When false, mono binaries will not link and include BTLS. --> <MONO_ENABLE_BTLS>false</MONO_ENABLE_BTLS> + <!-- When true, mono binaries will be compiled for use as a .NET Core runtime. --> + <MONO_ENABLE_NETCORE>false</MONO_ENABLE_NETCORE> </PropertyGroup> <PropertyGroup Label="MonoDirectories"> <MonoSourceLocation Condition="'$(MonoSourceLocation)' == '' ">..</MonoSourceLocation> @@ -112,6 +114,9 @@ <BuildMacro Include="MONO_ENABLE_BTLS"> <Value>$(MONO_ENABLE_BTLS)</Value> </BuildMacro> + <BuildMacro Include="MONO_ENABLE_NETCORE"> + <Value>$(MONO_ENABLE_NETCORE)</Value> + </BuildMacro> </ItemGroup> <PropertyGroup Label="MonoDefaultPreprocessorDefinitions"> <MONO_PREPROCESSOR_DEFINITIONS>__default_codegen__;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;HAVE_CONFIG_H;GC_NOT_DLL;WIN32_THREADS;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;_UNICODE;UNICODE;FD_SETSIZE=1024;NVALGRIND;$(MONO_ADDITIONAL_PREPROCESSOR_DEFINITIONS)</MONO_PREPROCESSOR_DEFINITIONS> diff --git a/msvc/mono.sln b/msvc/mono.sln index 6be57aa1ce..0cb250b921 100644 --- a/msvc/mono.sln +++ b/msvc/mono.sln @@ -1,483 +1,494 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EmbeddedSamples", "EmbeddedSamples", "{5FE09AA5-C3C9-45EA-A323-36A11B653CEC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{EE2CC761-9652-44AC-9204-7EB31194CAA6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{0EBA83B7-0EB4-4C83-A900-77300A97E8B1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{ECA11C76-E192-4F67-A8FA-28B637D9716F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmdesc", "genmdesc.vcxproj", "{B7098DFA-31E6-4006-8A15-1C9A4E925149}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-invoke", "test-invoke.vcxproj", "{C5639B3F-288A-4A4B-A4A5-C0D85834221D}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "teste", "teste.vcxproj", "{6FDE4E5E-57D0-432F-A987-6C226A7827E4}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono", "mono.vcxproj", "{A0EDDCD9-940F-432C-A28F-7EF322437D79}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc.vcxproj", "{EB56000B-C80B-4E8B-908D-D84D31B517D3}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodis", "monodis.vcxproj", "{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pedump", "pedump.vcxproj", "{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-metadata", "test-metadata.vcxproj", "{C2EB666E-9146-4B7A-85F6-25F9EA313770}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eglib", "eglib.vcxproj", "{158073ED-99AE-4196-9EDC-DDB2344F8466}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {C3D4C623-55F8-4653-980D-61AA629B4E1D} = {C3D4C623-55F8-4653-980D-61AA629B4E1D} - {E41DDF41-0916-454B-A7C2-6E410E45CAFD} = {E41DDF41-0916-454B-A7C2-6E410E45CAFD} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_eglib", "test_eglib.vcxproj", "{80A0620A-3478-4E1A-AA7C-0D2387B892AB}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtest", "libtest.vcxproj", "{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monoposixhelper", "monoposixhelper.vcxproj", "{33014734-0F46-4099-9A21-0C989E428681}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jay", "..\mcs\jay\jay.vcxproj", "{5D485D32-3B9F-4287-AB24-C8DA5B89F537}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Profilers", "Profilers", "{4CFD7702-60B2-4E82-BFAD-FCBB53EB4DA2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "profiler-vtune", "profiler-vtune.vcxproj", "{F51017F9-B7FB-4F87-B7B5-12799D965783}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmonoutils", "libmonoutils.vcxproj", "{8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmonoruntime", "libmonoruntime.vcxproj", "{C36612BD-22D3-4B95-85E2-7FDC4FC5D739}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Runtime", "Runtime", "{DE3617B4-17A8-4E5F-A00F-BA43D956881F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BuildTargets", "BuildTargets", "{DC782E23-920A-4873-82A7-37F195FB92C1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-all", "build-all.vcxproj", "{5362490B-8516-44EE-9987-014C015A080A}" - ProjectSection(ProjectDependencies) = postProject - {80A0620A-3478-4E1A-AA7C-0D2387B892AB} = {80A0620A-3478-4E1A-AA7C-0D2387B892AB} - {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {EB56000B-C80B-4E8B-908D-D84D31B517D3} - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4} = {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4} - {5D485D32-3B9F-4287-AB24-C8DA5B89F537} = {5D485D32-3B9F-4287-AB24-C8DA5B89F537} - {33014734-0F46-4099-9A21-0C989E428681} = {33014734-0F46-4099-9A21-0C989E428681} - {C5639B3F-288A-4A4B-A4A5-C0D85834221D} = {C5639B3F-288A-4A4B-A4A5-C0D85834221D} - {E41DDF41-0916-454B-A7C2-6E410E45CAFD} = {E41DDF41-0916-454B-A7C2-6E410E45CAFD} - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} = {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} = {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} - {6FDE4E5E-57D0-432F-A987-6C226A7827E4} = {6FDE4E5E-57D0-432F-A987-6C226A7827E4} - {C2EB666E-9146-4B7A-85F6-25F9EA313770} = {C2EB666E-9146-4B7A-85F6-25F9EA313770} - {675F4175-FFB1-480D-AD36-F397578844D4} = {675F4175-FFB1-480D-AD36-F397578844D4} - {88D2EB79-592D-45F8-B849-AE021C1D983A} = {88D2EB79-592D-45F8-B849-AE021C1D983A} - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53} = {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53} - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0772} - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739} = {C36612BD-22D3-4B95-85E2-7FDC4FC5D739} - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740} = {C36612BD-22D3-4B95-85E2-7FDC4FC5D740} - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4} = {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4} - {A0EDDCD9-940F-432C-A28F-7EF322437D79} = {A0EDDCD9-940F-432C-A28F-7EF322437D79} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} - {F51017F9-B7FB-4F87-B7B5-12799D965783} = {F51017F9-B7FB-4F87-B7B5-12799D965783} - {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {B7098DFA-31E6-4006-8A15-1C9A4E925149} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-init", "build-init.vcxproj", "{92AE7622-5F58-4234-9A26-9EC71876B3F4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-install", "build-install.vcxproj", "{A9DC644B-9171-4FCD-BF21-2CC6D055FC40}" - ProjectSection(ProjectDependencies) = postProject - {B6E563B8-7F57-4F7F-9439-F2405D4E2522} = {B6E563B8-7F57-4F7F-9439-F2405D4E2522} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-package", "build-package.vcxproj", "{B6E563B8-7F57-4F7F-9439-F2405D4E2522}" - ProjectSection(ProjectDependencies) = postProject - {5362490B-8516-44EE-9987-014C015A080A} = {5362490B-8516-44EE-9987-014C015A080A} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GC", "GC", "{21DF4C80-0EC9-4BFE-8552-2D47FCEF419A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgcmonosgen", "libgcmonosgen.vcxproj", "{C36612BD-22D3-4B95-85E2-7FDC4FC5D740}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-mini-regression-test", "mono-mini-regression-test.vcxproj", "{3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "jit", "jit", "{A0068765-334B-414C-8E21-8376CD2EC9F6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmono-static", "libmono-static.vcxproj", "{CB0D9E92-293C-439C-9AC7-C5F59B6E0772}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "full-aot", "full-aot", "{BACF489E-EAEB-42BF-9E0A-C54D7CF455B4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-full-aot-compile-test", "mono-full-aot-compile-test.vcxproj", "{C7D83158-4EB6-4409-8730-612AD45FAF6A}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-full-aot-run-test", "mono-full-aot-run-test.vcxproj", "{6C64262B-077B-4E12-AF91-9409ECCB75F6}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-testdriver-test", "mono-testdriver-test.vcxproj", "{7BECCFA0-28A0-4995-9856-558560F720E6}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-nunit-test", "mono-nunit-test.vcxproj", "{0046B994-40A8-4C64-AC9D-429DC9177B54}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmonodac", "libmonodac.vcxproj", "{DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmini", "libmini.vcxproj", "{88D2EB79-592D-45F8-B849-AE021C1D983A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmono-dynamic", "libmono-dynamic.vcxproj", "{675F4175-FFB1-480D-AD36-F397578844D4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External", "External", "{7AF3635B-001C-42BF-94B9-C036CFDCA71D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-external-btls", "build-external-btls.vcxproj", "{E41DDF41-0916-454B-A7C2-6E410E45CAFD}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-external-llvm", "build-external-llvm.vcxproj", "{C3D4C623-55F8-4653-980D-61AA629B4E1D}" - ProjectSection(ProjectDependencies) = postProject - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Win32.ActiveCfg = Debug|Win32 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Win32.Build.0 = Debug|Win32 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.ActiveCfg = Debug|x64 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.Build.0 = Debug|x64 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.ActiveCfg = Release|Win32 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.Build.0 = Release|Win32 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.ActiveCfg = Release|x64 - {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.Build.0 = Release|x64 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.ActiveCfg = Debug|Win32 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.Build.0 = Debug|Win32 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.ActiveCfg = Debug|x64 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.Build.0 = Debug|x64 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.ActiveCfg = Release|Win32 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.Build.0 = Release|Win32 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.ActiveCfg = Release|x64 - {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.Build.0 = Release|x64 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.ActiveCfg = Debug|Win32 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.Build.0 = Debug|Win32 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.ActiveCfg = Debug|x64 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.Build.0 = Debug|x64 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.ActiveCfg = Release|Win32 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.Build.0 = Release|Win32 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.ActiveCfg = Release|x64 - {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.Build.0 = Release|x64 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Win32.ActiveCfg = Debug|Win32 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Win32.Build.0 = Debug|Win32 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.ActiveCfg = Debug|x64 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.Build.0 = Debug|x64 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.ActiveCfg = Release|Win32 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.Build.0 = Release|Win32 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.ActiveCfg = Release|x64 - {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.Build.0 = Release|x64 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Win32.Build.0 = Debug|Win32 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.ActiveCfg = Debug|x64 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.Build.0 = Debug|x64 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.ActiveCfg = Release|Win32 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.Build.0 = Release|Win32 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.ActiveCfg = Release|x64 - {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.Build.0 = Release|x64 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.ActiveCfg = Debug|Win32 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.Build.0 = Debug|Win32 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.ActiveCfg = Debug|x64 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.Build.0 = Debug|x64 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.ActiveCfg = Release|Win32 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.Build.0 = Release|Win32 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.ActiveCfg = Release|x64 - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.Build.0 = Release|x64 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.Build.0 = Debug|Win32 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.ActiveCfg = Debug|x64 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.Build.0 = Debug|x64 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.ActiveCfg = Release|Win32 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.Build.0 = Release|Win32 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.ActiveCfg = Release|x64 - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.Build.0 = Release|x64 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.ActiveCfg = Debug|Win32 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.Build.0 = Debug|Win32 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.ActiveCfg = Debug|x64 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.Build.0 = Debug|x64 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.ActiveCfg = Release|Win32 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.Build.0 = Release|Win32 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.ActiveCfg = Release|x64 - {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.Build.0 = Release|x64 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|Win32.ActiveCfg = Debug|Win32 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|Win32.Build.0 = Debug|Win32 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.ActiveCfg = Debug|x64 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.Build.0 = Debug|x64 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|Win32.ActiveCfg = Release|Win32 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|Win32.Build.0 = Release|Win32 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.ActiveCfg = Release|x64 - {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.Build.0 = Release|x64 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|Win32.ActiveCfg = Debug|Win32 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|Win32.Build.0 = Debug|Win32 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.ActiveCfg = Debug|x64 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.Build.0 = Debug|x64 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|Win32.ActiveCfg = Release|Win32 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|Win32.Build.0 = Release|Win32 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.ActiveCfg = Release|x64 - {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.Build.0 = Release|x64 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|Win32.ActiveCfg = Debug|Win32 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|Win32.Build.0 = Debug|Win32 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.ActiveCfg = Debug|x64 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.Build.0 = Debug|x64 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|Win32.ActiveCfg = Release|Win32 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|Win32.Build.0 = Release|Win32 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.ActiveCfg = Release|x64 - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.Build.0 = Release|x64 - {33014734-0F46-4099-9A21-0C989E428681}.Debug|Win32.ActiveCfg = Debug|Win32 - {33014734-0F46-4099-9A21-0C989E428681}.Debug|Win32.Build.0 = Debug|Win32 - {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.ActiveCfg = Debug|x64 - {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.Build.0 = Debug|x64 - {33014734-0F46-4099-9A21-0C989E428681}.Release|Win32.ActiveCfg = Release|Win32 - {33014734-0F46-4099-9A21-0C989E428681}.Release|Win32.Build.0 = Release|Win32 - {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.ActiveCfg = Release|x64 - {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.Build.0 = Release|x64 - {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.ActiveCfg = Debug|Win32 - {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.Build.0 = Debug|Win32 - {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|x64.ActiveCfg = Debug|Win32 - {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.ActiveCfg = Release|Win32 - {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.Build.0 = Release|Win32 - {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|x64.ActiveCfg = Release|Win32 - {F51017F9-B7FB-4F87-B7B5-12799D965783}.Debug|Win32.ActiveCfg = Debug|Win32 - {F51017F9-B7FB-4F87-B7B5-12799D965783}.Debug|x64.ActiveCfg = Debug|x64 - {F51017F9-B7FB-4F87-B7B5-12799D965783}.Release|Win32.ActiveCfg = Release|Win32 - {F51017F9-B7FB-4F87-B7B5-12799D965783}.Release|x64.ActiveCfg = Release|x64 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|Win32.ActiveCfg = Debug|Win32 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|Win32.Build.0 = Debug|Win32 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|x64.ActiveCfg = Debug|x64 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|x64.Build.0 = Debug|x64 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|Win32.ActiveCfg = Release|Win32 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|Win32.Build.0 = Release|Win32 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|x64.ActiveCfg = Release|x64 - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|x64.Build.0 = Release|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|Win32.ActiveCfg = Debug|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|Win32.Build.0 = Debug|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|x64.ActiveCfg = Debug|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|x64.Build.0 = Debug|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|Win32.ActiveCfg = Release|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|Win32.Build.0 = Release|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|x64.ActiveCfg = Release|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|x64.Build.0 = Release|x64 - {5362490B-8516-44EE-9987-014C015A080A}.Debug|Win32.ActiveCfg = Debug|Win32 - {5362490B-8516-44EE-9987-014C015A080A}.Debug|x64.ActiveCfg = Debug|x64 - {5362490B-8516-44EE-9987-014C015A080A}.Release|Win32.ActiveCfg = Release|Win32 - {5362490B-8516-44EE-9987-014C015A080A}.Release|x64.ActiveCfg = Release|x64 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|Win32.ActiveCfg = Debug|Win32 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|Win32.Build.0 = Debug|Win32 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|x64.ActiveCfg = Debug|x64 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|x64.Build.0 = Debug|x64 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|Win32.ActiveCfg = Release|Win32 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|Win32.Build.0 = Release|Win32 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|x64.ActiveCfg = Release|x64 - {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|x64.Build.0 = Release|x64 - {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Debug|Win32.ActiveCfg = Debug|Win32 - {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Debug|x64.ActiveCfg = Debug|x64 - {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Release|Win32.ActiveCfg = Release|Win32 - {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Release|x64.ActiveCfg = Release|x64 - {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Debug|Win32.ActiveCfg = Debug|Win32 - {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Debug|x64.ActiveCfg = Debug|x64 - {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Release|Win32.ActiveCfg = Release|Win32 - {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Release|x64.ActiveCfg = Release|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|Win32.ActiveCfg = Debug|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|Win32.Build.0 = Debug|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|x64.ActiveCfg = Debug|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|x64.Build.0 = Debug|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|Win32.ActiveCfg = Release|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|Win32.Build.0 = Release|Win32 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|x64.ActiveCfg = Release|x64 - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|x64.Build.0 = Release|x64 - {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Debug|Win32.ActiveCfg = Debug|Win32 - {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Debug|x64.ActiveCfg = Debug|x64 - {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Release|Win32.ActiveCfg = Release|Win32 - {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Release|x64.ActiveCfg = Release|x64 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|Win32.ActiveCfg = Debug|Win32 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|Win32.Build.0 = Debug|Win32 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|x64.ActiveCfg = Debug|x64 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|x64.Build.0 = Debug|x64 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|Win32.ActiveCfg = Release|Win32 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|Win32.Build.0 = Release|Win32 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|x64.ActiveCfg = Release|x64 - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|x64.Build.0 = Release|x64 - {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Debug|x64.ActiveCfg = Debug|x64 - {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Release|Win32.ActiveCfg = Release|Win32 - {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Release|x64.ActiveCfg = Release|x64 - {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Debug|Win32.ActiveCfg = Debug|Win32 - {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Debug|x64.ActiveCfg = Debug|x64 - {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Release|Win32.ActiveCfg = Release|Win32 - {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Release|x64.ActiveCfg = Release|x64 - {7BECCFA0-28A0-4995-9856-558560F720E6}.Debug|Win32.ActiveCfg = Debug|Win32 - {7BECCFA0-28A0-4995-9856-558560F720E6}.Debug|x64.ActiveCfg = Debug|x64 - {7BECCFA0-28A0-4995-9856-558560F720E6}.Release|Win32.ActiveCfg = Release|Win32 - {7BECCFA0-28A0-4995-9856-558560F720E6}.Release|x64.ActiveCfg = Release|x64 - {0046B994-40A8-4C64-AC9D-429DC9177B54}.Debug|Win32.ActiveCfg = Debug|Win32 - {0046B994-40A8-4C64-AC9D-429DC9177B54}.Debug|x64.ActiveCfg = Debug|x64 - {0046B994-40A8-4C64-AC9D-429DC9177B54}.Release|Win32.ActiveCfg = Release|Win32 - {0046B994-40A8-4C64-AC9D-429DC9177B54}.Release|x64.ActiveCfg = Release|x64 - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Debug|Win32.ActiveCfg = Debug|x64 - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Debug|x64.ActiveCfg = Debug|x64 - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Debug|x64.Build.0 = Debug|x64 - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Release|Win32.ActiveCfg = Release|x64 - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Release|x64.ActiveCfg = Release|x64 - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Release|x64.Build.0 = Release|x64 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|Win32.ActiveCfg = Debug|Win32 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|Win32.Build.0 = Debug|Win32 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|x64.ActiveCfg = Debug|x64 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|x64.Build.0 = Debug|x64 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|Win32.ActiveCfg = Release|Win32 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|Win32.Build.0 = Release|Win32 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|x64.ActiveCfg = Release|x64 - {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|x64.Build.0 = Release|x64 - {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|Win32.ActiveCfg = Debug|Win32 - {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|Win32.Build.0 = Debug|Win32 - {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|x64.ActiveCfg = Debug|x64 - {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|x64.Build.0 = Debug|x64 - {675F4175-FFB1-480D-AD36-F397578844D4}.Release|Win32.ActiveCfg = Release|Win32 - {675F4175-FFB1-480D-AD36-F397578844D4}.Release|Win32.Build.0 = Release|Win32 - {675F4175-FFB1-480D-AD36-F397578844D4}.Release|x64.ActiveCfg = Release|x64 - {675F4175-FFB1-480D-AD36-F397578844D4}.Release|x64.Build.0 = Release|x64 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|Win32.ActiveCfg = Debug|Win32 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|Win32.Build.0 = Debug|Win32 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|x64.ActiveCfg = Debug|x64 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|x64.Build.0 = Debug|x64 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|Win32.ActiveCfg = Release|Win32 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|Win32.Build.0 = Release|Win32 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|x64.ActiveCfg = Release|x64 - {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|x64.Build.0 = Release|x64 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|Win32.ActiveCfg = Debug|Win32 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|Win32.Build.0 = Debug|Win32 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|x64.ActiveCfg = Debug|x64 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|x64.Build.0 = Debug|x64 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|Win32.ActiveCfg = Release|Win32 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|Win32.Build.0 = Release|Win32 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|x64.ActiveCfg = Release|x64 - {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} - {C5639B3F-288A-4A4B-A4A5-C0D85834221D} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC} - {6FDE4E5E-57D0-432F-A987-6C226A7827E4} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC} - {A0EDDCD9-940F-432C-A28F-7EF322437D79} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} - {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {21DF4C80-0EC9-4BFE-8552-2D47FCEF419A} - {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} - {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} - {C2EB666E-9146-4B7A-85F6-25F9EA313770} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC} - {158073ED-99AE-4196-9EDC-DDB2344F8466} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} - {80A0620A-3478-4E1A-AA7C-0D2387B892AB} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} - {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} - {33014734-0F46-4099-9A21-0C989E428681} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} - {5D485D32-3B9F-4287-AB24-C8DA5B89F537} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} - {F51017F9-B7FB-4F87-B7B5-12799D965783} = {4CFD7702-60B2-4E82-BFAD-FCBB53EB4DA2} - {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} - {C36612BD-22D3-4B95-85E2-7FDC4FC5D739} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} - {5362490B-8516-44EE-9987-014C015A080A} = {DC782E23-920A-4873-82A7-37F195FB92C1} - {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {DC782E23-920A-4873-82A7-37F195FB92C1} - {A9DC644B-9171-4FCD-BF21-2CC6D055FC40} = {DC782E23-920A-4873-82A7-37F195FB92C1} - {B6E563B8-7F57-4F7F-9439-F2405D4E2522} = {DC782E23-920A-4873-82A7-37F195FB92C1} - {C36612BD-22D3-4B95-85E2-7FDC4FC5D740} = {21DF4C80-0EC9-4BFE-8552-2D47FCEF419A} - {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D} = {A0068765-334B-414C-8E21-8376CD2EC9F6} - {A0068765-334B-414C-8E21-8376CD2EC9F6} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} - {CB0D9E92-293C-439C-9AC7-C5F59B6E0772} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} - {BACF489E-EAEB-42BF-9E0A-C54D7CF455B4} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} - {C7D83158-4EB6-4409-8730-612AD45FAF6A} = {BACF489E-EAEB-42BF-9E0A-C54D7CF455B4} - {6C64262B-077B-4E12-AF91-9409ECCB75F6} = {BACF489E-EAEB-42BF-9E0A-C54D7CF455B4} - {7BECCFA0-28A0-4995-9856-558560F720E6} = {A0068765-334B-414C-8E21-8376CD2EC9F6} - {0046B994-40A8-4C64-AC9D-429DC9177B54} = {A0068765-334B-414C-8E21-8376CD2EC9F6} - {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} - {88D2EB79-592D-45F8-B849-AE021C1D983A} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} - {675F4175-FFB1-480D-AD36-F397578844D4} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} - {E41DDF41-0916-454B-A7C2-6E410E45CAFD} = {7AF3635B-001C-42BF-94B9-C036CFDCA71D} - {C3D4C623-55F8-4653-980D-61AA629B4E1D} = {7AF3635B-001C-42BF-94B9-C036CFDCA71D} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - AMDCaPersistentConfig = Debug|Win32 - AMDCaPersistentStartup = mono - AMDCaProjectFile = C:\Users\Owner\Development\monogit\mono\msvc\CodeAnalyst\mono.caw - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EmbeddedSamples", "EmbeddedSamples", "{5FE09AA5-C3C9-45EA-A323-36A11B653CEC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{EE2CC761-9652-44AC-9204-7EB31194CAA6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{0EBA83B7-0EB4-4C83-A900-77300A97E8B1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{ECA11C76-E192-4F67-A8FA-28B637D9716F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmdesc", "genmdesc.vcxproj", "{B7098DFA-31E6-4006-8A15-1C9A4E925149}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-invoke", "test-invoke.vcxproj", "{C5639B3F-288A-4A4B-A4A5-C0D85834221D}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "teste", "teste.vcxproj", "{6FDE4E5E-57D0-432F-A987-6C226A7827E4}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono", "mono.vcxproj", "{A0EDDCD9-940F-432C-A28F-7EF322437D79}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc.vcxproj", "{EB56000B-C80B-4E8B-908D-D84D31B517D3}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodis", "monodis.vcxproj", "{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pedump", "pedump.vcxproj", "{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-metadata", "test-metadata.vcxproj", "{C2EB666E-9146-4B7A-85F6-25F9EA313770}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eglib", "eglib.vcxproj", "{158073ED-99AE-4196-9EDC-DDB2344F8466}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {C3D4C623-55F8-4653-980D-61AA629B4E1D} = {C3D4C623-55F8-4653-980D-61AA629B4E1D} + {E41DDF41-0916-454B-A7C2-6E410E45CAFD} = {E41DDF41-0916-454B-A7C2-6E410E45CAFD} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_eglib", "test_eglib.vcxproj", "{80A0620A-3478-4E1A-AA7C-0D2387B892AB}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtest", "libtest.vcxproj", "{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monoposixhelper", "monoposixhelper.vcxproj", "{33014734-0F46-4099-9A21-0C989E428681}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jay", "..\mcs\jay\jay.vcxproj", "{5D485D32-3B9F-4287-AB24-C8DA5B89F537}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Profilers", "Profilers", "{4CFD7702-60B2-4E82-BFAD-FCBB53EB4DA2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "profiler-vtune", "profiler-vtune.vcxproj", "{F51017F9-B7FB-4F87-B7B5-12799D965783}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmonoutils", "libmonoutils.vcxproj", "{8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmonoruntime", "libmonoruntime.vcxproj", "{C36612BD-22D3-4B95-85E2-7FDC4FC5D739}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Runtime", "Runtime", "{DE3617B4-17A8-4E5F-A00F-BA43D956881F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BuildTargets", "BuildTargets", "{DC782E23-920A-4873-82A7-37F195FB92C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-all", "build-all.vcxproj", "{5362490B-8516-44EE-9987-014C015A080A}" + ProjectSection(ProjectDependencies) = postProject + {80A0620A-3478-4E1A-AA7C-0D2387B892AB} = {80A0620A-3478-4E1A-AA7C-0D2387B892AB} + {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {EB56000B-C80B-4E8B-908D-D84D31B517D3} + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4} = {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4} + {5D485D32-3B9F-4287-AB24-C8DA5B89F537} = {5D485D32-3B9F-4287-AB24-C8DA5B89F537} + {33014734-0F46-4099-9A21-0C989E428681} = {33014734-0F46-4099-9A21-0C989E428681} + {C5639B3F-288A-4A4B-A4A5-C0D85834221D} = {C5639B3F-288A-4A4B-A4A5-C0D85834221D} + {E41DDF41-0916-454B-A7C2-6E410E45CAFD} = {E41DDF41-0916-454B-A7C2-6E410E45CAFD} + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} = {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} = {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} + {6FDE4E5E-57D0-432F-A987-6C226A7827E4} = {6FDE4E5E-57D0-432F-A987-6C226A7827E4} + {C2EB666E-9146-4B7A-85F6-25F9EA313770} = {C2EB666E-9146-4B7A-85F6-25F9EA313770} + {675F4175-FFB1-480D-AD36-F397578844D4} = {675F4175-FFB1-480D-AD36-F397578844D4} + {88D2EB79-592D-45F8-B849-AE021C1D983A} = {88D2EB79-592D-45F8-B849-AE021C1D983A} + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53} = {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53} + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0772} + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739} = {C36612BD-22D3-4B95-85E2-7FDC4FC5D739} + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740} = {C36612BD-22D3-4B95-85E2-7FDC4FC5D740} + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4} = {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4} + {A0EDDCD9-940F-432C-A28F-7EF322437D79} = {A0EDDCD9-940F-432C-A28F-7EF322437D79} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466} + {F51017F9-B7FB-4F87-B7B5-12799D965783} = {F51017F9-B7FB-4F87-B7B5-12799D965783} + {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {B7098DFA-31E6-4006-8A15-1C9A4E925149} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-init", "build-init.vcxproj", "{92AE7622-5F58-4234-9A26-9EC71876B3F4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-install", "build-install.vcxproj", "{A9DC644B-9171-4FCD-BF21-2CC6D055FC40}" + ProjectSection(ProjectDependencies) = postProject + {B6E563B8-7F57-4F7F-9439-F2405D4E2522} = {B6E563B8-7F57-4F7F-9439-F2405D4E2522} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-package", "build-package.vcxproj", "{B6E563B8-7F57-4F7F-9439-F2405D4E2522}" + ProjectSection(ProjectDependencies) = postProject + {5362490B-8516-44EE-9987-014C015A080A} = {5362490B-8516-44EE-9987-014C015A080A} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GC", "GC", "{21DF4C80-0EC9-4BFE-8552-2D47FCEF419A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgcmonosgen", "libgcmonosgen.vcxproj", "{C36612BD-22D3-4B95-85E2-7FDC4FC5D740}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-mini-regression-test", "mono-mini-regression-test.vcxproj", "{3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "jit", "jit", "{A0068765-334B-414C-8E21-8376CD2EC9F6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmono-static", "libmono-static.vcxproj", "{CB0D9E92-293C-439C-9AC7-C5F59B6E0772}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "full-aot", "full-aot", "{BACF489E-EAEB-42BF-9E0A-C54D7CF455B4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-full-aot-compile-test", "mono-full-aot-compile-test.vcxproj", "{C7D83158-4EB6-4409-8730-612AD45FAF6A}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-full-aot-run-test", "mono-full-aot-run-test.vcxproj", "{6C64262B-077B-4E12-AF91-9409ECCB75F6}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-testdriver-test", "mono-testdriver-test.vcxproj", "{7BECCFA0-28A0-4995-9856-558560F720E6}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-nunit-test", "mono-nunit-test.vcxproj", "{0046B994-40A8-4C64-AC9D-429DC9177B54}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmonodac", "libmonodac.vcxproj", "{DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmini", "libmini.vcxproj", "{88D2EB79-592D-45F8-B849-AE021C1D983A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmono-dynamic", "libmono-dynamic.vcxproj", "{675F4175-FFB1-480D-AD36-F397578844D4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External", "External", "{7AF3635B-001C-42BF-94B9-C036CFDCA71D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-external-btls", "build-external-btls.vcxproj", "{E41DDF41-0916-454B-A7C2-6E410E45CAFD}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build-external-llvm", "build-external-llvm.vcxproj", "{C3D4C623-55F8-4653-980D-61AA629B4E1D}" + ProjectSection(ProjectDependencies) = postProject + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {92AE7622-5F58-4234-9A26-9EC71876B3F4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono-profiler-log", "mono-profiler-log.vcxproj", "{8C02A728-7A50-43CE-B507-BDFC05B7EA94}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Win32.ActiveCfg = Debug|Win32 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Win32.Build.0 = Debug|Win32 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.ActiveCfg = Debug|x64 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.Build.0 = Debug|x64 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.ActiveCfg = Release|Win32 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.Build.0 = Release|Win32 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.ActiveCfg = Release|x64 + {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.Build.0 = Release|x64 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.ActiveCfg = Debug|Win32 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.Build.0 = Debug|Win32 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.ActiveCfg = Debug|x64 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.Build.0 = Debug|x64 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.ActiveCfg = Release|Win32 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.Build.0 = Release|Win32 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.ActiveCfg = Release|x64 + {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.Build.0 = Release|x64 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.ActiveCfg = Debug|Win32 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.Build.0 = Debug|Win32 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.ActiveCfg = Debug|x64 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.Build.0 = Debug|x64 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.ActiveCfg = Release|Win32 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.Build.0 = Release|Win32 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.ActiveCfg = Release|x64 + {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.Build.0 = Release|x64 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Win32.ActiveCfg = Debug|Win32 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Win32.Build.0 = Debug|Win32 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.ActiveCfg = Debug|x64 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.Build.0 = Debug|x64 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.ActiveCfg = Release|Win32 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.Build.0 = Release|Win32 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.ActiveCfg = Release|x64 + {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.Build.0 = Release|x64 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Win32.Build.0 = Debug|Win32 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.ActiveCfg = Debug|x64 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.Build.0 = Debug|x64 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.ActiveCfg = Release|Win32 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.Build.0 = Release|Win32 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.ActiveCfg = Release|x64 + {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.Build.0 = Release|x64 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.ActiveCfg = Debug|Win32 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.Build.0 = Debug|Win32 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.ActiveCfg = Debug|x64 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.Build.0 = Debug|x64 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.ActiveCfg = Release|Win32 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.Build.0 = Release|Win32 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.ActiveCfg = Release|x64 + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.Build.0 = Release|x64 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.Build.0 = Debug|Win32 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.ActiveCfg = Debug|x64 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.Build.0 = Debug|x64 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.ActiveCfg = Release|Win32 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.Build.0 = Release|Win32 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.ActiveCfg = Release|x64 + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.Build.0 = Release|x64 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.ActiveCfg = Debug|Win32 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.Build.0 = Debug|Win32 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.ActiveCfg = Debug|x64 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.Build.0 = Debug|x64 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.ActiveCfg = Release|Win32 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.Build.0 = Release|Win32 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.ActiveCfg = Release|x64 + {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.Build.0 = Release|x64 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|Win32.ActiveCfg = Debug|Win32 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|Win32.Build.0 = Debug|Win32 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.ActiveCfg = Debug|x64 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.Build.0 = Debug|x64 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|Win32.ActiveCfg = Release|Win32 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|Win32.Build.0 = Release|Win32 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.ActiveCfg = Release|x64 + {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.Build.0 = Release|x64 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|Win32.ActiveCfg = Debug|Win32 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|Win32.Build.0 = Debug|Win32 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.ActiveCfg = Debug|x64 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.Build.0 = Debug|x64 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|Win32.ActiveCfg = Release|Win32 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|Win32.Build.0 = Release|Win32 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.ActiveCfg = Release|x64 + {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.Build.0 = Release|x64 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|Win32.ActiveCfg = Debug|Win32 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|Win32.Build.0 = Debug|Win32 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.ActiveCfg = Debug|x64 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.Build.0 = Debug|x64 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|Win32.ActiveCfg = Release|Win32 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|Win32.Build.0 = Release|Win32 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.ActiveCfg = Release|x64 + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.Build.0 = Release|x64 + {33014734-0F46-4099-9A21-0C989E428681}.Debug|Win32.ActiveCfg = Debug|Win32 + {33014734-0F46-4099-9A21-0C989E428681}.Debug|Win32.Build.0 = Debug|Win32 + {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.ActiveCfg = Debug|x64 + {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.Build.0 = Debug|x64 + {33014734-0F46-4099-9A21-0C989E428681}.Release|Win32.ActiveCfg = Release|Win32 + {33014734-0F46-4099-9A21-0C989E428681}.Release|Win32.Build.0 = Release|Win32 + {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.ActiveCfg = Release|x64 + {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.Build.0 = Release|x64 + {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.Build.0 = Debug|Win32 + {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|x64.ActiveCfg = Debug|Win32 + {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.ActiveCfg = Release|Win32 + {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.Build.0 = Release|Win32 + {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|x64.ActiveCfg = Release|Win32 + {F51017F9-B7FB-4F87-B7B5-12799D965783}.Debug|Win32.ActiveCfg = Debug|Win32 + {F51017F9-B7FB-4F87-B7B5-12799D965783}.Debug|x64.ActiveCfg = Debug|x64 + {F51017F9-B7FB-4F87-B7B5-12799D965783}.Release|Win32.ActiveCfg = Release|Win32 + {F51017F9-B7FB-4F87-B7B5-12799D965783}.Release|x64.ActiveCfg = Release|x64 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|Win32.Build.0 = Debug|Win32 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|x64.ActiveCfg = Debug|x64 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Debug|x64.Build.0 = Debug|x64 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|Win32.ActiveCfg = Release|Win32 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|Win32.Build.0 = Release|Win32 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|x64.ActiveCfg = Release|x64 + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}.Release|x64.Build.0 = Release|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|Win32.ActiveCfg = Debug|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|Win32.Build.0 = Debug|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|x64.ActiveCfg = Debug|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Debug|x64.Build.0 = Debug|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|Win32.ActiveCfg = Release|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|Win32.Build.0 = Release|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|x64.ActiveCfg = Release|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739}.Release|x64.Build.0 = Release|x64 + {5362490B-8516-44EE-9987-014C015A080A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5362490B-8516-44EE-9987-014C015A080A}.Debug|x64.ActiveCfg = Debug|x64 + {5362490B-8516-44EE-9987-014C015A080A}.Release|Win32.ActiveCfg = Release|Win32 + {5362490B-8516-44EE-9987-014C015A080A}.Release|x64.ActiveCfg = Release|x64 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|Win32.ActiveCfg = Debug|Win32 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|Win32.Build.0 = Debug|Win32 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|x64.ActiveCfg = Debug|x64 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Debug|x64.Build.0 = Debug|x64 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|Win32.ActiveCfg = Release|Win32 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|Win32.Build.0 = Release|Win32 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|x64.ActiveCfg = Release|x64 + {92AE7622-5F58-4234-9A26-9EC71876B3F4}.Release|x64.Build.0 = Release|x64 + {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Debug|Win32.ActiveCfg = Debug|Win32 + {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Debug|x64.ActiveCfg = Debug|x64 + {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Release|Win32.ActiveCfg = Release|Win32 + {A9DC644B-9171-4FCD-BF21-2CC6D055FC40}.Release|x64.ActiveCfg = Release|x64 + {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Debug|Win32.ActiveCfg = Debug|Win32 + {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Debug|x64.ActiveCfg = Debug|x64 + {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Release|Win32.ActiveCfg = Release|Win32 + {B6E563B8-7F57-4F7F-9439-F2405D4E2522}.Release|x64.ActiveCfg = Release|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|Win32.ActiveCfg = Debug|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|Win32.Build.0 = Debug|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|x64.ActiveCfg = Debug|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Debug|x64.Build.0 = Debug|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|Win32.ActiveCfg = Release|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|Win32.Build.0 = Release|Win32 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|x64.ActiveCfg = Release|x64 + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740}.Release|x64.Build.0 = Release|x64 + {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Debug|Win32.ActiveCfg = Debug|Win32 + {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Debug|x64.ActiveCfg = Debug|x64 + {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Release|Win32.ActiveCfg = Release|Win32 + {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D}.Release|x64.ActiveCfg = Release|x64 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|Win32.ActiveCfg = Debug|Win32 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|Win32.Build.0 = Debug|Win32 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|x64.ActiveCfg = Debug|x64 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Debug|x64.Build.0 = Debug|x64 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|Win32.ActiveCfg = Release|Win32 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|Win32.Build.0 = Release|Win32 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|x64.ActiveCfg = Release|x64 + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772}.Release|x64.Build.0 = Release|x64 + {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Debug|x64.ActiveCfg = Debug|x64 + {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Release|Win32.ActiveCfg = Release|Win32 + {C7D83158-4EB6-4409-8730-612AD45FAF6A}.Release|x64.ActiveCfg = Release|x64 + {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Debug|Win32.ActiveCfg = Debug|Win32 + {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Debug|x64.ActiveCfg = Debug|x64 + {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Release|Win32.ActiveCfg = Release|Win32 + {6C64262B-077B-4E12-AF91-9409ECCB75F6}.Release|x64.ActiveCfg = Release|x64 + {7BECCFA0-28A0-4995-9856-558560F720E6}.Debug|Win32.ActiveCfg = Debug|Win32 + {7BECCFA0-28A0-4995-9856-558560F720E6}.Debug|x64.ActiveCfg = Debug|x64 + {7BECCFA0-28A0-4995-9856-558560F720E6}.Release|Win32.ActiveCfg = Release|Win32 + {7BECCFA0-28A0-4995-9856-558560F720E6}.Release|x64.ActiveCfg = Release|x64 + {0046B994-40A8-4C64-AC9D-429DC9177B54}.Debug|Win32.ActiveCfg = Debug|Win32 + {0046B994-40A8-4C64-AC9D-429DC9177B54}.Debug|x64.ActiveCfg = Debug|x64 + {0046B994-40A8-4C64-AC9D-429DC9177B54}.Release|Win32.ActiveCfg = Release|Win32 + {0046B994-40A8-4C64-AC9D-429DC9177B54}.Release|x64.ActiveCfg = Release|x64 + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Debug|Win32.ActiveCfg = Debug|x64 + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Debug|x64.ActiveCfg = Debug|x64 + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Debug|x64.Build.0 = Debug|x64 + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Release|Win32.ActiveCfg = Release|x64 + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Release|x64.ActiveCfg = Release|x64 + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53}.Release|x64.Build.0 = Release|x64 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|Win32.ActiveCfg = Debug|Win32 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|Win32.Build.0 = Debug|Win32 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|x64.ActiveCfg = Debug|x64 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Debug|x64.Build.0 = Debug|x64 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|Win32.ActiveCfg = Release|Win32 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|Win32.Build.0 = Release|Win32 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|x64.ActiveCfg = Release|x64 + {88D2EB79-592D-45F8-B849-AE021C1D983A}.Release|x64.Build.0 = Release|x64 + {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|Win32.ActiveCfg = Debug|Win32 + {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|Win32.Build.0 = Debug|Win32 + {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|x64.ActiveCfg = Debug|x64 + {675F4175-FFB1-480D-AD36-F397578844D4}.Debug|x64.Build.0 = Debug|x64 + {675F4175-FFB1-480D-AD36-F397578844D4}.Release|Win32.ActiveCfg = Release|Win32 + {675F4175-FFB1-480D-AD36-F397578844D4}.Release|Win32.Build.0 = Release|Win32 + {675F4175-FFB1-480D-AD36-F397578844D4}.Release|x64.ActiveCfg = Release|x64 + {675F4175-FFB1-480D-AD36-F397578844D4}.Release|x64.Build.0 = Release|x64 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|Win32.ActiveCfg = Debug|Win32 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|Win32.Build.0 = Debug|Win32 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|x64.ActiveCfg = Debug|x64 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Debug|x64.Build.0 = Debug|x64 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|Win32.ActiveCfg = Release|Win32 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|Win32.Build.0 = Release|Win32 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|x64.ActiveCfg = Release|x64 + {E41DDF41-0916-454B-A7C2-6E410E45CAFD}.Release|x64.Build.0 = Release|x64 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|Win32.Build.0 = Debug|Win32 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|x64.ActiveCfg = Debug|x64 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Debug|x64.Build.0 = Debug|x64 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|Win32.ActiveCfg = Release|Win32 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|Win32.Build.0 = Release|Win32 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|x64.ActiveCfg = Release|x64 + {C3D4C623-55F8-4653-980D-61AA629B4E1D}.Release|x64.Build.0 = Release|x64 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Debug|Win32.ActiveCfg = Debug|Win32 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Debug|Win32.Build.0 = Debug|Win32 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Debug|x64.ActiveCfg = Debug|x64 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Debug|x64.Build.0 = Debug|x64 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Release|Win32.ActiveCfg = Release|Win32 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Release|Win32.Build.0 = Release|Win32 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Release|x64.ActiveCfg = Release|x64 + {8C02A728-7A50-43CE-B507-BDFC05B7EA94}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} + {C5639B3F-288A-4A4B-A4A5-C0D85834221D} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC} + {6FDE4E5E-57D0-432F-A987-6C226A7827E4} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC} + {A0EDDCD9-940F-432C-A28F-7EF322437D79} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} + {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {21DF4C80-0EC9-4BFE-8552-2D47FCEF419A} + {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} + {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} + {C2EB666E-9146-4B7A-85F6-25F9EA313770} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC} + {158073ED-99AE-4196-9EDC-DDB2344F8466} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} + {80A0620A-3478-4E1A-AA7C-0D2387B892AB} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} + {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} + {33014734-0F46-4099-9A21-0C989E428681} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} + {5D485D32-3B9F-4287-AB24-C8DA5B89F537} = {EE2CC761-9652-44AC-9204-7EB31194CAA6} + {F51017F9-B7FB-4F87-B7B5-12799D965783} = {4CFD7702-60B2-4E82-BFAD-FCBB53EB4DA2} + {8FC2B0C8-51AD-49DF-851F-5D01A77A75E4} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} + {C36612BD-22D3-4B95-85E2-7FDC4FC5D739} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} + {5362490B-8516-44EE-9987-014C015A080A} = {DC782E23-920A-4873-82A7-37F195FB92C1} + {92AE7622-5F58-4234-9A26-9EC71876B3F4} = {DC782E23-920A-4873-82A7-37F195FB92C1} + {A9DC644B-9171-4FCD-BF21-2CC6D055FC40} = {DC782E23-920A-4873-82A7-37F195FB92C1} + {B6E563B8-7F57-4F7F-9439-F2405D4E2522} = {DC782E23-920A-4873-82A7-37F195FB92C1} + {C36612BD-22D3-4B95-85E2-7FDC4FC5D740} = {21DF4C80-0EC9-4BFE-8552-2D47FCEF419A} + {3E0D229E-C39F-4EDA-9A6A-A33ECEA0322D} = {A0068765-334B-414C-8E21-8376CD2EC9F6} + {A0068765-334B-414C-8E21-8376CD2EC9F6} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} + {CB0D9E92-293C-439C-9AC7-C5F59B6E0772} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} + {BACF489E-EAEB-42BF-9E0A-C54D7CF455B4} = {ECA11C76-E192-4F67-A8FA-28B637D9716F} + {C7D83158-4EB6-4409-8730-612AD45FAF6A} = {BACF489E-EAEB-42BF-9E0A-C54D7CF455B4} + {6C64262B-077B-4E12-AF91-9409ECCB75F6} = {BACF489E-EAEB-42BF-9E0A-C54D7CF455B4} + {7BECCFA0-28A0-4995-9856-558560F720E6} = {A0068765-334B-414C-8E21-8376CD2EC9F6} + {0046B994-40A8-4C64-AC9D-429DC9177B54} = {A0068765-334B-414C-8E21-8376CD2EC9F6} + {DC50997D-8A0D-4EB6-849B-9D7FBC39CE53} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} + {88D2EB79-592D-45F8-B849-AE021C1D983A} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1} + {675F4175-FFB1-480D-AD36-F397578844D4} = {DE3617B4-17A8-4E5F-A00F-BA43D956881F} + {E41DDF41-0916-454B-A7C2-6E410E45CAFD} = {7AF3635B-001C-42BF-94B9-C036CFDCA71D} + {C3D4C623-55F8-4653-980D-61AA629B4E1D} = {7AF3635B-001C-42BF-94B9-C036CFDCA71D} + {8C02A728-7A50-43CE-B507-BDFC05B7EA94} = {4CFD7702-60B2-4E82-BFAD-FCBB53EB4DA2} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + AMDCaProjectFile = C:\Users\Owner\Development\monogit\mono\msvc\CodeAnalyst\mono.caw + AMDCaPersistentStartup = mono + AMDCaPersistentConfig = Debug|Win32 + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/msvc/mono.vcxproj b/msvc/mono.vcxproj index 6d1670a5ee..4602e6c91f 100644 --- a/msvc/mono.vcxproj +++ b/msvc/mono.vcxproj @@ -1,231 +1,243 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{A0EDDCD9-940F-432C-A28F-7EF322437D79}</ProjectGuid> - <RootNamespace>mono</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference /> - <Link> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <PostBuildEvent> - <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Console</SubSystem> - <ShowProgress> - </ShowProgress> - </Link> - <PostBuildEvent> - <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - <PostBuildEvent> - <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Console</SubSystem> - </Link> - <PostBuildEvent> - <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\mini\main.c" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - <ProjectReference Include="libmono-dynamic.vcxproj"> - <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="mono.external.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> - <Target Name="_SetupMonoLLVMLinkItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> - <ItemGroup> - <Link> - <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(Lib.AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>$(MONO_LLVM_LIBS);%(Lib.AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemGroup> - </Target> - <Target Name="_ConfigureExternalLinkDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMLinkItems" /> - <PropertyGroup> - <ComputeLibInputsTargets> - $(ComputeLibInputsTargets); - _ConfigureExternalLinkDependency; - </ComputeLibInputsTargets> - </PropertyGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{A0EDDCD9-940F-432C-A28F-7EF322437D79}</ProjectGuid> + <RootNamespace>mono</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference /> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <PostBuildEvent> + <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <SubSystem>Console</SubSystem> + <ShowProgress> + </ShowProgress> + </Link> + <PostBuildEvent> + <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader> + </PrecompiledHeader> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + <PostBuildEvent> + <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_LIBGC_SOURCE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <SubSystem>Console</SubSystem> + </Link> + <PostBuildEvent> + <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\mini\main.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + <ProjectReference Include="libmono-dynamic.vcxproj"> + <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <Import Project="mono.external.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + <Target Name="_SetupMonoLLVMLinkItems" Condition="$(MONO_ENABLE_LLVM)=='true'"> + <ItemGroup> + <Link> + <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(Lib.AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>$(MONO_LLVM_LIBS);%(Lib.AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemGroup> + </Target> + <Target Name="_ConfigureExternalLinkDependency" DependsOnTargets="_ConfigureExternalMonoBuildEnvironment;_SetupMonoLLVMBuildProperties;_SetupMonoLLVMLinkItems" /> + <PropertyGroup> + <ComputeLibInputsTargets> + $(ComputeLibInputsTargets); + _ConfigureExternalLinkDependency; + </ComputeLibInputsTargets> + </PropertyGroup> </Project> \ No newline at end of file diff --git a/msvc/monodis.vcxproj b/msvc/monodis.vcxproj index a0a41bb6d7..161b2a7fd0 100644 --- a/msvc/monodis.vcxproj +++ b/msvc/monodis.vcxproj @@ -1,212 +1,212 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}</ProjectGuid> - <RootNamespace>dis</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <StringPooling>true</StringPooling> - <IntrinsicFunctions>true</IntrinsicFunctions> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <StringPooling>true</StringPooling> - <IntrinsicFunctions>true</IntrinsicFunctions> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\dis\declsec.c" /> - <ClCompile Include="..\mono\dis\dis-cil.c" /> - <ClCompile Include="..\mono\dis\dump.c" /> - <ClCompile Include="..\mono\dis\get.c" /> - <ClCompile Include="..\mono\dis\main.c" /> - <ClCompile Include="..\mono\metadata\opcodes.c" /> - <ClCompile Include="..\mono\dis\util.c" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\mono\dis\declsec.h" /> - <ClInclude Include="..\mono\dis\dis-cil.h" /> - <ClInclude Include="..\mono\dis\dump.h" /> - <ClInclude Include="..\mono\dis\get.h" /> - <ClInclude Include="..\mono\dis\meta.h" /> - <ClInclude Include="..\mono\dis\push-pop.h" /> - <ClInclude Include="..\mono\dis\util.h" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="libmono-static.vcxproj"> - <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0772}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}</ProjectGuid> + <RootNamespace>dis</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <StringPooling>true</StringPooling> + <IntrinsicFunctions>true</IntrinsicFunctions> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <StringPooling>true</StringPooling> + <IntrinsicFunctions>true</IntrinsicFunctions> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\dis\declsec.c" /> + <ClCompile Include="..\mono\dis\dis-cil.c" /> + <ClCompile Include="..\mono\dis\dump.c" /> + <ClCompile Include="..\mono\dis\get.c" /> + <ClCompile Include="..\mono\dis\main.c" /> + <ClCompile Include="..\mono\metadata\opcodes.c" /> + <ClCompile Include="..\mono\dis\util.c" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\mono\dis\declsec.h" /> + <ClInclude Include="..\mono\dis\dis-cil.h" /> + <ClInclude Include="..\mono\dis\dump.h" /> + <ClInclude Include="..\mono\dis\get.h" /> + <ClInclude Include="..\mono\dis\meta.h" /> + <ClInclude Include="..\mono\dis\push-pop.h" /> + <ClInclude Include="..\mono\dis\util.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libmono-static.vcxproj"> + <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0772}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/monoposixhelper.vcxproj b/msvc/monoposixhelper.vcxproj index 4c05e7374c..cbc7e9c0f3 100644 --- a/msvc/monoposixhelper.vcxproj +++ b/msvc/monoposixhelper.vcxproj @@ -1,184 +1,184 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{33014734-0F46-4099-9A21-0C989E428681}</ProjectGuid> - <RootNamespace>monoposixhelper</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MonoPosixHelper</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MonoPosixHelper</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MonoPosixHelper</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MonoPosixHelper</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;_WIN32_WINNT=0x0601;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_DEBUG;__x86_64__;_WIN32_WINNT=0x0601;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;_WIN32_WINNT=0x0601;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <PreprocessorDefinitions>NDEBUG;__x86_64__;_WIN32_WINNT=0x0601;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> - <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="monoposixhelper.targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{33014734-0F46-4099-9A21-0C989E428681}</ProjectGuid> + <RootNamespace>monoposixhelper</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MonoPosixHelper</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MonoPosixHelper</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MonoPosixHelper</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MonoPosixHelper</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;_WIN32_WINNT=0x0601;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>_DEBUG;__x86_64__;_WIN32_WINNT=0x0601;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;_WIN32_WINNT=0x0601;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <PreprocessorDefinitions>NDEBUG;__x86_64__;_WIN32_WINNT=0x0601;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(MONO_DIR)/support;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile> + <ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="monoposixhelper.targets" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/pedump.vcxproj b/msvc/pedump.vcxproj index c406117d73..b434554be4 100644 --- a/msvc/pedump.vcxproj +++ b/msvc/pedump.vcxproj @@ -1,197 +1,197 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}</ProjectGuid> - <RootNamespace>pedump</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;GC_NOT_DLL;GC_GCJ_SUPPORT;GC_WIN32_THREADS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DisableSpecificWarnings>4018;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DisableSpecificWarnings>4018;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> - <ClCompile> - <CompileAs>CompileAsCpp</CompileAs> - </ClCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\tools\pedump\pedump.c" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="libmono-static.vcxproj"> - <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0772}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}</ProjectGuid> + <RootNamespace>pedump</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;GC_NOT_DLL;GC_GCJ_SUPPORT;GC_WIN32_THREADS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <DisableSpecificWarnings>4018;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <DisableSpecificWarnings>4018;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_STATIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> + <ClCompile> + <CompileAs>CompileAsCpp</CompileAs> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\tools\pedump\pedump.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libmono-static.vcxproj"> + <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0772}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/profiler-vtune.vcxproj b/msvc/profiler-vtune.vcxproj index c16a2c3049..43d4f7ca45 100644 --- a/msvc/profiler-vtune.vcxproj +++ b/msvc/profiler-vtune.vcxproj @@ -1,174 +1,174 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{F51017F9-B7FB-4F87-B7B5-12799D965783}</ProjectGuid> - <RootNamespace>profilervtune</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <StringPooling>true</StringPooling> - </ClCompile> - <Link> - <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Link> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Link> - <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> - </Link> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\profiler\vtune.c" /> - </ItemGroup> - <ItemGroup> - <None Include="mono-profiler-vtune.def" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="libmono-dynamic.vcxproj"> - <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{F51017F9-B7FB-4F87-B7B5-12799D965783}</ProjectGuid> + <RootNamespace>profilervtune</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">mono-profiler-vtune$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <StringPooling>true</StringPooling> + </ClCompile> + <Link> + <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(MONO_LIBGC_INCLUDE_DIR);$(MONO_JIT_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR);$(VTUNE_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <Link> + <AdditionalDependencies>$(MONO_LIBMONO_LIB);jitprofiling.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProgramFiles)\Intel\VTune Amplifier XE 2013\lib32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ModuleDefinitionFile>mono-profiler-vtune.def</ModuleDefinitionFile> + </Link> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\profiler\vtune.c" /> + </ItemGroup> + <ItemGroup> + <None Include="mono-profiler-vtune.def" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libmono-dynamic.vcxproj"> + <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/test-invoke.vcxproj b/msvc/test-invoke.vcxproj index b753a04e32..153737225a 100644 --- a/msvc/test-invoke.vcxproj +++ b/msvc/test-invoke.vcxproj @@ -1,190 +1,190 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{C5639B3F-288A-4A4B-A4A5-C0D85834221D}</ProjectGuid> - <RootNamespace>testinvoke</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <DataExecutionPrevention> - </DataExecutionPrevention> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <DataExecutionPrevention> - </DataExecutionPrevention> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\samples\embed\test-invoke.c" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="libmono-dynamic.vcxproj"> - <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{C5639B3F-288A-4A4B-A4A5-C0D85834221D}</ProjectGuid> + <RootNamespace>testinvoke</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <DataExecutionPrevention> + </DataExecutionPrevention> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <DataExecutionPrevention> + </DataExecutionPrevention> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\samples\embed\test-invoke.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libmono-dynamic.vcxproj"> + <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/test-metadata.vcxproj b/msvc/test-metadata.vcxproj index 6b6c771d3d..e8a7de601f 100644 --- a/msvc/test-metadata.vcxproj +++ b/msvc/test-metadata.vcxproj @@ -1,190 +1,190 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{C2EB666E-9146-4B7A-85F6-25F9EA313770}</ProjectGuid> - <RootNamespace>testmetadata</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\samples\embed\test-metadata.c" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="libmono-dynamic.vcxproj"> - <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{C2EB666E-9146-4B7A-85F6-25F9EA313770}</ProjectGuid> + <RootNamespace>testmetadata</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_SOURCE_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\samples\embed\test-metadata.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libmono-dynamic.vcxproj"> + <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/test_eglib.vcxproj b/msvc/test_eglib.vcxproj index cc2f07c237..241b53a939 100644 --- a/msvc/test_eglib.vcxproj +++ b/msvc/test_eglib.vcxproj @@ -1,213 +1,213 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{80A0620A-3478-4E1A-AA7C-0D2387B892AB}</ProjectGuid> - <RootNamespace>test_eglib</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <RandomizedBaseAddress>false</RandomizedBaseAddress> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\mono\eglib\test\array.c" /> - <ClCompile Include="..\mono\eglib\test\dir.c" /> - <ClCompile Include="..\mono\eglib\test\driver.c" /> - <ClCompile Include="..\mono\eglib\test\endian.c" /> - <ClCompile Include="..\mono\eglib\test\enum.cpp" /> - <ClCompile Include="..\mono\eglib\test\fake.c" /> - <ClCompile Include="..\mono\eglib\test\file.c" /> - <ClCompile Include="getopt.c" /> - <ClCompile Include="getopt_long.c" /> - <ClCompile Include="..\mono\eglib\test\hashtable.c" /> - <ClCompile Include="..\mono\eglib\test\list.c" /> - <ClCompile Include="..\mono\eglib\test\markup.c" /> - <ClCompile Include="..\mono\eglib\test\memory.c" /> - <ClCompile Include="..\mono\eglib\test\module.c" /> - <ClCompile Include="..\mono\eglib\test\path.c" /> - <ClCompile Include="..\mono\eglib\test\pattern.c" /> - <ClCompile Include="..\mono\eglib\test\ptrarray.c" /> - <ClCompile Include="..\mono\eglib\test\queue.c" /> - <ClCompile Include="..\mono\eglib\test\shell.c" /> - <ClCompile Include="..\mono\eglib\test\sizes.c" /> - <ClCompile Include="..\mono\eglib\test\slist.c" /> - <ClCompile Include="..\mono\eglib\test\spawn.c" /> - <ClCompile Include="..\mono\eglib\test\string-util.c" /> - <ClCompile Include="..\mono\eglib\test\string.c" /> - <ClCompile Include="..\mono\eglib\test\test.c" /> - <ClCompile Include="..\mono\eglib\test\timer.c" /> - <ClCompile Include="..\mono\eglib\test\unicode.c" /> - <ClCompile Include="..\mono\eglib\test\utf8.c" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="getopt.h" /> - <ClInclude Include="getopt_long.h" /> - <ClInclude Include="..\mono\eglib\src\glib.h" /> - <ClInclude Include="..\mono\eglib\test\test.h" /> - <ClInclude Include="..\mono\eglib\test\tests.h" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="eglib.vcxproj"> - <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{80A0620A-3478-4E1A-AA7C-0D2387B892AB}</ProjectGuid> + <RootNamespace>test_eglib</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_EGLIB_INCLUDE_DIR);$(MONO_EGLIB_SOURCE_DIR)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EGLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>eglib.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\mono\eglib\test\array.c" /> + <ClCompile Include="..\mono\eglib\test\dir.c" /> + <ClCompile Include="..\mono\eglib\test\driver.c" /> + <ClCompile Include="..\mono\eglib\test\endian.c" /> + <ClCompile Include="..\mono\eglib\test\enum.cpp" /> + <ClCompile Include="..\mono\eglib\test\fake.c" /> + <ClCompile Include="..\mono\eglib\test\file.c" /> + <ClCompile Include="getopt.c" /> + <ClCompile Include="getopt_long.c" /> + <ClCompile Include="..\mono\eglib\test\hashtable.c" /> + <ClCompile Include="..\mono\eglib\test\list.c" /> + <ClCompile Include="..\mono\eglib\test\markup.c" /> + <ClCompile Include="..\mono\eglib\test\memory.c" /> + <ClCompile Include="..\mono\eglib\test\module.c" /> + <ClCompile Include="..\mono\eglib\test\path.c" /> + <ClCompile Include="..\mono\eglib\test\pattern.c" /> + <ClCompile Include="..\mono\eglib\test\ptrarray.c" /> + <ClCompile Include="..\mono\eglib\test\queue.c" /> + <ClCompile Include="..\mono\eglib\test\shell.c" /> + <ClCompile Include="..\mono\eglib\test\sizes.c" /> + <ClCompile Include="..\mono\eglib\test\slist.c" /> + <ClCompile Include="..\mono\eglib\test\spawn.c" /> + <ClCompile Include="..\mono\eglib\test\string-util.c" /> + <ClCompile Include="..\mono\eglib\test\string.c" /> + <ClCompile Include="..\mono\eglib\test\test.c" /> + <ClCompile Include="..\mono\eglib\test\timer.c" /> + <ClCompile Include="..\mono\eglib\test\unicode.c" /> + <ClCompile Include="..\mono\eglib\test\utf8.c" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="getopt.h" /> + <ClInclude Include="getopt_long.h" /> + <ClInclude Include="..\mono\eglib\src\glib.h" /> + <ClInclude Include="..\mono\eglib\test\test.h" /> + <ClInclude Include="..\mono\eglib\test\tests.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="eglib.vcxproj"> + <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/teste.vcxproj b/msvc/teste.vcxproj index 12be4cfb64..d56c26bbb2 100644 --- a/msvc/teste.vcxproj +++ b/msvc/teste.vcxproj @@ -1,190 +1,190 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{6FDE4E5E-57D0-432F-A987-6C226A7827E4}</ProjectGuid> - <RootNamespace>teste</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="mono.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <DataExecutionPrevention> - </DataExecutionPrevention> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <MinimalRebuild>true</MinimalRebuild> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - </Midl> - <ClCompile> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <IntrinsicFunctions>true</IntrinsicFunctions> - <StringPooling>true</StringPooling> - </ClCompile> - <ProjectReference> - <LinkLibraryDependencies>false</LinkLibraryDependencies> - </ProjectReference> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <SubSystem>Console</SubSystem> - <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\samples\embed\teste.c" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="libmono-dynamic.vcxproj"> - <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{6FDE4E5E-57D0-432F-A987-6C226A7827E4}</ProjectGuid> + <RootNamespace>teste</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="mono.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\bin\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\$(ProjectName)$(MONO_TARGET_SUFFIX)\$(Configuration)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>$(ProjectName)$(MONO_TARGET_SUFFIX)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <DataExecutionPrevention> + </DataExecutionPrevention> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <MinimalRebuild>true</MinimalRebuild> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + </Midl> + <ClCompile> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <AdditionalIncludeDirectories>$(MONO_DIR);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <IntrinsicFunctions>true</IntrinsicFunctions> + <StringPooling>true</StringPooling> + </ClCompile> + <ProjectReference> + <LinkLibraryDependencies>false</LinkLibraryDependencies> + </ProjectReference> + <Link> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <SubSystem>Console</SubSystem> + <AdditionalDependencies>$(MONO_DYNAMIC_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\samples\embed\teste.c" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libmono-dynamic.vcxproj"> + <Project>{675f4175-ffb1-480d-ad36-f397578844d4}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/msvc/winsetup.bat b/msvc/winsetup.bat index 44442f06d8..aa6c882155 100755 --- a/msvc/winsetup.bat +++ b/msvc/winsetup.bat @@ -1,94 +1,23 @@ -@ECHO off -SetLocal +@echo off +setlocal -SET CONFIG_H="%~dp0..\config.h" -SET CYG_CONFIG_H="%~dp0..\cygconfig.h" -SET WIN_CONFIG_H="%~dp0..\winconfig.h" -SET CONFIGURE_AC="%~dp0..\configure.ac" -SET VERSION_H="%~dp0..\mono\mini\version.h" -SET OPTIONAL_DEFINES=%~1 +set BUILD_RESULT=1 -ECHO Setting up Mono configuration headers... +:: Get path for current running script. +set RUN_WINSETUP_SCRIPT_PATH=%~dp0 -:: generate unique temp file path -uuidgen > nul 2>&1 || goto no_uuidgen -for /f %%a in ('uuidgen') do set CONFIG_H_TEMP=%%a -goto :got_temp +:: Setup VS msbuild environment. +call %RUN_WINSETUP_SCRIPT_PATH%setup-vs-msbuild-env.bat -:no_uuidgen -:: Random isn't very random or unique. %time% and %date% is not random but fairly unique. -set CONFIG_H_TEMP=%~n0%random%%time%%date% - -:got_temp -:: Remove special characters. -set CONFIG_H_TEMP=%CONFIG_H_TEMP:-=% -set CONFIG_H_TEMP=%CONFIG_H_TEMP:\=% -set CONFIG_H_TEMP=%CONFIG_H_TEMP:/=% -set CONFIG_H_TEMP=%CONFIG_H_TEMP::=% -set CONFIG_H_TEMP=%CONFIG_H_TEMP: =% -set CONFIG_H_TEMP=%CONFIG_H_TEMP:.=% -set CONFIG_H_TEMP=%temp%\CONFIG_H_TEMP%CONFIG_H_TEMP% -mkdir "%CONFIG_H_TEMP%\.." 2>nul -set CONFIG_H_TEMP="%CONFIG_H_TEMP%" - -REM Backup existing config.h into cygconfig.h if its not already replaced. -if exist %CONFIG_H% ( - findstr /i /r /c:"#include *\"cygconfig.h\"" %CONFIG_H% >nul || copy /y %CONFIG_h% %CYG_CONFIG_H% +call "msbuild.exe" /t:RunWinConfigSetup %RUN_WINSETUP_SCRIPT_PATH%mono.winconfig.targets && ( + set BUILD_RESULT=0 +) || ( + set BUILD_RESULT=1 + if not %ERRORLEVEL% == 0 ( + set BUILD_RESULT=%ERRORLEVEL% + ) ) -:: Extract MONO_VERSION from configure.ac. -for /f "delims=[] tokens=2" %%a in ('findstr /b /c:"AC_INIT(mono, [" %CONFIGURE_AC%') do ( - set MONO_VERSION=%%a -) +exit /b %BUILD_RESULT% -:: Split MONO_VERSION into three parts. -for /f "delims=. tokens=1-3" %%a in ('echo %MONO_VERSION%') do ( - set MONO_VERSION_MAJOR=%%a - set MONO_VERSION_MINOR=%%b - set MONO_VERSION_PATCH=%%c -) -:: configure.ac hardcodes this. -set MONO_VERSION_PATCH=00 - -:: Extract MONO_CORLIB_VERSION from configure.ac. -for /f "tokens=*" %%a in ('findstr /b /c:MONO_CORLIB_VERSION= %CONFIGURE_AC%') do set %%a - -:: Pad out version pieces to 2 characters with zeros on left. -if "%MONO_VERSION_MAJOR:~1%" == "" set MONO_VERSION_MAJOR=0%MONO_VERSION_MAJOR% -if "%MONO_VERSION_MINOR:~1%" == "" set MONO_VERSION_MINOR=0%MONO_VERSION_MINOR% - -:: Remove every define VERSION from winconfig.h and add what we want. -findstr /v /b /i /c:"#define PACKAGE_VERSION " /c:"#define VERSION " /c:"#define MONO_CORLIB_VERSION " %WIN_CONFIG_H% > %CONFIG_H_TEMP% - -: Setup dynamic section of config.h -echo #ifdef _MSC_VER >> %CONFIG_H_TEMP% -echo #define PACKAGE_VERSION "%MONO_VERSION%" >> %CONFIG_H_TEMP% -echo #define VERSION "%MONO_VERSION%" >> %CONFIG_H_TEMP% -echo #define MONO_CORLIB_VERSION "%MONO_CORLIB_VERSION%" >> %CONFIG_H_TEMP% - -:: Add dynamic configuration parameters affecting msvc build. -for %%a in (%OPTIONAL_DEFINES%) do ( - echo #ifndef %%a >> %CONFIG_H_TEMP% - echo #define %%a 1 >> %CONFIG_H_TEMP% - echo #endif >> %CONFIG_H_TEMP% -) - -echo #endif >> %CONFIG_H_TEMP% - -echo #if defined(ENABLE_LLVM) ^&^& defined(HOST_WIN32) ^&^& defined(TARGET_WIN32) ^&^& (!defined(TARGET_AMD64) ^|^| !defined(_MSC_VER)) >> %CONFIG_H_TEMP% -echo #error LLVM for host=Windows and target=Windows is only supported on x64 MSVC build. >> %CONFIG_H_TEMP% -echo #endif >> %CONFIG_H_TEMP% - -:: If the file is different, replace it. -fc %CONFIG_H_TEMP% %CONFIG_H% >nul 2>&1 || move /y %CONFIG_H_TEMP% %CONFIG_H% -del %CONFIG_H_TEMP% 2>nul - -echo #define FULL_VERSION "Visual Studio built mono" > %CONFIG_H_TEMP% -fc %CONFIG_H_TEMP% %VERSION_H% >nul 2>&1 || move /y %CONFIG_H_TEMP% %VERSION_H% -del %CONFIG_H_TEMP% 2>nul - -:: Log environment variables that start "mono". -set MONO - -ECHO Successfully setup Mono configuration headers. -EXIT /b 0 +@echo on diff --git a/po/Makefile.in b/po/Makefile.in index 3cc71309fd..6e901d5f57 100644 --- a/po/Makefile.in +++ b/po/Makefile.in @@ -216,6 +216,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -346,8 +348,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/po/mcs/de.gmo b/po/mcs/de.gmo index 553910797dd448bb925ed52301d14108ee5821e1..1295afe870be28fafdd0eae12a067bb23b4c371e 100644 GIT binary patch delta 18 ZcmbQIHBW29b1qgxODjX;&2PAjxBx&`1|$Fg delta 18 ZcmbQIHBW29b1qf`3o8SY&2PAjxBx&y1|k3e diff --git a/po/mcs/de.po.REMOVED.git-id b/po/mcs/de.po.REMOVED.git-id index a0ff611450..b543ad1cb4 100644 --- a/po/mcs/de.po.REMOVED.git-id +++ b/po/mcs/de.po.REMOVED.git-id @@ -1 +1 @@ -6428d884003d6f6ebc19c4e7cc3f5052b06f777d \ No newline at end of file +98cadce5ccde530802b121149ed3d68c46597e3f \ No newline at end of file diff --git a/po/mcs/es.gmo b/po/mcs/es.gmo index 7e51091b94534df8f49601444d454d17448a8d3d..86281b253c05e1e120c962a5d71ff498c1456456 100644 GIT binary patch delta 18 ZcmX?Ef3kjqfg-D+rIn%aW>du}asWoR23i0B delta 18 ZcmX?Ef3kjqfg-Dcg_VKHW>du}asWo723P<9 diff --git a/po/mcs/es.po.REMOVED.git-id b/po/mcs/es.po.REMOVED.git-id index 69c11c4cc7..42b786b0a7 100644 --- a/po/mcs/es.po.REMOVED.git-id +++ b/po/mcs/es.po.REMOVED.git-id @@ -1 +1 @@ -d3cf7ad6244ba16f67c3358e674e901cdf366a40 \ No newline at end of file +107e92136b46f6978d9258ee13949a4d68ea5c91 \ No newline at end of file diff --git a/po/mcs/ja.gmo b/po/mcs/ja.gmo index f6a03d5303ec2f7bf702b670539af63a9cfed77b..88b97e64be872fbc5b30357dee9d0de36b99fbd4 100644 GIT binary patch delta 20 bcmeyri1Gg-#tmHRtcI3WhQ^!u)eE!$RN)4; delta 20 bcmeyri1Gg-#tmHRtOgcV1}2;N)eE!$RLuso diff --git a/po/mcs/ja.po.REMOVED.git-id b/po/mcs/ja.po.REMOVED.git-id index d13bdf0340..80531835c3 100644 --- a/po/mcs/ja.po.REMOVED.git-id +++ b/po/mcs/ja.po.REMOVED.git-id @@ -1 +1 @@ -8a3a2eb5153d7a937491b52e02627411b84a7c08 \ No newline at end of file +0f7a098eed22cc9f79c50b7e20c34b1f84690274 \ No newline at end of file diff --git a/po/mcs/mcs.pot b/po/mcs/mcs.pot index 815ed3c325..feca3e08ca 100644 --- a/po/mcs/mcs.pot +++ b/po/mcs/mcs.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: mono 6.0.0.316\n" +"Project-Id-Version: mono 6.4.0.137\n" "Report-Msgid-Bugs-To: http://www.mono-project.com/Bugs\n" -"POT-Creation-Date: 2019-07-26 08:04+0000\n" +"POT-Creation-Date: 2019-07-26 19:13+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/po/mcs/pt_BR.gmo b/po/mcs/pt_BR.gmo index 53d65352259009b506079e78f3a9f67436a2b1a0..b7f738b831e695e4def8740befd5df9e02003c4d 100644 GIT binary patch delta 20 ccmaF1gXP%{mJJD0Sq&|%42?IZPGxKd0ANrEEC2ui delta 20 ccmaF1gXP%{mJJD0Sq&_#3`{nsPGxKd0AM@_DgXcg diff --git a/po/mcs/pt_BR.po.REMOVED.git-id b/po/mcs/pt_BR.po.REMOVED.git-id index 50aa5aecad..f6e1acf0b9 100644 --- a/po/mcs/pt_BR.po.REMOVED.git-id +++ b/po/mcs/pt_BR.po.REMOVED.git-id @@ -1 +1 @@ -37ccdbf3930dfc000b9b985432b1679875b40986 \ No newline at end of file +000222cad28bc3b8151fd97d42d8decb2c3c3c68 \ No newline at end of file diff --git a/runtime/Makefile.am b/runtime/Makefile.am index 5cc6a2897e..3a84c02323 100644 --- a/runtime/Makefile.am +++ b/runtime/Makefile.am @@ -218,7 +218,7 @@ mcs-compileall: mono-wrapper etc/mono/config else \ MONO_PATH="$$mcs_topdir/class/lib/$$profile$(PLATFORM_PATH_SEPARATOR)$$save_MONO_PATH"; \ fi; \ - export verifiable_files=`ls "$(mcs_topdir)/class/lib/$$profile/" | grep -E '\.(dll|exe)$$' $(foreach asm,$(VERIFY_TESTS_FILTER), | grep -v $(asm))` ; \ + export verifiable_files=`ls "$(mcs_topdir)/class/lib/$$profile/" | grep -E '\.(dll|exe)$$' | grep -v '\.dll\.dll$$' | grep -v '\.exe\.dll$$' $(foreach asm,$(VERIFY_TESTS_FILTER), | grep -v $(asm))` ; \ export MONO_PATH; \ for stub in $$verifiable_files; do \ i=$(mcs_topdir)/class/lib/$$profile/$$stub ; \ diff --git a/runtime/Makefile.in b/runtime/Makefile.in index 872c466078..4f64f51e63 100644 --- a/runtime/Makefile.in +++ b/runtime/Makefile.in @@ -182,6 +182,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -312,8 +314,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -736,7 +740,7 @@ mcs-compileall: mono-wrapper etc/mono/config else \ MONO_PATH="$$mcs_topdir/class/lib/$$profile$(PLATFORM_PATH_SEPARATOR)$$save_MONO_PATH"; \ fi; \ - export verifiable_files=`ls "$(mcs_topdir)/class/lib/$$profile/" | grep -E '\.(dll|exe)$$' $(foreach asm,$(VERIFY_TESTS_FILTER), | grep -v $(asm))` ; \ + export verifiable_files=`ls "$(mcs_topdir)/class/lib/$$profile/" | grep -E '\.(dll|exe)$$' | grep -v '\.dll\.dll$$' | grep -v '\.exe\.dll$$' $(foreach asm,$(VERIFY_TESTS_FILTER), | grep -v $(asm))` ; \ export MONO_PATH; \ for stub in $$verifiable_files; do \ i=$(mcs_topdir)/class/lib/$$profile/$$stub ; \ diff --git a/samples/Makefile.in b/samples/Makefile.in index d1fcf58f91..089b034da6 100644 --- a/samples/Makefile.in +++ b/samples/Makefile.in @@ -156,6 +156,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -286,8 +288,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/scripts/Makefile.in b/scripts/Makefile.in index 5b27bda3af..0d1f350bc2 100644 --- a/scripts/Makefile.in +++ b/scripts/Makefile.in @@ -189,6 +189,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -319,8 +321,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/support/Makefile.in b/support/Makefile.in index ac410f9a86..8694866f15 100644 --- a/support/Makefile.in +++ b/support/Makefile.in @@ -280,6 +280,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -410,8 +412,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/support/libm/complex.c b/support/libm/complex.c index 1eb004dd9a..012ef2e971 100644 --- a/support/libm/complex.c +++ b/support/libm/complex.c @@ -50,11 +50,11 @@ static inline double -cabs(double_complex z) +mono_cabs (double_complex z) { #ifdef _MSC_VER // older versions deprecate hypot - return _hypot (creal (z), cimag (z)); + return _hypot (mono_creal (z), mono_cimag (z)); #else - return hypot(creal(z), cimag(z)); + return hypot (mono_creal (z), mono_cimag (z)); #endif } diff --git a/support/nl.c b/support/nl.c index 33a4a3b8e6..d171e1dd02 100644 --- a/support/nl.c +++ b/support/nl.c @@ -163,7 +163,7 @@ value_to_name (value2name_t *tbl, int value) } #endif /* NL_DEBUG */ -int +gpointer CreateNLSocket (void) { int sock; @@ -177,12 +177,12 @@ CreateNLSocket (void) ret |= O_NONBLOCK; ret = fcntl (sock, F_SETFL, ret); if (ret < 0) - return -1; + return GINT_TO_POINTER (-1); } memset (&sa, 0, sizeof (sa)); if (sock < 0) - return -1; + return GINT_TO_POINTER (-1); sa.nl_family = AF_NETLINK; sa.nl_pid = getpid (); sa.nl_groups = RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE | RTMGRP_NOTIFY; @@ -190,9 +190,9 @@ CreateNLSocket (void) * RTMGRP_LINK */ if (bind (sock, (struct sockaddr *) &sa, sizeof (sa)) < 0) - return -1; + return GINT_TO_POINTER (-1); - return sock; + return GINT_TO_POINTER (sock); } int @@ -359,10 +359,10 @@ ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size) return result; } -int +gpointer CloseNLSocket (gpointer sock) { - return close (GPOINTER_TO_INT (sock)); + return GINT_TO_POINTER (close (GPOINTER_TO_INT (sock))); } #else int @@ -371,16 +371,16 @@ ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size) return 0; } -int +gpointer CreateNLSocket (void) { - return -1; + return GINT_TO_POINTER (-1); } -int +gpointer CloseNLSocket (gpointer sock) { - return -1; + return GINT_TO_POINTER (-1); } #endif /* linux/netlink.h + linux/rtnetlink.h */ diff --git a/support/nl.h b/support/nl.h index 4a46426638..ae9605fd48 100644 --- a/support/nl.h +++ b/support/nl.h @@ -3,9 +3,9 @@ #include <glib.h> G_BEGIN_DECLS -int CreateNLSocket (void); +gpointer CreateNLSocket (void); int ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size); -int CloseNLSocket (gpointer sock); +gpointer CloseNLSocket (gpointer sock); G_END_DECLS #endif diff --git a/tools/Makefile.in b/tools/Makefile.in index 41394efdcd..cca3d6d099 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -216,6 +216,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -346,8 +348,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/tools/locale-builder/Makefile.in b/tools/locale-builder/Makefile.in index ff9f355fdd..e92b34ca6b 100644 --- a/tools/locale-builder/Makefile.in +++ b/tools/locale-builder/Makefile.in @@ -157,6 +157,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -287,8 +289,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/tools/pedump/Makefile.in b/tools/pedump/Makefile.in index 3806035475..a0f76fb71b 100644 --- a/tools/pedump/Makefile.in +++ b/tools/pedump/Makefile.in @@ -221,6 +221,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -351,8 +353,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/tools/sgen/Makefile.in b/tools/sgen/Makefile.in index f1a75f39da..b8dd5851a1 100644 --- a/tools/sgen/Makefile.in +++ b/tools/sgen/Makefile.in @@ -246,6 +246,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CMAKE = @CMAKE@ +COREARCH = @COREARCH@ +CORETARGETS = @CORETARGETS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSC = @CSC@ @@ -376,8 +378,10 @@ PATHSEP = @PATHSEP@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIDTYPE = @PIDTYPE@ PKG_CONFIG = @PKG_CONFIG@ +PLATFORM_AOT_PREFIX = @PLATFORM_AOT_PREFIX@ PLATFORM_AOT_SUFFIX = @PLATFORM_AOT_SUFFIX@ RANLIB = @RANLIB@ +RID = @RID@ SEARCHSEP = @SEARCHSEP@ SED = @SED@ SET_MAKE = @SET_MAKE@ diff --git a/winconfig.h b/winconfig.h index 975fc00473..623f76ca67 100644 --- a/winconfig.h +++ b/winconfig.h @@ -1,145 +1,66 @@ #pragma once -#ifndef _MSC_VER -#include "cygconfig.h" -#else +#ifdef _MSC_VER -/* The architecture this is running on */ -#if defined(_M_IA64) -#define MONO_ARCHITECTURE "ia64" -#elif defined(_M_AMD64) -#define MONO_ARCHITECTURE "amd64" -#elif defined(_M_IX86) -#define MONO_ARCHITECTURE "x86" -#else -#error Unknown architecture +/* Building Mono runtime under MSVC uses this template for it's config.h since autogen.sh can't */ +/* generate a config.h that is suitable for MSVC builds. The below template will still get */ +/* some dynamic configuration from autogen.sh config.h, if one exists. */ +#include <msvc/msvc-win32-support.h> +#include <msvc/msvc-disabled-warnings.h> + +#ifdef HAVE_BOEHM_GC +/* Only used when building using Boehm GC and only supported on x86 builds */ +#define DEFAULT_GC_NAME "Included Boehm (with typed GC)" #endif -#ifndef WINVER -#define WINVER 0x0A00 -#endif - -#include <SDKDDKVer.h> - -#if _WIN32_WINNT < 0x0601 -#error "Mono requires Windows 7 or later." -#endif /* _WIN32_WINNT < 0x0601 */ - -#ifndef HAVE_WINAPI_FAMILY_SUPPORT - -#define HAVE_WINAPI_FAMILY_SUPPORT - -/* WIN API Family support */ -#include <winapifamily.h> - -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - #define HAVE_CLASSIC_WINAPI_SUPPORT 1 - #define HAVE_UWP_WINAPI_SUPPORT 0 -#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) - #define HAVE_CLASSIC_WINAPI_SUPPORT 0 - #define HAVE_UWP_WINAPI_SUPPORT 1 -#ifndef HAVE_EXTERN_DEFINED_WINAPI_SUPPORT - #error Unsupported WINAPI family -#endif -#else - #define HAVE_CLASSIC_WINAPI_SUPPORT 0 - #define HAVE_UWP_WINAPI_SUPPORT 0 -#ifndef HAVE_EXTERN_DEFINED_WINAPI_SUPPORT - #error Unsupported WINAPI family -#endif -#endif - -#endif - -/* - * Features that are not required in the Windows port - */ -#define DISABLE_PORTABILITY 1 - -/* Windows does not have symlinks */ -#define HOST_NO_SYMLINKS 1 - -/* String of disabled features */ -#define DISABLED_FEATURES "none" - -/* Disable AOT support */ -/* #undef DISABLE_AOT */ - -/* Disable COM support */ -/* #undef DISABLE_COM */ - -/* Disable runtime debugging support */ -/* #undef DISABLE_DEBUG */ - -/* Disable System.Decimal support */ -/* #undef DISABLE_DECIMAL */ - -/* Disable generics support */ -/* #undef DISABLE_GENERICS */ - -/* Disable support for huge assemblies */ -/* #undef DISABLE_LARGE_CODE */ - -/* Disable support debug logging */ -/* #undef DISABLE_LOGGING */ - /* Disable runtime state dumping */ #define DISABLE_CRASH_REPORTING 1 -/* Disable P/Invoke support */ -/* #undef DISABLE_PINVOKE */ +/* String of disabled features */ +#define DISABLED_FEATURES "none" -/* Disable default profiler support */ -/* #undef DISABLE_PROFILER */ +/* Disables the IO portability layer */ +#define DISABLE_PORTABILITY 1 -/* Disable reflection emit support */ -/* #undef DISABLE_REFLECTION_EMIT */ +/* Start configure DISABLE_DEFINES picked up from cygconfig.h or other external source, if available */ +/* @DISABLE_DEFINES@ */ +/* End configure DISABLE_DEFINES picked up from cygconfig.h or other external source, if available */ -/* Disable advanced SSA JIT optimizations */ -/* #undef DISABLE_SSA */ - -/* Disable interpreter */ -/* #undef DISABLE_INTERPRETER */ +/* No DISABLE_DEFINES below this point */ /* Some VES is available at runtime */ #define ENABLE_ILGEN 1 -/* Enable DTrace probes */ -/* #undef ENABLE_DTRACE */ +/* Start configure ENABLE_DEFINES picked up from cygconfig.h or other external source, if available */ +/* @ENABLE_DEFINES@ */ +/* End configure ENABLE_DEFINES picked up from cygconfig.h or other external source, if available */ -/* Define to 1 if you have the <attr/xattr.h> header file. */ -/* #undef HAVE_ATTR_XATTR_H */ +#if defined(ENABLE_HYBRID_SUSPEND) +/* Windows MSVC builds defaults to preemptive suspend. Disable ENABLE_HYBRID_SUSPEND defines. */ +#undef ENABLE_HYBRID_SUSPEND +#endif -/* Define to 1 if you have the `backtrace_symbols' function. */ -/* #undef HAVE_BACKTRACE_SYMBOLS */ +/* No ENABLE_DEFINES below this point */ -/* Define to 1 if the system has the type `blkcnt_t'. */ -/* #undef HAVE_BLKCNT_T */ - -/* Define to 1 if the system has the type `blksize_t'. */ -/* #undef HAVE_BLKSIZE_T */ - -/* Have Boehm GC */ -/* #define HAVE_BOEHM_GC 1 */ - -/* Define to 1 if you have the <checklist.h> header file. */ -/* #undef HAVE_CHECKLIST_H */ - -/* Define to 1 if you have the <complex.h> header file. */ -#define HAVE_COMPLEX_H 1 +/* Have access */ +#define HAVE_ACCESS 1 /* Define to 1 if you have the `system' function. */ #if HAVE_WINAPI_FAMILY_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) #define HAVE_SYSTEM 1 #endif +/* Define to 1 if you have the <complex.h> header file. */ +#define HAVE_COMPLEX_H 1 + +#if defined(HAVE_SGEN_GC) && !defined(HAVE_CONC_GC_AS_DEFAULT) +/* Defaults to concurrent GC */ +#define HAVE_CONC_GC_AS_DEFAULT 1 +#endif /* Have /dev/random */ #define HAVE_CRYPT_RNG 1 -/* Define to 1 if you have the <curses.h> header file. */ -/* #undef HAVE_CURSES_H */ - /* Define to 1 if you have the declaration of `InterlockedAdd', and to 0 if you don't. */ #define HAVE_DECL_INTERLOCKEDADD 1 @@ -168,42 +89,6 @@ and to 0 if you don't. */ #define HAVE_DECL___READFSDWORD 1 -/* Define to 1 if you have the <dirent.h> header file. */ -/* #define HAVE_DIRENT_H 1 */ - -/* Define to 1 if you have the <dlfcn.h> header file. */ -/* #undef HAVE_DLFCN_H */ - -/* dlopen-based dynamic loader available */ -/* #undef HAVE_DL_LOADER */ - -/* Define to 1 if you have the <elf.h> header file. */ -/* #undef HAVE_ELF_H */ - -/* epoll supported */ -/* #undef HAVE_EPOLL */ - -/* Define to 1 if you have the `epoll_ctl' function. */ -/* #undef HAVE_EPOLL_CTL */ - -/* Define to 1 if you have the <execinfo.h> header file. */ -/* #undef HAVE_EXECINFO_H */ - -/* Define to 1 if you have the `fgetgrent' function. */ -/* #undef HAVE_FGETGRENT */ - -/* Define to 1 if you have the `fgetpwent' function. */ -/* #undef HAVE_FGETPWENT */ - -/* Define to 1 if you have the <fstab.h> header file. */ -/* #undef HAVE_FSTAB_H */ - -/* Define to 1 if you have the `fstatfs' function. */ -/* #undef HAVE_FSTATFS */ - -/* Define to 1 if you have the `fstatvfs' function. */ -/* #undef HAVE_FSTATVFS */ - /* Define to 1 if you have the `getaddrinfo' function. */ #define HAVE_GETADDRINFO 1 @@ -213,44 +98,11 @@ /* Define to 1 if you have the `getprotobyname' function. */ #define HAVE_GETPROTOBYNAME 1 -/* Define to 1 if you have the `getdomainname' function. */ -/* #undef HAVE_GETDOMAINNAME */ - -/* Define to 1 if you have the `getfsstat' function. */ -/* #undef HAVE_GETFSSTAT */ - -/* Define to 1 if you have the `getgrgid_r' function. */ -/* #undef HAVE_GETGRGID_R */ - -/* Define to 1 if you have the `getgrnam_r' function. */ -/* #undef HAVE_GETGRNAM_R */ - -/* Have gethostbyname2_r */ -/* #undef HAVE_GETHOSTBYNAME2_R */ - -/* Define to 1 if you have the `getpriority' function. */ -/* #undef HAVE_GETPRIORITY */ - /* Define to 1 if you have the `GetProcessId' function. */ #define HAVE_GETPROCESSID 1 -/* Define to 1 if you have the `getpwnam_r' function. */ -/* #undef HAVE_GETPWNAM_R */ - -/* Define to 1 if you have the `getpwuid_r' function. */ -/* #undef HAVE_GETPWUID_R */ - -/* Define to 1 if you have the `getresuid' function. */ -/* #undef HAVE_GETRESUID */ - -/* Define to 1 if you have the `getrusage' function. */ -/* #undef HAVE_GETRUSAGE */ - -/* Define to 1 if you have the <grp.h> header file. */ -/* #undef HAVE_GRP_H */ - -/* Define to 1 if you have the `inet_aton' function. */ -/* #undef HAVE_INET_ATON */ +/* Have inet_ntop */ +#define HAVE_INET_NTOP 1 /* Define to 1 if you have the `inet_pton' function. */ #define HAVE_INET_PTON 1 @@ -258,349 +110,88 @@ /* Define to 1 if you have the <inttypes.h> header file. */ #define HAVE_INTTYPES_H 1 -/* Have IPV6_PKTINFO */ -/* #undef HAVE_IPV6_PKTINFO */ - -/* Have IP_DONTFRAGMENT */ -/* #undef HAVE_IP_DONTFRAGMENT */ - -/* Have IP_MTU_DISCOVER */ -/* #undef HAVE_IP_MTU_DISCOVER */ - -/* Have IP_PKTINFO */ -/* #undef HAVE_IP_PKTINFO */ - -/* Define to 1 if you have the `kqueue' function. */ -/* #undef HAVE_KQUEUE */ - -/* Have __thread keyword */ -#ifdef _MSC_VER -#define MONO_KEYWORD_THREAD __declspec (thread) -#else -// Cygwin/gcc emulates __thread. -#undef MONO_KEYWORD_THREAD -#endif - -/* Have large file support */ -/* #undef HAVE_LARGE_FILE_SUPPORT */ - -/* Define to 1 if you have the `unwind' library (-lunwind). */ -/* #undef HAVE_LIBUNWIND */ - -/* Define to 1 if you have the <linux/rtc.h> header file. */ -/* #undef HAVE_LINUX_RTC_H */ - -/* Define to 1 if you have the `lutimes' function. */ -/* #undef HAVE_LUTIMES */ - -/* Define to 1 if you have the `madvise' function. */ -/* #undef HAVE_MADVISE */ - /* Define to 1 if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 -/* Define to 1 if you have the `mkstemp' function. */ -/* #undef HAVE_MKSTEMP */ +#if defined(HAVE_SGEN_GC) && !defined(HAVE_MOVING_COLLECTOR) +/* Moving collector */ +#define HAVE_MOVING_COLLECTOR 1 +#endif -/* Define to 1 if you have the `mmap' function. */ -/* #undef HAVE_MMAP */ - -/* The GC can move objects. */ -/* #undef HAVE_MOVING_COLLECTOR */ - -/* Define to 1 if you have the `mremap' function. */ -/* #undef HAVE_MREMAP */ - -/* Have MSG_NOSIGNAL */ -/* #undef HAVE_MSG_NOSIGNAL */ - -/* Define to 1 if you have the <netdb.h> header file. */ -/* #undef HAVE_NETDB_H */ - -/* Define to 1 if you have the <net/if.h> header file. */ -/* #undef HAVE_NET_IF_H */ - -/* No GC support. */ -/* #undef HAVE_NULL_GC */ - -/* Define to 1 if you have the `poll' function. */ -/* #undef HAVE_POLL */ - -/* Define to 1 if you have the <poll.h> header file. */ -/* #undef HAVE_POLL_H */ - -/* Define to 1 if you have the `posix_fadvise' function. */ -/* #undef HAVE_POSIX_FADVISE */ - -/* Define to 1 if you have the `posix_fallocate' function. */ -/* #undef HAVE_POSIX_FALLOCATE */ - -/* Define to 1 if you have the `posix_madvise' function. */ -/* #undef HAVE_POSIX_MADVISE */ - -/* Define to 1 if you have the `pthread_attr_getstack' function. */ -/* #undef HAVE_PTHREAD_ATTR_GETSTACK */ - -/* Define to 1 if you have the `pthread_attr_get_np' function. */ -/* #undef HAVE_PTHREAD_ATTR_GET_NP */ - -/* Define to 1 if you have the `pthread_attr_setstacksize' function. */ -/* #undef HAVE_PTHREAD_ATTR_SETSTACKSIZE */ - -/* Define to 1 if you have the `pthread_getattr_np' function. */ -/* #undef HAVE_PTHREAD_GETATTR_NP */ - -/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */ -/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */ - -/* Define to 1 if you have the `pthread_get_stacksize_np' function. */ -/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */ - -/* Define to 1 if you have the <pthread.h> header file. */ -/* #undef HAVE_PTHREAD_H */ - -/* Define to 1 if you have the `pthread_mutex_timedlock' function. */ -/* #undef HAVE_PTHREAD_MUTEX_TIMEDLOCK */ - -/* Define to 1 if you have the `remap_file_pages' function. */ -/* #undef HAVE_REMAP_FILE_PAGES */ - -/* Define to 1 if you have the `sched_setaffinity' function. */ -/* #undef HAVE_SCHED_SETAFFINITY */ - -/* Define to 1 if you have the <semaphore.h> header file. */ -/* #undef HAVE_SEMAPHORE_H */ - -/* Define to 1 if you have the `sendfile' function. */ -/* #undef HAVE_SENDFILE */ - -/* Define to 1 if you have the `setdomainname' function. */ -/* #undef HAVE_SETDOMAINNAME */ - -/* Define to 1 if you have the `sethostid' function. */ -/* #undef HAVE_SETHOSTID */ - -/* Define to 1 if you have the `setpriority' function. */ -/* #undef HAVE_SETPRIORITY */ - -/* Define to 1 if you have the `setresuid' function. */ -/* #undef HAVE_SETRESUID */ - -/* Using the simple generational GC. */ -/* #undef HAVE_SGEN_GC */ - - /* Have signal */ +/* Define to 1 if you have the `signal' function. */ #define HAVE_SIGNAL 1 /* Define to 1 if you have the <signal.h> header file. */ #define HAVE_SIGNAL_H 1 -/* Can get interface list */ -/* #undef HAVE_SIOCGIFCONF */ - -/* sockaddr_in6 has sin6_len */ -/* #undef HAVE_SOCKADDR_IN6_SIN_LEN */ - -/* sockaddr_in has sin_len */ -/* #undef HAVE_SOCKADDR_IN_SIN_LEN */ - -/* Have socklen_t */ -/* #undef HAVE_SOCKLEN_T */ - -/* Have SOL_IP */ -/* #undef HAVE_SOL_IP */ - -/* Have SOL_IPV6 */ -/* #undef HAVE_SOL_IPV6 */ - -/* Have SOL_TCP */ -/* #undef HAVE_SOL_TCP */ - -/* Define to 1 if you have the `statfs' function. */ -/* #undef HAVE_STATFS */ - -/* Define to 1 if you have the `statvfs' function. */ -/* #undef HAVE_STATVFS */ - -/* Define to 1 if you have the <stdint.h> header file. */ -/* #define HAVE_STDINT_H 1 */ + /* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 -/* Define to 1 if you have the `stime' function. */ -/* #undef HAVE_STIME */ - -/* Define to 1 if you have the `strerror_r' function. */ -/* #undef HAVE_STRERROR_R */ - /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ #define HAVE_STRING_H 1 -/* Define to 1 if `d_off' is member of `struct dirent'. */ -/* #undef HAVE_STRUCT_DIRENT_D_OFF */ - -/* Define to 1 if `d_reclen' is member of `struct dirent'. */ -/* #undef HAVE_STRUCT_DIRENT_D_RECLEN */ - -/* Define to 1 if `d_type' is member of `struct dirent'. */ -/* #undef HAVE_STRUCT_DIRENT_D_TYPE */ +/* Define to 1 if you have the `strtok_r' function. */ +#define HAVE_STRTOK_R 1 /* Have struct ip_mreq */ #define HAVE_STRUCT_IP_MREQ 1 -/* Have struct ip_mreqn */ -/* #undef HAVE_STRUCT_IP_MREQN */ - -/* Define to 1 if the system has the type `struct pollfd'. */ -/* #undef HAVE_STRUCT_POLLFD */ - -/* Define to 1 if the system has the type `struct stat'. */ -/* #undef HAVE_STRUCT_STAT */ - -/* Define to 1 if the system has the type `struct timeval'. */ -/* #undef HAVE_STRUCT_TIMEVAL */ - -/* Define to 1 if the system has the type `struct timezone'. */ -/* #undef HAVE_STRUCT_TIMEZONE */ - -/* Define to 1 if the system has the type `struct utimbuf'. */ -/* #undef HAVE_STRUCT_UTIMBUF */ - -/* Define to 1 if the system has the type `suseconds_t'. */ -/* #undef HAVE_SUSECONDS_T */ - -/* Define to 1 if you have the <syslog.h> header file. */ -/* #undef HAVE_SYSLOG_H */ - -/* Define to 1 if you have the <sys/epoll.h> header file. */ -/* #undef HAVE_SYS_EPOLL_H */ - -/* Define to 1 if you have the <sys/extattr.h> header file. */ -/* #undef HAVE_SYS_EXTATTR_H */ - -/* Define to 1 if you have the <sys/filio.h> header file. */ -/* #undef HAVE_SYS_FILIO_H */ - -/* Define to 1 if you have the <sys/ioctl.h> header file. */ -/* #undef HAVE_SYS_IOCTL_H */ - -/* Define to 1 if you have the <sys/mkdev.h> header file. */ -/* #undef HAVE_SYS_MKDEV_H */ - -/* Define to 1 if you have the <sys/mman.h> header file. */ -/* #undef HAVE_SYS_MMAN_H */ - -/* Define to 1 if you have the <sys/param.h> header file. */ -/* #undef HAVE_SYS_PARAM_H */ - -/* Define to 1 if you have the <sys/poll.h> header file. */ -/* #undef HAVE_SYS_POLL_H */ - -/* Define to 1 if you have the <sys/sdt.h> header file. */ -/* #undef HAVE_SYS_SDT_H */ - -/* Define to 1 if you have the <sys/sendfile.h> header file. */ -/* #undef HAVE_SYS_SENDFILE_H */ - -/* Define to 1 if you have the <sys/sockio.h> header file. */ -/* #undef HAVE_SYS_SOCKIO_H */ - -/* Define to 1 if you have the <sys/statvfs.h> header file. */ -/* #undef HAVE_SYS_STATVFS_H */ +/* Define to 1 if the system has the type `struct sockaddr_in6'. */ +#define HAVE_STRUCT_SOCKADDR_IN6 1 /* Define to 1 if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 -/* Define to 1 if you have the <sys/syscall.h> header file. */ -/* #undef HAVE_SYS_SYSCALL_H */ - -/* Define to 1 if you have the <sys/time.h> header file. */ -/* #undef HAVE_SYS_TIME_H */ - /* Define to 1 if you have the <sys/types.h> header file. */ #define HAVE_SYS_TYPES_H 1 -/* Define to 1 if you have the <sys/un.h> header file. */ -/* #undef HAVE_SYS_UN_H */ - /* Define to 1 if you have the <sys/utime.h> header file. */ #define HAVE_SYS_UTIME_H 1 -/* Define to 1 if you have the <sys/vfstab.h> header file. */ -/* #undef HAVE_SYS_VFSTAB_H */ - -/* Define to 1 if you have the <sys/wait.h> header file. */ -/* #undef HAVE_SYS_WAIT_H */ - -/* Define to 1 if you have the <sys/xattr.h> header file. */ -/* #undef HAVE_SYS_XATTR_H */ - -/* Define to 1 if you have the <termios.h> header file. */ -/* #undef HAVE_TERMIOS_H */ - -/* Define to 1 if you have the <term.h> header file. */ -/* #undef HAVE_TERM_H */ - -/* Have timezone variable */ -/* #undef HAVE_TIMEZONE */ - -/* tld_model available */ -/* #undef HAVE_TLS_MODEL_ATTR */ - -/* Have tm_gmtoff */ -/* #undef HAVE_TM_GMTOFF */ - -/* Define to 1 if you have the `ttyname_r' function. */ -/* #undef HAVE_TTYNAME_R */ - -/* Define to 1 if you have the <unistd.h> header file. */ -/* #define HAVE_UNISTD_H 1 */ - -/* Define to 1 if you have the <utime.h> header file. */ -/* #define HAVE_UTIME_H 1 */ - -/* Define to 1 if you have the <valgrind/memcheck.h> header file. */ -/* #undef HAVE_VALGRIND_MEMCHECK_H */ - -/* Support for the visibility ("hidden") attribute */ -/* #define HAVE_VISIBILITY_HIDDEN 1 */ - -/* Define to 1 if you have the `vsnprintf' function. */ -/* #undef HAVE_VSNPRINTF */ - /* Define to 1 if you have the <wchar.h> header file. */ #define HAVE_WCHAR_H 1 -/* Define to 1 if you have IPv6 support. */ -#define HAVE_STRUCT_SOCKADDR_IN6 1 +/* Define to 1 if you have the <winternl.h> header file. */ +#define HAVE_WINTERNL_H 1 -/* Defined as strtok_s in eglib-config.hw */ -#define HAVE_STRTOK_R 1 +#if defined(HAVE_SGEN_GC) && !defined(HAVE_WRITE_BARRIERS) +#define HAVE_WRITE_BARRIERS +#endif -/* Define to 1 if you have the `access' function. */ -#define HAVE_ACCESS 1 +/* Start configure HAVE_DEFINES picked up from cygconfig.h or other external source, if available */ +/* @HAVE_DEFINES@ */ +/* End configure HAVE_DEFINES picked up from cygconfig.h or other external source, if available */ -/* Have a working sigaltstack */ -/* #undef HAVE_WORKING_SIGALTSTACK */ +/* No HAVE_DEFINES below this point */ -/* The GC needs write barriers. */ -/* #undef HAVE_WRITE_BARRIERS */ +/* This platform does not support symlinks */ +#define HOST_NO_SYMLINKS 1 -/* Have system zlib */ -/* #define HAVE_ZLIB 1 */ +/* Host Platform is Win32 */ +#define HOST_WIN32 1 -/* Architecture uses registers for Parameters */ -/* #undef MONO_ARCH_REGPARMS */ +/* The architecture this is running on */ +#if defined(_M_IA64) +#define MONO_ARCHITECTURE "ia64" +#elif defined(_M_AMD64) +#define MONO_ARCHITECTURE "amd64" +#elif defined(_M_IX86) +#define MONO_ARCHITECTURE "x86" +#else +#error Unknown architecture +#endif -/* Enable the allocation and indexing of arrays greater than Int32.MaxValue */ -/* #undef MONO_BIG_ARRAYS */ +/* Version of the corlib-runtime interface */ +#define MONO_CORLIB_VERSION "#MONO_CORLIB_VERSION#" -/* Xen-specific behaviour */ -/* #define MONO_XEN_OPT 1 */ +/* Have __thread keyword */ +#define MONO_KEYWORD_THREAD __declspec (thread) /* Length of zero length arrays */ #define MONO_ZERO_LEN_ARRAY 1 @@ -608,106 +199,80 @@ /* Name of /dev/random */ #define NAME_DEV_RANDOM "" -/* Define if Unix sockets cannot be created in an anonymous namespace */ -/* #undef NEED_LINK_UNLINK */ - /* Name of package */ #define PACKAGE "mono" /* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "Hans_Boehm@hp.com" +#define PACKAGE_BUGREPORT "https://github.com/mono/mono/issues/new" /* Define to the full name of this package. */ -#define PACKAGE_NAME "libgc-mono" +#define PACKAGE_NAME "mono" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libgc-mono 6.6" +#define PACKAGE_STRING "mono #MONO_VERSION#" /* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "libgc-mono" +#define PACKAGE_TARNAME "mono" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "6.6" +#define PACKAGE_VERSION "#MONO_VERSION#" -/* Platform is Win32 */ -#define HOST_WIN32 1 -#define TARGET_WIN32 1 +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT 4 +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 4 + +/* The size of `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG 8 + +/* size of target machine integer registers */ #ifdef _WIN64 -#define TARGET_AMD64 1 +#define SIZEOF_REGISTER 8 #else -#define TARGET_X86 1 +#define SIZEOF_REGISTER 4 #endif -/* pthread_t is a pointer */ -/* #undef PTHREAD_POINTER_ID */ - -/* The size of `size_t', as computed by sizeof. */ -/* #undef SIZEOF_SIZE_T */ - -/* The size of a `void *', as computed by sizeof. */ +/* The size of `void *', as computed by sizeof. */ #ifdef _WIN64 #define SIZEOF_VOID_P 8 -#define TARGET_SIZEOF_VOID_P 8 #else #define SIZEOF_VOID_P 4 -#define TARGET_SIZEOF_VOID_P 4 #endif -#define SIZEOF_REGISTER SIZEOF_VOID_P - -/* byte order of target */ -#define TARGET_BYTE_ORDER G_BYTE_ORDER - /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 -/* Use included libgc */ -/* #define USE_INCLUDED_LIBGC 1 */ +#ifdef _WIN64 +#define TARGET_AMD64 1 +#define HOST_AMD64 1 +#else +#define TARGET_X86 1 +#define HOST_X86 1 +#endif -#define DEFAULT_GC_NAME "Included Boehm (with typed GC)" +/* byte order of target */ +#define TARGET_BYTE_ORDER G_BYTE_ORDER -/* ... */ -/* #undef USE_MACH_SEMA */ +/* wordsize of target */ +#define TARGET_SIZEOF_VOID_P SIZEOF_VOID_P -/* Use mono_mutex_t */ -/* #undef USE_MONO_MUTEX */ +/* Platform is Win32 */ +#define TARGET_WIN32 1 /* Version number of package */ #define VERSION "#MONO_VERSION#" -/* Version of the corlib-runtime interface */ -#define MONO_CORLIB_VERSION #MONO_CORLIB_VERSION# +#else + +/* Not building under MSVC, use autogen.sh generated config.h */ +#include "cygconfig.h" #endif -#ifdef _MSC_VER -// FIXME This is all questionable but the logs are flooded and nothing else is fixing them. -#define _CRT_SECURE_NO_WARNINGS 1 -#pragma warning(disable:4013) // function undefined; assuming extern returning int -#pragma warning(disable:4018) // signed/unsigned mismatch -#pragma warning(disable:4022) // call and prototype disagree -#pragma warning(disable:4047) // call and prototype disagree -#pragma warning(disable:4090) // const problem -#pragma warning(disable:4098) // void return returns a value -#pragma warning(disable:4101) // unreferenced local variable -#pragma warning(disable:4113) // call and prototype disagree -#pragma warning(disable:4146) // unary minus operator applied to unsigned type, result still unsigned -#pragma warning(disable:4172) // returning address of local variable or temporary -#pragma warning(disable:4189) // local variable is initialized but not referenced -#pragma warning(disable:4197) // top-level volatile in cast is ignored -#pragma warning(disable:4244) // integer conversion, possible loss of data -#pragma warning(disable:4245) // signed/unsigned mismatch -#pragma warning(disable:4267) // integer conversion, possible loss of data -#pragma warning(disable:4273) // inconsistent dll linkage -#pragma warning(disable:4293) // shift count negative or too big, undefined behavior -#pragma warning(disable:4305) // truncation from 'double' to 'float' -#pragma warning(disable:4312) // 'type cast': conversion from 'MonoNativeThreadId' to 'gpointer' of greater size -#pragma warning(disable:4389) // signed/unsigned mismatch -#pragma warning(disable:4456) // declaration of 'j' hides previous local declaration -#pragma warning(disable:4457) // declaration of 'text' hides function parameter -#pragma warning(disable:4702) // unreachable code -#pragma warning(disable:4706) // assignment within conditional expression -#pragma warning(disable:4715) // 'keyword' not all control paths return a value -#pragma warning(disable:4996) // deprecated function GetVersion GetVersionExW fopen inet_addr mktemp sprintf strcat strcpy strtok unlink etc. +#if defined(ENABLE_LLVM) && defined(HOST_WIN32) && defined(TARGET_WIN32) && (!defined(TARGET_AMD64) || !defined(_MSC_VER)) +#error LLVM for host=Windows and target=Windows is only supported on x64 MSVC build. #endif